1、按照C语言规定的用户标识符命名规则,不能出现在标识符中的是( )。
A.大写字母
B.下划线
C.数字字符
D.连接符
参考答案:D
参考解析: c语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。所以D选项中的连接符不合法。
2、以下不能将s所指字符串正确复制到t所指存储空间的是( )。
A.do{*t++=*s++;}while(*s);
B.for(i=0;t[i]=s[i];i++);
C.while(*t=*s){t++;s++;}
D.for(i=0,j=0;t [i++]=s[j++];);
参考解析:
不能因为当*s='\0'时,while(* s)跳出循环,这样字符串结束标志'\0'没有复制给*t,造成*t不完整。注意,*t++=*s++是先执行t=*s,然后才进行t=t+1,s=s+1。B、C、D都能将'\0复制过去。
3、在面向对象方法中,不属于“对象”基本特点的是( )。
A.一致性
B.分类性
C.多态性
D.标识唯一性
参考答案:A
参考解析: 对象有如下一些基本特点:标识唯一性、分类性、多态性、封装性、模块独立性好。所以选择A。
4、以下程序段中的变量已正确定义:
程序段的输出结果是( )。
A.**
B.****
C.*
D.********
参考答案:C
参考解析: 由于内层循环for(k=1;k<3;k++)后面直接跟了空语句“;”所以在循环内部什么操作也不做,跳出外层循环后执行打印语句,所以打印了一个“*”,选择C。
5、以下程序:
则以下函数调用语句错误的是( )。
A.k=f(a,b);
B.k=add(a,b);
C.k=(*f)(a,b);
D.k=*f(a,b);
参考答案:D
参考解析:D选项中*f(a,b)表示调用后返回一个指向整型数据的地址指针,即该函数的返回值为指针类型,所以不能将其赋值给整形变量k。
6、有以下程序:
程序运行后的输出结果是( )。
A.a=2,b=2
B.a=2,b=1
C.a=1 ,b=1
D.a=-1,b=0
参考答案:B
参考解析: case常量表达式只是起语句标号作用,并不是该处进行条件判断。在执行switch语句时,根据switch的表达式,找到与之匹配的case语句,就从此case子句执行下去,不在进行判断,直到碰到break或函数结束为止。所以执行内层switch(y)时只执行了a++,此时a的值为1。然后执行外层case 2语句的a++;b++;a为2,b为1。所以结果为B。
7、以下语句中存在语法错误的是( )。
A.char ss[6][20];ss[1]= "right? ";
B.char ss()[20]={"right?"};
C.char*ss[6];88[1]= "right? ";
D.char*ss()={"right? "};
参考答案:A
参考解析: 数组定义后,不可以对数组整体赋值,s是二维数组,因ss[1]是一维字符数组,即字符串,字符串赋值可以使用strcpy(ss[1],”right”);这样的形式,而选项A中对二维数组中的第“l”维(相当于一个一维数组)赋值,是不可以的。选项B和D是定义时对数组初始化,这是可以的。选项C中,将字符串在内存中的首地址赋给指针数组的一个元素,这是可以的。