一些关于c语言的题目
文章目录
- 一、计算程序输出
- 二、以下程序运行时,若输入1abcedf2df<回车>输出结果是
- 将flag的第二个bit置0
- 结构体大小
- 下列C程序执行后c输出结果为()
- [设有定义char *p[]={"Shanghai","Beijing","Honkong"};则结果为j字符的表达式是()](#设有定义char *p[]={"Shanghai","Beijing","Honkong"};则结果为j字符的表达式是())
- 递归
- 二维数组
- 左移操作符
- 宏
- 指针
- 编译链接
- 宏定义
- 优先级
一、计算程序输出
注意:无符号类型怎么计算。
首先这里i是无符号类型,j是普通整形。进入循环中i每次减3到-1,因为为无符号类型,要取-1的原码反码补码。补码变为十进制为254然后接着循环,循环84次后还余2,2-3等于-1。-1取原反补为255,接着循环85次结束。
二、以下程序运行时,若输入1abcedf2df<回车>输出结果是
while的判断条件为输入的不能是回车,如果a%2不等于0也就是不能为偶数位,并且字符串从a开始从z结束。把小写变为大写。
1AbCeDf2dF
将flag的第二个bit置0
先把2的原码写出啦来,0000...0010。
先把flag右移的排除,因为不确定flag的数是什么。
异或的话也不确定flag的那个位置的数是相同还是不同,相同置为0不同置为1。
按位或是有1就为1,全0为0。flag的数也是不确定的。
按位与是全1为1,有0就为0。并且这个a选项已经取反了0111...1101,也就是说这里已经是0了,用按位与的话无论flag这个位置的数是0还是1都为0。
结构体大小
在默认对其数为4的情况下
在第一个结构体中,先是double占八个字节,紧接着是char占一个字节,但是下面的一个为int类型对其数为4的倍数且默认对齐数也是4所以对齐到12。大小为16
在第二个结构体中,char占一个字节,double需要占八个字节并且默认对其数为4所以对其到4,int刚好从12开始占四个字节。大小为16。
在默认对其数为8的情况下:
在第一个结构体中,先放入double类型8个字节,然后放入char类型。最后的int类型这里注意在默认对其数和结构体中类型的对其数哪个小对其哪个 。就那这个来说,默认对其数是8,但是int的对其数是4,4要小所以要对其4的倍数也就是从12开始。结构体大小为16。
在第二个结构体中,先放入一个字节的char类型。然后放入double类型的八个字节,且因为默认对其数是8放入8个字节。然后是int类型放入4个字节。到这里一共是20个字节,但是结构体的大小为最大对其数的倍数。所以结构体大小为24。
下列C程序执行后c输出结果为()
加减乘除时,不用管类型。
-3
原码:1000...0011
反码:1111...1100
补码:1111...1101
2
0000...0010
c
1111...1111
c的原码是1000...0001
设有定义char *p[]={"Shanghai","Beijing","Honkong"};则结果为j字符的表达式是()
递归
先算i=f(f(2))里的f2,2不大于二返回3。i=f(3)返回xf(x-1),3f(2)也就是3*3=9。
二维数组
四行四列
左移操作符
1的原码
0000 ...0000 0001
左移五个之后
0000...0010 0000
所以(1<<5)为2的5次方为32,后面减了一个1就为31。
21和31进行异或
0000...0001 1111
0000...0001 0101
结果为
0000...0000 1010
宏
指针
编译链接
宏定义
z=2*(3+1+((4+1)*5+1))=60
注意括号
优先级
转换优先级从高到低,double---->int----->short------>float----->char。在这个题中,a*b先转换成int类型,然后加double类型的转换为double类型,最后减float类型但是float类型优先级比double低,所以是double类型。