文档详情

C语言易错选择题错题集

xian****hua
实名认证
店铺
DOC
40.51KB
约8页
文档ID:156034014
C语言易错选择题错题集_第1页
1/8

1:设有定义:char p[]={'1', '2', '3'},*q=p; ,以下不能计算出一个char型数据所占字节数的表达式是(  )A) sizeof(p)B) sizeof(char)C) sizeof(*q)D) sizeof(p[0]) 参考答案:A【解析】根据题目中的定义可以知道sizeof(p),计算的是数组p中所有元素所占用的字节数,而不是char型数据所占字节数2:面向对象方法中,继承是指(  )A) 一组对象所具有的相似性质B) 一个对象具有另一个对象的性质C) 各对象之间的共同性质D) 类之间共享属性和操作的机制 参考答案:D【解析】继承是面向对象的方法的一个主要特征,是使用已有的类的定义作为基础建立新类的定义技术广义的说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们,所以说继承是指类之间共享属性和操作的机制3:若变量x、y已正确定义并赋值,以下符合C语言语法的表达式是A) x+1=yB) ++x,y=x--C) x=x+10=x+yD) double(x)/10 参考答案:B【解析】A选项中不能将变量y赋给表达式,C选项中错误与A选项一样,D选项中强制类型转换表达式应写成(double)x/10。4:有以下程序 #include main() { FILE *pf; char *s1="China", *s2="Beijing"; pf=fopen("abc.dat","wb+"); fwrite(s2,7,1,pf); rewind(pf); /*文件位置指针回到文件开头*/ fwrite(s1,5,1,pf); fclose(pf); }以上程序执行后abc.dat文件的内容是A) ChinaB) ChinangC) ChinaBeijingD) BeijingChina 参考答案:B【解析】本题考查文件操作函数,fwrite和rewind函数,题目中先是将s2字符串写入adc.dat中,然后将写指针回到文件开头,然后写入s1字符串,那么s1字符串就将前五个字符覆盖,所以最终结果为Chinang,选项B正确。

5:有以下程序 #include void f( int *q ) { int i=0; for ( ;i<5; i++) (*q)++; } main() { int a[5] ={1,2,3,4,5}, i; f(a); for (i=0;i<5; i++) printf("%d,", a[i]); }程序运行后的输出结果是A) 6, 2, 3, 4, 5,B) 2, 2, 3, 4, 5,C) 1, 2, 3, 4, 5,D) 2, 3, 4, 5, 6, 参考答案:A【解析】本题考查的是函数的地址调用,将数组名作为数组首地址进行传递,然后取数据元素值进行加1运算因此A选项正确6有以下结构体说明、变量定义和赋值语句 struct STD { char name[10]; int age; char sex; } s[5],*ps; ps=&s[0];则以下scanf函数调用语句有错误的是A) scanf("%s",s[0].name);B) scanf("%d",&s[0].age);C) scanf("%c",&(ps->sex));D) scanf("%d",ps->age); 参考答案:D【解析】本题考查结构体的相关知识,题目中需要输入一个变量,scanf要求参数为指针,而D选项中ps->age为一个变量,不是指针,所以错误。

6:若有以下语句 typedef struct S { int g; char h; } T;以下叙述中正确的是A) 可用S定义结构体变量B) 可用T定义结构体变量C) S是struct 类型的变量D) T是struct S类型的变量 参考答案:B【解析】本题考查typedef重新声明一种结构体类型,那么T为结构体类型,而不是结构体变量,所以B选项正确7:有以下程序#include #include struct A{ int a; char b[10]; double c;};struct A f(struct A t);main(){ struct A a={1001,"ZhangDa",1098.0}; a=f(a); printf("%d,%s,%6.1f\n",a.a,a.b,a.c);}struct A f(struct A t){ t.a=1002; strcpy(t.b,"ChangRong"); t.c=1202.0; return t; }程序运行后的输出结果是A) 1002,ZhangDa,1202.0B) 1002,ChangRong,1202.0C) 1001,ChangRong,1098.0D) 1001,ZhangDa,1098.0 参考答案:B【解析】本题考查结构体变量的引用以及作为函数参数,题目虽然看似复杂,其实比较容易,f函数的参数是结构体变量,然后对参数重新赋值并返回,所以该题目的答案为B选项。

8:有以下程序 #include void fun(int *s, int n1, int n2) { int i, j, t; i=n1; j=n2; while( i

因此B选项正确9:有以下程序段 struct st { int x; int *y; } *pt; int a[]={1,2}, b[]={3,4}; struct st c[2]={10,a,20,b}; pt=c;以下选项中表达式的值为11的是A) ++pt->xB) pt->xC) *pt->y D) (pt++)->x 参考答案:A【解析】本题考查结构体数组初始化以及结构体变量的引用,题目中定义了一个结构体数组c并初始化,指针pt指向c的第一个元素,那么pt->x为10,++pt->x为11,*pt->y为1,(pt++)->x为20,所以答案为A10:有以下程序 #include struct S{ int n; int a[20]; }; void f(int *a, int n) { int i; for (i=0; i

