实验二

实验任务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("20490042%04d\n", number);
    }
    return 0;
    system("pause");
 }

 

运行截图:

 Q1:  line13:令随机数对100取余数+1,得到1~100的随机数

Q2:   限定取得的随机数为4位数,不够的位置用0补齐

Q3:   生成204900420001~204900420100之间的随机数   

 

实验任务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;
 }

运行截图:

Q1:将0赋值给total_price,为下一次循环做准备。

Q2:break会跳出当前循环体,continue跳过当前循环内剩余语句,进行下一次循环。

Q3:有必要,当输入选择编号不为1,2,3,4,0时,应当输出提示信息,否则只会输出默认语句,不便于用户使用。

实验任务3

源代码:

#include <stdio.h>

int main()
{
    char n;
    while(1)
    {
    n = getchar();
    getchar();
    if (n=='y')
        printf("wait a minute\n");
    else if (n=='g')
        printf("go go go\n");
    else if (n=='r')
        printf("stop!\n");
    else
        printf("something must be wrong\n");
    }
    return 0;
}

运行截图:

 

实验任务4

源代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    double money, max, min, average, count, sum;
    printf("输入今日开销,直到输入-1终止:\n");
    money = 0;
    average = 0;
    count = 0;
    sum = 0;
    max=money;
    min=money;
    while (1)
    {
        scanf("%lf", &money);

        if(money!=-1)
        {
            if(count==0)
            {
                min=money;
                max=money;
            }
            else
            {
            if (money>max)
                max = money;
            if (money<min)
                min = money;
            }
            sum=sum+money;
            count+=1;
        }
        else
            break;
    }
        average = sum/ count;

        printf("今日累计消费总额:%.1lf", sum);
        printf("今日最高一笔开销:%.1lf", max);
        printf("今日最低一笔开销:%.1lf", min);
    system("pause");
    return 0;
}

运行截图:

 实验任务5

源代码:

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

运行截图:

 实验任务6

源代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int i,n,line;
    line=0;
    scanf("%d", &n);
    for(i=0;line<n;++line)
    {
        for(i=0;line<n; )
        {
            while(i<2*n-1)
            {
                if(i>=line && i<2*n-1-line)
                {
                    printf(" O     ");
                    ++i;
                }
                else
                {
                    printf("       ");
                    ++i;
                }
            }
            printf("\n");
            i=0;
            while(i<2*n-1)
            {
                if(i>=line && i<2*n-1-line)
                {
                    printf("<H>    ");
                    ++i;
                }
                else
                {
                    printf("       ");
                    ++i;
                }

            }
            printf("\n");
            i=0;
            while(i<2*n-1)
            {
                if(i>=line && i<2*n-1-line)
                {
                    printf("I I    ");
                    ++i;
                }
                else
                {
                    printf("       ");
                    ++i;
                }
            }
            printf("\n");
            break;
        }
        
    }
    
    system("pause");
    return 0;
}

运行截图:

 实验总结:

有时候会在循环判断语句中,把赋值符和等于逻辑符混淆,导致循环错误。

实验4中用count==0来对max和min进行初始化,为后续循环判断中的max和min赋值。

实验6将每行分离来看,先构建出n*(2n-1)的小人阵列,再在循环体系中添加条件,让每行输出的小人数量符合要求。

posted @ 2025-03-18 16:28  By_Harry  阅读(9)  评论(0)    收藏  举报