目录
这篇文章是我2023年末开始写的,目前记录一下本人做题时不会的题,也会标注一些笔记,本人学识疏浅,如有错误麻烦指正,感谢!
题目重点索引:
1.x&&1
题目内容:
以下表达式x&&1用在if的条件中时,和哪个是等价的:
A. x==1
B.x!=1
C.x==0
D.x(x!=0)
正确答案:D 错选为A
解析:
x&&1,右侧为实数,所以&&实际不起任何作用,即输出x
Note:
1.!=表示不等于
2.x&&1其实就是表示二者关系,例:x为2,输出1,因为两个数都是实数;如果,为0,则输出0,因为此时二者逻辑假
2.unsigned short
题目内容:
对于以下代码:
unsigned short sht = 0;
sht--;
执行后,sht的值是?
A.32767
B.65535
C.-1
D.65536
正确答案:B 错选为C
解析:
B.sht被命名为一个无符号短整型变量,并初始化为0,根据无符号短整型变量的性质,减1操作将导致溢出;short类型在各种平台都是16位,2的16次方为65536,所以unsigned short能表达的最大的数是65535
C、unsigned 不能表达负数,unsigned或unsigned int只用于非负数的场合
Note:
数据类型 | 数据类型符 | 占用字节数 | 数值范围 |
---|---|---|---|
整型 | int | 2/4 | -2的15次方~2的15次方-1(-32768~32767)/-2的31次方~2的31次方-1 |
短整型 | short | 2 | -2的15次方~2的15次方-1(-32768~32767) |
长整型 | long | 4 | -2的31次方~2的31次方-1 |
单精度浮点型 | float | 4 | -10的38次方~10的38次方 |
双精度浮点型 | double | 8 | -10的308次方~10的308次方 |
字符型 | char | 1 | -128~127 |
(65代表A,97代表a)
注意:整型int的字节数由系统决定的,在16位系统中占2个字节,在32位系统中占4个字节。
3.!e的理解
题目内容:
在代码:
while(!e)中,!e等价于:
A.e!=1
B.e==0
C.e!=0
D.e==1
解析:
!即表示非,则只有当e为0的时候,才会打印出1(真),其他值均为假
4.&&的理解
题目内容:
以下代码的输出是( )
int x=0, y=0, z=0;
z = (x==1) && (y=2);
printf("%d ", y);
正确答案:0
解析:
&&运算符当计算出前一个值(此处为“x==1”)为0时即不再做后续运算,则“y=2”无法赋值运算。
5.对double的理解
题目内容:
以下代码的结果是( )
(double)(10 / 4 * 4);
正确答案:8.0
解析:
先运算,再转换成double型
Note:
double型的精度为15,float型精度为6~7,不过写的时候写8.0就行了
6.字符命名
题目内容:
下列可用于C语言程序标识符的一组是(名字间以逗号分隔):
A. 2_a, xyz, b1_s
B.void,_2a, 2a
C.void, d, WORD
D._if, _123, file
正确答案:D 错选为C
解析:
A、不能以数字开头
B、不能以数字开头
C、void是保留字
D、下划线开头后面没有字母也是可以的
Note:
标识符由字母,数字,下划线组成,不能有其他乱七八糟的东西,空格也不行;并且标识符的第一个字符必须是字母或下划线,不能是数字;不能是保留字(关键字)
7.以下代码的输出是 :
int i,x,y;
i=x=y=0;
do {
++i;
if ( i%2 )
x+=i,
i++;
y +=i++;
} while ( i<=7 );
printf("%d %d %d", i, x, y);
正确答案:9 1 20
解析:
注意:x+=i,是以逗号结尾的,if语句包括 x+=i, i++;
且y+=i++的执行顺序为:y = y + i ; i ++;
8.x++和++x的区别
题目内容:
下列程序段输出结果为:
int x=1, y=012;
printf(“%d”,y*x++);
正确答案:10 我的答案:不会写
在这里插一个进制转换的方法,以后我会慢慢补充:
【注】
1.八进制,Octal,缩写OCT或O,一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1。一些编程语言中常常以数字0开始表明该数字是八进制。
八进制化为十进制:将八进制数12转换成十进制数: (1*8^1)+(2*8^0)=10
2.十进制:%d 八进制:%o 十六进制:%x
需要注意的是,如果要在打印出的数字上显示进制区别,(八进制前缀0;十六进制前缀0x或者0X)则分别要在转换说明中加入#,如%#o,%#x
解析:
*优先,++x是先运算后赋值,x++是先赋值后运算
如这道题改为y*++x,那么结果是10*2=20,++立即生效。
x++则是延迟生效,有运算延迟,如这道题,y*x++,那么结果是10*1=10,也就是先运算10*1,之后x自增变成x=2,这个值在下一语句开始生效。