
🔥个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》、《数据结构与算法》、C语言刷题12天IO强训 🍉学习方向:C/C++方向 ⭐️人生格言:为天地立心,为生民立命,为往圣继绝学,为万世开太平
前言:上一篇博客又带大家刷了一些相对来说简单的代码题目,本篇文章我们将继续练习下面的题目。刷前提醒:从本文开始会有大量图案打印题,有的题目挖了大坑,大家做的时候要留意,如果做不出来,看了代码演示后要自己多敲几遍,去理解代码的逻辑。 宇宙安全声明:鉴于博主能力有限,本专栏适用于代码小白刷题,大佬们多多包涵(抱拳)!


这道题没什么好说的,我们输入时可以是整型也可以是浮点型,都可以,博主都展示一下——
(1)浮点型:
#include <stdio.h>
int main()
{
float weight = 0.0;
float height = 0.0;
while(scanf("%f %f",&weight,&height) != EOF)
{
double bmi = weight/(height*height/100/100);
if(bmi < 18.5)
{
printf("%s\n","Underweight");
}
else if(bmi >= 18.5 && bmi <= 23.9)
{
printf("%s\n","Normal");
}
else if(bmi > 23.9 && bmi <= 27.9)
{
printf("%s\n","Overweight");
}
else if(bmi > 27.9)
{
printf("%s\n","Obese");
}
}
return 0;
}(2)整型 :
#include <stdio.h>
int main()
{
int weight = 0;
int height = 0;
while (scanf("%d %d", &weight, &height) != EOF)
{
double bmi = weight / (height * height / 100.0 / 100.0);
if (bmi < 18.5)
{
printf("%s\n", "Underweight");
}
else if (bmi >= 18.5 && bmi <= 23.9)
{
printf("%s\n", "Normal");
}
else if (bmi > 23.9 && bmi <= 27.9)
{
printf("%s\n", "Overweight");
}
else if (bmi > 27.9)
{
printf("%s\n", "Obese");
}
}
return 0;
}1、本题是多组输入; 2、浮点数除法要保证除号的两端至少有一个浮点数,也就是说,要不除数是浮点数,要不被除数是浮点数,或者都是浮点数,反正至少得有一个是浮点数 。

#include <stdio.h>
#include <math.h>
int main()
{
float a = 0.0;
float b = 0.0;
float c = 0.0;
while (scanf("%f %f %f", &a, &b, &c) != EOF)
{
if (a != 0)
{
float disc = b * b - 4 * a * c;
if (disc > 0.0)
{
printf("x1=%.2f;x2=%.2f\n",
(-b - sqrt(disc)) / (2 * a),
(-b + sqrt(disc)) / (2 * a)
);
}
else if (disc < 0.0)
{
printf("x1=%.2f-%.2fi;x2=%.2f+%.2fi\n",
(-b) / (2 * a), sqrt(-disc) / (2 * a),
(-b) / (2 * a), sqrt(-disc) / (2 * a));
}
else
{
printf("x1=x2=%.2f\n", (-b) / (2 * a)+0.00);
}
}
else
{
printf("Not quadratic equation\n");
}
}
return 0;
}1、多组输入; 2、根据不同的限制条件给出相应的计算结果; 3、小点数后位数有限制。
这道题要结合我们学过的求闰年来写,不会求闰年的可以去看我的这篇博客——
掌握分支与循环(一):if语句、三种操作符、switch语句

1、还是多组输入 ; 2、判断闰年,如果是闰年,2月多一天,其他都正常——
#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;
}
#include <stdio.h>
int main()
{
double n1 = 0.0;
double n2 = 0.0;
char operation = '0';
while(scanf("%lf %c %lf",&n1,&operation,&n2) != EOF)
{
switch(operation)
{
case'+':
printf("%.4lf+%.4lf=%.4lf",n1,n2,n1+n2);
break;
case'-':
printf("%.4lf-%.4lf=%.4lf",n1,n2,n1-n2);
break;
case'*':
printf("%.4lf*%.4lf=%.4lf",n1,n2,n1*n2);
break;
case'/':
if(n2 == 0.0)
printf("Wrong!Division by zero!\n");
else
printf("%.4lf/%.4lf=%.4lf",n1,n2,n1/n2);
break;
default:
printf("Invalid operation!\n");
break;
}
}
return 0;
}1、多组输入; 2、按照格式接收,按照要求编写代码就行; 3、 switch语句。

1、多组输入; 2、每次打印一个*,按照输入的个数打印后换行就行 。
博主能想到的有两种写法——
写法(1):
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d",&n)!=EOF)
{
char m = '*';
for(int i = 0;i < n;i++)
{
printf("%c",m);
}
printf("\n");
}
return 0;
}写法(2):
#include<stdio.h>
int main()
{
int n = 0;
while(scanf("%d",&n)!=EOF)
{
for(int i = 0;i < n;i++)
{
printf("*");
}
printf("\n");
}
return 0;
}

1、多组输入; 2、每组是由n组*+空格组成。
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d",&n) != EOF)
{
for(int i = 0;i < n;i++)
{
for(int j = 0;j < n;j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}

1、多组输入; 2、每一行的输出要有计算清楚。
初始化成0或1都可以,for循环里相应做出改变就行了——
(1)初始化为0
#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;
}(2)初始化为1
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d",&n) != EOF)
{
int i = 0;
for(i = 1;i <= n;i++)
{
int j = 0;
for(j = 1;j <= i;j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}

1、多组输入; 2、每两个*中间有空格,要注意,之后我们可能会碰到要打印两个空格的情况; 3、控制好一行输出的内容。
(1)j++
#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 - i;j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}(2)j- -
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d",&n) != EOF)
{
int i = 0;
for(i = n;i >= 1;i--)
{
int j = 0;
for(j = i;j >= 1;j--)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}

1、多组输入; 2、写法(1)中 i + j 理解的配图 :

在红色三角范围内的每个坐标上,横纵坐标之和小于n-1的。
两种写法——
写法(1):
#define _CRT_SECURE_NO_WARNINGS 1
#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;
}写法(2):
#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-1-i;j++)
{
printf(" ");
}
for(j = 0;j <= i;j++)
{
printf("* ");
}
printf("\n");
}
}
}

1、多组输入; 2、每一行的前边应该是空格,后边是*+空格,控制好个数就行。
#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;
} 后面会有一道题考你倒金字塔,大家也要会写。
往期回顾:
【C语言刷题】第五天:继续加量加餐,代码题训练,熟练IO模式
【C语言刷题】第四天:继续加量加餐,代码题入门,熟练IO模式
【C语言刷题】第三天:继续加量加餐,代码题入门,熟练IO模式
结语:本篇文章带大家刷了十道题目,开始出现成堆的图案题了,大家要结合二维数组的图像,认真思考一下,就能想出来。本文到这里就结束了,希望对友友们有所帮助。本文的代码相对于之后的代码题还是很简单的,小白也能直接上手操作,后面的代码题难度上整体是逐渐递增的,博主控制了难度,这样友友们能比较丝滑地上手敲下去。