2023深圳技术大学OJ平台C语言实验课实验五 B,D,E题

        再看到我写的代码突然发现我写的其实都很乱……

【id:12】【20分】B. 实验3-3 比较大小

把这一题打上来是因为这题的想法要知道,而且后面箱子匹配也需要用到他

#include <stdio.h>

int main() {
	int a, b, c, f = 0;
	scanf("%d %d %d", &a, &b, &c);
	//下面用到的想法主要是大的数字往上走,最后出来的顺序就一定会是由大到小
	if (a < b) {//将a与b比较,若小则a,b交换值
		f = a;
		a = b;
		b = f;
	}
	if (a < c) {//将a与c比较,若小则a,c交换值
		f = a;
		a = c;
		c = f;
	}
	if (b < c) {//将b与c比较,若小则b,c交换值
		f = b;
		b = c;
		c = f;
	}
	printf("%d->%d->%d", c, b, a);

	return 0;
}

【id:53】【20分】D. 三角形判断

这一题需要注意到c中浮点数的比较。

fabs()函数的作用是将数变为绝对值。题目中利用它比较两浮点值是否相等的原理是判断两浮点数之差的绝对值是否小于一个设定的极小的值,如果结果为真的话则判定他们相等。使用fabs()函数需要调用数学库

#include <stdio.h>
#include <math.h>

int main() {
	double a, b, c;
	scanf("%lf\n%lf\n%lf", &a, &b, &c);

	if (a + b - c > 0 && a + c - b  > 0 && b + c - a > 0) {
		//上面判断三角形是否成立不能用fabs函数!因为结果始终会大于0
		if (fabs(a - b) < 0.001 || fabs(a - c) < 0.001 || fabs(b - c) < 0.001) {//判断三边是否有两边相等

			if (fabs(a - b) < 0.001 && fabs(b - c) < 0.001 && fabs(a - c) < 0.001) {//判断三边是否全相等
				printf("等边三角形");
			} else if (fabs(a * a + b * b - c * c) < 0.001 || fabs(a * a + c * c - b * b) < 0.001 || fabs(c * c + b * b - a * a) < 0.001) {//判断是否有满足勾股定理存在
				printf("等腰直角三角形");
			} else {
				printf("等腰三角形");
			}

		} else {//题目没有提到直角三角形,那么三边全不相等的自然就是普通三角形
			printf("普通三角形");
		}

	} else {
		printf("非三角形");
	}

	return 0;
}

【id:49】【20分】E. 箱子匹配

如何才能确保箱子能匹配呢?这里就要用到B题的思路啦!

如果我们先把输入的两组数字分别从大到小进行排序,那么是不是只需要分别拿两组数字中大中小数来比较是否符合就可以解决啦!

#include <stdio.h>

int main() {
	int t = 0;
	scanf("%d", &t);

	for (int n = 0; n < t; n++) {
		int a1, b1, c1, a2, b2, c2, m = 0;//定义m方便下面的排序
		scanf("%d %d %d", &a1, &b1, &c1);
		scanf("%d %d %d", &a2, &b2, &c2);
		//对第一组从大到小排序
		if (a1 <= b1) {
			m = a1;
			a1 = b1;
			b1 = m;
		}
		if (a1 <= c1) {
			m = a1;
			a1 = c1;
			c1 = m;
		}
		if (b1 <= c1) {
			m = b1;
			b1 = c1;
			c1 = m;
		}
		//对第二组从大到小排序
		if (a2 <= b2) {
			m = a2;
			a2 = b2;
			b2 = m;
		}
		if (a2 <= c2) {
			m = a2;
			a2 = c2;
			c2 = m;
		}
		if (b2 <= c2) {
			m = b2;
			b2 = c2;
			c2 = m;
		}
		//分别对两组中的大中小数比较,判断是否符合匹配条件
		if (a2 >= a1 && b2 >= b1 && c2 >= c1 || a1 >= a2 && b1 >= b2 && c1 >= c2) {
			printf("yes\n");
		} else {
			printf("no\n");
		}
	}

	return 0;
}

如果不想写两遍那个排序的话也可以:

#include <stdio.h>

int fact(int *a, int *b, int *c) {
	//从大到小排序
	int m;
	if (*a <= *b) {
		m = *a;
		*a = *b;
		*b = m;
	}
	if (*a <= *c) {
		m = *a;
		*a = *c;
		*c = m;
	}
	if (*b <= *c) {
		m = *b;
		*b = *c;
		*c = m;
	}
}


int main() {
	int t;
	scanf("%d", &t);

	for (int n = 0; n < t; n++) {
		int a1, b1, c1, a2, b2, c2, m = 0;
		scanf("%d %d %d", &a1, &b1, &c1);
		scanf("%d %d %d", &a2, &b2, &c2);
		fact(&a1, &b1, &c1);
		fact(&a2, &b2, &c2);

		if (a2 >= a1 && b2 >= b1 && c2 >= c1 || a1 >= a2 && b1 >= b2 && c1 >= c2) {
			printf("yes\n");
		} else {
			printf("no\n");
		}
	}

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值