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

浙公网安备 33010602011771号