实验2

task1

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

result:1.1

1.2

1.3

去掉srand(time(NULL))后运行结果保持p3不变

q1:srand(time(NULL))是用来产生随机数的

q2:可以用来抽取五个学号并对应学生

 

task2

#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.矿泉水-4元/瓶\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;
 } 

result:

2

q1:去掉则会一直保留上一次的total price在变量total_price中,影响下一次运行时计算新的total price值

q2:终止下面的对商品品类和付款相关的操作(因为不符合规范),重新开始一轮询问

 

task3

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

result:

3

 

task4

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

        
    return 0;
 } 

result:

4

 

task5

#include <stdio.h>

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

result:

5

 task6

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

int main() {
    int lucky_day, guess, chances = 3;
    int i; 
    
    srand(time(NULL));
    
    lucky_day = rand() % 30 + 1;
    
    printf("猜11月的幸运日,你有3次机会:\n");
    
    
    for (i=0;i<3;i++) 
    {
        printf("第%d次猜:", i+1);
        scanf("%d",&guess);
        
        if (guess == lucky_day) {
            printf("恭喜你猜中了!\n");
            return 0;
        }
        else if (guess < lucky_day) {
            printf("早了\n");
        }
        else {
            printf("晚了\n");
        }
    }
    
    
    printf("11月的幸运日期是:%d\n", lucky_day);
    return 0;
}

result:

6

 

experiment conclusion:

1.可以使用srand(time(NULL))生成随机数,如果对生成随机数的范围有要求还可以取余,但要记得取余以后还要加一

2.使用循环实现多次输入或满足同一功能多次实现,但要记得如果有变量需要在下一次循环再次使用的话可能需要清空,可以使用while语句实现清空

3.有多个分支的情况需要实现时,可以在写代码之前先列好分支草稿,如果有触发条件需要回到起点重新执行循环的也需要标明,可以提高写代码的效率

4.排版方面尽量要工整,方便阅读和理解,也方便纠错

that's all,thx for reading ;)

 
posted @ 2025-10-19 16:26  kanejames  阅读(3)  评论(0)    收藏  举报