1.原码、反码、补码说法错误的是( )💗
A .一个数的原码是这个数直接转换成二进制
B .反码是原码的二进制符号位不变,其他位按位取反
C .补码是反码的二进制加1
D .原码、反码、补码的最高位是0表示负数,最高位是1表示正数
D.原码、反码、补码的最高位是符号位0表示正数,1表示负数。
2.程序的执行结果为( )💗
int main() { unsigned char a = 200; unsigned char b = 100; unsigned char c = 0; c = a + b; printf(“%d %d”, a+b,c); return 0; }
A .300 300
B .44 44
C .300 44
D .44 30
分析如下:结果为 C
unsigned char a = 200; //unsigned 原反补相同:0000 0000 0000 0000 0000 0000 1100 1000 //整型提升:1100 1000--->0000 0000 0000 0000 0000 0000 1100 1000 unsigned char b = 100; //unsigned 原反补相同:0000 0000 0000 0000 0000 0000 0110 0100 //整型提升:0110 0100--->0000 0000 0000 0000 0000 0000 0110 0100 //加法: 0000 0000 0000 0000 0000 0000 1100 1000 0000 0000 0000 0000 0000 0000 0110 0100 //结果:0000 0000 0000 0000 0000 0001 0010 1100---》300 //char c整型提升:0000 0000 0000 0000 0000 0000 0010 1100---》44 unsigned char c = 0; c = a + b;
3.unsigned int a= 0x1234; unsigned char b=*(unsigned char *)&a;在32位大端模式处理器上变量b等于( )💗
A .0x00
B .0x12
C .0x34
D .0x1234
unsigned int a= 0x1234; unsigned char b = *(unsigned char *)&a //大端处理器:高地址对应低位,低地址对应高位 //低地址开始:00 00 12 34 //内存中:解引用结果为:00
选择 A
4.关于大小端字节序的描述正确的是( )💗
A .大小端字节序指的是数据在电脑上存储的二进制位顺序
B .大小端字节序指的是数据在电脑上存储的字节顺序
C .大端字节序是把数据的高字节内容存放到高地址,低字节内容存放在低地址处
D .小端字节序是把数据的高字节内容存放到低地址,低字节内容存放在高地址处
大小端字节序指的是数据在电脑上存储的字节顺序。大端字节序存储是把数据的高位存放在低地址处,低位存放在高地址处。小段字节序存储是把数据的高位放在高地址处,低位放在低地址处。
5.猜名次🌜智力题培训🌛
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
//答案: //5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果: //A选手说:B第二,我第三;b=2 + a=3 = 1 //B选手说:我第二,E第四;b=2 + e=4 = 1 //C选手说:我第一,D第二;c=1 + d=2 = 1 //D选手说:C最后,我第三;c=5 + d=3 = 1 //E选手说:我第四,A第一;e=4 + a=1 = 1 //比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。(相加结果为真=1) //穷举法----> int main() { int a = 0; int b = 0; int c = 0; int d = 0; int e = 0; for (a = 1; a <= 5; a++) { for (b = 1; b <= 5; b++) { for (c = 1; c <= 5; c++) { for (d = 1; d <= 5; d++) { for (e = 1; e <= 5; e++) { if ((((b == 2) + (a == 3))==1)//条件为真执行下面的结果 && (((b == 2) + (e == 4))==1) && (((c == 1) + (d == 2))==1) && (((c == 5) + (d == 3))==1) && (((e == 4) + (a == 1)))==1) { if (a * b * c * d * e == 120)//隐含条件:防止穷举法出现重复元素 { printf("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e); } } } } } } } return 0; }
6.猜凶手🌜智力题培训🌛
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
以下为4个嫌疑犯的供词:
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
分析:分别假设凶手是A/B/C/D,然后三个人为真一个人为假。
//答案: //日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 //以下为4个嫌疑犯的供词 : //A说:不是我。 //B说:是C。 //C说:是D。 //D说:C在胡说 //已知3个人说了真话,1个人说的是假话。 int main() { char killer = 0; for (killer = 'A'; killer <= 'D'; killer++) { if ((killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D') == 3) { printf("凶手是%c\n", killer); } } return 0; }
第五题和第六题考察:我们如何通过问题的描述实现编程,此时需要细心思考!
7.在屏幕上打印杨辉三角。❗❗C技能必备
1
1 1
1 2 1
1 3 3 1
……
//答案: int main() { int i = 0; //打印10行10列,通过二维数组确定 int arr[10][10] = { 0 }; //通过规律发现:杨辉三角的每一行的第一个元素和每一行的最后一个元素都是1,实现如下: for (i = 0; i < 10; i++) { arr[i][i] = 1; arr[i][0] = 1; } //杨辉三角从第三行开始,我们发现第三行的第二个元素=第二行的第一个元素+第二行的第二个元素。第四行的第二个元素=第三行第一个元素+第三行第二个元素。以此类推得到规律。 //所以i=2从第三行开始,j=1或j=0都可。 for (i = 2; i < 10; i++) { int j = 0; for (j = 1; j < 10; j++) { arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j]; } } //实现打印功能 for (i = 0; i < 10; i++) { int j = 0; for (j = 0; j <= i; j++) { printf("%d ", arr[i][j]); }printf("\n"); } return 0; }
8.赛马找最快🌜智力题🌛
有36匹马6个跑道,没有计时器。最少进行多少次赛马能确定前三名?
分析:首先我们将36匹马分成6组分别在6个跑道赛马,进行6次。其次,我们将6组的第一名选择后再进行一次赛马,结果可以选择出36匹马的第一名,这是第七次赛马,但是第二名和第三名无法确定。此时第二名可能在第一名的组里,第三名也可能在第一名的组里,或者在其他组。所以我们选择第一名所在组的前三名,再选择第七次赛马的第二名所在组的前两名,再选择第七次赛马的第三名进行一次赛马,这是第八次赛马,最终决定36匹马的前三名。
编辑
9.烧香🌜智力题🌛
有两根香材质不均匀,但是每一根香燃烧完都需要1个小时。现在你有两根香,问用烧熏香的方法如何确定一个15分钟的时间段?
分析:由于两根香的材质不均匀,可能一半烧的快一半烧的慢,所以不可以掰断处理。我们将第一根香两头点着,另一根香先点着右端,同时点着后我们先烧半个小时。此时发现第一根香由于两头点着烧的快已经烧完啦,第二根香由于只点燃右端烧了半个小时。此时我们点燃第二根香的左端,右端不熄灭,当第二根香烧完的时候就是一个15分钟的时间段。
编辑