实验二
实验一:
代码:
#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%d\n",number);
}
system("pause");
return 0;
}
截图:
问题1:获得1到100之间的随机整数
问题2:保存四位字符位,空格用零代替
问题3:随机获得n位同学的学号
test 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。
问题2:break是终止循环,contine是不再执行这次循环下面的指令,但是不打断循环。
问题3:没有必要,因为买家只能在这之中选择。
test 3:
代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char light;
while((light=getchar())!= EOF)
{
getchar();
switch(light){
case 'g':printf("go go go\n");break;
case 'y':printf("wait a minute\n");break;
case 'r':printf("stop!\n");break;
default:printf("someting must be wrong");
}
}
system("pause");
return 0;
}
截图:
小结:
1、想要换行就用\n跟在printf和scanf里面;
2、用getchar()吃掉空格字符;
test 4:
代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
double per=0,sum=0,max=0,min=20000;
printf("输入今日开销,直到输入-1终止:\n");
while(1)
{
scanf("%lf",&per);
if(per == -1)
break;
sum+=per;
if(max<per)
max=per;
if(min>per)
min=per;
}
printf("今日累计开销总额:%.1f\n",sum);
printf("今日最高一笔开销:%.1f\n",max);
printf("今日最低一笔开销:%.1f\n",min);
system("pause");
return 0;
}
截图:
小结:
1、break在while循环里面好像比for里面管用,用for语句没有终止循环,因为终止的内容他无法像while那样明确;
2、min的初始值一开始赋值错误,导致一直不对;
3、double对应的是lf;
test 5:
代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int day,guess;
int n;
srand(time(0));
day = rand() % 30 + 1;
printf("猜猜2025年4月哪一天是你的lucky day\n\n开始喽,你有三次机会,猜吧(1~30):");
for(n=0;n<3;++n){
scanf("%d",&guess);
if(guess == day)
{printf("哇,猜中了:-)\n");break;}
if(guess>day)
{printf("\n你猜的日期晚了,你的lucky day 在前面哦\n");}
else
{printf("\n你猜的日期早了,你的lucky day 还没到呢\n");}
if(n != 2)
printf("\n再猜(1~30):");
}
if(n == 3)
printf("\n次数用完啦。偷偷告诉你,4月你的lucky day是%d号",day);
system("pause");
return 0;
}
截图:
小结:
1、\n的运用,连续使用或者在输入提示信息之前;
2、rand()函数的运用,有关时间的要等一会,生成随机种子;
格式:
#include<stdlib.h>
#include<time.h>
srand(time(0));
a = rand()%100+1;
3、中英文切换和打字速度的问题要慢慢练习;
test 6:
代码:
#include<stdio.h>
#include<stdlib.h>
int main(){
int n,i,j,k;
printf("input n:");
scanf("%d",&n);
for(j=0;n>=1;--n)
{
for(k=j;k>0;--k)
printf("\t");
for(i=2*n-1;i != 0;--i)
printf(" O\t");
printf("\n");
for(k=j;k>0;--k)
printf("\t");
for(i=2*n-1;i != 0;--i)
printf("<H>\t");
printf("\n");
for(k=j;k>0;--k)
printf("\t");
for(i=2*n-1;i != 0;--i)
printf("I I\t");
printf("\n");
++j;
}
system("pause");
return 0;
}
截图:
小结:
1、\t表示占据14个位置,要灵活应用;
2、好像我的代码有点太繁琐辽,但是没想到就这样写出来了,能跑就行(不是)😃;