当前位置: 首页 > news >正文

experiment2

一、实验目的

  1. 能正确使用if语句实现分支结构
  2. 能正确使用while语句、do...while语句实现循环结构
  3. 能在具体问题场景中正确区分、使用continue和break
  4. 能灵活、组合使用c语句编程解决简单应用问题

二、实验准备

实验前,请复习第3章以下内容:

  1. 分支语句 if 和循环语句 while 、 do...while 的用法:语法规则及注意事项
  2. 在循环语句中 continue 和 break 语句的功能和用法
  3. 使用 while 语句实现多组输入的方法
  4. 常见问题的算法

三、实验内容

实验任务1————验证性实验

task1.c

//在c开发环境下,输入如下程序。结合程序运行结果,理解代码、回答问题
SHOW CODE

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

实验结论

//有代码 srand(time(NULL))预期效果如下图所示
image
问题一
没有有代码 srand(time(NULL))预期效果与上图没有区别,但多次运行后发现每次生成的随机序列完全相同
问题二
srand(time(NULL))这个程序功能是以系统时间作为种子,由于时间不断变化,每次运行的种子不同,从而生成的随机序列不同
Tip
与伪随机数生成相关的两个标准库函数: rand(), srand()
int rand(void)
返回一个0~RAND_MAX之间的伪随机数。
头文件<stdlib.h>(也有的在<math.h>)
rand()函数原型及使用示例参考: https://en.cppreference.com/w/cpp/numeric/random/rand
void srand(unsigned int seed)
为rand()设置随机种子。通常以时间作为随机种子,即srand(time(NULL))
头文件<stdlib.h>(也有的在<math.h>), <time.h>
srand()函数运行及使用示例参考: https://en.cppreference.com/w/cpp/numeric/random/srand

实验任务2————验证性实验:自动饮料售卖机程序。

//在c开发环境下,输入如下程序。结合程序运行结果,理解代码、回答问题。

task.2c

SHOW CODE

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

实验结论
//预期效果如图所示
未注释total_price=0image
已注释total_price=0image
问题一
注释后发现每次总价不重置,导致与上一次的费用累加
问题二
continue语句一:判断饮料编号choice小于1或者大于4,如果是上述情况,则提示“无效饮料编号,请重新输入”,并通过continue跳过本次循环,即重新输入编号
comtinue语句二:判断“购买数量quantity小于0”(即负数)。若满足该条件,提示“购买数量不能为负数,请重新输入”,并通过continue跳出本次循环,即重新输入数量。

实验任务3

编写一个模拟红绿灯信息的程序task3.c。具体要求如下:
使用多分支if语句实现
要求用户从键盘输入字符,用来表示交通信号灯颜色。输入r表示red,输入g表示green, 输入y表示yellow
判断交通型号灯颜色,打印输出不同的提示信息:
如果输入的是r,打印输出字符串stop!
如果输入的是g,打印输出字符串go go go
如果输入的是y,打印输出字符串wait a minute
如果输入的是其它字符,打印输出字符串something must be wrong...
要求支持多组输入,直到用户按下CTRL+Z,回车,终止程序

task.3c

SHOW CODE

#include<stdio.h>
#include<string.h>
int main()
{char input[20]={0};printf("交通信号灯颜色。输入r表示red,输入g表示green, 输入y表示yellow\n");//当输入CtrlZ回车 while (scanf("%s",input)!=EOF) {if(strcmp(input,"r")==0){printf("stop\n");	}else if(strcmp(input,"g")==0){printf("gogogo");}else if(strcmp(input,"y")==0){printf("wait a minute\n");}else{printf("something must be wrong...\n");}
}
return 0; } 

实验结论
//预期效果如图
image

实验任务4

编写一个模拟记账程序task4.c统计一天的开销。具体要求如下:
从键盘重复输入一天内的若干笔开销,输入-1时终止程序。
在屏幕上打印输出一天内最高一笔开销、最低一笔开销,及一天总开销。输出时保留到小数点后1位。
运行程序时,输入的测试数据限定:0元 < 每笔消费 <= 2万元

task 4.c

SHOW CODE

#include<stdio.h>
int main() 
{double expense = 0.0;double total = 0.0; double max=0.0,min=20000;int count = 0;printf("请输入每笔开销(输入-1结束):\n");for( ; ; ) {scanf("%lf",&expense);if (expense == -1){break;	}if(expense>0&&expense<=20000){count++;total += expense;if (expense>max){max=expense;}if (expense<min){min = expense;}}else{printf("输入超出范围(0 < 消费 <= 2万),请重新输入!\n");}}if (count > 0) { printf("最高开销:%.1f 元\n", max);printf("最低开销:%.1f 元\n", min);printf("总开销:%.1f 元\n", total);} else {printf("无有效消费记录!\n");}return 0;
}

实验结论

//预览效果如图
image

实验任务5

