实验2

task.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;
}


Q1:第13行代码的主要功能是生成一个范围在 1 到 100 之间的随机整数,并将其赋值给变量number。
Q2:解释 line14 使用格式符%04d起到作用:若输出的整数位数少于 4 位,会在前面用0补足到 4 位。
Q3:这个程序的功能是什么:主要功能是生成 5 个范围在 1 到 100 之间的随机整数,然后将这些随机整数格式化为 4 位数字(不足 4 位时前面补0),并与固定字符串20490042组合

task.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:line53 代码的用途?如果去掉,会有什么影响?:用途是在每次完成一次饮料购买交易后,将 total_price 重置为 0。这是为了确保下一次购买时,总价的计算是从 0 开始,不会受到上一次购买总价的影响。如果去掉这行代码,total_price 会在每次购买后持续累加,导致后续每次购买计算总价时,都会把之前的总价包含进来
Q2:line17 - 18,使用了 break 语句;line20 - 23,line28 - 31,使用了 continue 语句。在循环中使用 break 和 continue 有什么区别?:在循环中使用 break 语句时,它会立即终止当前所在的循环;continue 语句用于跳过当前循环中剩余的代码,直接开始下一次循环
Q3:line33 - 44,使用了 switch 语句实现多分支。通常情况下,在 switch 语句中使用 default 子句有利于代码运行时错误排查,这个程序中,是否有必要增加 default 子句?:没必要,已经在用户输入饮料编号时进行了有效性检查,即 if (choice < 1 || choice > 4) ,如果用户输入的编号不在 1 - 4 范围内,会提示用户重新输入,不会进入到 switch 语句中。

task3

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


task4

#include<stdio.h>
int main()
{
printf("输入今日开销,直到输入-1终止:\n");
double x,f,min,max;
while(1){
scanf("%lf",&x);
if(x<0)
printf("输入无效,请重新输入\n");
else{
min=x;
max=x;
f=x;
if(x>0)
break;}
}
while(1){
scanf("%lf",&x);
if(x==-1)
	break;
if(x<0)
printf("输入无效,请重新输入\n");
else{
if(x>max)
max=x;
if(x<min)
min=x;
f+=x;}
}
printf("总额%.1f\n",f);
printf("最小值%.1f\n",min);
printf("最大值%.1f\n",max);
return 0;
}

task5

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
    printf("猜一猜你的四月幸运日(1--30)\n");
    int n,c,v=0;
    srand(time(0));
    n=(rand()%100*3+2)/10+1;
    for(int i=0;i<3;i++)
    {scanf("%d",&c);
	if(c>n)printf("猜晚了\n");
	else if(c<n)printf("猜早了\n");
	else {printf("猜对了\n");v=1;}
    }
    if(v==0)
    printf("没猜到哦,lucky day%d",n);
    return 0;
}


task6

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

return 0;
}

posted @ 2025-03-21 00:12  提拉米苏ac  阅读(11)  评论(0)    收藏  举报