第二次实验报告
C实验语言程序设计报告
实验项目:分支结构实验
姓名:杨婷 实验地点:教学楼514教室 实验时间:2019年4月3日
一.实验目的与要求
1.掌握C语言逻辑表示方法(0代表“假”,1代表“真”)。
2.学会正确使用地使用关系表达式和逻辑表达式。
3.掌握各种形式的if语句语法和使用方法。注意if语句中if和else匹配关系,及if语句中的嵌套。
4.掌握switch语句语法和使用方法。注意switch语句的控制流程,在switch语句中break语句的用法及switch语句的嵌套。
5.能独立编写分支结构程序并调试通过。
6.用if语句、switch语句解决简单的应用问题并上机实现。
二.实验内容
1.实验练习:4.3.3 if语句的应用
1问题的简单描述:
读入3个分别表示箱子长、宽、高的整数值,判断并输出该箱子是正方体还是长方体。
2实验代码:
#include<stdio.h>
int main()
{
int l,w,h;
printf ("请输入箱子的长、宽、高:\n");/
scanf ("%d%d%d",&l,&w,&h);
if ((l==w)&&(w==h)&&(h==l))
printf("该箱子是正方体。\n");
else
printf("该箱子是长方体。\n");
return 0;
}
3问题描述:
做这道题的时候,没有出现什么问题,要注意的就是逻辑关系要用"&&"(与)。
4运行结果:
2.实验练习:4.3.2 switch/case语句的应用
1问题的简单描述:
编一程序实现如下功能:商店有打印纸(18元/本)、墨盘(132元/个)、光盘(4.5元/片)出售,商店进行优惠酬宾活动。具体做法如下:顾客购买商品的总额达到了100元,优惠5%;达到了200元以上,优惠6%;达到了300元以上,优惠7%;达到了400元以上,优惠8%;达到了500元以上,优惠10%。根据不同的购买量,打印应付货款。
2实验代码:
int main()
{
float sum,n;
int a,b,c;
/*其中,a代表购买打印纸的数量:b代表购买墨盘的数量;c代表购买光盘的数量;sum代表应付款数;*/
printf("输入购买打印纸的数量,购买墨盘的数量,购买光盘的数量:\n");
scanf("%d,%d,%d",&a,&b,&c);
sum=(a*18+b*132+c*4.5);
n=sum/100;
if (n>5)
sum=0.90*sum;
else if(4<n&&n<=5)
sum=0.92*sum;
else if(3<n&&n<=4)
sum=0.93*sum;
else if(2<n&&n<=3)
sum=0.94*sum;
else if(1<n&&n<=2)
sum=0.95*sum;
printf("应付款数= %.2f 元\n",sum);
return 0;
}
3问题分析:
做这个实验的时候,我用的是if/else语句,在写条件的时候,写的是“4<n<=5”,结果就运行不出来,后面发现原来是要用到“&&”,而不能像我最开始那样去写。
4运行结果:
3.实验练习 4.3.3 switch/case语句嵌套if语句的应用
1问题的简单描述:
输入某一年月,输出该月的天数。
2实验代码:
#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\n",days);
return 0;
}
3问题分析:这个实验里要注意的就是判断闰年的条件:能被4整除但不能被100整除,或能被400整除。条件都要满足时,要用到“&&”,条件并列时要用“||”,还有就是年份的整除可以用“year%a==0”表示。
4运行结果:
4.实验练习:switch/case结构的嵌套应用
1问题的简单描述:
编写一个自动售货机的程序。该程序应具有如下功能:有二级菜单,一级菜单是商品类型的选择;二级菜单是具体商品的选择(商品价格和品种可以自拟)。顾客先选择商品类型,然后选择具体商品,输入购买数量。自动售货机根据选择的商品和输入的数量,计算并显示所选商品总金额。
2实验代码:
#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.文件夹(12元/个) 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=12*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);
return 0;
}
3问题分析:
这道题比较简单,按照后面给出的内容就可以写出来,就是写代码的时候要小心,不要打错了。
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==0.\n");
else printf("z不等于0.\n");
return 0;
}
3实验分析:
这个程序是根据代码进行计算与判断,输出符合条件的内容。
4运行结果:
第二题
1问题的简单描述:
运行下列程序,分析错误的原因,请修改程序,使其输出正确的结果,并写入实验报告,掌握C语言表达式与数学表达式的区别。
2实验代码:
原来的代码
#include<stdo.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);
}
修改之后的代码
int main()
{
int num=20;
if(5<num&&num<10)
printf("%d in range (5,10) !\n",num);
else
printf("%d out of range (5,10) !\n",num);
}
3问题分析:
这个程序的问题就在于“5<num<10”这个条件,条件都满足时要用“&&”(逻辑与)来连接,应该为“5<num&&num<10”。
4运行结果:
三.实验小结(在本次实验中收获与不足)
这次一共做了五个实验,有的实验比较简单,有的实验还是要去仔细地思考。在实验的过程中,我发现我对于if与else的嵌套还是不够明白,总是会分不清。还有,我这次做实验还是有点粗心。我有一道程序引号放错位置了,运行不出正确结果,还是旁边同学发现的。经过这次实验,我知道了满足多个条件时,不能直接去写那些条件,而要用“&&”去连接,这次实验出现了很多次这个问题。在之后的实验中,我要提升写代码的速度,不能
写得这么慢了。