01.数据的存储.练习题

文章包含了一系列编程示例,涉及位运算、数据类型大小、逻辑判断以及递推算法。EG1和EG2探讨了位运算和数据类型的表示,EG3和EG4则是逻辑推理问题,分别通过编程解决跳水比赛名次和谋杀案凶手的确定。EG5介绍了杨辉三角的生成算法。
摘要由CSDN通过智能技术生成

EG1:

//char1个字节

//int四个字节

//1个字节八个比特位

#include <stdio.h>

int main()
{
	//0~255
	unsigned char a = 200;
	//00000000000000000000000011001000
	//11001000 - a
	unsigned char b = 100;
	//00000000000000000000000001100100
	//01100100 - b
	
	unsigned char c = 0;

	c = a + b;
	//00000000000000000000000011001000 - a
	//00000000000000000000000001100100 - b
	//00000000000000000000000100101100 -a+b
	//00101100 - c
	//
	printf("%d %d", a + b, c);
	//300 44
	return 0;
}

EG2:

//需要十六位的8个 

int main()
{
	unsigned int a = 0x1234;
	unsigned char b = *(unsigned char*)&a;
	printf("%d\n", b);

	return 0;
}

//大端:大存小,小存大

//看起来是顺序一样的

//0x 00 00 12 34(最右是最低测,取得是0x00)

EG3:猜名词

5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:

A选手说:B第二,我第三;

B选手说:我第二,E第四;

C选手说:我第一,D第二;

D选手说:C最后,我第三;

E选手说:我第四,A第一;

比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。

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))
						{//1*2*3*4*5
							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;
} 

EG4:猜凶手

日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为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;
}

//类比:

1.赛马进行多少次比赛,可以确定前三名

36匹,6跑道

首先,6场比赛,决定出6个第一

再,6个第一决定出123

后,第一的那一队再决定出123

第二的那一队决定出12

第三的那一队决定出1

123121决定出123

共进行8次比赛

EG5:杨辉三角

int main()
{
	int arr[10][10] = { 0 };
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		int j = 0;
		for (j = 0; j <= i; j++)
		{
			if (j == 0)
				arr[i][j] = 1;
			if (i == j)
				arr[i][j] = 1;
			if (i >= 2 && j >= 1)
			{
				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("%3d ", arr[i][j]);
		}
		printf("\n");
	}

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值