实验项目:
4.3.1:if语句的应用
4.3.2:switch/case语句的应用
4.3.3:switch/case语句嵌套if语句的应用
4.43.4:switch/case结构的嵌套应用
4.3.5:分析程序
姓名:谢丽萍 实验地点:514机房 试验时间:2019年4月3号
一、实验目的与实验要求
1、①掌握c语言逻辑运算和关系运算的规则②学会正确使用关系表达式和逻辑表达式③掌握if、else语句的使用方法
2、①掌握算术运算符合运算规则②掌握switch/case语句的使用方法
3、①学会正确地使用关系表达式和逻辑表达式②掌握switch/case语句语法和使用方法。注意switch语句的控制流程,在switch语句中break语句的用法③掌握switch/case结构与if/else嵌套结构之间的转换。
4、①switch/case结构的嵌套使用②break语句与continue语句的用法。
二、实验内容
1、实验练习
问题描述:读入三个分别表示箱子长、宽、高的整数值,判断并输出该箱子是正方体还是长方体。
实验代码:
#include<stdio.h> main() { int l,w,h; printf("请输入箱子的长、宽、高: "); scanf("%d%d%d",&l,&w,&h); if(l==w==h) printf("该箱子是正方体。 "); else printf("该箱子是长方体。 "); return 0; }
问题分析:这道题相对于后面几道题来说是比较简单的,但其在这道题中还是犯了一个低级错误导致在课堂上浪费了一点时间,我把“==”与“=”搞混了,导致结果输出来是错误的,后面经过检查发现了这个低级错误。
2、实验练习
问题描述:编一程序实现如下功能:商店有打印纸(18元/本)、墨盒(132元/个)、光盘(4.5元/片)出售,商店进行优惠酬宾活动。具体做法如下:顾客购买商品的总额达到了100元,优惠5%;达到了200元以上,优惠6%;达到了300元以上,优惠7%;达到了400元以上,优惠8%;达到了500 元以上,优惠10%;根据不同的购买数量,打印应付货款。
实验代码:
#include<stdio.h> int main() { int a,b,c; float d,w; printf("请输入打印纸、墨盒、光盘的数量: "); scanf("%d%d%d",&a,&b,&c); d=(18*a+132*b+4.5*c); w=d/100 ; if(w>=5) printf("应付款=%.2f",0.9*d); else switch((int)w) { case 0:printf("应付款=%.2f",d);break; case 1:printf("应付款=%.2f",0.95*d);break; case 2:printf("应付款=%.2f",0.94*d);break; case 3:printf("应付款=%.2f",0.93*d) ;break; case 4:printf("应付款=%.2f",0.92*d);break; } }
问题分析:在这道题中卡住了,导致实验课上我都没有把实验作业做完,首先是这道题的变量有点多,思路有点混乱,不知道该怎样表达这么多种情况,开始想用全部用if/else的语句,但发现好麻烦,最后选择了用switch/case语句,最后代码打出来的时候还是运算不出来,原来是没有将“w”的值转换成整数型。后面改过来后就可以运行了。
3、实验练习
问题描述:输入某一年月,输出该月的天数。
实验代码:
#include<stdio.h> int main() { int year,month,days; printf("please enter year and month; "); scanf("%d%d",&year,&month); switch(month) { case 2:if((year%4==0&&year%100!=0)||(year%400==0)) days=29; else days=28; break; case 1: case 3: case 5: case 7: case 8: case 10: case 12:days=31;break; case 4: case 6: case 9: case 11:days=30;break; } printf("%d年%d月有%d天",year,month,days); return 0; }
问题分析:在实验室打代码时觉得这道题还挺难的,但出实验室后用课余的时间想了一下其实也还好,不怎么难。拿到这道题,首先我先看问题,然后根据问题先确定变量的个数,然后再考虑特殊情况(2月份天数的特殊性);然后再来构思怎样设计代码框图。可以根据标题的提示知道要用到switch/case和if/else的结合才能方便的解决这个问题。然后在脑海中构思一下。再对照一下书上所给的代码,这题就能很轻松的解决。在这道题中我不知道为什么case的语句后面跟数字时要隔开?不隔开就不能得到正确答案.。为什么呢?
4、实验练习
问题分析:编写一个自动售货机的程序。该程序应具备如下功能:有二级菜单,一级菜单是商品类型的选择;二级菜单是具体商品的选择,顾客先选择商品类型,然后根据具体商品,输入购买数量。自动售货机根据选择的商品和输入的数量,计算并显示所选商品总金额。
实验代码:
#include<stdio.h> int main() { int x,n,y; float sum=0.0; printf("请选择:1.日用品 2.文具 3.食品 "); scanf("%d",&y); switch(x) { case 1:printf("请选择:1.牙刷(3.5元/支) 2.牙膏(6.2元/支) "); printf("3.肥皂(2元/块) 4.毛巾(8.6元/) "); scanf("%d",&y); printf("数量?"); scanf("%d",&n) ; switch(y) { case 1:sum=3.5*n;break; case 2:sum=6.2*n;break; case 3:sum=2*n;break; case 4:sum=8.6*n;break; } break; case 2:printf("请选择:1.笔(3元/支) 2.笔记本(1.2元/个) "); printf("3.笔记本(12元/个) 4.文具盒(8.6元/个) ") ; scanf("%d",&y); printf("数量?"); scanf("%d",&n); switch(y) { case 1:sum=3*n;break; case 2:sum=1.2*n;break; case 3:sum=12*n;break; case 4:sum=8.6*n;break; } break; case 3:printf("请选择:1.白糖(3.6元/包) 2.盐(1元/包) "); printf("3.饼(2元/个) 4.方便面(3.6元/条) "); scanf("%d",&y); printf("数量?"); scanf("%d",&n); switch(y) { case 1:sum=3.6*n;break; case 2:sum=1*n;break; case 3:sum=2*n;break; case 4:sum=3.6*n;break; } ; } printf("总计:%.2f元 ",sum); return 0; }
问题分析:这道题的代码比较常。是我目前所打代码中最长的了。对于这道题,我一开始是很蒙的,因为不知道从哪里开始入手,首先思路不够清晰,不知道怎样设置变量,后来看了书上的代码后,渐渐地思路就更清晰了,大概懂了这道题。实验后再仔细看了这道题想起了晓鹏老师给我们讲的用html教我们做的二级菜单。感觉两者虽说不同,但思路还是一样的。
5、实验练习
实验代码:
#include<stdio.h> int main() { int num=20; if(num>5&&num<10) printf("%d in range (5,10)! ",num); else printf("%d out of range (5,10)! ",num); }
问题分析:这道题中代码的错误之处是将数学表达式与c语言的表达式给搞混了,从而导致得到错误的结果。在if条件中只能用c语言的表达式否则计算机识别不了。这也是我们常犯的错误。
三、实验小结
这次实验主要是让我们练习了分支结构,总体感觉此次的实验差不多都能消化,不知道后面结合循环结构是否能够做到思路清晰,顺利解题。不足之处:还是不熟,实验课上做的比较慢,不能再规定的时间内把实验做完,导致课后要花时间去继续消化。总体感觉学的比较吃力,像是被老师牵着鼻子走,跟不上老师的步伐。