C语言-----习题

1.通过这个例题,我们可以知道*p.a是无法打印99的,因为.的优先级比解引用*高;

复制代码
​
struct S
{
	int a;
	int b;
};
int main()
{
	struct S a, * p = &a;
	//可以分为两部分理解
	//struct S a;
	//struct S *p = &a;
	a.a = 99;
	printf("%d\n", a.a);
	printf("%d\n", *p.a);//
	printf("%d\n", (*p).a);
	printf("%d\n", p->a);
	return 0;
}

​

2.买水问题,1元1瓶水,2空瓶换1瓶水:

复制代码
int main()
{
	int money = 0;
	int total = 0;
	int empty = 0;
	scanf("%d", &money);
	total = money;
	empty = money;
	while (empty >= 2)
	{
		total = total + empty / 2;
		empty = empty / 2 + empty % 2;
	}
	printf("%d", total);
	return 0;
}

(1)对于这个问题,我们要考虑喝完之后剩下的空瓶,和原本就有的空瓶,

(2)而while循环里面的empty=empty/2(喝完之后又换的)+empty%2(原来剩下的)就是所有的空瓶子的个数;

(3)刚开始是喝的总瓶数等于钱数,空瓶数等于钱数,接下来通过循环不断地累加;

(4)循环的条件就是空瓶的个数大于2瓶,每次循环都要计算喝的总瓶数和新的空瓶子的个数;

(5)跳出循环后的total就是喝的总数

3.输入一串数字,通过编程实现----------这串数字的前面是奇数,后面是偶数:

复制代码
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int left = 0;
	int right = sz - 1;
	//奇数符合条件,偶数找出来
	while (left < right)
	{
		while ((left < right) && (arr[left] % 2 == 1))
		{
			left++;
		}
		while ((left < right) && (arr[right] % 2 == 0))
		{
			right--;
		}
		if (left < right)
		{
			int temp = arr[left];
			arr[left] = arr[right];
			arr[right] = temp;
			left++;
			right--;
		}
	}
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

(1)这个代码的整体逻辑就是把前面的偶数和后面的奇数进行对调;

(2)第二个while循环就是找出偶数,奇数符合条件,所以取余后是1的代表是奇数,让下标加1,当我们找到偶数的时候,就会跳出循环,并且记下这个时候的left;

(3)第二个while循环就是找奇数,取余是0就代表是偶数,让下标减去1,知道找到奇数,这个时候跳出循环,记下这个时候的right;

(4)为了防止越界,因为可能全部是奇数或者全部是偶数,所以第二个第三个while都要求left<right;

(5)if语句就是让前面的偶数和后面的奇数交换位置;

(6)因为这样一次只能交换一组数据,所以外面又加上一个while循环,知道全部遍历才结束;

(7)最后使用for循环对重新排列的数组进行打印。

CCCCCCCCCCCCCCCCCCCCCCCCCC

相关推荐
888CC++1 小时前
如何在 C 语言中进行程序调试?
前端·javascript·算法
pluviophile_s2 小时前
数据结构:第2讲:线性表
数据结构·笔记
(●—●)橘子……3 小时前
力扣第503场周赛练习理解
python·学习·算法·leetcode·职场和发展·周赛
明志数科4 小时前
4D时序标注技术详解:让机器人理解连续动作的数据基础
java·算法·机器人
KaMeidebaby5 小时前
卡梅德生物技术快报|原核表达系统工艺优化:包涵体重折叠 + 分子筛纯化实现功能 RBD 高效制备,附全参数配置
前端·人工智能·算法·数据挖掘·数据分析
无限码力5 小时前
携程0510笔试真题【单数组交换】
算法·携程笔试·携程笔试真题·携程0510笔试真题
zlinear数据采集卡5 小时前
基准电压电路深度解析:从理论参数到ZLinear采集卡的精准参考实战
c语言·单片机·嵌入式硬件·fpga开发·自动化
Love_云宝儿5 小时前
WKT数据示例并与GeoJSON数据对比
数据结构·gis
BlockWay6 小时前
WEEX Labs 周度观察:微软-OpenAI 合作调整与AI 多云趋势
大数据·人工智能·算法·安全·microsoft