2025级C语言第八次周测题解

7-1 电子汪

分数 30

作者 陈越

单位 浙江大学

据说汪星人的智商能达到人类 4 岁儿童的水平,更有些聪明汪会做加法计算。比如你在地上放两堆小球,分别有 1 只球和 2 只球,聪明汪就会用“汪!汪!汪!”表示 1 加 2 的结果是 3。

本题要求你为电子宠物汪做一个模拟程序,根据电子眼识别出的两堆小球的个数,计算出和,并且用汪星人的叫声给出答案。

输入格式:

输入在一行中给出两个 [1, 9] 区间内的正整数 A 和 B,用空格分隔。

输出格式:

在一行中输出 A + B 个Wang!

输入样例:

2 1

输出样例:

Wang!Wang!Wang!

参考答案:

#include <stdio.h>
int main (void) {
    int A, B;
    scanf("%d %d", &A, &B);
    for(int i = 0; i < A + B; i++){
        printf("Wang!");
    }
    return 0;
}

7-2 进化论

分数 30

作者 陈越

单位 浙江大学

fig.jpg

在“一年一度喜剧大赛”上有一部作品《进化论》,讲的是动物园两只猩猩进化的故事。猩猩吕严说自己已经进化了 9 年了,因为“三年又三年”。猩猩土豆指出“三年又三年是六年呐”……
本题给定两个数字,以及用这两个数字计算的结果,要求你根据结果判断,这是吕严算出来的,还是土豆算出来的。

输入格式:

输入第一行给出一个正整数 N,随后 N 行,每行给出三个正整数 A、B 和 C。其中 C 不超过 10000,其他三个数字都不超过 100。

输出格式:

对每一行给出的三个数,如果 C 是 A×B,就在一行中输出 Lv Yan;如果是 A+B,就在一行中输出 Tu Dou;如果都不是,就在一行中输出 zhe du shi sha ya!

输入样例:

3
3 3 9
3 3 6
3 3 12

输出样例:

Lv Yan
Tu Dou
zhe du shi sha ya!

参考答案:

#include <stdio.h>
int main (void) {
    int N; scanf("%d", &N);
    while(N--){
        int A, B, C;
        scanf("%d %d %d", &A, &B, &C);
        if(C == A * B){
            printf("Lv Yan\n");
        }else if(C == A + B){
            printf("Tu Dou\n");
        }else{
            printf("zhe du shi sha ya!\n");
        }
    }
    return 0;
}

7-3 单词长度

分数 20

作者 翁恺

单位 浙江大学

你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。

输入格式:

输入在一行中给出一行文本,以.结束

提示:scanf("%c",...);来读入一个字符,直到读到.为止。

输出格式:

在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。

输入样例:

It's great to see you here.

输出样例:

4 5 2 3 3 4

参考答案:

#include <stdio.h>
int main (void) {
    char ch;
    int count = 0, flag = 0;
    while((ch = getchar()) != EOF){
        if(ch != ' ' && ch != '.'){
            count++;
        }else{
            if(count > 0){
                if(flag){
                    printf(" ");
                }
                printf("%d", count);
                count = 0;
                flag = 1;
            }
        }
    }
    return 0;
}

7-4 兰州牛肉面

分数 10

作者 陈越

单位 浙江大学

lamian.png

兰州牛肉面是历史悠久的美食,根据牛肉面的宽窄、配料的种类,可以细分为上百个不同的品种。你进到兰州的任何一家牛肉面馆,只说:“来一碗牛肉面!”就好像进到加州的咖啡馆说“来一杯咖啡”一样,会被店主人当成外星人……
本题的任务是,请你写程序帮助一家牛肉面馆的老板统计一下,他们一天卖出各种品种的牛肉面有多少碗,营业额一共有多少。

输入格式:

输入第一行给出一个正整数 N(≤100),为牛肉面的种类数量。这里为了简单起见,我们把不同种类的牛肉面从 1 到 N 编号,以后就用编号代替牛肉面品种的名称。第二行给出 N 个价格,第 i 个价格对应第 i 种牛肉面一碗的单价。这里的价格是 [0.01, 200.00] 区间内的实数,以元为单位,精确到分。
随后是一天内客人买面的记录,每条记录占一行,格式为:

品种编号 碗数

其中碗数保证是正整数。当对应的 品种编号0 时,表示输入结束。这个记录不算在内。

输出格式:

首先输出 N 行,第 i 行输出第 i 种牛肉面卖出了多少碗。最后一行输出当天的总营业额,仍然是以元为单位,精确到分。题目保证总营业额不超过 106。

输入样例:

5
4.00 8.50 3.20 12.00 14.10
3 5
5 2
1 1
2 3
2 2
1 9
0 0

输出样例:

10
5
5
0
2
126.70

参考答案:

#include <stdio.h>

struct Noodles{
    double price;
    int count;
};

int main (void) {
    int N;
    scanf("%d", &N);
    struct Noodles bow[N+5];
    for(int i = 1; i <= N; i++){
        scanf("%lf", &bow[i].price);
        bow[i].count = 0;
    }
    int id, cnt;
    while(scanf("%d %d", &id, &cnt) && id != 0){
        bow[id].count += cnt;
    }
    double sum = 0;
    for(int i = 1; i <= N; i++){
        sum += bow[i].count * bow[i].price;
        printf("%d\n", bow[i].count);
    }
    printf("%.2lf", sum);
    return 0;
}

7-5 大整数加减法 三部曲之二:逐位相加并进位

分数 10

作者 丁展

单位 金陵科技学院

大整数加减法又被称为高精度整数加减法,该方法主要克服了计算机整数长度在硬件中的表示限制。大整数加减法通常使用字符串(或普通整数数组)表示整数。因为两个相加减的数长度可能不一致,所以大整数加减法的一种简单算法包括三个步骤:

  1. 高位补0对齐

  2. 字符串(或数组)逐位相加并进位

  3. 去除前导0

本题是三部曲的第二部:2. 逐位相加并进位

输入格式:

输入给出两行,每行包含一个不超过4000位的非负整数,两个非负整数长度一样。

输出格式:

输出两个整数相加的结果,如果有前导0需要保留。

输入样例1:

例如:

555555555555555
666666666666666

输出样例1:

输出:

1222222222222221

输入样例2:

0012345678901234567
0000000123456123456

输出样例2:

0012345802357358023

参考答案:

#include <stdio.h>
int main (void) {
    char number1[10005], number2[10005], result[10005] = {0};
    gets(number1); gets(number2);
    int len = strlen(number1);
    int carry = 0;
    for(int i = len - 1; i >= 0; i--){
        int A = number1[i] - '0';
        int B = number2[i] - '0';
        int sum = A + B + carry;
        result[i+1] = (sum % 10) + '0';
        carry = sum / 10;
    }
    if(carry != 0){
        result[0] = '1';
        printf("%s", result);
    }else{
        printf("%s", result+1);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值