C语言练习题110例(五)

C语言练习

41.计算单位阶跃函数

题目描述:

KK最近学习了信号与系统课程,这门课里有一个非常有趣的函数,单位阶跃函数,其中一种定义方式为:

                            <img title="" src="file:///C:/Users/cheng/Desktop/CSDN/%E8%B4%B4%E5%9B%BE/%E5%8D%95%E4%BD%8D%E9%98%B6%E8%B7%83%E5%87%BD%E6%95%B0.PNG" alt="" style="zoom:50%;">

输入描述:

题目有多组输入数据,每一行输入一个t(-1000<t<1000)表示函数的时域t。

输出描述:

输出函数的值并换行。

输入:

11

0

-11

输出:

1

0.5

0

参考代码:

#include <stdio.h>

int main()
{
    int t = 0;
    while (~scanf("%d", &t))
    {
        if (t > 0)
            printf("%d\n", 1);
        else if(t<0)
            printf("%d\n", 0);
        else
            printf("%.1lf\n", 0.5f);
    }
    return 0;
}

42.三角形判断

题目描述:

KK想知道已经给出的三条边a,b,c能否构成三角形,如果能构成三角形,判断三角形的类型(等边三角形、等腰三角形或普通三角形)。

输入描述:

题目有多组输入数据,每一行输入三个a,b,c(0<a,b,c<1000),作为三角形的三个边,用空格分隔。

输出描述:

针对每组输入数据,输出占一行,如果能构成三角形,等边三角形则输出“Equilateral triangle!”,等腰三角形则输出“Isosceles triangle!”,其余的三角形则输出“Ordinary triangle!”,反之输出“Not a triangle!”。

输入:

2 3 2

3 3 3

输出:

Isosceles triangle!

Equilateral triangle!

参考代码:

#include <stdio.h>

int main()
{
    int a = 0;
    int b = 0;
    int c = 0;
    while (scanf("%d %d %d", &a, &b, &c) != EOF)
    {
        if (a + b > c || a + c > b || c + b > a)
        {
            if (a == b && b == c)
            {
                printf("Equilateral triangle!\n");
            }
            else if ((a==b && a!= c) || (a==c && a!=b) ||(b==c  &&  b!= a))
            {
                printf("Isosceles triangle!\n");
            }
            else
            {
                printf("Ordinary triangle!\n");
            }
        }
        else
        {
                printf("Not a triangle!\n");
        }
    }
    return 0;
}

43.衡量人体胖瘦程度

题目描述:

在计算BMI(BodyMassIndex ,身体质量指数)的案例基础上,判断人体胖瘦程度。BMI中国标准如下表所示。

BMI范围分类
BMI<18.5偏瘦(Underweight)
BMI>=18.5且BMI<=23.9正常(Normal)
BMI>23.9且BMI<=27.9过重(Overweight)
BMI>27.9肥胖(Obese)

输入描述:

多组输入,每一行包括两个整数,用空格隔开,分别为体重(公斤)和身高(厘米)。

输出描述:

针对每行输入,输出为一行,人体胖瘦程度,即分类。

输入:

80 170

60 170

90 160

50 185

输出:

Overweight

Normal

Obese

Underweight

参考代码:

#include <stdio.h>

