前言:
编程想要学的好,刷题少不了,我们不仅要多刷题,还要刷好题!为此我开启了一个弯道超车必做好题锦集的系列,每篇大约10题左右。此为第三篇选择题篇,该系列会不定期更新,后续还会开编程题的系列。敬请期待!
int main (){char c = 'A' ;if ( '0' <= c <= '9' ) printf ( "YES" );else printf ( "NO" );return 0 ;}
A: YES B: NO C: YESNO D: 语句错误
正确答案: A'0'<=c<='9' 并非判断 x 大于等于字符 0, 小于等于字符 9 ,而是先执行 '0'<=c ,使用这个表达式的结果再和 '9' 比较, '0' 的 ASCII 码值是48 , 'A' 的 ASCII 码值是 '65' ,故 '0'<c 是真值 1 , 1 无疑是小于字符 '9' 的,最终是真
2.假设编译器规定 int 和 short 类型长度分别为32位和16位,若有下列C语言语句,则 y 的机器数为( )
unsigned short x = 65530 ;unsigned int y = x ;
A: 0000 7FFA B: 0000 FFFA C: FFFF 7FFA D: FFFF FFFA
正确答案: Bunsigned short 类型的 x 变量 2 个字节保存了 65530 ,十六进制形式为 0xFFFA , x 给 y 赋值时会整型提升,而无符号数在提升时 高位补0 ,其实就相当于把 x 的值放在了 y 的低 2 个字节的空间中,故选 B
3.下列程序的输出结果是什么()
#include<stdio.h>int main (){int n = 1001 ;int ans = 0 ;for ( int i = 1 ; i <= n ; ++ i ){ans ^ = i % 3 ;}printf ( "%d" , ans );return 0 ;}
A: -2 B: 0 C: 1 D: 2
i % 3 的值按 1 、 2 、 0 循环,可推算出 ans 按 1 、 3 、 3 、 2 、 0 、 0 循环,循环进行 1001 次,而 1001%6=5 ,也就是 ans 按规律得到 的第5 个数为最终结果,故 ans=0
4.要使 a 的低四位翻转,需要进行操作是( )
A: a|0xF B: a&0xF C: a^0xF D: ~a
正确答案: C十六进制数 0xF 是 4 位 1 ,参与运算时整型提升,高位都是 0 。低四位和 1 异或, 0^1 是 1 , 1^1 是 0 ;高位和 0 异或, 0^0 是 0 , 1^0是1 。故而可以通过异或 F 使得 a 的低四位翻转,并保持高位不变
5.如果 x=2014 ,下面函数的返回值是( )
int fun ( unsigned int x ){int n = 0 ;while ( x + 1 ){n ++ ;x = x | ( x + 1 );}return n ;}
A: 20 B: 21 C: 23 D 25
正确答案: C这个作用是对整型中 0 的个数进行统计, x=x|(x+1); 的作用是每次循环把 x 的二进制中从右往左数的最后一位 0 变成 1 ,直道变成 全1 的时候 x+1 就溢出为全 0 ,循环结束。 2014 的二进制是 0000 0000 0000 0000 0000 0111 1101 1110 ,所以结果是 23
6.有以下函数,该函数的功能是()
int fun ( char* s ){char* t = s ;while ( * t ++ );return ( t - s );}
正确答案: B循环在 *t 为 0 时停止,同时 t++ , t 最后会停在字符串结束的 '\0' 之后的一个位置, t 作为尾部指针减去头部指针就是整个字符串 占用内存的字节数,包含\0 在内;而 c 答案字符串长度不包括最后的 \0
7.关于指针下列说法正确的是【多选】( )
正确答案: ABDC 选项,指针占几个字节要看平台, 64 位环境下 8 个字节, 32 位环境下 4 个字节
8.指出下列代码的缺陷【多选】( )
flfloat f [ 10 ];// 假设这里有对 f 进行初始化的代码for ( int i = 0 ; i < 10 ;){if ( f [ ++ i ] == 0 )break ;}
正确答案: BC一般 flfloat 型只能精确到小数后六位(即 1e-6 ),将 flfloat型数据的绝对值与1e-6 比较,来判断是否相等(为零)。 flfloat 的精度 误差在1e-6 ; double 精度误差在 1e-15 ;所以要判断一个 flfloat 型数: if(fabs(f)<1e-6) ;要判断一个 double 型数: if(fabs(f)<1e- 15);若满足,则为零。考虑 B 选项是对的。若要判断 flfloat a,b 是否相等,要看 if(fabs(a-b)<1e-6) 是否为真。 C 选项,考虑的是 数组越界问题
9.请问下列代码的输出结果有可能是哪些【多选】( )
#include <stdio.h>typedef union{int a ;struct{short b ;short c ;};} X ;int main (){X x ;x . a = 0x20150810 ;printf ( "%x,%x\n" , x . b , x . c );return 0 ;}
A: 2015,810 B: 50810,201 C: 810,2015 D:`20150,810
正确答案: AC对于 0x20150810如果按照大端模式存储:从低地址到高地址: 20150810 输出从低地址到高地址: 20150810如果按照小端模式存储:从低地址到高地址: 10081520 输出从高地址到低地址: 08102015此数以 int 类型赋值给联合体 x.a ,而以结构成员 b 和 c 分开访问,分别拿到低地址的 2 个字节和高地址的 2 个字节,大端下是2015和 810 ,小端下是 810 和 2015
10.请问下列程序的输出是多少()
#include<stdio.h>int main (){unsignedchar i = 7 ;int j = 0 ;for (; i > 0 ; i -= 3 ){++ j ;}printf ( "%d\n" , j );return 0 ;}
A: 2 B: 死循环 C: 173 D: 172
正确答案: C本题就是找规律,计算什么时候能遇到 0unsigned char 8 位数据位,范围在 0-255 ,所以 -2 (11111110)时,变成 254 ;同理 -1 (11111111)时,变成 255 ;最后减 到0 时,不满足循环条件, for 停止。刚好 173 次。 7 4 1 ==> 共 (7-1)/3+1=3 次(1-3=-2,即 254 ,继续循环) 254 251 ... 5 2 ==> 共 (254-2)/3+1=85 次(2-3=-1,即 255 ,继续循环) 255 252 ... 6 3 ==> 共 (255-5)/3+1=85 次(3-3=0,退出循环) 所以总共 173 次
以上为我个人的小分享,如有问题,欢迎讨论!!!
都看到这了,不如关注一下,给个免费的赞