编写程序task5.c,根据输入的三角形三边边长,判断三角形类型。具体要求如下:
从键盘输入三角形三边边长a, b, c。边长为整数。
输出要求:
如果a, b, c不能构成三角形,打印输出"不能构成三角形"
如果能构成三角形,根据边长编写条件式,判断三角形属于哪一类别:普通三角形、直角三角形、等边
三角形、等腰三角形
要求支持多组输入,直到用户按下CTRL+Z,敲回车,终止程序。

task 5.c

SHOW CODE

#include<stdio.h>
int main() 
{int a, b, c;a=0,b=0,c=0;printf("输入a b c三个值判断是否为三角形\n") ;while(scanf("%d""%d""%d",&a,&b,&c)!=EOF){if(a+b>c&&a+c>b&&b+c>a){if (a==b&&b==c) printf("等边三角形\n");else if(a==b||a==c||b==c) 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") ;}else printf("不构成三角形\n")	; 	}
return 0;
}

实验结论
//预期结果如图
image

实验任务6

编写一个简单的猜日期程序task6.c。具体要求如下:
使用随机函数,生成[1, 30]之间一个随机整数作为11月的lucky day
用户有3次猜的机会。根据用户输入的日期,提示用户猜的日期是猜中了,或是,早或晚
如果用户已经猜中了,则无需打印输出lucky day
如果用户用光三次机会也没有猜中,则打印输出用户在11月的lucky day

task6.c

SHOW CODE

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{srand((unsigned int)time(NULL));printf("猜猜2025年11月哪一天是你的lucky day\n 开始喽,你有三次机会\n 猜吧(1~30)");int luckyday = rand()%30+1;int guess,count = 0;while(count<3){scanf("%d",&guess);count++;if(guess==luckyday){printf("哇,猜中了\n");return 0;}else if (guess>luckyday)  printf("日期猜晚了,你的luckyday在前面哦\n");else printf("日期猜早了,你的luckyday还没到呢\n");if(count<3) printf("再猜(1~30)"); }printf("次数用光了。偷偷告诉你,11月你的luckyday是%d",luckyday);}

实验结论
//预期结果如图
image

实验总结

srand((unsigned int)time(NULL)) srand是unsigned int类型,所以这里time进行了强制类型转换
while(scanf("%d""%d""%d",&a,&b,&c)!=EOF) CTRL+Z结束进程
strcmp 用于比较两个字符串的标准函数库
if(strcmp(input,"r")==0) 返回0,相等;正数,大于;负数,小于;

http://www.hskmm.com/?act=detail&tid=33806

相关文章:

  • 【为美好CTF献上祝福】unity逆向
  • 扩展欧几里得算法
  • 今日学习笔记
  • CSP-S 2022 Solution
  • 印刷电子技术挑战传统PCB主导地位
  • 2025-10-18
  • 某兔网站加密学习
  • 5.vtk学习——点云显示进阶
  • [LangChain] 03. 缓存
  • 面试 / 答辩总卡壳?这款 AI 面试辅助新功能:上传专属资料,精准应答不翻车
  • C语言编程之旅:从入门到实战
  • 引用
  • 实用指南:大数据毕业设计 python智慧交通监控系统 Flask+Echarts可视化 百度地图 毕业设计(源码)✅
  • Selenium元素定位总失败?这8种定位策略你必须掌握
  • 2025 年钢闸门厂家最新推荐排行榜:涵盖不锈钢 / 渠道 / 河道 / 水库 / 平面 / 手动 / 电动 / 液压钢闸门,聚焦十大实力厂家核心优势
  • 2025 年最新铸铁闸门源头厂家推荐排行榜,涵盖四川 / 镶铜 / 渠道 / 圆形 / 方形等类型,助力一站式采购优质供应商
  • 内存四区
  • 2025 年钢闸门源头厂家最新推荐口碑排行榜:聚焦防腐技术与密封性能,助力水利工程采购精准选型固定卷扬/四川卷扬/螺杆/螺杆式启闭机厂家推荐
  • 2025 年耐火砖厂家最新推荐排行榜:绝热/轻质/莫来石等类型优质厂家权威榜单发布氧化铝泡沫/氧化铝空心球/抗渗碳/高温轻质莫来石耐火砖厂家推荐
  • 【转】[C#] Web API 中的常见层次
  • 【Azure Developer】使用Azure Developer CLI (azd)部署项目时候遇见无法登录中国区Azure的报错
  • 2025 年清污机源头厂家最新推荐榜单:聚焦耐腐蚀与智能清污实力,权威筛选优质品牌供采购参考回转式/回转式格栅/不锈钢/四川清污机厂家推荐
  • Intellij IDEA里的各种快捷键
  • 2025年西安买房推荐与西安学区新房推荐排名前十榜单
  • 2025年西安买房终极指南:十大高性价比楼盘权威推荐
  • AI教育应用隐忧:技术普及与培训缺失
  • JBoltAI 智能混剪:零门槛搞定 “会说话” 的专业视频,新手也能当创作高手 - 那年-冬季
  • Java技术公司如何借力AIGS,开启人工智能融合新篇章? - 那年-冬季
  • AITCA联盟生态:基于JBoltAI框架的产业格局重构前瞻 - 那年-冬季
  • jiangly 模板