MOOC 哈工大苏小红C语言 第四周在线编程

  • Post author:
  • Post category:其他




点我查看


MOOC


苏小红C语言程序设计精髓

所有编程题



目录


1.分数比较(4分)


2.存款利率计算器v2.0(4分)


3.存款利率计算器v3.0(9分)


4.博弈论之Best Response(6分)



1.分数比较(4分)


题目内容:

利用人工方式比较分数大小的最常见的方法是:对分数进行通分后比较分子的大小。请编程模拟手工比较两个分数的大小。首先输入两个分数分子分母的值,例如”11/13,17/19″,比较分数大小后输出相应的提示信息。例如,第一个分数11/13小于第二个分数17/19,则输出”11/13<17/19″。

程序的运行结果示例1:

Input a/b, c/d:11/13,17/19↙

11/13<17/19

程序的运行结果示例2:

Input a/b, c/d:17/19,23/27↙

17/19>23/27

程序的运行结果示例3:

Input a/b, c/d:3/4,18/24↙

3/4=18/24


输入提示信息:

“Input a/b, c/d:”  (注意:逗号后面有一个空格)


输入格式:

“%d/%d,%d/%d”


输出格式:

比较的结果是大于:”%d/%d>%d/%d\n”

比较的结果是小于:”%d/%d<%d/%d\n”

比较的结果是相等:”%d/%d=%d/%d\n”

为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。

时间限制:500ms内存限制:32000kb

C

