C语言收藏的错题

第一题:

#include
#include
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

C语言收藏的错题_第1张图片

strlen的函数就是寻找 \0 ,所以最后结果是128+127=255

第二题:

C语言收藏的错题_第2张图片

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

第三题:

C语言收藏的错题_第3张图片

最主要是文字转化成程序的能力

#include
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码表,不然想不到这个方法

第四题:

C语言收藏的错题_第4张图片

#include
#include
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;
}

第五题:

C语言收藏的错题_第5张图片

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

 第六题:

C语言收藏的错题_第6张图片

你可能感兴趣的:(蓝桥杯,c语言,c++)