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

【练习题】01.类的成员变量 猜数字游戏 一个类A有一个成员变量v 有一个初值100。定义一个类 对A类的成员变量v 进猜。如果大了则提示大了 小了则提示小了。等于则提示猜成功。 【练习题】02.类的成员变量 请定义一个交通工具(Vehicle)的类 其中有: 属性 速度(speed) 体积(size)等等 方法 移动(move()) 设置速度(setSpeed(int speed)) 加速speedUp(),减速speedDown()等等. 最后在试类Vehicle中的main()中实例化一个交通工具对象 并通过方法给它初始化sp eed,size的值 并且通过打印出来。另外 调用加速 减速的方法对速度进改变。 【练习题】03.类的成员变量与方法、构造方法 在程序中 经常要对时间进操作 但是并没有时间类型的数据。那么 我们可以自己实现 一个时间类 来满足程序中的需要。 定义名为MyTime的类 其中应有三个整型成员 时 hour 分 minute 秒 second 为了保 证数据的安全性 这三个成员变量应声明为私有。 为MyTime类定义构造方法 以方便创建对象时初始化成员变量。 再定义diaplay方法 用于将时间信息打印出来。 为MyTime类添加以下方法 addSecond(int sec) addMinute(int min) addHour(int hou) subSecond(int sec) subMinute(int min) subHour(int hou) 分别对时、分、秒进加减运算。 【练习题】04.构造方法 编写Java程序 模拟简单的计算器。 定义名为Number的类 其中有两个整型数据成员n1和n2 应声明为私有。编写构造方法 赋 予n1和n2初始值 再为该类定义加 addition 、减 subtration 、乘 multiplication 、 除 division 等公有成员方法 分别对两个成员变量执加、减、乘、除的运算。 在main方法中创建Number类的对象 调用各个方法 并显示计算结果。 【练习题】05.构造方法 编写Java程序 用于显示人的姓名和年龄。 定义一个人类 Person 该类中应该有两个私有属性 姓名 name 和年龄 age 。定义构造 方法 用来初始化数据成员。再定义显示 display 方法 将姓名和年龄打印出来。 在main方法中创建人类的实例 然后将信息显示。 【练习题】06.get方法和set方法 定义一个类 该类有一个私有成员变量 通过构造方法将其进赋初值 并提供该成员的g etXXX()和setXXX()方法 提示 假设有private String name;则有 public void setName(String name){ this.name = name; } public String getName(){ return this.name; } 【练习题】07.构造方法与重载 为"无名的粉"写一个类 class WuMingFen 要求 1.有三个属性 面码:String theMa 粉的分量(两) int quantity 是否带汤 boolean likeSoup 2.写一个构造方法 以便于简化初始化过程 如 WuMingFen f1 = new WuMingFen("牛肉",3,true); 3.重载构造方法 使得初始化过程可以多样化 WuMingFen f2 = new WuMingFen("牛肉",2); 4.如何使得下列语句构造出来的粉对象是酸辣面码、2两、带汤的 WuMingFen f3 = new WuMingFen(); 5.写一个普通方法 check() 用于查看粉是否符合要求。即 将对象的三个属性打印在控 制台上。 【练习题】08.构造方法的重载 定义一个名为Vehicles 交通工具 的基类 该类中应包含String类型的成员属性brand 商 标 和color 颜色 还应包含成员方法run 驶 在控制台显示"我已经开动了" 和showI nfo 显示信息 在控制台显示商标和颜色 并编写构造方法初始化其成员属性。 编写Car 小汽车 类继承于Vehicles类 增加int型成员属性seats 座位 还应增加成员方 法showCar 在控制台显示小汽车的信息 并编写构造方法。 编写Truck 卡车 类继承于Vehicles类 增加float型成员属性load 载重 还应增加成员 方法showTruck 在控制台显示卡车的信息 并编写构造方法。 在main方法中试以上各类。 【练习题】09.构造方法与重载 定义一个网络用户类 要处理的信息有用户ID、用户密码、email地址。在建立类的实例 时 把
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值