2021-12-06 自动化专业C语言上机作业参考答案05

上机练习05

p141.c

/*
编写一程序P141.C实现以下功能
  从键盘输入4个整数,输出最大的一个数。
    编程可用素材:
        printf("请输入4个整数: ");
        printf("\n最大的数是 …\n"…);
*/
#include <stdio.h>

int main(void)
{
    int d1, d2, d3, d4;
    int max;

    printf("请输入4个整数: ");

    scanf("%d, %d, %d, %d", &d1, &d2, &d3, &d4);

    // 人工打擂
    max = d1;
    if (max < d2)
    {
        max = d2;
    }
    if (max < d3)
    {
        max = d3;
    }
    if (max < d4)
    {
        max = d4;
    }

    printf("\n最大的数是 %d\n", max);

    return 0;
}

p260.c

/*
编写一程序P260.C实现以下功能
  从键盘读入3个整数,按由小到大的顺序输出这3个数。编程可用素材:printf("请输入3个数:")、printf("\n这三个数由小到大为: %d   %d   %d\n"…。
*/
#include <stdio.h>

int main(void)
{
    int d1, d2, d3;
    int tmp;

    printf("请输入3个数:");

    scanf("%d %d %d", &d1, &d2, &d3);
    // 让d1中是最小的,让d3中是最大的
    if (d1 > d2)
    {
        tmp = d1;
        d1 = d2;
        d2 = tmp;
    }
    if (d1 > d3)
    {
        tmp = d1;
        d1 = d3;
        d3 = tmp;
    }
    if (d3 < d2)
    {
        tmp = d3;
        d3 = d2;
        d2 = tmp;
    }
    printf("\n这三个数由小到大为: %d   %d   %d\n", d1, d2, d3);
    return 0;
}

/*
    但上面的算法,有一个缺点:再也不知道原来的d1,d2,d3是哪个数了
*/

p270.c

/*
编写一程序P270.C实现以下功能
  从键盘读入3个实数,按由大到小的顺序输出这3个数。编程可用素材:printf("请输入3个数:")、printf("\n这三个数由大到小为: %.2f   %.2f   %.2f\n"…。
*/
#include <stdio.h>

int main(void)
{
    float d1, d2, d3;
    float tmp;

    printf("请输入3个数:");

    scanf("%f %f %f", &d1, &d2, &d3);
    // 让d1中是最小的,让d3中是最大的,人工比较,排位
    if (d1 > d2)
    {
        tmp = d1;
        d1 = d2;
        d2 = tmp;
    }
    if (d1 > d3)
    {
        tmp = d1;
        d1 = d3;
        d3 = tmp;
    }
    if (d3 < d2)
    {
        tmp = d3;
        d3 = d2;
        d2 = tmp;
    }
    printf("\n这三个数由大到小为: %.2f   %.2f   %.2f\n", d3, d2, d1);
    return 0;
}

p702.c

/*
编写一程序P702.C实现以下功能
  输入月份,输出2003年该月有几天。
    当输入的月份超范围时,应输出“Invalid month input”。
    编程可用素材:
        printf("please input the month number: ");
        printf("\nInvalid month input !\n");
        printf("\n2003.… has … days\n"…);
*/
#include <stdio.h>

int main(void)
{
    int month;
    int days;
    printf("please input the month number: ");
    scanf("%d", &month);
    if (month > 12 || month < 0)
    {
        printf("\nInvalid month input !\n");
    }
    else
    {
        // 求出该月对应的天数
        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
        {
            days = 31;		// 大月
        }
        else if (month == 4 || month == 6 || month == 9 || month == 11)
        {
            days = 30;		// 小月
        }
        else
        {
            days = 28;		// 平年二月,因为2003年是平年
        }

        printf("\n2003.%d has %d days\n", month, days);
    }
    return 0;
}

p703.c

/*
编写一程序P703.C实现以下功能
  已知某公司员工的保底薪水为500,某月所接工程的利润profit(整数)与利润提成的关系如下(计量单位:元):
        profit≤1000           没有提成;
        1000<profit≤2000        提成10%;
        2000<profit≤5000        提成15%;
        5000<profit≤10000       提成20%;
        10000<profit          提成25%。
  请根据输入的利润计算员工的薪水。
编程可用素材:
    printf("Input  profit: ");
    printf("\nsalary=…\n"…);
*/
#include <stdio.h>

int main(void)
{
    int profit;
    double salary = 500.0;
    printf("Input  profit: ");
    scanf("%d", &profit);
    // 处理提成
    if (profit > 1000 && profit <= 2000)	// 注意左开右闭区间的表达
    {
        // 1000<profit≤2000        提成10%;
        salary += profit * 0.1;
    }
    else if (profit > 2000 && profit <= 5000)
    {
        // 2000<profit≤5000        提成15%;
        salary += profit * 0.15;
    }
    else if (profit > 5000 && profit <= 10000)
    {
        // 5000<profit≤10000       提成20%;
        salary += profit * 0.2;
    }
    else if (profit > 10000)
    {
        // 10000<profit          提成25%。
        salary += profit * 0.25;
    }

    printf("\nsalary=%.2lf\n", salary);
    return 0;
}

p712.c

/*
编写一程序P712.C实现以下功能
  判断输入的正整数是否既是5又是7的整倍数,若是,则输出“Yes.”;否则输出“No.”。
编程可用素材:
    printf("Please input an integer: ");
    printf("\nYes.");
    printf("\nNo.");
*/
#include <stdio.h>