int main()
{
    int h = 0;
    int w = 0;
    double bmi = 0.0;
    while (scanf("%d %d", &w, &h) != EOF)
    {
        bmi = w / ((h / 100.0) * (h / 100.0));
        if (bmi < 18.9)
            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;
}

44.计算一元二次方程

题目描述:

从键盘输入a, b, c的值,编程计算并输出一元二次方程ax2 + bx + c = 0的根,当a = 0时,输出“Notquadratic equation”,当a ≠ 0时,根据△ = b2 - 4ac的三种情况计算并输出方程的根。

输入描述:

多组输入,一行,包含三个浮点数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 / (2a),虚部= sqrt(-△ ) / (2a)所有实数部分要求精确到小数点后2位,数字、符号之间没有空格。

示例1

输入:

2.0 7.0 1.0

输出:

x1=-3.35;x2=-0.15

示例2

输入:

0.0 3.0 3.0

输出:

Not quadratic equation

示例3

输入:

1 2 1

输出:

x1=x2=-1.00

示例4

输入:

2 2 5

输出:

x1=-0.50-1.50i;x2=-0.50+1.50i

示例5

输入:

1 0 1

输出:

x1=0.00-1.00i;x2=0.00+1.00i

参考代码:

#include <stdio.h>
#include <math.h>

int main()
{
    float a = 0.0;
    float b = 0.0;
    float c = 0.0;
    double x1 = 0;
    double x2 = 0;
    while (scanf("%f %f %f", &a, &b, &c) != EOF)
    {
        if (a == 0)
        {
            printf("Not quadratic equation\n");
        }
        else
        {
            float disc = b * b - 4 * a * c;
            if (disc == 0)
            {
                printf("x1=x2=%.2f\n", (-b)/ (2 * a));
            }
            else if (disc > 0.0)
            {
                printf("x1=%.2f;x2=%.2f\n", (-b - sqrt(disc)) / (2 * a), (-b + sqrt(disc)) / (2 * a));
            }
            else
            {
                printf("x1=%.2lf-%.2lfi;x2=%.2lf+%.2lfi\n",(-b)/(2 * a),sqrt(-disc)/(2 * a),(-b)/ (2 * a),sqrt(-disc)/(2 * a));
            }
        }
    }
    return 0;
}

45.获得月份天数

题目描述:

KK想获得某年某月有多少天,请帮他编程实现。输入年份和月份,计算这一年这个月有多少天。

输入描述:

多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。

输出描述:

针对每组输入,输出为一行,一个整数,表示这一年这个月有多少天。

输入:

2008 2

输出:

29

参考代码:

#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;
}

46.简单计算器

题目描述:

KK实现一个简单计算器,实现两个数的“加减乘除”运算,用户从键盘输入算式“操作数1运算符操作数2”,计算并输出表达式的值,如果输入的运算符号不包括在(+、-、*、/)范围内,输出“Invalidoperation!”。当运算符为除法运算,即“/”时。如果操作数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 x1 = 0;
    double x2 = 0;
    char ch = 0;
    while (scanf("%lf%c%lf", &x1, &ch, &x2) != EOF)
    {
        switch (ch)
        {
        case '+':
            printf("%.4lf%c%.4lf=%.4lf\n", x1, ch, x2, x1+x2);
            break;
        case '-':
            printf("%.4lf%c%.4lf=%.4lf\n", x1, ch, x2, x1- x2);
            break;
        case '*':
            printf("%.4lf%c%.4lf=%.4lf\n", x1, ch, x2, x1 * x2);
            break;
        case '/':
            if (x2 == 0.0)
            {
                printf("Wrong!Division by zero!\n");
                break;
            }
            printf("%.4lf%c%.4lf=%.4lf\n", x1, ch, x2, x1 / x2);
            break;
        default:
            printf("Invalid operation!\n");
            break;
        }
    }
    return 0;
}

47.线段图案

题目描述:

KK学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的线段图案。

输入描述:

多组输入,一个整数(1~100),表示线段长度,即“*“的数量。

输出描述:

针对每行输入,输出占一行,用“*”组成的对应长度的线段。

输入:

10

2

输出:

**********
**

参考代码:

#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");
    }
}

48.正方形图案

题目描述:

KK学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的正方形图案。

输入描述:

多组输入,一个整数(1~20),表示正方形的长度,也表示输出行数。

输出描述:

针对每行输入,输出用“”组成的对应边长的正方形,每个“”后面有一个空格。

输入:

5

输出:

* * * * *
* * * * *
* * * * *
* * * * *
* * * * *

参考代码:

#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;
}

49.直角三角形图案

题目描述:

KK学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的直角三角形图案。

输入描述:

多组输入,一个整数(2~20),表示直角三角形直角边的长度,即“*”的数量,也表示输出行数。

输出描述:

针对每行输入,输出用“”组成的对应长度的直角三角形,每个“”后面有一个空格。

输入:

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 <= i; j++)
            {
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

50.翻转直角三角形图案

题目描述:

KK学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的翻转直角三角形图案。

输入描述:

多组输入,一个整数(2~20),表示翻转直角三角形直角边的长度,即“*”的数量,也表示输出行数。

输出描述:

针对每行输入,输出用“”组成的对应长度的翻转直角三角形,每个“”后面有一个空格。

输入:

5

输出:

* * * * *
* * * *
* * *
* *
*

参考代码:

#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;
}

C语言练习题110例【51-60】

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值