选择题
1.请问该程序的输出是多少(C)
#include<stdio.h> int main(){ unsigned char i = 7; int j = 0; for(;i > 0;i -= 3){ ++j; } printf("%d\n", j); return 0; }
A. 2
B. 死循环
C. 173
D. 172
首先unsigned char型是不会为负数,那这个题的意思就是看i=7是一直进行-3操作,j++,打印j,最后i=0,此时j等于几,那么我们直接来分析一下。
就是这样一个循环那么i=7进行减等操作,即为n个256+7整除3即可(n为最小值,0也是一个数,不要忽略了),得出的答案是173。
2.以下程序运行时,若输入1abcedf2df<回车>输出结果是(C)
#include <stdio.h> int main() { char a = 0, ch; while ((ch = getchar()) != '\n') { if (a % 2 != 0 && (ch >= 'a' && ch <= 'z') ch = ch - 'a' + 'A'; a++; putchar(ch); } printf("\n"); return 0; }
A. 1abcedf2df
B. 1ABCEDF2DF
C. 1AbCeDf2dF
D. 1abceDF2DF
所以在1,3,5,7,9下标的字母会变成大写。
3.以下哪个选项一定可以将flag的第二个bit置0(A)
A. flag&=~2
B. flag|=2
C. flag^=2
D. flag>>=2
这个就不过多解释了,很简单的一道题,如果不清楚可以看作者的原反补码
4.下面两个结构体
struct One{ double d; char c; int i; } struct Two{ char c; double d; int i; }
在#pragma pack(4)和#pragma pack(8)的情况下,结构体的大小分别是(C)
A. 16 24,16 24
B. 16 20,16 20
C. 16 16,16 24
D. 16 16,24 24
我们先看pack为4 的情况
这个是结构体1的情况,默认对齐数是4,所以每个变量放到4的整数倍即可,可以知道此时的结构体内存大小是16
这个是结构体2的情况
因为默认对齐数是4,所以每个变量放到4的整数倍即可,可以知道此时的结构体内存大小是16
接下来看pack为8的情况:
结构体1:
依然是16
结构体2:
用了19个字节,应该为8的整数倍所以是24.