*7.设有定义语句“struct {int x; int y;} d[2]={{1,3},{2,7}};”则“printf(“%d\\n”,d[0].y/d[0].x*d[1].x);”输出的是( D )。
A.0 B.1 C.3 D.6 8.已知: struct sk { int a;
float b;
}data, *p;
若有p=&data,则对data中的成员a的正确引用是( C )。 A、(*p).data.a B、p->data.a C、(*p).a D、p.data.a 9.设有如下定义:
struck sk
{ int a;
float b; }data; int *p;
若要使P指向data中的a域,正确的赋值语句是 C A) p=&a;
B) p=data.a; C) p=&data.a;
D)*p=data.a;
10.设有以下说明语句:
typedef struct stu { int a; float b; } stutype;
则下面叙述中错误的是( D )。 A、struct是结构类型的关键字
B、struct stu是用户定义的结构类型 C、a和b都是结构成员名
D、stutype是用户定义的结构体变量名
八.指针
1. 语句int *p;说明了 C 。 A)p是指向一维数组的指针
B)p是指向函数的指针,该函数返回一int型数据 C)p是指向int型数据的指针
D)p是函数名,该函数返回一指向int型数据的指针 2. 变量的指针,其含义是指该变量的:( B )
A. 值 B. 地址 C. 名 D.一个标志
17
3.若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是
( A )
A) pb=&x B) pb=x C) *pb=&x D) *pb=*x 4、已知:int a, *p=&a; 则下列函数调用中错误的是( D )。 A、scanf(“%d”,&a); B、scanf(“%d”,p); C、printf(“%d”,a); D、printf(“%d”,p); 5.对于同类型的指针变量,不可能进行的运算是( C )。
A.- B.= C.+ D.== 6. 对于基类型相同的两个指针变量之间,不能进行的运算是 C
A) < B) = C) + D) - 7.下列不正确的定义是( A )。
A. int *p=&i,i; B.int *p,i; C.int i,*p=&i; D.int i,*p;
8. 若有说明:int n=2,*p=&n,*q=p,则以下非法的赋值语句是: ( D )
A)p=q B)*p=*q C)n=*q D)p=n 9. int *p,a=10,b=1; p=&a; a=*p+b;
执行该程序段后,a的值为 C
A) 编译出错 B) 10 C) 11 D) 12
A)int p=*a; B)int *p=a; C)int p=&a; D)int *p=&a;
11.若有说明语句“int a[5],*p=a;”,则对数组元素的正确引用是( C )。 A.a[p] B.p[a] C.*(p+2) D.p+2 12. 若指针变量p指向整型数组a[10]的首地址, 即p=a ; 则下列数组元素a[i](0
A. p+i B.&( a+i) C. *(a+i) D. *(p+i*2) 13. 有如下程序
int a[10]={1,2,3,4,5,6,7,8,9,10},*P=a; 则数值为9的表达式是 B
A) *P+9 B) *(P+8) C) *P+=9 D) P+8 14.若有以下定义,则不能表示a数组元素的表达式是( B )。 int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
A.*p B.a[10] C.*a D.a[p-a]
*15.已知int a[5],*p=a;下面的叙述中正确的是 A 。
A) p+1与a+1等价 B) p[1]与*p等价
18
10.有语句:int a[10],;则 B 是对指针变量p的正确定义和初始化。
C) *(p+1)与a+1等价 D) p[1]与a++等价
16. 若有以下说明:
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为4的表达式是( C )
A) *p+4 B) *(p+4) C) *(p+3) D) p+3 17. 下面程序的输出结果是 C
A) 0
B) 1 C) 2 D) 输出错误
main()
{ int a[ ]={1,2,3,4,5,6,7,8,9,0},*p; p=a;
printf(“%d\\n”,*p+1); }
18. 执行语句 char c[10]={ ”abcd”},*pc=c; 后,*(pc+4)的值是( B )
A) “abcd” B)’\\0’ C) ‘d’ D) 不确定 19.下列函数的功能是 A 。 void fun(int *p1,int *p2)
{ int p;
p=*p1;*p1=*p2;*p2=p; }
A) 交换*p1和*p2的值 B) 语法正确,但无法交换*p1和*p2的值 C) 交换*p1和*p2的地址 D)有语法错误 *20. 有如下程序
main()
{ char s[]=“ABCD”, *P;
for(p=s+1; p
A) ABCD B) A C) B D) BCD BCD B C CD CD C D D D D
*21. 请读程序,输出结果为: ( A ) #include
19
int a[]={2,4,6,8}; main() { int i,b[4]; int *p=a;
for(i=0;i<4;i++) {b[i]=*p;p++;} printf(\}
A) 6 B) 8 C) 4 D) 2
*22.内存空间被分成不同区域,其中用函数void* malloc(unsigned int size); 申请的内存在 C 分配。
A) 程序区 B)静态存储区 C)动态存储区
九、字符串
1. 在C语言中,以 D 作为字符串结束标志
A)’\\n’ B)’ ’ C) ’0’ D)’\\0’ 2.下列数据中属于“字符串常量”的是( A )。
A.“a” B.{ABC} C.‘abc\\0’ D.‘a’ 3.字符串 “ABCD”在内存占用的字节数是( D )。 A.4 B.6 C.1 D.5 4. 下面不正确的字符串常量是:( A )
A. ‘PROGRAM’ B “12’12” C “0” D “ ”
5.设有数组定义: char array [ ]=\则数组array所占的空间为 B
A) 4个字节 B) 5个字节 C) 6个字节 D) 7个字节
*6.下述对C语言中字符数组的描述错误的是 C 。
A)字符数组可以存放字符串
B)字符数组中的字符串可以整体输入和输出
C)可在赋值语句中通过赋值运算符“=”对字符数组整体赋值
D)可在对字符数组定义时通过赋值运算符“=”对字符数组整体初始化
7.已知char x[]=\则关于两个数组长
度的正确描述是 B .
A)相同 B)x大于y C)x小于y D)以上答案都不对
8.给出以下定义:
char x[ ]=\
char y[ ]={'a','b','c','d','e','f','g'};
20