C语言编程入门之刷题篇(C语言130题)(6)

(题目标题可以直接转题目链接)

BC52 衡量人体胖瘦程度


描述

在计算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. 浮点数除法要保证除号的两端至少有一个浮点数

BC53 计算一元二次方程


描述

从键盘输入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求根函数的使用方法及头文件。

BC54 获得月份天数


描述

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月多一天,其他都正常

BC55 简单计算器


描述

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 版权协议,转载请附上原文出处链接和本声明。

BC56 线段图案


描述

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. 每次打印一个*,按照输入的个数打印后换行就行

BC57 正方形图案


描述

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组*+空格组成

BC58 直角三角形图案


描述

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. 每一行的输出要有计算清楚

BC59 翻转直角三角形图案


描述

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. 控制好一行输出的内容

BC60 带空格直角三角形图案


描述

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)则输入空格,否则输入‘* ’。

(此题告诉我们在输出图形的时候可以考虑利用数组的知识,通过坐标来输入自己想表达的图形,后期的题中也会用到这个知识希望大家好好理解吸收一定要实践)

BC61 金字塔图案


描述

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语言训练营,文章内容及排版格式也参考比特课程的课件;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cocobol0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值