#include<stdio.h>
int main()
{
    int a, b, c, d;
    printf("Input a/b, c/d:");
    scanf("%d/%d,%d/%d", &a, &b, &c, &d);
    int k = b * d;
    int m = a * d - c * b;
    if (m == 0) {
        printf("%d/%d=%d/%d\n", a, b, c, d);
    }else if ((k > 0 &&  m > 0) ||(k < 0 && m < 0)) {
        printf("%d/%d>%d/%d\n", a, b, c, d);
    } else {
        printf("%d/%d<%d/%d\n", a, b, c, d);
    }
    return 0;
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 152kb 1
用例2通过 1ms 256kb 1
用例3通过 2ms 256kb 1
用例4通过 2ms 256kb 1


提交答案

本次得分/总分:4.00/4.00分



2.存款利率计算器v2.0(4分)


题目内容:

设capital是最初的存款总额(即本金),rate是整存整取的存款年利率,n 是储蓄的年份,deposit是第n年年底账号里的存款总额。已知如下两种本利之和的计算方式:

  • 按复利方式计息的本利之和计算公式为:

  • 按普通计息方式计算本利之和的公式为:

deposit  =  capital  * (1 + rate * n)

编程从键盘输入存钱的本金、存款期限以及年利率,然后再输入按何种方式计息,最后再计算并输出到期时能从银行得到的本利之和,要求结果保留到小数点后4位。

提示:使用数学函数需要加入头文件 <math.h>

程序的运行结果示例1:

Input rate, year, capital:0.0225,2,10000↙

Compound interest (Y/N)?Y

deposit = 10455.0625

程序的运行结果示例2:

Input rate, year, capital:0.0225,2,10000↙

Compound interest (Y/N)?n

deposit = 10450.0000


输入提示信息:

“Input rate, year, capital:”


输入提示信息:

“Compound interest (Y/N)?”


本金、存款期限以及年利率的输入格式:

“%lf,%d,%lf”


是否选择复利计算的输入格式:

” %c” (注意:%c的前面有一个空格。输入的字符大小写皆可,即Y或y,N或n皆可)


输出格式:

“deposit = %.4f\n”

为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。

时间限制:500ms内存限制:32000kb

C

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


int main()
{
    double capital;
    int year;
    double rate;
    double deposit;
    printf("Input rate, year, capital:");
    scanf("%lf,%d,%lf", &rate, &year, &capital);
    printf("Compound interest (Y/N)?");
    char ch;
    scanf(" %c", &ch);
    if (ch == 'y' || ch == 'Y') {
        deposit = capital * pow(1 + rate, year);
    } else {
        deposit =  capital * (1 + rate * year);
    }

    printf("deposit = %.4f\n", deposit);
    return 0;
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 256kb 1
用例2通过 1ms 256kb 1
用例3通过 1ms 256kb 1
用例4通过 1ms 256kb 1


提交答案

本次得分/总分:4.00/4.00分



3.存款利率计算器v3.0(9分)


题目内容:

设capital是最初的存款总额(即本金),rate是整存整取的存款年利率,n 是储蓄的年份,deposit是第n年年底账号里的存款总额。已知如下两种本利之和的计算方式:

  • 按复利方式计息的本利之和计算公式为:

  • 按普通计息方式计算本利之和的公式为:

deposit  =  capital  * (1 + rate * n)

已知银行整存整取不同期限存款的年息利率分别为:

存期1年,利率为 0.0225

存期2年,利率为 0.0243

存期3年,利率为 0.0270

存期5年,利率为 0.0288

存期8年,利率为 0.0300

若输入其他年份,则输出”Error year!”

编程从键盘输入存钱的本金和存款期限,然后再输入按何种方式计息,最后再计算并输出到期时能从银行得到的本利之和,要求结果保留到小数点后4位。

程序的运行结果示例1:

Input capital, year:10000,2↙

Compound interest (Y/N)?Y↙

rate = 0.0243, deposit = 10491.9049

程序的运行结果示例2:

Input capital, year:10000,2↙

Compound interest (Y/N)?n↙

rate = 0.0243, deposit = 10486.0000

程序的运行结果示例3:

Input capital, year:1000,4↙

Compound interest (Y/N)?y↙

Error year!


输入提示信息:

“Input capital, year:”


输入提示信息:

“Compound interest (Y/N)?”


存期输入错误的提示信息:

“Error year!\n”


本金



存款期限的输入格式:

“%lf,%d”


是否选择复利计算的输入格式:

” %c” (注意:%c的前面有一个空格。输入的字符大小写皆可,即Y或y,N或n皆可)


输出格式:

“rate = %.4f, deposit = %.4f\n”

为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。

时间限制:500ms内存限制:32000kb

C

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

double getRate(int year) {
    double rate;
    switch (year) {
        case 1:
            rate = 0.0225;
            break;
        case 2:
            rate = 0.0243;
            break;
        case 3:
            rate = 0.0270;
            break;
        case 5:
            rate = 0.0288;
            break;
        case 8:
            rate =  0.0300;
            break;
        default:
            rate = -1.0;
    }
    return rate;
}

int main() {
    double capital;
    int year;
    double rate;
    double deposit;
    printf("Input capital, year:");
    scanf("%lf,%d", &capital, &year);
    printf("Compound interest (Y/N)?");
    char ch;
    scanf(" %c", &ch);
    rate = getRate(year);
    if (rate == -1) {
        printf("Error year!\n");
        return 0;
    }
    if (ch == 'y' || ch == 'Y') {
        deposit = capital * pow(1 + rate, year);
    } else {
        deposit = capital * (1 + rate * year);
    }

    printf("rate = %.4f, deposit = %.4f\n",rate,  deposit);
    return 0;
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 256kb 1
用例2通过 15ms 256kb 1
用例3通过 2ms 256kb 1
用例4通过 2ms 256kb 1
用例5通过 1ms 256kb 1
用例6通过 2ms 256kb 1
用例7通过 1ms 128kb 1
用例8通过 2ms 256kb 1
用例9通过 2ms 256kb 1


提交答案

本次得分/总分:9.00/9.00分



4.博弈论之Best Response(6分)


题目内容:

在博弈论中,有一种决策称为Best Response,通俗的意思就是选择一种策略使得团体利益最大化。C语言学习成绩的评定方式分为两种,一种是自由刷题模式(compete),没有固定标准,刷题越多者排名越靠前,其期末分数越高;另一种是规定每个人必须做够多少道题(standard),达到要求就能取得相应分数。

假设一个班级中的学生分为A、B两类,A类同学学习热情很高,乐于做题,采用compete模式可以获得成就感并且在期末拿到高分,compete模式可以让他们有10分的收益;采用standard模式他们也可以在期末拿到高分,但不能满足他们的求知欲,standard模式可以让他们有8分的收益。B类同学仅仅希望期末拿高分,如果采用compete模式,他们竞争不过A类同学,期末成绩不理想,因此compete模式能给他们6分的收益;如果采用standard模式,他们可以完成规定任务并拿到高分,因此standard模式可以让他们有10分的收益。

编程输入A类和B类同学分别占班级总人数的百分比,分别计算并输出采用compete和standard两种刷题模式下的全班总收益,并输出这个班级在这场博弈中的Best Response是哪种模式。

注: 程序中使用的数据类型为float

程序运行结果示例1:

Input percent of A and B:0.2 0.8↙

compete = 6.8000

standard = 9.6000

The Best Response is standard!

程序运行结果示例2:

Input percent of A and B:0.8 0.2↙

compete = 9.2000

standard = 8.4000

The Best Response is compete!

程序运行结果示例3:

Input percent of A and B:0.5 0.5↙

compete = 8.0000

standard = 9.0000

The Best Response is standard!


输入提示信息:

“Input percent of A and B:”


输入格式:

“%f%f”


输出格式:

“compete = %.4f\nstandard = %.4f\n”

输出提示信息:”The Best Response is compete!”

输出提示信息:”The Best Response is standard!”

为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。

时间限制:500ms内存限制:32000kb

C

#include<stdio.h>

main() {
    float a, b, compete, standard;
    printf("Input percent of A and B:");
    scanf("%f%f", &a, &b);
    compete = a * 10 + b * 6;
    standard = a * 8 + b * 10;
    printf("compete = %.4f\nstandard = %.4f\n", compete, standard);
    if (compete >= standard) {
        printf("The Best Response is compete!");
    } else {
        printf("The Best Response is standard!");
    }
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 1ms 256kb 1
用例2通过 1ms 256kb 1
用例3通过 2ms 256kb 1
用例4通过 2ms 256kb 1
用例5通过 2ms 256kb 1
用例6通过 1ms 256kb 1


提交答案

本次得分/总分:6.00/6.00分



版权声明:本文为weixin_38233103原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。