C语言易错选择题错题集
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
5:有以下程序 #include
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
8:有以下程序 #include 因此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 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 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选项符合第三种引用方式,引用正确。




