第一题:
#include<stdio.h>
#include<string.h>
int main()
{
char a[1000] = { 0 };
int i = 0;
for (i = 0; i < 1000; i++)
{
a[i] = -1 - i;
}
printf("%d", strlen(a));
return 0;
}
char的取值范围是 -128~127
也就是运行结果刚开始肯定是-1、-2、-3.......-128、127、126....2、1、0
strlen的函数就是寻找 \0 ,所以最后结果是128+127=255
第二题:
0x1234---》0x00 00 12 34翻译成二进制:
0000 0000 0000 0000 0001 0010 0011 0100
int转化为char,发生整型提升
0011 0100
0000 0000 0000 0000 0000 0000 0011 0100
转化成十六进制:0x 00 00 00 34
这个是大端存放,不难看出结果是A、0x00
第三题:
最主要是文字转化成程序的能力
#include<stdio.h>
int main()
{
char killer = 'A';
for (killer = 'A';killer <= 'D';killer++)
{
if ((killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D') == 3)
{
printf("凶手是:%c\n", killer);
}
}
return 0;
}
要熟悉ASCii码表,不然想不到这个方法
第四题:
#include<Windows.h>
#include<stdio.h>
int main()
{
int A = 0;
int B = 0;
int C = 0;
int D = 0;
int E = 0;
for (A = 0;A <= 5;A++)
{
for (B = 0;B <= 5;B++)
{
for (C = 0; C<= 5; C++)
{
for (D = 0;D <= 5;D++)
{
for (E = 0;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) == 1);
{
if (A * B * C * D * E == 120)
printf("A=%d B=%d C=%d D=%d E=%d", A, B, C, D, E);
}
}
}
}
}
}
return 0;
}
第五题:
200的二进制: 1100 1000
100的二进制:0110 0100
c的二进制: 10010 1100(长了,会发生截断)
因为要用%d打印,所以会 发生截断
先看c 截断:0010 1100
整型提升:0000 0000 0000 0000 0000 0000 00010 1100
翻译过来就是44
a+b的二进制是 10010 1100
因为是unsingned char,所以高位全部补0,
0000 0000 0000 0000 0000 0001 0010 1100
翻译过来就是300
第六题: