当前位置:文档之家› 第十章:指针结构程序设计(一)

第十章:指针结构程序设计(一)


printf("result is:%ld.\n",*p);
}
运行结果:
输入:1
输出:1
输入:32
输出:3
输入:897
输出:8
程序2:利用指针,实现数据交换
程序代码如下:
#include <stdio.h>
main()
{ int m,n,*pm,*pn,temp;
pm=&m; pn=&n;
scanf("%d%d",&m,&n);
pointer_1=&a;pointer_2=&b; if(a<b) swap(pointer_1,pointer_2); printf("\n%d,%d\n",a,b); } 例10.4输入a、b、c这3个整数,按大小顺序输出。
swap(int *pt1, int *pt2) { int temp; temp=*pt1;
main() { int *p1,*p2,*p,a,b; scanf("%d,%d",&a,&b); p1=&a;p2=&b; if(a<b) { p1=&b;p2=&a;} printf("\na=%d,b=%d\n\n",a,b); printf("max=%d,min=%d\n",*p1,*p2); } 例10.3题目同例10.2,即对输入的两个整数按大小顺序输出。今用函数处 理,而且用指针类型的数据作函数参数。
char a[]=“good”; char *P;P=a;
A.‘d’
b.‘\0’
C.存放‘d’的地址 .
D.‘0’
6.以下程序运行后x的值为(D)
int a[9]={1,2,3,4,5,6,7,8,9};
int *p,*q;
int i,x;
p=&a[0]; p等价于(a+0)
q=&a[8];
q等价于(a+8)
第十章:指针结构程序设计(一)
实验时间:2009年5月18日 实验地点:
实验人:
专业:
班级:
实验题目:指针结构程序设计(一)
实验目的:通过实验熟悉指针、指针变量的概念,会使用指针变量、指 针运算符进行初步编程。
实验过程:
一、书本中的例子:
例10.1通过指针变量访问整型变量 main()
{int a,b; int *pointer_1,*pointer_2; a=100;b=10; pointer_1=&a; pointer_2=&b; printf("%d,%d\n",a,b); printf("%d,%d\n",*pointer_1,*pointer_2); } 例10.2输入a和b两个整数,按先大后小的顺序输出a和b。
for (i=O;i<3;i++)
if(*(p+i)==*(q-i) )
x=*(p+i)*2;
A. 2
b. 4
C. 6
D.不确定
7.以下程序运行段运行后x的值为( D )
int a[]={1,2,3,4,5,6,7,8};
int i,x *p;
x=1;
p=&a[2];
for(i=0,i<3,i++)
} (2) 通过数组名计算数组元素地址,找出元素的值。 main() { int a[10]; int i; for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(i=0;i<10;i++) printf("%d",*(a+i)); } (3) 用指针变量指向数组元素。
swap(int *p1,int *p2) { int temp; temp=*p1; *p1=*p2; *p2=temp;
} main()
{ int a,b; int *pointer_1,*pointer_2; scanf("%d,%d",&a,&b);
C、语句printf(“%d”, p);输出20
D、p指向数组元素a[1]
4、以下程序段运行后*(++p)的值为(C)
char a[6]=“work”;
char *p;
p=a;
A、‘w’ b、存放‘w’的地址 C、‘O’ D、存放的‘O’地

5.以下程序运行后*(P+3)的值为( A )*(P+3)等价于p[3] a[3]
x*=(p+i);
A. 不确定
b. 24
C. 120 D. 60
8、下面程序的输出结果是(A)
#include<stdio. h>
void main ( )
{
int i;
char *s=“abc”; 定义一个指向字=0 ; i<3; i++)
printf ( “% s\n ” , s+i );
main() { int a[10]; int*p,i; for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(p=a;p<(a+10);p++) printf("%d ",*p);
*pt1=*pt2; *pt2=temp;
} exchange(int *q1, int *q2, int *q3) { if(*q1<*q2) swap(q1,q2); if(*q1<*q3) swap(q1,q3); if(*q2<*q3) swap(q2,q3); }
(*(a+i))
*(a+i)等价于数组a ,是一个常数,不是一个地址
3、在16位编译系统上,若有定义int a [ ]={10,20,30},*p=&a(该
星号只起标识作用,标识p为指针变量。表达式对指针变量附值);当
执行p++;后下列叙述错误的是( A )
A、p向高地址移了一个字节(看书)
b、p与a+1等价
}
二、补充程序题:
程序1:利用指针,实现输入一个整数,输出其最高位。 程序代码如下:
main() { long i,*p;
p=&i; printf("please input positive integer"); scanf("%ld",p); 与scanf("%ld",&i);等价 while(*p>=10) *p/=10; *p与i等价
赋值语句是( b )
A. P=*fun
b. P=fun; C. P=fun(i,j) D. P=&
fun
2.设有以下语句,则( D )是对数组元素的不正确引用,其中.int
a[10]={0,1,2,3,4,5,6,7,8,9},*p=a
A.a[p-a]
b.*(&a[i])
C.p[i]=(p+i)
D.*
(1) 下标法。 main()
{ int a[10]; int i;
for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(i=0;i<10;i++) printf("%d",a[i]);
temp=*pm;
*pm=*pn;
*pn=temp;
printf("%d,%d\n",m,n);
printf("%d,%d\n",*pm,*pn);
}
运行结果:
输入:3 4
输出:4 3
43
三、选择题:
1.若函数fun的函数头为:int fun(int i,int j)且函数指针变量P
定义如下:int (*P)(int i,int j);则要使指针P指向函数fun的
}
a
ab
abc
abc
c
bc
c
bc
abc
abc
bc
c
.
A
b
C
D
9.执行以下程序段的输出结果是( b ) int a=10,*p=&a ; printf(“%d”,++*p);
A.10 B.11 C.变量a的地址 D.变量a的地址加1 *p=&a(该星号只起标识作用,没有特殊意义,标识p为指针变量。表达 式对指针变量附值) ++*p 中的星号为指针运算符,整个表达式表示指针变量所指向的变量 数组变量赋值:scanf(“%c”,a); 注意区分他们的区别 但&a 和a都是 地址 整型变量赋值:scanf(“%d”,&a);
main() { int a,b,c,*p1,*p2,*p3;
scanf("%d,%d,%d",&a,&b,&c); p1=&a;p2=&b;p3=&C; exchange(p1,p2,p3); printf("\n%d,%d,%d\n",a,b,c); } 例10.5输出数组中的全部元素。假设有一个a数组,整型,有10个元素。要 输出各元素的值有三种方法:
相关主题