C程序设计实验报告
姓名:熊毅
实验地点:家
实验时间:2020.3.25
实验项目:
1、4.3.1if语句的应用
2、4.3.2switch-case的应用
3、4.3.3switch-case嵌套if语句的应用
4、4.3.4switch-case结构嵌套的运用
5、4.3.5分析程序
6、项目课外练习:计算器的实现
一、实验目的与要求
1.掌握C语言逻辑值的表示方法(0代表“假”,1代表“真”)。
2.学会正确使用关系表达式和逻辑表达式。
3.掌握各种形式的if语句用法和使用方法。if语句中if和else的匹配关系,以及if语句的嵌套。
4.熟练掌握switch语句的语法和使用方法,注意在switch语句中break语句的用法及switch语句的嵌套。
二、实验内容
1、实验练习:实验3.4.1if语句的应用
1问题的简单描述:读入3个表示箱子的长、宽、高的整数值,判断并输出该箱子是正方体还是长方体。
2实验代码:
#include<stdio.h>
int main()
{
int i,w,h;
printf("请输入箱子的长、宽、高:
");
scanf("%d%d%d",&i,&w,&h);
if(i==w&&w==h) //如果长、宽、高相等,则为正方形//
printf("该箱子是正方体。
");
else
printf("该箱子是长方体。
");
return 0;
}
3问题分析:逻辑运算符&&的使用,之前直接用iwh,导致无法得出正确结果。
2、实验练习:实验4.3.2 switch.....case语句的应用
1问题的简单描述:编写程序实现以下功能:商店有打印纸(18元/本)、墨盒(132元/个)、光盘(4.5元/张)出售,商店进行优惠酬宾 活动。具体规则如下:顾客购买商品的总额超过100元,优惠5%;超过200元,优惠6%;超过300元,优惠7%;超过400元优惠8%;超过500元,优惠10%。根据不同的购买量,计算应付贷款。
2实验代码:
#include<stdio.h>
main()
{
float x,y,z,w;
int sum;
printf("请输入打印机、墨盒、光盘的数量:
");
scanf("%f %f %f",&x,&y,&z);
sum=((x*18+y*132+z*4.5)/100);
switch(sum)
{
case 0:w=(x*18+y*132+z*4.5);
break;
case 1:w=0.95*(x*18+y*132+z*4.5);
break;
case 2:w=0.94*(x*18+y*132+z*4.5);
break;
case 3:w=0.93*(x*18+y*132+z*4.5);
break;
case 4:w=0.92*(x*18+y*132+z*4.5);
break;
case 5:w=0.90*(x*18+y*132+z*4.5);
break;
default:w=0.90*(x*18+y*132+z*4.5);
break;
}
printf("计算结果为: %.2f",w);
}
3问题分析:对折扣的理解不够到位,导致计算折扣的公式错误。
3、实验练习:实验4.3.3 switch....case语句嵌套if语句的应用
1问题的简单描述:输入某一年、月的数值,输出该月的天数。
2实验代码:
#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)
printf("day=29");
else
printf("day=28");
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:printf("day=31");break;
case 4:
case 6:
case 9:
case 11:printf("day=30");
break;
return 0;
}
}
3问题分析:无
4、实验练习:实验4.3.4 switch....case结构嵌套的应用
1问题的简单描述:编写一个自动售货机的程序。该程序具有如下功能:有两个二级菜单,一级菜单是商品类型的选择;二级菜单是具体商品的选择。顾客先选择商品的类型,然后选择商品,输入购买数量.自动售货机根据选择的商品和输入的数量,计算并显示所选商品的总金额。
2实验代码:
#include<stdio.h>
int main()
{
int x,n,y;
float sum=0.0;
printf("请选择: 1.日用品 2.文具 3.食品
");
scanf("%d",&x);
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;
}
break;
}
printf("总计: %.2f元
",sum);
return 0;
}
3问题分析:英文半角和中文输入的转换,以及嵌套规则。
5、实验练习: 实验4.3.5 分析程序
实验4.3.5.1
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
",x);
printf("y=%lf
",y);
printf("z=%lf
",z);
if(z==0) printf("z==0.
");
else printf("z不等于0.
");
return 0;
}
3运行结果:
实验4.3.5.2
1问题的简单描述:运行下列程序,分析错误的原因并修改程序,使其输出正确的结果,然后写入实验报告
2原实验代码:
3修改后的代码:
#include<stdio.h>
int main()
{
int num=20;
if(5<num&&num<10)
printf("%d in range (5,10)!
",num);
else
printf("%d out of range (5,10)!
",num);
}
4问题分析:逻辑运算符&&的使用
三、项目实训:计算器的实现
1、设计思路:用代码进行简单的四则运算,同时具有循环使用功能,和对除数进行判断的情况。
2、流程图:
3、设计过程中遇到的问题及改进的方法:
①开始时代码:
#include<stdio.h>
void main()
{
int x,y,z;char c;
scanf("%f%c%f",&x,&c,&y);
switch ( c )
{
case '+': z=x+y; break;
case '-': z=x-y; break;
case '*': z=x*y; break;
case '/': z=( y==0 )?(0):(x/y); break;
default: z=0; break;
}
printf("%f%c%f=%f
",x,c,y,z);
}
②问题分析:代码不为0的处理不对。
③解决问题:考虑代码不为零的情况,对被除数进行分类讨论是否为0.以及将int改为float,因为除法可能涉及到小数,因此定义为浮点型。
4、代码:
#include<stdio.h>
void main()
{
float x,y,z;char c;
printf("简单计算器");
printf("例如“1+2,2-1,2*3,3/4”");
scanf("%f%c%f",&x,&c,&y);
switch ( c )
{
case '+': z=x+y; break; //加法运算//
case '-': z=x-y; break; //减法运算//
case '*': z=x*y; break; //乘法运算//
case '/':
if(y==0)
printf("输入错误!!!");
else
z=x/y;break; //除法运算//
default: z=0; break;
}
printf("%f%c%f=%f
",x,c,y,z);
}
四、实验小结(剖析个人得失)
①得:对于本次实验,巩固了对if分支语句的理解,以及学会了正确使用C语言的逻辑运算符、关系表达式和逻辑表达式,还学会了if...else语句的使用。
②失:就拿制作计算器而言,在现实做计算题时,尤其是在做除法运算时,我们首先会考虑被除数不为0的情况,而在用C语言制作程序时而忘了这一点,这是不应该的。其次对与循环功能使用的不够流畅,所以在制作计算器时想用循环功能也无能为力,所以希望今后能对该部分进行加强训练。