C语言收藏的错题

第一题:

#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

 第六题:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值