初识C语言时一些简单的小程序(二)

本文继续介绍C语言的学习,通过四个小程序实践,包括:无额外空间的数值交换、寻找数组中的最大值、按顺序输出三个数以及计算最大公约数。每个程序都附带问题分析和改进思路,提醒读者注意编程细节和逻辑思考。

一如代码深似海,从此妹子是路人,今天继续为大家带来一些初识C语言的简单小程序。

(一)给定两个变量的值,将两个值的内容进行交换

int main(){
	int a = 1;
	int b = 2;
	printf("%d %d \n", a, b);
	int exchange = 0;//定义一个中间值便于进行交换
	exchange = a;
	a = b;
	b = exchange;
	printf("%d %d \n", a, b);
	system("pause");
	return 0;

}

两个变量值的交换。简单来说有两个苹果分别放在A,B篮子中,要交换两个篮子中的苹果,最简单就是找一个空篮C,以此为中介交换。

这里想到如果身边因为某些条件没有“篮子C”怎么办了?方法总比困难多,提供如下攻略:

1)使用两者之间的差值完成任务

int main(){
	int a = 0;
	int b = 0;
	scanf("%d%d",&a, &b);
	printf("%d %d\n", a, b);
	if (a > b){
		b = a - b;
		a = a - b;
		b = a + b;
		printf("%d %d\n", a, b);
	}
	else {
		a = b - a;
		b = b - a;
		a = b + a;
		printf("%d %d\n", a, b);
	}
	system("pause");
	return 0;
}

这个很好理解,找到两个篮子中苹果多的那一个,把多出的苹果放到苹果少的篮子中,不就完成了交换么?

2)连续异或解决问题
 

int main(){
	int a = 0;
	int b = 0;
	scanf("%d%d", &a, &b);
	printf("%d %d\n", a, b);
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("%d %d\n", a, b);
	system("pause");
	return 0;
}

此方法用到异或,其简单可以理解为“同为1 异为0”。这里面逻辑并不难,不妨大家拿1与2 在二进制中连续异或,就会发现规律,快动手试试吧~

(二)求十个整数中的最大值

int main(){
	int a[10] = { 0, 1, 2, 3, 4, 9, 8, 7, 6, 5 };//将十个数放置到数组中
	int i = 0;
	int Maxnumber = a[0];//然后将每次比较中最大的数进行记录
	for (i = 0; i < 10; i++){
		if (a[i] > a[i-1]){
			Maxnumber = a[i];
		}
	}
	printf("十个数中最大的数为:%d\n", Maxnumber);
	system("pause");
	return 0;
}

运行这个代码你会发现结果好像是对的,但如果把数组中的数字改为{0,1,2,3,4,9,12,8,7,11,5}呢?好像发现了问题所在....

Maxnumber记录的是每次比较中的最大值,然而并不一定是数组中的最大值,所以需要改进

int main(){
	int a[10] = { 0, 1, 2, 3, 4, 9, 12, 7, 11, 5 };
	int i = 0;
	int Maxnumber = a[0];//加上一个条件,拿Maxnumber与每次比较中的最大值比较
	for (i = 1; i < 10; i++){
		if (a[i] > a[i-1]){
			if (a[i] > Maxnumber){
				Maxnumber = a[i];
			}
		}
	}
	printf("十个数中最大的数为:%d\n", Maxnumber);
	system("pause");
	return 0;
}

改进后发现满足要求,代码逻辑要细心呀~好比女神说:我感冒了,你在干什么?当然不能回我在码代码,女神感冒了才是重点啊~~~~~

(三)将三个数从大到小输出

int main(){
	int a, b, c;
	scanf("%d%d%d", &a, &b, &c);
	printf("%d %d %d\n", a, b, c);
	int Max = 0;
	if (a < c){
		Max = c;
		c = a;
		a = Max;
	}
	if (a < b){
		Max = b;
		b = a;
		a = Max;
	}
	if (b < c){
		Max = c;
		c = b;
		b = Max;
	}
	printf("三个数从大到小依次为:");
	printf("%d %d %d\n", a, b, c);
	system("pause");
	return 0;
}

从大到小输出三个数,这个问题逻辑看似很乱,其实无非就是:1)找到三个数中最大的数。2)找到剩下两个数中最大的数

所以搞清楚逻辑后,这个“小怪”不堪一击。

(四)求两个数的最大公约数

int main(){
	int a, b;
	scanf("%d%d", &a, &b);
	printf("%d %d \n", a, b);
	int Max = 0;
	if (a < b){
		Max = b;
		b = a;
		a = Max;
	}//这里找到最大的数,方便下面循环终止条件的确定
	int i = 0;
	int num = 0;
	for (i = 1; i <= b; i++){
		if ((a % i == 0) && (b % i == 0)){
			num = i;
		}
	}//简单条件的判定(能够同时被两个数整除)
	printf("最大公约数为:");
	printf("%d\n", num);
	system("pause");
	return 0;
}

最大公约数:能够被两个数同时整除的最大数。围绕这个点进行编程即可

 

编程过程中要注意是否考虑掉一些不被注意的条件,当然这只是初识阶段,但还是希望各位未来的大佬们养成习惯,不断对自己的代码提出质疑,改正~当然,这也是我应该做的,一起加油。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值