第四章分支结构实验
Posted liu2311063379
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四章分支结构实验相关的知识,希望对你有一定的参考价值。
实验项目:第四章实验设计4.3.1、4.3.2、4.3.3、4.3.4、4.3.5-1、4.3.5-2
姓名:刘裕汕
实验地点:家里
实验时间:2020年3月25日
一、实验目的与要求
1、掌握C语言逻辑值的表示方法。 2、学会正确的使用关系表达式和逻辑表达式。 3、掌握各种形式的if语句语法和使用方法。 4、掌握switch语句的语法和使用方法。 5、能独立编写分支结构程序并调试通过。 6、用if语句、switch语句解决简单的应用问题并上机实现。
二、实验内容
1、4.3.1 if语句的运用
2、4.3.2 switch...case语句的运用
3、4.3.3 switch...case语句嵌套if语句的应用
4、4.3.4 switch...case结构嵌套的应用
5、4.3.5-1 程序分析一
6、4.3.5-2 程序分析二
1、实验练习:4.3.1 if语句的运用
1.问题的简单描述:熟悉if语句中的条件使用
2.实验代码:
#include<stdio.h>
main()
{
int l,w,h;
printf("请输入箱子的长、宽、高:
");
scanf("%d %d %d",&l,&w,&h);
if(l==w&&w==h)
printf("该箱子是正方体。
");
else
printf("该箱子是长方体。
");
return 0;
}
3.问题分析:"l==w==h"与"l==w&&w==h"的输出结果是不一样的
2、实验练习:4.3.2 switch...case语句的运用
1.问题的简单描述:无
2.实验代码
#include<stdio.h>
main()
{
int a,b,c,d,e;
float f;
printf("请输入打印纸、墨盒、光盘的数量:
");
scanf("%d,%d,%d",&a,&b,&c);
d=18*a+132*b+4.5*c;
e=d/100;
switch(e)
{
case 0:f=18*a+132*b+4.5*c;
printf("应付款数为:%.2f
",f);break;
case 1:f=(18*a+132*b+4.5*c)*0.95;
printf("应付款数为:%.2f
",f);break;
case 2:f=(18*a+132*b+4.5*c)*0.94;
printf("应付款数为:%.2f
",f);break;
case 3:f=(18*a+132*b+4.5*c)*0.93;
printf("应付款数为:%.2f
",f);break;
case 4:f=(18*a+132*b+4.5*c)*0.92;
printf("应付款数为:%.2f
",f);break;
default:f=(18*a+132*b+4.5*c)*0.9;
printf("应付款数为:%.2f
",f);break;
}
}
3.问题分析:switch后的括号内不能用浮点型数据来表示
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%400==0)||((year%4==0)&&(year%100!=0)))
days=29;
else
days=28;
break;
case 1:days=31;break;
case 3:days=31;break;
case 4:days=30;break;
case 5:days=31;break;
case 6:days=30;break;
case 7:days=31;break;
case 8:days=31;break;
case 9:days=30;break;
case 10:days=31;break;
case 11:days=30;break;
case 12:days=31;break;
}
printf("%d年%d月有%d天",year,month,days);
return 0;
}
3.问题分析:if语句的条件语句应逐条填写,括号要一一对应
4、实验练习:4.3.4 switch...case结构嵌套的应用
1.问题的简单描述:在switch结构嵌套的情况下,容易将语句内容搞混乱
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=n;break;
case 3:sum=2*n;break;
case 4:sum=3.6;break;
}
break;
}
printf("总计:%.2f元",sum);
}
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=%1f
",x);
printf("y=%1f
",y);
printf("z=%1f
",z);
if(z==0)
printf("z==0.
");
else
printf("z不等于0.
");
return 0;
}
3.问题分析:这个程序的整体运算为1-(1/3)*3!=0,在运算中,1000/3得到的是一无限循环小数333.3333......,再减去333得到0.3333.....,在乘以3得 0.9999.......,最后是1-0.9999......>0。所以最终结果输出第二个语句。
6、实验练习: 4.3.4-2 程序分析二
1.问题的简单描述:修正代码错误
2.实验代码
原代码:
#include<stdio.h>
int main()
{
int num=20;
if(5<num<20)
printf("%d in range (5,10)!
",num);
else
printf("%d out of range (5,10)!
",num);
}
现代码:
#include<stdio.h>
int main()
{
int num=20;
if(5<num&&num<20)
printf("%d in range (5,10)!
",num);
else
printf("%d out of range (5,10)!
",num);
}
3.问题分析:原代码:在if语句中,5<num<10的运算过程为:先判断5<num,即5<20,判断为真输出为1,然后再将输出的1进行比较,即1<10,判断为真,输出语句 一。因输出结果有误。
现代码:在if语句中,先分别执行语句5<num和num<10,若全为真,则输出语句一,否则输出为语句二。
三、项目实训:计算器的实现
1、设计思路:先将公式中的数字与运算符号分开,在通过switch语句将各种情况的运算分开,经过计算过后输出结果。最后再使用do......while循环将计算器实现循环。
2、流程图:
3、设计过程中遇到的问题及改进方法:
在赋值过程中应将数值与符号分开
4、代码:
#include<stdio.h>
main()
{
int x;
float a,b,c;
char q;
do{
printf("---简易计算器---
");
printf(" 加号:+
");
printf(" 减号:-
");
printf(" 乘号:*
");
printf(" 除号:/
");
printf(" 平方:^2
");
printf("请输入计算公式:
");
scanf("%f",&a);scanf("%c",&q);scanf("%f",&b);
switch(q)
{
case 43:c=a+b;
printf("%.2f%c%.2f=%.2f
",a,q,b,c);break;
case 45:c=a-b;
printf("%.2f%c%.2f=%.2f
",a,q,b,c);break;
case 42:c=a*b;
printf("%.2f%c%.2f=%.2f
",a,q,b,c);break;
case 47:
if(b!=0)
{
c=a/b;
printf("%.2f%c%.2f=%.2f
",a,q,b,c);
}
else
printf("除数不能为零,请重新输入!
");break;
case 94:c=a*a;
printf("%.2f%.2c%.2f=%f",a,q,b,c);break;
default:printf("运算符号输入错误!
");
}
printf("继续计算请按1
结束计算请按2
");
scanf("%d",&x);
}while(x==1);
printf("----感谢使用----
");
}
四、实验小结:
通过计算器项目的实验,我掌握了第四章的大部分内容,这大概就是所谓的百闻不如一“践“吧!
以上是关于第四章分支结构实验的主要内容,如果未能解决你的问题,请参考以下文章