实验2

实验任务1

1.源代码

 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 5
int main1() {
    int number;
    int i;
    srand(time(0));     // 以当前系统时间作为随机种子
    for (i = 0; i < N; ++i) {
        number = rand() % 100 + 1;
        printf("20490042%04d\n", number);
    }
    return 0;
}

2.运行结果

 image

问题 1:程序功能

 
生成5 个 1~100 之间的随机整数,并按固定前缀20490042+4 位补零随机数的格式输出,模拟生成学员编号。
 

问题 2:line13 代码功能

 
number = rand() % 100 + 1;
 
  • rand()生成 0~RAND_MAX 的伪随机数
  • %100将范围限定为0~99
  • +1最终得到1~100的随机整数
 

问题 3:%04d作用

 
  • 按4 位十进制整数输出
  • 不足 4 位时左侧补 0,保证编号长度统一
  • 例:随机数 5→输出0005
 

问题 4:srand(time(0));作用

 
  • 以当前系统时间为随机种子,初始化随机数发生器
  • 去掉后:每次运行程序生成的随机数序列完全相同(固定伪随机序列)
  • 实验任务2

    1.源代码

     
    #include <stdio.h>
    int main() {
        int choice, quantity;
        float total_price = 0, amount_paid, change;
        while (1) {
            printf("\n自动饮料售卖机菜单:\n");
            printf("1. 可乐 - 3 元/瓶\n");
            printf("2. 雪碧 - 3 元/瓶\n");
            printf("3. 橙汁 - 5 元/瓶\n");
            printf("4. 矿泉水 - 2 元/瓶\n");
            printf("0. 退出购买流程\n");
            printf("请输入饮料编号: ");
            scanf("%d", &choice);
            if (choice == 0)
                break;
            if (choice < 1 || choice > 4) {
                printf("无效的饮料编号,请重新输入。\n");
                continue;
            }
            printf("请输入购买的数量: ");
            scanf("%d", &quantity);
            if (quantity < 0) {
                printf("购买数量不能为负数,请重新输入。\n");
                continue;
            }
            if (choice == 1 || choice == 2)
                total_price += 3 * quantity;
            else if (choice == 3)
                total_price += 5 * quantity;
            else
                total_price += 2 * quantity;
            printf("请投入金额: ");
            scanf("%f", &amount_paid);
            change = amount_paid - total_price;
            printf("本次购买总价: %.2f 元\n", total_price);
            printf("找零: %.2f 元\n", change);
            total_price = 0;
        }
        printf("感谢您的购买,欢迎下次光临!\n");
        return 0;
    }

    2.运行结果

     image

    问题 1:去掉total_price = 0;的影响

     
    • 每次购买后总价不会清零,下一次购买会累加之前的总价
    • 导致计算金额、找零错误,程序逻辑失效
     

    问题 2:continue语义

     
    • 立即结束本次循环,跳过循环体中continue之后的所有代码
    • 直接回到while(1)循环开头,重新执行下一轮循环
    
    

    实验任务3

    1.源代码

     
    #include <stdio.h>
    char signal;
    int main() {
        while (scanf(" %c", &signal) != EOF) {
            switch (signal)
            {
            case 'r':
                printf("stop!\n");
                break;
            case 'g':
                printf("go go go\n");
                break;
            case 'y':
                printf("wait a minute\n");
                break;
            default:
                printf("something must be wrong...\n");
                break;
            }
        }
    return 0;
    }

    2.运行结果

     image

    实验任务4

    1.源代码

     
    #include <stdio.h>
    int main() {
        double expense;
        double total = 0.0;
        double max = 0.0, min = 0.0;
        int judge = 1;
        printf("输入今日开销,直到输入-1终止:\n");
        while (1) {
            scanf("%lf", &expense);
    
            if (expense == -1.0) {
                break;
            }
            if (expense <= 0 || expense > 20000) {
                continue;
            }
    
            total += expense;
    
            if (judge) {
                max = expense;
                min = expense;
                judge = 0;
            }
            else {
                if (expense > max) {
                    max = expense;
                }
                if (expense < min) {
                    min = expense;
                }
            }
        }
        if (!judge) {
            printf("\n今日累计消费总额:%.1f\n", total);
            printf("今日最高一笔开销:%.1f\n", max);
            printf("今日最低一笔开销:%.1f\n", min);
        }
        return 0;
    }

    2.运行结果

     

    image

    实验任务5

    1.源代码

     
    #include <stdio.h>
    int a, b, c;
    int main() {
        while (scanf("%d %d %d", &a, &b, &c) != EOF) {
            if (a + b > c && a + c > b && b + c > a) {
                if (a == b && b == c) {
                    printf("等边三角形\n");
                }
                else if (a == b || a == c || b == c) {
                    printf("等腰三角形\n");
                }
                else if (a * a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a) {
                    printf("直角三角形\n");
                }
                else {
                    printf("普通三角形\n");
                }
            }
            else {
                printf("不能构成三角形\n");
            }
        }
        return 0;
    }

    2.运行结果

     

    image

    实验任务6

    1.源代码

     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int lucky_day, i, guess;
    int main() {
        srand(time(0));
        lucky_day = rand() % 30 + 1;
        printf("猜猜2026年4月哪一天是你的lucky day\n");
        printf("开始喽,你有3次机会,猜吧(1~30):");
        for (i = 0; i < 3; i++) {
            if (i > 0) {
                printf("再猜(1~30):");
            }
            scanf("%d", &guess);
            if (guess == lucky_day) {
                printf("\n哇,猜中了:)\n");
                break;
            }
            else if (guess < lucky_day) {
                printf("\n你猜的日期早了,你的lucky day还没到呢\n");
            }
            else {
                printf("\n你猜的日期晚了,你的lucky day在前面哦\n");
            }
            
        }
        if (i == 3) {
            printf("\n次数用光啦。4月你的lucky day是%d号\n", lucky_day);
        }
        return 0;
    }

    2.运行结果

     

    image

     

    
    
    image

    实验总结

     本次 C 语言分支与循环基础应用编程实验,让我系统巩固了分支、循环、流程控制、随机数、多组输入等核心知识点,通过验证与编程结合的方式,切实提升了代码理解与问题解决能力。
     
    在验证性任务中,我掌握了rand()srand()生成随机数的原理,理解了%04d格式化输出、continuebreak的区别,以及循环变量清零的重要性,看懂了代码背后的逻辑设计思路。
     
    在编程任务里,我学会用if/switch处理多分支判断,用while/for实现循环与多组输入,能结合实际场景设计算法 —— 比如记账时统计最值与总和、判断三角形时先验证合法性再分类、猜数字时控制次数与提示逻辑。同时也遇到了输入处理、边界判断、格式输出等问题,通过调试逐步解决,加深了对语法细节的掌握。
     
    这次实验让我明白:先理清算法再写代码,能大幅减少错误;手动敲代码比复制更能熟悉语法;多组输入、边界条件、数据合法性是编程必须考虑的要点。整体收获很大,为后续更复杂的 C 语言编程打下了扎实基础。
    
    

     

  • 
    
posted @ 2026-04-05 13:13  顾伟雲  阅读(9)  评论(0)    收藏  举报