C语言复习题指针结构体
C语言复习题_指针&结构体一、选择1、若有以下定义:char s[20]="programming",*ps=s; 则不能代表字符'o'的表达式是A。A) ps+2 B) s[2] C) ps[2] D) ps+=2,*ps2、若有以下定义和语句: int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则不能表示a数组元素的表达式是B。 A) *pB) a[10] C) *a D) a[p-a]3、已知 int *p,a; p=&a; 这里的运算符 & 的含义D。A) 位与运算B) 逻辑与运算 C) 取指针内容 D) 取变量地址4、定义结构体如下:struct student { int num; char name[4]; int age; }; 则printf(“%d”,sizeof(struct student))的结果为: 12。5、若有定义如下:int i=3,*p=&i; 显示i的值的正确语句是B。A) printf(“%d”,p);B) printf(“%d”,*p); C) printf(“%p”,*p);D) printf(“%p”,p);6、在定义结构体时,下列叙述正确的是A。A) 系统不会分配空间B) 系统会按成员大小分配空间 C) 系统会按最大成员大小分配空间D) 以上说法均不正确7、指针是一种D。A) 标识符 B) 变量 C) 运算符 D) 内存地址8、定义struct s {int x; char y[6];} s1;,请问正确的赋值是C。A) s1.y=”abc”;B) s1->y=”abc”;C) strcpy(s1.y,”abc”);D) s1.strcpy(y,”abc”);9、已知定义“int x = 1, *p”,则合法的赋值表达式是A。A) p = &x B) p = x C) *p = &x D) *p = *x10、在C语句中,&后跟指针变量名,表示该指针变量的C。A) 值 B) 别名 C) 地址 D) 类型二、程序填空1、下面程序的功能是实现数组元素中值的逆序。#include void invert(int *s, int num);int main( ){ int i, n=5, a[5]={1,2,3,4,5}; 1; //调用函数逆序for(i=0;i<5;i++) 2;//输出逆序后的数组元素return 0;}void invert(int *s, int num){int *t,k;t=s+num;while( 3){k=*s;*s=*t;*t=k; 4 ; 5 ;}}答:(1) invert(a,n-1); (2) printf(“%4d”,a[i]) (3) sstruct TIME{int hour, minute, second;};void InputTime(struct TIME *p){scanf("%d : %d : %d", &p->hour, &p->minute, &p->second);}void OutputTime(struct TIME p){printf("%02d:%02d:%02d", p.hour, p.minute, p.second);}int Sub(struct TIME x, struct TIME y){i