这几天学c感觉不太费力,所以在CSDN上发几篇博客,我会做非常详细的讲解,希望对您有用!
习题1-6 三角形(triangle)
习题内容
输入三角形3条边的长度值(均为正整数),判断是否能为直角三角形的3个边长。如果可以,则输入yes,如果不能,则输出no。如果根本无法构成三角形,则输出not a triangle
注意,三角形的三条边分别以a,b,c代替
解题思路
首先根据题干给出的第一个条件(是否能为直角三角形的3个边长)来写出第一段伪代码。要想判断我们需要两个重要条件——
- 因为直角三角形的斜边长度大于其他两边,所以我们在判断直角三角形时也要判断这个。
- 根据勾股定理:直角三角形的斜边的平方=两边的平方的和。也就是——a*a+b*b=c*c
于此,根据这两个定理我们可以写出此三段代码:
if(a < c && b < c && a*a+b*b == c*c)printf("yes\n");
if(c < a && b < a && c*c+b*b == a*a)printf("yes\n");
if(a < b && c < b && c*c+b*b == a*a)printf("yes\n");
然后我们还要看题干的第二个条件(如果根本无法构成三角形),我们知道,判断能否构成三角形有两条定理
- 三角形两条边之和大于第三边
- 三角形两条边之差小于第三边
但我们要判断的是无法构成三角形,所以我们要逆推三角形定理!
于此,根据两条定理逆推我们可以写出此一段代码:
if(a+b < c || a+c < b || c+b < a || a-b > c || b-c > a || a-c > b)printf("not a triangle");
注意:||符号是“或”的意思,只要一个是真的,那么后面就不执行了,只执行后面的语句
最后,到了最后一个条件(如果可以,则输出yes,如果不能,则输出no)。千万不要认为这个很简单,一开始我在if语句后面加else语句再加输出no却直接输出了no,造成“不管输入什么,只要错了,我都要输出no的场景”, 害我捣鼓了一天,最后我发现让这个输出no自成一句比较好,于此此段代码诞生了:
if(a*a+b*b != c*c && c*c+b*b != a*a && c*c+a*a != b*b && a > c && b > c && c > a && b > a && a > b && c > b)printf("no\n");
此行代码的通俗意思就是“勾股定理不符合,直角三角形定理也不符合的三条边,直接给人输出no吧!”
好了。习题1-6三角形完成!
然后我整理一下代码(都是能运行的代码)
#include<stdio.h>
int main()
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if(a+b < c || a+c < b || c+b < a || a-b > c || b-c > a || a-c > b)printf("not a triangle");
if(a < c && b < c && a*a+b*b == c*c)printf("yes\n");
if(c < a && b < a && c*c+b*b == a*a)printf("yes\n");
if(a < b && c < b && c*c+b*b == a*a)printf("yes\n");
if(a*a+b*b != c*c && c*c+b*b != a*a && c*c+a*a != b*b && a > c && b > c && c > a && b > a && a > b && c > b)printf("no\n");
return 0;
}
习题1-7年份(闰年)
习题内容
输入年份,判断是否为闰年。如果是,则输出yes,否则输出no。
解题思路
判断是否为闰年有三种:
- 能被4整除,但不能被100整除
- 能被400整除
- 能被3200和172800整除
那么我们整理一下头绪,写个if语句:
if(y%4 == 0 && y%100 != 0 || y%400 == 0 || y%172800 == 0 && y%3200 == 0)printf("yes\n");
其次,怕有人搞坏,我们要建立个if语句,让用户持续输入,因为有些人会将年份写成负数
if(y < 0)
printf("年份输入有误,应输入正整数!\a\n");
于此整理一下
#include<stdio.h>
int main()
{
int y
scanf("%d", &y);
if(y < 0)
printf("年份输入有误,应输入正整数!\a\n");
if(y%4 == 0 && y%100 != 0 || y%400 == 0 || y%172800 == 0 && y%3200 == 0)printf("yes\n");
else
printf("no\n");
return 0;
}
此习题也完成了!
有什么疑问可以加qq1693121186或qq群779563507