44.计算单位阶跃函数
题目描述:
KiKi最近学习了信号与系统课程,这门课里有一个非常有趣的函数,单位阶跃函数,其中一种定义方式为:
现在试求单位冲激函数在时域t上的值。
输入描述:
题目有多组输入数据,每一行输入一个t(-1000<t<1000)表示函数的时域t。 输入示例: 11 0 -11
输出描述:
输出函数的值并换行。 输出示例: 1 0.5 0
解析:
本题只需要注意多组输入就行啦。
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int t = 0; while (~scanf("%d", &t)) { if (t > 0) { pritnf("%d\n",1); } else if (t == 0) { printf("%.1lf", 0.5); } else { printf("%d\n", 0); } } return 0; }
45.三角形判断
题目描述:
KiKi想知道已经给出的三条边a,b,c能否构成三角形,如果能构成三角形,判断三角形的类型(等边三角形、等腰三角形或普通三角形)。
输入描述:
题目有多组输入数据,每一行输入三个a,b,c(0<a,b,c<1000), 作为三角形的三个边,用空格分隔。 输入示例: 2 3 2 3 3 3
输出描述:
针对每组输入数据,输出占一行,如果能构成三角形, 等边三角形则输出“Equilateral triangle!”, 等腰三角形则输出“Isosceles triangle!”, 其余的三角形则输出“Ordinary triangle!”, 反之输出“Not a triangle!”。 输出示例: Isosceles triangle! Equilateral triangle!
解析:
这个题目我们只需要清楚三角形的判断规则就行,然后在于一一穷尽就行。
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int a = 0; int b = 0; int c = 0; while(~scanf("%d %d %d", &a, &b, &c)) { //判断是否为三角形 if ((a + b > c) && (a + c > b) && (b + c > a)) { //是三角形 //等边三角形 if (a == b && b == c) printf("Equilateral triangle!"); else if ((a == b && a != c) || (a == c && c != b) || (c = b && b != a)) printf("Isosceles triangle!"); else printf("Ordinary triangle!"); } else printf("Not a triangle!"); } return 0; }
46.衡量人体胖瘦程度
题目描述:
在计算BMI(BodyMassIndex ,身体质量指数)的案例基础上,判断人体胖瘦程度。BMI中国标准如下表所示。
输入描述:
多组输入,每一行包括两个整数,用空格隔开,分别为体重(公斤)和身高(厘米)。 输入示例: 80 170 60 170 90 160 50 185
输出描述:
针对每行输入,输出为一行,人体胖瘦程度,即分类。 输出示例: Overweight Normal Obese Underweight
解析:
浮点数除法必须要保证除号的两端至少有一个是浮点数。
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { double weight = 0.0; double high = 0.0; double bmi = 0.0; while (~scanf("%lf %lf", &weight, &high)) { bmi = weight / ((high / 100.0) * (high / 100.0)); if (bmi < 18.5) printf("Underweight"); else if (bmi >= 18.5 && bmi <= 23.9) printf("Normal"); else if (bmi > 23.9 && bmi <= 27.9) printf("Overweight"); else printf("Obese"); } return 0; }
47.计算一元二次方程
题目描述:
从键盘输入a, b, c的值,编程计算并输出一元二次方程axe2 + bx + c = 0的根,当a = 0时,输出“Not quadratic equation”,当a ≠ 0时,根据△ = be2 - 4*a*c的三种情况计算并输出方程的根。
输入描述:
多组输入,一行,包含三个浮点数a, b, c, 以一个空格分隔, 表示一元二次方程axe2 + bx + c = 0的系数。 输入示例:2.0 7.0 1.0
输出描述:
针对每组输入,输出一行,输出一元二次方程ax2 + bx +c = 0的根的情况。 如果a = 0,输出“Not quadratic equation”; 如果a ≠ 0,分三种情况: △ = 0,则两个实根相等,输出形式为:x1=x2=...。 △ > 0,则两个实根不等,输出形式为:x1=...;x2=...,其中x1 <= x2。 △ < 0,则有两个虚根,则输出:x1=实部-虚部i;x2=实部+虚部i, 即x1的虚部系数小于等于x2的虚部系数,实部为0时不可省略。 实部= -b / (2*a),虚部= sqrt(-△ ) / (2*a) 所有实数部分要求精确到小数点后2位,数字、符号之间没有空格。 输出示例:x1=-3.35;x2=-0.15
解析:
1.多组输入
2.根据不同的限制条件给出相应的计算结果
3.小数点后面有位数限制
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<math.h> int main() { double a = 0.0; double b = 0.0; double c = 0.0; while ((scanf("%lf %lf %lf", &a, &b, &c)) != EOF) { if (a == 0.0) { printf("Not quadratic equation"); } else { double disc = b * b - 4 * a * c; if (disc == 0.0) { //有两个相等的实根 printf("x1=x2=%.2lf", -b / (2 * a)); } else if (disc > 0.0) { //有两个不相等的实根 printf("x1=%.2lf;x2=%.2lf", (-disc - b) / (2 * a), (disc - b) / (2 * a)); } else { //有两个不相等的虚数根 double real = -b / (2 * a); double image = sqrt(-disc) / (2 * a); printf("x1=%.2lf-%.2lfi;x2=%.2lf+%.2lfi", real, image, real, image); } } } return 0; }
48.获取月份天数
题目描述:
KiKi想获得某年某月有多少天,请帮他编程实现。输入年份和月份,计算这一年这个月有多少天。
输入描述:
多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。 输入示例:2023 4
输出描述:
针对每组输入,输出为一行,一个整数,表示这一年这个月有多少天。 输出示例:
解析:
闰年的判断:
1.能被4整除,不能被100整除
2.能被400整除
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int year = 0; int month = 0; int days[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; while ((scanf("%d %d", &year, &month))!=EOF) { int day = days[month - 1]; if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { if (month == 2) { day += 1; } } printf("%d\n", day); } return 0; }
49.简单计算器
题目描述:
KiKi实现一个简单计算器,实现两个数的“加减乘除”运算,用户从键盘输入算式“操作数1运算符操作数2”,计算并输出表达式的值,如果输入的运算符号不包括在(+、-、*、/)范围内,输出“Invalid operation!”。当运算符为除法运算,即“/”时。如果操作数2等于0.0,则输出“Wrong!Division by zero!”
输入描述:
多组输入,一行,操作数1运算符操作数2 (其中运算符号包括四种:+、-、*、/)。 输入示例: 1.0+3.0 1.0;4.0 44.0/0.0
输出描述:
对每组输入,输出为一行。 如果操作数和运算符号均合法,则输出一个表达式, 操作数1运算符操作数2=运算结果, 各数小数点后均保留4位,数和符号之间没有空格。 如果输入的运算符号不包括在(+、-、*、/)范围内, 输出“Invalid operation!”。 当运算符为除法运算,即“/”时。 如果操作数2等于0.0,则输出“Wrong!Division by zero!”。 输出示例: 1.0000+3.0000=4.0000 Invalid operation! Wrong!Division by zero!
解析:
本题不要忘记case语句后面还有break语句。
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { double num1 = 0.0; double num2 = 0.0; char op = 0; while (~scanf("%lf %c %lf", &num1, &op, &num2)) { switch (op) { case '+': printf("%.4lf+%.4lf=%.4lf", num1, num2, num1 + num2); break; case '-': printf("%.4lf-%.4lf=%.4lf", num1, num2, num1 - num2); break; case '*': printf("%.4lf*%.4lf=%.4lf", num1, num2, num1 * num2); break; case '/': if (num2 == 0) printf("Wrong!Division by zero!"); else printf("%.4lf/%.4lf=%.4lf", num1, num2, num1 / num2); break; default: printf("Invalid operation!"); break; } } return 0; }
50.线段图案
题目描述:
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的线段图案。
输入描述:
多组输入,一个整数(1~100),表示线段长度,即“*”的数量。 输入示例: 10 2
输出描述:
针对每行输入,输出占一行,用“*”组成的对应长度的线段。 输出示例: ********** **
解析:
1.多组输入
2.每次打印一个*,按照输入的个数打印后换行就行
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int n = 0; while ((scanf("%d", &n)) != EOF) { int i = 0; for (i = 0; i < n; i++) { printf("*"); } printf("\n"); } return 0; }
51.正方形图案
题目描述:
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的正方形图案。
输入描述:
多组输入,一个整数(1~20), 表示正方形的长度,也表示输出行数。 输入示例: 4
输出描述:
针对每行输入,输出用“*”组成的对应边长的正方形, 每个“*”后面有一个空格。 输出示例: * * * * * * * * * * * * * * * *
解析:
1.多组输入
2.每组都是由n+空格组成
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int n = 0; while ((scanf("%d", &n)) != EOF) { int i = 0; for (i = 0; i < n; i++) { //打印一行的内容 int j = 0; for (j = 0; j < n; j++) { printf("* "); } printf("\n"); } } return 0; }
52.直角三角形图案
题目描述:
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的直角三角形图案。
输入描述:
多组输入,一个整数(2~20),表示直角三角形直角边的长度,即“*”的数量,也表示输出行数。 输入示例: 4
输出描述:
针对每行输入,输出用“*”组成的对应长度的直角三角形, 每个“*”后面有一个空格。 输出示例: * * * * * * * * * *
解析:
1.多组输出
2.每一行的输出与i的值相关,只要掌握其规则就非常轻松。
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int n = 0; while ((scanf("%d", &n)) != EOF) { int i = 0; for (i = 0; i < n; i++) { //打印一行的内容 int j = 0; for (j = 0; j <= i; j++) { printf("* "); } printf("\n"); } } return 0; }