(题目标题可以直接转题目链接)
描述
在计算BMI(BodyMassIndex ,身体质量指数)的案例基础上,判断人体胖瘦程度。BMI中国标准如下表所示。
输入描述:
多组输入,每一行包括两个整数,用空格隔开,分别为体重(公斤)和身高(厘米)。
输出描述:
针对每行输入,输出为一行,人体胖瘦程度,即分类。
示例1
输入:
80 170
60 170
90 160
50 185
输出:
Overweight
Normal
Obese
Underweight
参考代码:
#include <stdio.h>
int main() {
int w=0;
int h=0;
while(~scanf("%d %d",&w, &h))
{
float bmi=w/(h/100.0*h/100.0);
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;
}
答案解析: 1. 多组输入 2. 浮点数除法要保证除号的两端至少有一个浮点数
描述
从键盘输入a, b, c的值,编程计算并输出一元二次方程ax2 + bx + c = 0的根,当a = 0时,输出“Not quadratic equation”,当a ≠ 0时,根据△ = b2 - 4*a*c的三种情况计算并输出方程的根。
输入描述:
多组输入,一行,包含三个浮点数a, b, c,以一个空格分隔,表示一元二次方程ax2 + bx + c = 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位,数字、符号之间没有空格。
示例1
输入:
2.0 7.0 1.0
输出:
x1=-3.35;x2=-0.15
#include <stdio.h>
#include <math.h>
int main()
{
float a=0.0;
float b=0.0;
float c=0.0;
float x1=0.0;
float x2=0.0;
while(~scnaf("%f %f %f",&a ,&b, &c))
{
float just=b*b-4*a*c;//定义一个▲用来判断一元二次方程的根
if(a==0)
{
printf("Not quadratic equation");
}
else
{
if(just==0)//x1=x1
{
x1=-b/(2*a);
printf("x1=x2=%.2f\n",x1);
}
if(just>0)
{
x1=(-b-sqrt(just))/2*a;//sqrt:为求根函数,头文件为<math.h>
x2=(-b+sqrt(just))/2*a;// eg:sqrt(a)意味求a的开根;
printf("x1=%.2f;x2=%.2f\n",x1,x2);
}
if(just<0)
{
x1=-b / (2*a)-sqrt(-just) / (2*a);//这里题目给了just<0时求根的方法,直接套公式就行。
x2=-b / (2*a)+sqrt(-just) / (2*a);
printf("x1=%.2fi;x2=%.2fi\n",x1,x2);
}
else {
printf("Not quadratic equation\n");
}
}
}
return 0;
}
答案解析: 1. 多组输入 2. 根据不同的限制条件给出相应的计算结果 3. 小点数后位数有限制 4.本题需要了解sqrt求根函数的使用方法及头文件。
描述
KiKi想获得某年某月有多少天,请帮他编程实现。输入年份和月份,计算这一年这个月有多少天。
输入描述:
多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。
输出描述:
针对每组输入,输出为一行,一个整数,表示这一年这个月有多少天。
示例1
输入:
2008 2
输出:
29
参考代码:
#include <stdio.h>
int main()
{
int year=0;
int month=0;
int ar[13]={29,31,28,31,30,31,30,31,31,30,31,30,31};//这里我们定义13个元素,
//将ar[0]存放29即闰年二月的天数
while(~scanf("%d %d",&year, &month))
{
if ((year % 400 == 0 ) || (year % 100 != 0 && year % 4 == 0))//判断是否为闰年
{
if(month==2)//是闰年后再判断是否为二月,如果是则输出ar[0]
{
printf("%d",ar[0]);
}
}
else
printf("%d",ar[month]);
}
return 0;
}
代码解析: 1. 多组输入 2. 判断闰年,如果是闰年,2月多一天,其他都正常
描述
KiKi实现一个简单计算器,实现两个数的“加减乘除”运算,用户从键盘输入算式“操作数1运算符操作数2”,计算并输出表达式的值,如果输入的运算符号不包括在(+、-、*、/)范围内,输出“Invalid operation!”。当运算符为除法运算,即“/”时。如果操作数2等于0.0,则输出“Wrong!Division by zero!”
数据范围:字符串长度满足 3≤n≤50 ,保证运算符是一个char类型字符。
输入描述:
输入一行字符串,操作数1+运算符+操作数2 (其中合法的运算符包括:+、-、*、/)。
输出描述:
输出为一行。
如果操作数和运算符号均合法,则输出一个表达式,操作数1运算符操作数2=运算结果,各数小数点后均保留4位,数和符号之间没有空格。
如果输入的运算符号不包括在(+、-、*、/)范围内,输出“Invalid operation!”。当运算符为除法运算,即“/”时。
如果操作数2等于0.0,则输出“Wrong!Division by zero!”。
示例1
输入:
1.0+3.0
输出:
1.0000+3.0000=4.0000
参考代码:
#include <stdio.h>
int main()
{
double a=0;
double b=0;
char c=0;
scanf("%lf%c%lf",&a,&c,&b);
switch(c)//本题输出一个运算符就要进行相对应的计算,类似一把钥匙开一把锁。所以我们用的switch函数
{
case '+':
printf("%.4lf%c%.4lf=%.4lf",a,c,b,a+b);
break;
case '-':
printf("%.4lf%c%.4lf=%.4lf",a,c,b,a-b);
case '*':
printf("%.4lf%c%.4lf=%.4lf",a,c,b,a*b);
break;
case '/':
if (b==0.0) {
printf("Wrong!Division by zero!");
}
else
printf("%.4lf%c%.4lf=%.4lf",a,c,b,a/b);//这里我们定义的为浮点型,所以会输余数。
break;
default:
printf("Invalid operation!");
}
return 0;
}
代码解析: 1. 多组输入 2. 按照格式接收,按照要求编写代码就行 3. switch语句 参考:https://blog.csdn.net/qq_53086187/article/details/123919259
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的线段图案。
输入描述:
多组输入,一个整数(1~100),表示线段长度,即“*”的数量。
输出描述:
针对每行输入,输出占一行,用“*”组成的对应长度的线段。
示例1
输入:
10
2
输出:
**********
**
参考代码:
#include <stdio.h>
int main() {
int n=0;
while(~scanf("%d",&n))
{int i=0;
for (i=0;i<n; i++)
{
printf("*");
}
printf("\n");
}
return 0;
}
答案解析: 1. 多组输入 2. 每次打印一个*,按照输入的个数打印后换行就行
描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的正方形图案。
输入描述:
多组输入,一个整数(1~20),表示正方形的长度,也表示输出行数。
输出描述:
针对每行输入,输出用“*”组成的对应边长的正方形,每个“*”后面有一个空格。
示例1
输入:
4
输出:
* * * *
* * * *
* * * *
* * * *
参考代码:
#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;
//每一行的打印,打印n组*+空格
for(j=0; j<n; j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
答案解析: 1. 多组输入 2. 每组是由n组*+空格组成
描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的直角三角形图案。
输入描述:
多组输入,一个整数(2~20),表示直角三角形直角边的长度,即“*”的数量,也表示输出行数。
输出描述:
针对每行输入,输出用“*”组成的对应长度的直角三角形,每个“*”后面有一个空格。
示例1
输入:
4
输出:
*
* *
* * *
* * * *
参考代码:
#include <stdio.h>
int main()
{
int n=0;
while(~scanf("%d",&s))
{
int i=0;
for(i=0;i++;i<n)//确定要输出的行数
{
int j=0;
for(j=0;j<=i;j++)//每行输入* 的个数,因为第一行一个依次每行递增,所以使j<=i
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
答案解析: 1. 多组输入 2. 每一行的输出要有计算清楚
描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的翻转直角三角形图案。
输入描述:
多组输入,一个整数(2~20),表示翻转直角三角形直角边的长度,即“*”的数量,也表示输出行数。
输出描述:
针对每行输入,输出用“*”组成的对应长度的翻转直角三角形,每个“*”后面有一个空格。
示例1
输入:5
输出:
* * * * *
* * * *
* * *
* *
*
参考代码:
#include <stdio.h>
int main()
{
int n=0;
while (~scanf("%d",&n))
{
int i=0;
for (i=0; i<n; i++)
{int j=0;
for (j=0; j<n-i; j++)
{
printf("* ");//这里注意空格
}
printf("\n");
}
}
return 0;
}
答案解析: 1. 多组输入 2. 每两个*中间有空格,要注意 3. 控制好一行输出的内容
描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的带空格直角三角形图案。
输入描述:
多组输入,一个整数(2~20),表示直角三角形直角边的长度,即“*”的数量,也表示输出行数。
输出描述:
针对每行输入,输出用“*”组成的对应长度的直角三角形,每个“*”后面有一个空格。
示例1
输入:
5
输出:
*
* *
* * *
* * * *
* * * * *
参考代码:
//代码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-1-i; j++)
{
printf(" ");
}
//*
for(j=0; j<=i; j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
//代码2
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d", &n) != EOF)
{
int i = 0;
int j = 0;
//行数
for(i=0; i<n; i++)
{
//一行
for(j=0; j<n; j++)
{
//行和列的和
//这里可以把行数和列数标出来就能看明白
if(i+j<n-1)
{
printf(" ");
}
else
{
printf("* ");
}
}
printf("\n");
}
}
return 0;
}
答案解析:
1. 多组输入
2. 方法2中i+j<n-1理解的配图
在红色三角范围内的每个坐标上,横纵坐标之和小于n-1的。
方法二解析:
法二我们用到了二维数组的知识,把整个三角形放到二维数组中观察、
用坐标来代表每个空格的位置,我们可以看到每个横坐标+纵坐标<n-1的位置输入的全是空格,
其余位置全是'* '(不要省略空格)
因此我们在写代码的时候可以当作输出一个二维数组(两个for循环)这个二维数组的行和列
都为n(要输入的数)的正方形,所以我们可以写:如果(i+j<n-1)则输入空格,否则输入‘* ’。
(此题告诉我们在输出图形的时候可以考虑利用数组的知识,通过坐标来输入自己想表达的图形,后期的题中也会用到这个知识希望大家好好理解吸收一定要实践)
描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的金字塔图案。
输入描述:
多组输入,一个整数(2~20),表示金字塔边的长度,即“*”的数量,,也表示输出行数。
输出描述:
针对每行输入,输出用“*”组成的金字塔,每个“*”后面有一个空格。
示例1
输入:
4
输出:
*
* *
* * *
* * * *
参考代码:
#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-1-i; j++)
{
printf(" ");
}
//*
for(j=0; j<=i; j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
答案解析: 1. 多组输入 2. 每一行的前边应该是空格,后边是*+空格,控制好个数就行
本期结束:已经更新到第六期了,如果各位看客觉得有什么建议,以及更好的方法可以私信,也可以评论
博主一定会好好吸收大家的建议。
下一期 log in…………
文章主要参考比特就业课-鹏哥c语言训练营,文章内容及排版格式也参考比特课程的课件;