实验2

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

问题1:这行代码的功能是将随机数进行取余操作并且加1,另所得数在1-100之间。

问题2:格式符 %04d 用于格式化输出整数,前面的 04 表示输出的整数至少占4个字符宽度,如果所得数的位数少于4位,会在前面填充0以达到4位宽度。

问题3:随机生成五个以202490042开头的13位学号。

 

任务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("%d", &choice);
    if (choice == 0)
    break;
    if (choice < 1 || choice > 4) {
    printf("无效的饮料编号, 请重新输入。 \n");
    continue;
    } 
    printf("请输入购买的数量: ");

    scanf("%d", &quantity);
    if (quantity < 0) {
    printf("购买数量不能为负数, 请重新输入。 \n");
    continue;
    }
    switch (choice) {
    case 1:
    case 2:
    total_price += 3 * quantity;
    break;
    case 3:
    total_price += 5 * quantity;
    break;
    case 4:
    total_price += 2 * quantity;
    break;
    }
    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;
}

问题1:重置total price为0,如果去掉,则下次输入时,total price的初始值不为0。

问题2:break语句作用是跳出循环执行下一条语句,continue语句作用是循环到判断条件,使用的时机不一样。

问题3:没有必要。choice不在1-4之内程序不会继续执行。

 

任务3:

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

 任务4:

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

 任务5:

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

 任务6:

#include <stdio.h>
int main (){
    int n,i,j,l,k;
    k = 0;
    printf("input n:");
    scanf("%d",&n);
    l= n;
    for(i=0;i<n;i++){
        for(j=0;j<k;j++)printf("\t");
        for(j=0;j<2*l-1;j++)printf(" O \t");
        printf("\n");
        for(j=0;j<k;j++){
        printf("\t");
        }    
        for(j=0;j<2*l-1;j++)
        {
        printf("<H>\t");
        }
        printf("\n");
        for(j=0;j<k;j++){
        printf("\t");
        }
        for(j=0;j<2*l-1;j++){
        printf("I I\t");
        }
        printf("\n");
        k=k+1;
        l=l-1;
        printf("\n");
    }
    return 0;
}

 实验总结:

在很多循环语句种,初始输入变量通常会发生变化,这时需要额外自定义一个变量用来储存变化值,比如任务6中,如果没有将n的值储存在l直接进行计算会导致程序提前结束,这是需要注意的。

 

posted @ 2025-03-20 15:22  BurnedFlazer  阅读(5)  评论(0)    收藏  举报