2. 用结构体变量表示平面上的一个点(横坐标和纵坐标),输入两个点,求两点之间的距离。
3. 用结构体变量表示复数(实部和虚部),输入两个复数,求两复数之积。
第10章 指针 一、选择题
1. 设已定义 int a, *p; 下列赋值表达式中正确的是 。 A) *p=a B) p=*a C) p=&a D) *p=&a
2. 设已定义 int x, *p=&x ; 则下列表达式中错误的是 。
A) *&x B) &*x C) * & p D) & * p
3. 若已定义 int a=1,*b=&a; , 则printf(\的输出结果为 。
A) a的值 B) a的地址 C) b的值 D) b的地址
4. 设已定义 int x, *p ,*p1=&x , *p2=&x ; 则下列表达式中错误的是 。
A) x=*p1+*P2 B) p=p1 C) p =p1+p2 D) x=p1-p2
5. 设有函数定义 void p(int *x){printf(\; } 和变量定义a=3; 则正确的函数调用是 。
A) p(a) B) p(*a) C) p (&a) D) p(int *a) 6. 如下函数 的功能是 。 int fun( char *x) { char *y=x;
while(*y)y++; return(y-x); }
A) 求字符串的长度 B) 比较两个字符串的大小 C) 将字符串x复制到字符串y D) 将字符串x连接到字符串y后面 7. 运行以下程序,输出结果为 。 int fun(int a,int *b) { a++; (*b)++; return a+*b; }
void main() { int x=1,y=2;
printf(\printf(\}
A) 5 5 B) 5 6 C)6 5 D) 6 6 8. 运行以下程序,输出结果为 。 #include
void main() {int x=1,y=2,*z; z=fun(x,&y); printf(\z=fun(x,&y); printf(\}
A) 5 6 B) 5 7 C)5 8 D) 6 8
9. 若已定义 int a[]={1,2,3,4},*p=a; 则下面表达式中值不等于2的是 。
A) *(a+1) B) *(p+1) C) *(++a) D) *(++p) 10. 若已定义 int a[]={1,2,3,4},*p=a+1; 则p[2]的值是 。
A) 2 B) 3 C) 4 D) 无意义 11. 设已定义 char s[ ]= \ printf(\的值为 。 A) ABCD1 B) B C) BCD D) ABCD
12. 设已定义 char str[]=\ *ptr=str;,则 *(ptr+5)的值为 。
A) d B) 0 C) '0' D) 字符d的地址 13. 下面对字符串变量的初始化或赋值操作中,错误的是 。 A) char a[]=\ B) char *a=\ C) char a[10]; a=\ D) char *a; a=\
14. 设已定义 char *ps[2]={ \则以下叙述中错误的是 。
A) ps为指针变量,它指向一个长度为2的字符串数组
B) ps为指针数组,其两个元素分别存储字符串 \和\的地址 C) ps[1][2]的值为'3' D) *(ps[0]+1) 的值为'b'
15.设已定义 struct { int a,b; } s,*ps=&s; 则错误的结构体成员引用是 。
A) s.a B) ps->a C)*ps.a D) (*ps).a
二、程序设计题 1.输入3个字符串,输出其中最大的字符串(用字符指针)。
2.定义一个函数,函数的功能求已知半径的圆的周长和面积。要求把半径、周长和面积设置成函数参数。
3.定义函数max ,函数参数为3个字符串,函数返回值最大的字符串。 4.自己定义字符串复制函数strcpy,然后调用之。
5.定义一个函数,函数参数为一维数组(用指针表示),函数返回数组元素的平均值。 6.定义一个函数,删除字符串中第k个字符开始的m个字符,例如删除字符串abcde第2个字符开始的3个字符,则删除后结果为ae;又如删除字符串abcde第4个字符开始的5个字符,则删除后结果为abc;
7.在字符串中删除所有指定字符(如把字符串teacher中的e字符删除,得到tachr),使用子函数和字符指针。