三道C语言笔试题

2024-11-07 21:24:39
推荐回答(3个)
回答(1):

1)输出是31,49,1 原因是%x是指按16进制输出,而1的ASCII码是49,换成16进制就是31;%d就是49,也许你会说这里应该是1才对吧,但是你要注意他加上了单引号,就代表他是将1作为字符处理,所以同样是ASCII码;%c知道了前面就知道这里就是正常的输出1,因为1在这里是字符

2)在我的编译器里没有输出,不过他还是有作用了的.他这个写法也应该没有输出

首先解释下sprintf函数吧,sprintf()中第一个参数是你要打印的数据保存到的位置,一般是个数组或指针,比如这里的buf;第二个参数是按什么格式打印,比如%s就是按字符串;第三个参数是你要打印的数据,其实后面还可以跟很多参数的,建议你去看看sprintf的用法
第一句,如果要输出的话,他的结果为abc%defg%%d,
第二句,你确认他没写错?我编译是不通过的,有两种方法改正,改成sprintf(buf,"%d",100)或者sprintf(buf,"100")

3)输出为-1,-2 <<和>>为位移操作,因为i=-1,所以二进制操作时操作的实际是11111111.这个是二进制反码和补码的问题;>>为右移,向右移一位,大部分计算机是算术右移,所以结果是11111111,反码+1得到-1;<<为左移,向左移一位,最右边的1去掉了,变成0,然后再反码+1得到原码10000010就是-2;

不知道你看得懂么?

回答(2):

1)
31,49,1
2)
没有输出,没有向屏幕输出的语句。
3)
-1,-2

回答(3):

1) 31,49,1
字符‘1’对应的ASCII是49,%x是16进制打印,所以是31,%d,是十进制就是49,%c直接打印字符就是1
2) 好像有错误
3) -1 -2
先计算,相当于i*2,所以是-2
再计算i>>1,除以2,所以是-1