C刷题(六)
🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷
🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷
💚BC52、衡量人体胖瘦程度
描述:
在计算BMI(BodyMassIndex ,身体质量指数)的案例基础上,判断人体胖瘦程度。BMI中国标准如下表所示
输入描述:
多组输入,每一行包括两个整数,用空格隔开,分别为体重(公斤)和身高(厘米)
输出描述:
针对每行输入,输出为一行,人体胖瘦程度,即分类
示例:
输入:
80 170
60 170
90 160
50 185
输出:
Overweight
Normal
Obese
Underweight
代码:
#include <stdio.h>
#include <math.h>
int main()
{
int W = 0;
int hight = 0;
while (~scanf("%d%d", &W, &hight))
{
double h = hight / 100.0;
double H = pow(h, 2);
double BMI = W / H;
if (BMI<18.5)
{
printf("Underweight\n");
}
else if (BMI >= 18.5 && BMI <= 23.9)
{
printf("Normal\n");
}
else if (BMI > 23.9 && BMI <= 27.9)
{
printf("Overweight\n");
}
else
{
printf("Obese\n");
}
}
return 0;
}
结果:
扩展:
浮点数除法要保证除号的两端至少有一个浮点数
🧡BC53、计算一元二次方程
描述:
从键盘输入a, b, c的值,编程计算并输出一元二次方程ax^2 + bx + c = 0的根,当a = 0时,输出“Not quadratic equation”,当a ≠ 0时,根据△ = b^2 - 4*a*c的三种情况计算并输出方程的根
输入描述:
多组输入,一行,包含三个浮点数a, b, c,以一个空格分隔,表示一元二次方程ax^2 + bx + c = 0的系数
输出描述:
针对每组输入,输出一行,输出一元二次方程ax^2 + 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位,数字、符号之间没有空格
示例:
输入:
2.0 7.0 1.0
输出:
x1=-3.35;x2=-0.15
输入:
0.0 3.0 3.0
输出:
Not quadratic equation
输入:
1 2 1
输出:
x1=x2=-1.00
输入:
2 2 5
输出:
x1=-0.50-1.50i;x2=-0.50+1.50i
输入:
1 0 1
输出:
x1=0.00-1.00i;x2=0.00+1.00i
代码:
#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))
{
if (a == 0)
{
printf("Not quadratic equation\n");
}
else
{
double disc = b * b - 4*a*c;
if (disc > 0.0)
{
//两个不等实根
printf("x1=%.2lf;x2=%.2lf\n", (-b - sqrt(disc)) / (2 * a), (-b + sqrt(disc)) / (2 * a));
}
else if (disc < 0.0)
{
//有两个虚根
double real = (-b) / (2 * a);
double virtual = sqrt(-disc) / (2 * a);
printf("x1=%.2lf-%.2lfi;x2=%.2lf+%.2lfi\n", real, virtual, real, virtual);
}
else
{
//两个实根相等
printf("x1=x2=%.2lf\n", (-b) / (2 * a));
}
}
}
return 0;
}
结果:
扩展:
- 多组输入
- 注意根据条件进行代码书写
- 小数点如何进行位数的限制
💛BC54、获取月份天数
描述:
KiKi想获得某年某月有多少天,请帮他编程实现。输入年份和月份,计算这一年这个月有多少天
输入描述:
多组输入,一行有两个整数,分别表示年份和月份,用空格分隔
输出描述:
针对每组输入,输出为一行,一个整数,表示这一年这个月有多少天
示例:
输入:
2008 2
输出:
29
代码:
#include <stdio.h>
int main()
{
int year = 0;
int month = 0;
int days[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
while (~scanf("%d%d", &year, &month))
{
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;
}
结果:
扩展:
- 多组输入
- 如何判断闰年
- 利用数组把12个月份的天数进行存放
💙BC55、简单计算器
描述:
KiKi实现一个简单计算器,实现两个数的“加减乘除”运算,用户从键盘输入算式“操作数1运算符操作数2”,计算并输出表达式的值,如果输入的运算符号不包括在(+、-、*、/)范围内,输出“Invalid operation!”。当运算符为除法运算,即“/”时。如果操作数2等于0.0,则输出“Wrong!Division by zero!”
输入描述:
多组输入,一行,操作数1运算符操作数2(其中运算符号包括四种:+、-、*、/)
输出描述:
针对每组输入,输出为一行。
如果操作数和运算符号均合法,则输出一个表达式,操作数1运算符操作数2=运算结果,各数小数点后均保留4位,数和符号之间没有空格。
如果输入的运算符号不包括在(+、-、*、/)范围内,输出“Invalid operation!”。当运算符为除法运算,即“/”时。
如果操作数2等于0.0,则输出“Wrong!Division by zero!”
示例:
输入:
1.0+3.0
1.0;4.0
44.0/0.0
输出:
1.0000+3.0000=4.0000
Invalid operation!
Wrong!Division by zero!
代码:
#include <stdio.h>
int main()
{
double n1 = 0.0;
double n2 = 0.0;
char op = 0;
while (~scanf("%lf%c%lf", &n1, &op, &n2))
{
switch (op)
{
case '+':
printf("%.4lf+%.4lf=%.4lf\n", n1, n2, n1 + n2);
break;
case '-':
printf("%.4lf-%.4lf=%.4lf\n", n1, n2, n1 - n2);
break;
case '*':
printf("%.4lf*%.4lf=%.4lf\n", n1, n2, n1 * n2);
break;
case '/':
if (n2 == 0.0)
{
printf("Wrong!Division by zero!\n");
}
else
{
printf("%.4lf/%.4lf=%.4lf\n", n1, n2, n1 / n2);
}
break;
default:
printf("Invalid operation!");
break;
}
}
return 0;
}
结果:
扩展:
- 多组输入
- switch语句的应用
- 按照题目要求进行编写代码
💜BC56、线段图案
描述:
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的线段图案
输入描述:
多组输入,一个整数(1~100),表示线段长度,即“*”的数量
输出描述:
针对每行输入,输出占一行,用“*”组成的对应长度的线段
示例:
输入:
10
2
输出:
**********
**
代码:
#include <stdio.h>
int main()
{
int a = 0;
while (~scanf("%d", &a))
{
int i = 0;
for (i = 0; i < a; i++)
{
printf("*");
}
printf("\n");//这里要额外加换行
}
return 0;
}
结果:
扩展:
- 每次打印一个*,按照输入的个数打印后换行
🤎BC57、正方形图案
描述:
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的正方形图案
输入描述:
多组输入,一个整数(1~20),表示正方形的长度,也表示输出行数
输出描述:
针对每行输入,输出用“*”组成的对应边长的正方形,每个“*”后面有一个空格
示例:
输入:
4
输出:
* * * *
* * * *
* * * *
* * * *
输入:
5
输出:
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
代码:
#include <stdio.h>
int main()
{
int a = 0;
while (~scanf("%d", &a))
{
int i = 0;
for (i = 0; i < a; i++)
{
int j = 0;
for (j = 0; j < a; j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
结果:
🖤BC58、直角三角形图案
描述:
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的直角三角形图案
输入描述:
多组输入,一个整数(2~20),表示直角三角形直角边的长度,即“*”的数量,也表示输出行数
输出描述:
针对每行输入,输出用“*”组成的对应长度的直角三角形,每个“*”后面有一个空格
示例:
输入:
4
输出:
*
* *
* * *
* * * *
输入:
5
输出:
*
* *
* * *
* * * *
* * * * *
代码:
#include <stdio.h>
int main()
{
int a = 0;
while (~scanf("%d", &a))
{
int i = 0;
for (i = 0; i < a; i++)
{
int j = 0;
for (j = 0;j<i+1;j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
结果:
💚BC59、翻转直角三角形图案
描述:
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的翻转直角三角形图案
输入描述:
多组输入,一个整数(2~20),表示翻转直角三角形直角边的长度,即“*”的数量,也表示输出行数
输出描述:
针对每行输入,输出用“*”组成的对应长度的翻转直角三角形,每个“*”后面有一个空格
示例:
输入:
5
输出:
* * * * *
* * * *
* * *
* *
*
输入:
6
输出:
* * * * * *
* * * * *
* * * *
* * *
* *
*
代码:
#include <stdio.h>
int main()
{
int a = 0;
while (~scanf("%d", &a))
{
int i = 0;
for (i = 0; i < a; i++)
{
int j = 0;
for (j = 0; j < a - i; j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
结果:
扩展:
- 多组输入
- 控制好每一行的输出
🧡BC60、带空格的直角三角形
描述:
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的带空格直角三角形图案
输入描述:
多组输入,一个整数(2~20),表示直角三角形直角边的长度,即“*”的数量,也表示输出行数
输出描述:
针对每行输入,输出用“*”组成的对应长度的直角三角形,每个“*”后面有一个空格
示例:
输入:
5
输出:
*
* *
* * *
* * * *
* * * * *
输入:
4
输出:
*
* *
* * *
* * * *
代码:
//方法一
#include <stdio.h>
int main()
{
int a = 0;
while (~scanf("%d", &a))
{
int i = 0;
for (i = 0; i < a; i++)
{
int j = 0;
int q = 0;
for (j = 0;j<2*(a-1-i);j++)
{
printf(" ");
}
for (q = 0; q < i + 1; q++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
//方法二
#include <stdio.h>
int main()
{
int a = 0;
while (~scanf("%d", &a))
{
int i = 0;
for (i = 0; i < a; i++)
{
int j = 0;
for (j = 0; j < a; j++)
{
if (i + j < a - 1)
{
printf(" ");
}
else
{
printf("* ");
}
}
printf("\n");
}
结果:
扩展:
💛BC61、金字塔图案
描述:
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的金字塔图案
输入描述:
多组输入,一个整数(2~20),表示金字塔边的长度,即“*”的数量,,也表示输出行数
输出描述:
针对每行输入,输出用“*”组成的金字塔,每个“*”后面有一个空格
示例:
输入:
4
输出:
*
* *
* * *
* * * *
输入:
5
输出:
*
* *
* * *
* * * *
* * * * *
代码:
#include <stdio.h>
int main()
{
int a = 0;
while (scanf("%d", &a) != EOF)
{
int i = 0;
for (i = 0; i < a; i++)
{
int j = 0;
int q = 0;
for (j = 0; j < a - 1 - i; j++)
{
printf(" ");
}
for (q = 0; q < i + 1; q++)
{
printf("*");
printf(" ");
}
printf("\n");
}
}
return 0;
}
结果:
离开前,别忘了👍关注💡收藏💖
希望本文能够对大家有帮助~!
【C语言】带你用最短的时间刷题(附解题思路、具体代码)不断更新(一)
【C语言】带你用最短的时间刷题(附解题思路、具体代码)不断更新(二)
【C语言】带你用最短的时间刷题(附解题思路、具体代码)不断更新(三)