C语言选择题

练习二级选择题,点击选项即可查看结果

第171题. C语言中,若函数未声明直接调用,在C89标准下,编译器会默认该函数返回类型为()
正确选项:
解析:C89旧标准,函数调用前没有函数声明,编译器隐式假定返回值是int类型。C99以及之后标准,要求调用函数前必须有声明或者函数定义,否则直接编译报错。二级考试经常考察这个历史考点。
第172题. 设有int a=5,b=4,c; c=a^b;,变量c的值是()
正确选项:
解析:^是按位异或运算符,二进制位相同为0,不同为1。5二进制0101,4二进制0100;按位异或运算得到0001,十进制等于1。异或常用来做变量交换,不引入临时变量。区分:&按位与,|按位或,^按位异或。
第173题. 下面关于指针叙述正确的是()
正确选项:
解析:NULL本质是地址0,代表空指针,不指向任何有效内存。野指针是指针保存随机垃圾地址,不是NULL;指针变量存放的是内存地址,不是数据;指针定义时确定类型,不能随意指向其他类型变量。
第174题. 有 char s[]="123456";,执行printf("%d",sizeof(s));输出结果()
正确选项:
解析:字符串初始化字符数组,末尾自动追加'\0'结束标记。有效字符'1','2','3','4','5','6'一共6字节,加上'\0'占1字节,总大小7字节。strlen(s)得到6,sizeof(s)得到7,二者区分是必考点。
第175题. 执行 int k=0; while(k++<10);,循环结束k的值是()
正确选项:
解析:后置++:先拿原值比较,比较完成变量自增。当k=10时,判断k<10条件为假,但判断结束k++依旧执行,k变成11。while后面带分号,循环体为空语句,仅仅做条件判断。
第176题. 下列关于static修饰全局变量,说法正确的是()
正确选项:
解析:static修饰全局变量,改变链接属性,作用域被限制在当前.c源文件,其他源文件无法访问。static全局变量存静态存储区,程序启动初始化一次,生命周期贯穿整个程序运行。不加static的全局变量可以跨文件extern引用。
第177题. 若有 int x=3,y=5; x=x^y; y=x^y; x=x^y;执行完毕后x,y的值为()
正确选项:
解析:利用异或运算特性实现不借助临时变量交换两个整数。第一步x=x^y,x保存两者异或结果;第二步y=x^y,y得到原始x的值;第三步x=x^y,x得到原始y的值。最终完成x,y交换。该写法只适用于整型。
第178题. 下面哪一个是C语言合法的标识符()
正确选项:
解析:标识符规则:只能由字母、数字、下划线组成;只能以字母或者下划线开头;不能包含空格、减号;不能使用关键字。A含有减号非法;B以数字开头非法;D包含空格非法;_Score以下划线开头,合法。
第179题. 已有 FILE *fp; fp=fopen("test.txt","r");,如果文件不存在,则()
正确选项:
解析:"r"只读模式打开文件,如果磁盘上该文件不存在,fopen返回NULL空指针,不会新建文件。"w"写模式打开,文件不存在则创建新文件;文件存在会清空原有内容。打开文件之后必须判断fp!=NULL,防止空指针操作。
第180题. 下面程序段 int a=10,b=20; printf("%d",a>b?a++:b++);输出以及b的值()
正确选项:
解析:三目运算符,a>b条件为假,执行b++。后置++表达式返回b旧值20作为printf输出,输出完成后b自增变成21。注意:后置自增表达式使用旧值参与运算,运算结束变量本身再加1。