11:以下结构体类型说明和变量定义中正确的是A) struct REC ;{ int n; char c; };REC t1,t2;B) typedef struct{ int n; char c; } REC;REC t1,t2;C) typedef struct REC;{ int n=0; char c='A'; } t1,t2;D) struct{ int n; char c; } REC;REC t1,t2; 参考答案:B【解析】本题考查结构体的相关知识,选项A中struct REC后面不能有分号,C选项中typedef struct REC的后面也不能有分号,选项D中REC已经是结构体变量,不能当做结构体类型来使用12:设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp) 的返回值为A) 0B) '\0'C) 非0值D) NULL 参考答案:C【解析】本题考查文件的定位,feof函数的用法是从输入流读取数据,如果到达文件末尾(遇文件结束符),eof函数值为非零值,否则为0,所以选项C正确13:有以下程序#include main(){ int a=1,b=2,c=3,d=0; if (a==1 && b++==2)if (b!=2||c--!=3)printf("%d,%d,%d\n",a,b,c); else printf("%d,%d,%d\n",a,b,c); else printf("%d,%d,%d\n",a,b,c);}程序运行后的输出结果是A) 1,3,2B) 1,3,3C) 1,2,3D) 3,2,1 参考答案:B【解析】else总是和最近的if配对,所以进入第一个if语句中条件判断时,因为是逻辑与操作需要两边运算对象的值均为非零值,才为真,所以需要逐个执行判断的结果为1,不再执行第二个case语句中的操作。而是进入第二个if语句条件判断,因为b!=2条件成立所以整个条件表达式的值为真,所以不再执行逻辑或的第二个运算对象(c-- !=3)c的值不变,也不再执行第一个else语句。打印a的值1,b的值3,c的值3。14:有以下程序 #include int a=4; int f(int n) { int t = 0; static int a=5; if (n%2) {int a=6; t += a++; } else {int a=7; t += a++; } return t + a++; } main() { int s=a, i=0; for (; i<2;i++) s += f(i); printf("%d\n", s); }程序运行后的输出结果是A) 36B) 24C) 32D) 28 参考答案:D【解析】在主函数main()中定义了两个变量s和i,同时给s赋初值。

a=4,i赋初值0当i=0时执行"s+=f(i);"语句,调用f()并将i的初值 0传递给形参n首先执行if语句中内条件:n%2,若条件为假则执行else下的语句,a=7,t=7+0=7,使用return返回t,t=7+(a++)=7+5=12,此时a运算完后自增1,变为6;返回主函数中,s=4+12=16当i=1时,执行"s+=f(i);"语句,调用f()并将i的初值1传递给形参n首先执行if语句中的条件:n%2,条件为真,执行if下面的语句,t=0,a=6 t=0+6=6,使用return返回t,t=6+6=12,返回主函数中,s=16+12=28最后输出的结果为28因此D选项正确15:设有定义:struct complex{ int real,unreal;} data1={1,8},data2;则以下赋值语句中错误的是(  )A) data2=(2,6);B) data2=data1;C) data2.real=data1.real;D) data2.real=data1.unreal; 参考答案:A【解析】A)选项中可以在声明变量的同事为data2赋值,但是 data2=(2,6);应写作data2={2,6}。

所以选择A)16:void f(struct A t);main(){ struct A a={1001,"ZhangDa",1098.0}; f(a); printf("%d,%s,%6.1f\n", a.a,a.b,a.c);}void f(struct A t){ t.a=1002; strcpy(t.b,"ChangRong"); t.c=1202.0;}程序运行后的输出结果是A) 1002, ZhangDa,1202.0B) 1002,ChangRong,1202.0C) 1001, ChangRong,1098.0D) 1001,ZhangDa,1098.0 参考答案:D【解析】本题考查结构体的相关操作以及传值、传址的区别,该题中调用f函数后,会生成参数a的一个副本,而不会改变a的值,所以a值维持原值,选项D正确17;设有如下定义 struct{ int n; char c; } a[2],*p=a; 则以下错误引用结构体成员n的是A) (*a)->nB) a[0].nC) p->nD) (*p).n 参考答案:A【解析】若已定义了一个结构体变量和一个同一结构体类型的指针变量,并使该指针指向同类型的变量,则可用以下3种形式来引用结构体变量中的成员,其中结构体变量名也可以是已定义的结构体数组的数组元素:结构体变量名.成员名;指针变量名->成员名;(*指针变量名).成员名。

题目中a为数组名是地址常量,不是指针变量,A选项引用错误a[0]为变量名,B选项引用正确p为指针,且正确的指向结构体变量,C选项引用正确D选项符合第三种引用方式,引用正确18;设有如下定义 struct{ int n; char c; } a[2],*p=a; 则以下错误引用结构体成员n的是A) (*a)->nB) a[0].nC) p->nD) (*p).n 参考答案:A【解析】若已定义了一个结构体变量和一个同一结构体类型的指针变量,并使该指针指向同类型的变量,则可用以下3种形式来引用结构体变量中的成员,其中结构体变量名也可以是已定义的结构体数组的数组元素:结构体变量名.成员名;指针变量名->成员名;(*指针变量名).成员名题目中a为数组名是地址常量,不是指针变量,A选项引用错误a[0]为变量名,B选项引用正确p为指针,且正确的指向结构体变量,C选项引用正确D选项符合第三种引用方式,引用正确。

下载提示
相关文档
正为您匹配相似的精品文档