栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言收藏的错题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

strlen的函数就是寻找 ,所以最后结果是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
int main()
{
	char killer = 'A';
	for (killer = 'A';killer <= 'D';killer++)
	{
		if ((killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D') == 3)
		{
			printf("凶手是:%cn", killer);
		}
	}
	return 0;
}

要熟悉ASCii码表,不然想不到这个方法

第四题:

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

第五题:

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

 第六题:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/934979.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号