int main(void)
{
    int data;

    printf("Please input an integer: ");
    scanf("%d", &data);
    if (data % 5 == 0 && data % 7 == 0)	// 多条件,用逻辑运算组合
    {
        printf("\nYes.");
    }
    else
    {
        printf("\nNo.");
    }

    return 0;
}

p713.c

/*
编写一程序P713.C实现以下功能
  用scanf输入某年某月某日,判断这一天是这一年的第几天?以3月5日为例,应该先把前两个月的加起来,
然后再加上5天即本年的第几天,特殊情况,闰年且输入月份≥3时需考虑多加一天。
注:
    判断年份是否为闰年的方法——为400的倍数为闰年,如2000年;
    若非100的倍数,而是4的倍数,为闰年,如1996年。
编程可用素材:
    printf("Please input year-month-day: ");
    printf("\nIt is the ...th day.\n"...);

思路要求:
    1. 不要把简单的问题,复杂化了
    2. 注意优化自己的程序,如短路运算
    3. 有了数组以后,可以直接打月份的天数列出来使用
*/
#include <stdio.h>

int main(void)
{
    int year, month, day;
    int sumdays = 0;

    printf("Please input year-month-day: ");
    scanf("%d-%d-%d", &year, &month, &day);
    // 先计算之前的月份的天数
    switch (month)
    {
    case 1:
        sumdays = 0;
        break;
    case 2:
        sumdays = 31;
        break;
    case 3:
        sumdays = 59;
        break;
    case 4:
        sumdays = 90;
        break;
    case 5:
        sumdays = 120;
        break;
    case 6:
        sumdays = 151;
        break;
    case 7:
        sumdays = 181;
        break;
    case 8:
        sumdays = 212;
        break;
    case 9:
        sumdays = 243;
        break;
    case 10:
        sumdays = 273;
        break;
    case 11:
        sumdays = 304;
        break;
    case 12:
        sumdays = 334;
        break;
    default:
        printf("data error!\n");
        break;
    }
    // 再算上该月的天数
    sumdays += day;
    // 如果闫年,且包含有2月
    if (month > 2 && (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)))
    {
        sumdays++;
    }

    printf("\nIt is the %dth day.\n", sumdays);
    return 0;
}

p723.c

/*
编写一程序P723.C实现以下功能
    输入三角形的三边长a、b、c(边长可以是小数),求三角形面积area,并输出。
    如果输入的三边构不成三角形,应给出“data error”的信息提示。
    注:根据“海伦-秦九韶”公式,area=√p(p-a)(p-b)(p-c),其中p=(a+b+c)/2。
    编程可用素材:
        printf("please input triange sides: ")、
        printf("\ndata error\n")、printf("\narea=…\n"…。
    程序的运行效果应类似地如图1和图2所示,图中的红色部分是从键盘输入的内容。
            please input triange sides: 3, 4, 5

            area=6.00

    图1 程序运行效果示例
            please input triange sides: 3, 4, 8

            data error
*/

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

int main(void)
{
    double edgeA, edgeB, edgeC;
    double circle, semi_circle;
    double area;

    printf("please input triange sides: ");
    scanf("%lf, %lf, %lf", &edgeA, &edgeB, &edgeC);

    // 如果不能构成三角形,这就是防御性设计
    if (((edgeA + edgeB) <= edgeC) || ((edgeA + edgeC) <= edgeB) || ((edgeC + edgeB) <= edgeA))
    {
        printf("\ndata error\n");
    }
    else
    {
        // 可以构成三角形
        circle = edgeA + edgeB + edgeC;
        semi_circle = circle / 2;
        area = sqrt(semi_circle * (semi_circle - edgeA) * (semi_circle - edgeB) * (semi_circle - edgeC));

        printf("area=%.2lf", area);
    }

    return 0;
}

/*
	分析:
	1. 在以后的程序中,有很多程序动作, 是有前提条件的,当条件不满足时,做这个动作是没有意义的
		比如这里的三角形求面积,如果都已经不能构成三角形了,面积本身也就没有意义了
		无意义的事情,计算机是无法完成的
	2. 程序是为了解决问题而编写的,是依赖于合理的算法写出来的,算法不合理时,程序肯定会有问题
	3. if作为一个开关,试先置于程序开头或是检查节点部分,是以后设计程序时的一种常用思路
*/

p729.c

/*
编写一程序P729.C实现以下功能
  输入x,y两个整数,输出其中较大的数。
    编程可用素材:
        printf("please input x, y: ")、
        printf("\n… is bigger\n"…。
  程序的运行效果应类似地如图1所示,图中的红色部分是从键盘输入的内容。
        please input x, y: 7, 8

        8 is bigger
*/

#include <stdio.h>

int main(void)
{
    int data1, data2;

    printf("please input x, y: ");
    scanf("%d, %d", &data1, &data2);

    if (data1 >= data2)
    {
        printf("\n%d is bigger\n", data1);
    }
    else
    {
        printf("\n%d is bigger\n", data2);
    }

    return 0;
}

p730.c

/*
编写一程序P730.C实现以下功能
  输入两个整数,如果相等输出yes ,否则输出no。
    编程可用素材:
        printf("please input x y: ")、
        printf("\nyes")、printf("\nno")。
  程序的运行效果应类似地如图1所示,图中的红色部分是从键盘输入的内容。
        please input x y: 5 6

        no

*/

#include <stdio.h>

int main(void)
{
    int data1, data2;
    printf("please input x y: ");
    scanf("%d %d", &data1, &data2);
    if (data1 == data2)
    {
        printf("\nyes\n");
    }
    else
    {
        printf("\nno\n");
    }

    return 0;
}

  • 3
    点赞
  • 3
    收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论

打赏作者

风车车的大表哥

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值