实验二

任务1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 5
#define N1 80
#define N2 35
int main() {
  int cnt;
  int random_major, random_no;
  srand(time(NULL)); // 以当前系统时间作为随机种子
  cnt = 0;
  while(cnt < N) {
    random_major = rand() % 2;
    if(random_major) {
      random_no = rand() % N1 + 1;
      printf("20256343%04d\n", random_no);
 }
    else {
      random_no = rand() % N2 + 1;
      printf("20256136%04d\n", random_no);
   }
    cnt++;
 }
  return 0;
}     

daa4974b8433b50ce1b5474cc97cd1b0

问题1:srand(time(NULL));的作用

这行代码的作用是设置随机数种子。如果不设置随机种子,每次程序运行时rand()函数都会生成相同的随机数序列。使用当前时间作为种子,可以确保每次运行程序时得到不同的随机数序列。

问题2:程序功能

这个程序的功能是随机生成N个(这里是5个)学生学号:

  • 随机决定专业:0或1

  • 如果是专业1,生成20256343开头的学号,后四位为1-80的随机数

  • 如果是专业0,生成20256136开头的学号,后四位为1-35的随机数

任务2

#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_s("%d", &choice);
        if (choice == 0)
            break;
        if (choice < 1 || choice > 4) {
            printf("无效的饮料编号,请重新输入。\n");
            continue;
        }
        printf("请输入购买的数量: ");
        scanf_s("%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_s("%f", &amount_paid);
        change = amount_paid - total_price;
        printf("本次购买总价: %.2f 元\n", total_price);
        printf("找零: %.2f 元\n", change);
        total_price = 0;
    }
    printf("感谢您的购买,欢迎下次光临!\n");
    return 0;
}
复制代码

cd3facfa7c39aa1a9a41909a4206c5a3

问题1:total_price = 0;的作用

如果去掉total_price = 0;,会导致总价累加错误。每次新的购买循环开始时,总价不会清零,会继续累加上次的金额,导致计算错误。

问题2:continue语句的语义

在循环中使用continue语句表示跳过当前循环的剩余代码,直接开始下一次循环:第一个continue:当输入无效饮料编号时,跳过后续的数量输入和价格计算第二个continue:当输入负数数量时,跳过后续的价格计算和支付流程

任务3

#include <stdio.h>

int main() {
    char light_color;
    
    printf("红绿灯模拟程序\n");
    printf("请输入交通信号灯颜色(r-红色, g-绿色, y-黄色): ");
    
    // 使用while循环支持多组输入,直到用户按下CTRL+Z
    while (scanf(" %c", &light_color) != EOF) {
        // 使用多分支if语句判断交通信号灯颜色
        if (light_color == 'r' || light_color == 'R') {
            printf("stop!\n");
        }
        else if (light_color == 'g' || light_color == 'G') {
            printf("go go go\n");
        }
        else if (light_color == 'y' || light_color == 'Y') {
            printf("wait a minute\n");
        }
        else {
            printf("something must be wrong...\n");
        }
        
        printf("\n请输入交通信号灯颜色(r-红色, g-绿色, y-黄色): ");
    }
    
    printf("\n程序已结束,感谢使用!\n");
    return 0;
}

a4ed483b51a61d1c4be3ff245f47050d

任务4

#include <stdio.h>

int main() {
    float expense;          // 单笔开销
    float total = 0;        // 总开销
    float max_expense = 0;  // 最高开销
    float min_expense = 0;  // 最低开销
    int count = 0;          // 开销笔数
    
    printf("=== 每日开销统计程序 ===\n");
    printf("请输入每笔开销金额(输入-1结束):\n");
    
    // 读取第一笔开销
    printf("第1笔开销: ");
    scanf("%f", &expense);
    
    // 处理输入,直到输入-1为止
    while (expense != -1) {
        // 验证输入范围:0元 < 每笔消费 <= 2万元
        if (expense <= 0 || expense > 20000) {
            printf("输入无效!每笔开销应在0元到20000元之间,请重新输入。\n");
        } else {
            count++;
            total += expense;
            
            // 初始化最高和最低开销(第一笔有效数据)
            if (count == 1) {
                max_expense = expense;
                min_expense = expense;
            } else {
                // 更新最高开销
                if (expense > max_expense) {
                    max_expense = expense;
                }
                // 更新最低开销
                if (expense < min_expense) {
                    min_expense = expense;
                }
            }
        }
        
        // 读取下一笔开销
        printf("第%d笔开销: ", count + 1);
        scanf("%f", &expense);
    }
    
    // 输出统计结果
    printf("\n=== 开销统计结果 ===\n");
    if (count > 0) {
        printf("最高一笔开销: %.1f元\n", max_expense);
        printf("最低一笔开销: %.1f元\n", min_expense);
        printf("一天总开销: %.1f元\n", total);
        printf("开销笔数: %d笔\n", count);
    } else {
        printf("今天没有记录任何开销。\n");
    }
    
    return 0;
}

bf5027c6b5cb9bd987706dcb21526de1

任务5

#include <stdio.h>
int main() {
    int a, b, c;
    while (scanf("%d %d %d", &a, &b, &c) != EOF) {
        if (a <= 0 || b <= 0 || c <= 0 || 
            a + b <= c || a + c <= b || b + c <= a) {
            printf("不能构成三角形\n");
            continue;
        }
        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");
        }
    }
    return 0;
}

fe120544b4ad1f50daf3cbde397470f4

任务6

#include<stdio.h>
 2 #include<stdlib.h>
 3 #include<time.h>
 4 
 5 int main(){
 6     int random,i=0,m;
 7     srand(time(NULL));
 8     printf("猜猜2025年11月哪一天是你的lucky day\n");
 9     printf("开始喽,你有三次机会,猜吧(1~30):");
10     random = rand() % 30 +1;
11     
12     while(i < 3){
13         scanf("%d",&m);
14         i = i+1;
15         
16         if(random == m){
17             printf("哇,猜中了:)");
18             break; 
19         }
20         else if (random < m){
21             printf("你的日期猜晚了,你的lucky day在前面哦\n");
22             printf("再猜(1~30):") ;
23         }
24         else{
25             printf("你猜的日期早了,你的lucky day还没到呢\n");
26             printf("再猜(1~30):") ;
27         }
28         getchar();    
29         if(i == 3)
30             printf("次数用光啦。偷偷告诉你,11月你的lucky day是%d号",random);
31     }
32     return 0;
33 }

4112cd9941eea0f7aa28654710a93ea4

 

posted @ 2025-10-18 19:05  F_avor  阅读(0)  评论(0)    收藏  举报