第二次试验报告
C程序设计实验报告
实验项目:
1、if语句的应用
2、switch/case语句的应用
3、switch/case语句嵌套if语句的应用
4、switch/case语句的嵌套应用
5、分析程序
姓名:许鑫琪 实验地点:第一教学楼514教室 实验时间:4月3日
一、实验目的与要求
1、if语句的应用
- 掌握C语言逻辑运算和关系运算的规则;
- 学会正确地使用关系表达式和逻辑表达式;
- 掌握if-else语句的使用方法。
2、switch/case语句的应用
- 掌握算术运算符和运算规则 ;
- 掌握switch/case语句的使用方法。
3、switch/case语句嵌套if语句的应用
- 学会正确的使用关系表达式和逻辑表达式;
- 掌握switch/case 语句语法和使用方法。注意switch语句的控制流程,在switch语句中的break语句的用法;
- switch/case结构与if/else嵌套结构之间的转换。
4、switch/case语句的嵌套应用
- switch/case结构的嵌套使用。
- break语句与continue语句的用法。
二、实验内容
1、实验4.3.1:if语句的应用。
2、 问题描述:读入3个分别表示箱子长、宽、高的整数值,并判断输出该箱子是正方体还是长方体。
3、实验代码如下:
# include <stdio.h> int main () { int l,w,h; printf("请输入箱子的长、宽、高:\n"); scanf("%d%d%d",&l,&w,&h); if (l==w&&w==h) printf("该箱子是正方形。\n"); else printf("该箱子是长方形。\n"); }
4、运行结果:
5、问题分析:
这个实验比较简单,但是一些细节问题还是得注意,像中英文输入法的转换,符号要特别注意;
对于简单的程序,要理解每句代码的含义,也可以尝试用不同的方法去实现。
1、实验4.3.2:switch/case语句的应用
2、 问题描述:
编一程序实现如下功能:商店有打印纸(18元/本)、墨盒(132元/盒)、光盘(4.5元/片)出售,商店进行优惠酬宾活动。
具体做法如下:顾客购买商品的总额达到100元,优惠5%;达到200元 以上,优惠6%;达到300元以上,优惠7%;达到
了400元以上,优惠8%;达到1000元以上,优惠10%。根据不同的购买量,打印应付款。
3、实验代码如下:
# include <stdio.h> int main () { int a,b,c,d; float sum; printf("请输入打印纸、墨盒、光盘的数量:\n"); scanf("%d,%d,%d",&a,&b,&c); sum=(18*a+132*b+4.5*c); d=sum; switch(d) { case 0:sum*=1.0; break; case 1:sum*=0.95;break; case 2:sum*=0.94;break; case 3:sum*=0.93;break; case 4:sum*=0.92;break; default:sum*=0.9; } printf("应付款数=%.2f",sum); }
4、运行结果:
5、问题分析:
实验时这题我卡了很久,但是又找不出错误,系统没有报错,但是也没有按照理想的结果运行;
后面老师讲了,发现自己的格式不正确,虽然算法,思路没有错,但是基本的 switch/case,printf()的结构错了;
1、实验4.3.3:switch/case语句的嵌套if语句的应用
2、问题描述:输入年月,输出该月的天数。
3、实验代码如下:
#include <stdio.h> int main () { int year,month,days; printf("Please enter year and month:\n"); 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); }
4、运行结果:
5、问题分析:
该题的算法开始写错了,系统没有正确运行;输出格式也有问题;
后面自己在课本上找到了计算闰年的算法,修改了一下格式,就运行成功了;
1、实验4.3.4:switch/case语句的嵌套应用
2、问题描述:
编写一个自动售货机的程序。该程序应具有以下功能:二级菜单,一级菜单是商品类型的选择;
二级菜单是具体商品的选择(商品价格和品种可以自拟)。顾客选择商品类型,输入购买数量。
自动售货机根据选择的商品类型与数量,计算并显示所选商品总金额。
3、实验代码如下:
# include <stdio.h> int main () { int x,n,y; float sum=0.0; printf("请选择: 1.日用品 2.文具 3.食品\n"); scanf("%d",&x); switch (x) { case 1:printf("请选择:1.牙刷(3.5元/支) 2.牙膏(6.2元/支)\n" ); printf( " 3.肥皂(2元/块) 4毛巾(8.6元/条)\n"); 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/个)\n" ); printf( " 3.文件夹(2元/个) 4文具盒(8.6元/个)\n"); 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=2*n;break; case 4: sum=8.6*n;break; }break; case 3:printf("请选择:1.白糖(3.6元/包) 2.盐(1元/包)\n" ); printf( " 3饼(2元/个) 4方便面(3.6元/条)\n"); 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; }break; } printf("总计:%.2f元\n",sum) ; }
4、运行结果:
5、问题分析:
该程序要思路清晰,内容比较繁琐,稍不留意,就很容易出错;
应明确赋值函数所表达的意义,有自己的表达方式;
中英文的切换,特别是符号,不然程序无法运行。
4.3.5 程序分析
程序 <一>
1、运行下列程序,分析输出结果
2、实验代码:
# include <stdio.h> int main () { double x=1000/3.0; double y=x-333.0; double z=3*y-1.0; printf("x=%lf\n",x); printf("y=%lf\n",y); printf("z=%lf\n",z); if (z==0) printf("z==o.\n"); else printf("z不等于0.\n"); }
3、运行结果:
4、程序分析:
程序<二>
1、运行下列程序,分析错误原因,请修改程序,使其输出正确结果,并写入实验报告,掌握C语言表达式与数学表达式的区别。
2、实验代码:
# include <stdio.h> int main () { int num=20; if (5<num<10) printf("%d in range (5,10)!\n",num); else printf("%d out of range (5,10)!\n",num); }
3、运行结果:
4、程序纠正
A、纠正代码:
# include <stdio.h> int main () { int num; printf("please enter int num 20\n"); scanf("%d",&num); if (num>5&&num<10) printf("%d in range (5,10)!\n",num); else printf("%d out of range (5,10)!\n",num); }
B、运行结果:
5、问题分析:
原程序想当然的把数学中的表达式直接搬过来了,然而却不符合C语言的表达;
num为变量,应提示输入int num 20 ,而非简单的num=20;
表达5<num<10,这样子的表达简洁但不符合C语言的语法,应表示成num>5&&num<10;
三、实验总结
收获:
1、对switch/case语句的结构有了熟悉的认识及掌握;
2、对细节要十分的重视,决定一个程序能否运行的有时候 往往是我们容易忽视的一些细节;
3、注意C语言的输入法的规则,不能想当然的用固有或原有思维去看待问题;
4、写程序时要有自己的思路,当有问题时也可以换一种方法去解决;
5、我们写程序时要通观全局,不能顾此失彼,重点我们要抓牢,但是基本的规则还是不能错;
6、书写程序若较长或者难以理解的语句可以备注一些注释,以便自己修改,他人看懂,我们应该要用一个专业的程序员的标准来要求我们自己;
不足:
1、对于一个新程序的编写,出现了一些很基本的错误,对基本内容掌握不牢靠,课后应多学习该章节的内容;
2、实验的速度过慢了,几乎每次都是最后面交作业的人,对键盘还是不够熟悉,C语言基本的规则不熟练;
3、书写时,要形成一个良好的书写风格,要自己看懂更要让他人看懂,会有利于自己回头看程序;
4、面对一个程序不能急于求成,在写之前应该想好用什么语句,什么方法,写有一定的思路才能达到事半功倍的效果;
5、善于发现他人书写代码的优点(同一个程序,自己写了一大堆,别人轻松的及行就搞定了),去学习他人一些好的方面;
6、缺乏自己解决问题的能力,过于依赖书本、同学、老师,要培养自己动手解决问题的能力;