第二次试验报告
实验项目:简单算法&分支结构
姓名:杨伟宏 实验时间:2021年4月15日
一、实验目的和要求
1、通过运行简单的C语言算法程序,熟悉简单算法的结构;
2、掌握分支结构的基本类型和用法;
3、熟悉掌握C语言的调试功能;
二、实验内容
1、实验练习3.3.1
实验代码
#include<stdio.h>
main()
{
float x,y;
printf("请输入x的值;\n");
scanf("%f",&x);
if(x<1) /*判断变量x是否小于1*/
if(x<10) /*判断x的值是否小于10*/
y=2*x-1;
else
y=3*x-1;
else
y=x; /*其他*/
printf("y的值为%0.2f\n",y); /*输出y的值*/
}
结果预览:
实验问题:if...else嵌套结构中,要注意if与else的匹配关系。C语言中,else总是与离它最近的上一个if配对。
对于if...else结构的嵌套层次不宜太多,否则会影响程序的执行效率。
2、实验练习3.3.2
实验代码:
#include<stdio.h>
main()
{
int h,f,x,y;
printf("鸡兔总数,鸡兔脚总数:\n");
scanf("%d,%d",&h,&f);
if(h>0&&f>0)
{
x=(4*h-f)/2;
y=(f-2*h)/2;
printf("鸡有%d 兔有%d\n",x,y);
}
else
printf("输入错误!\n");
}
结果预览:
实验问题:if语句中如果有多个执行语句,则需要加上大括号,if的判断条件是输入的值要大于零,而不是需求的值大于零,否则判断一直会出现错误。
3、实验练习3.3.3
实验代码:
#include<stdio.h>
#include<math.h>
main()
{
int h=10;
float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d1,d2,d3,d4;
printf("请输入一个点(x,y):");
scanf("%f,%f",&x,&y);
d1=sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
d2=sqrt((x-x2)*(x-x2)+(y-y2)*(y-y2));
d3=sqrt((x-x3)*(x-x3)+(y-y3)*(y-y3));
d4=sqrt((x-x4)*(x-x4)+(y-y4)*(y-y4));
if(d1>1&&d2>1&&d3>1&&d4>1)
h=0;
printf ("该塔高度为%d",h);
}
结果预览:
实验问题:注意开平方的使用需要加上math的头部文件,而且在使用多括号的时候需要注意括号的配对。两点间的表达式的平方要用乘法来表示。
思考:设定h的初始值是为了当if判断的结果是false的时候,可以直接输出结果h的值;不可以不设定h的初始值,因为不设定h的初始值的话,当if判断的结果是false时,结果输出会出现问题,而且也无法判断输入的点是否在塔内。
4、实验练习4.3.1
实验代码:
#include<stdio.h>
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");
}
结果预览:
实验问题:无太大问题,只要多注意判断正方形的条件。
5、实验练习4.3.2
实验代码:
#include<stdio.h>
main()
{
float x,y,z,w,h;
printf("请输入打印纸,墨盒,光盘的数量:");
scanf("%f,%f,%f",&x,&y,&z);
w=18*x+132*y+4.5*z;
if(w>500)
{h=w*0.9;
printf("应付款数=%.2f",h);}
else if(w>400)
{h=w*0.92;
printf("应付款数=%.2f",h);}
else if(w>300)
{h=w*0.93;
printf("应付款数=%.2f",h);}
else if(w>200)
{h=w*0.94;
printf("应付款数=%.2f",h);}
else if(w>100)
{h=w*0.95;
printf("应付款数=%.2f",h);}
else
{h=w;
printf("应付款数=%.2f",h);}
}
结果预览:
实验问题:注意else和if的配对,用switch结构来描述这程序的时候,不要忘了加上break,使其形成相互独立的结构。
6、实验练习4.3.3
实验代码:
#include<stdio.h>
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);
}
结果预览:
实验问题:if语句表达式要注意优先级,而且switch结构中也要用break来形成相互独立的switch执行语句。
7、实验练习4.2.4(3)
实验代码:
#include <stdio.h>
main()
{
float x,y;
char op;
printf("输入表达式");
scanf("%f%c%f",&x,&op,&y);
switch(op)
{
case '+':printf("%f%c%f=%f",x,op,y,x+y);break; //匹配加法
case '-':printf("%f%c%f=%f",x,op,y,x-y);break; //匹配减法
case '*':printf("%f%c%f=%f",x,op,y,x*y);break; //匹配乘法
case '/':if(y!=0)
{
printf("%f%c%f=%f",x,op,y,x/y);break;}
else
{
printf("除数为零");break;}//匹配除法
default:printf("表达式错误");break;
}
结果预览:
实验问题:匹配除法时要特别住注意y是否为零,所以要在匹配除法的时候要加上判断,而且在switch结构中要判断哪些语句要形成独立结构,从而加上break使其成为独立的执行结构。
思考:要使该简单模拟计算器可以循环使用,则需要在程序中加入循环语句,并且使循环语句中的判断恒为真。故我们可以在定义变量的步骤下面加上while循环语句。
三、实验小结
1、通过实验,对于if语句和switch语句的运用更加熟练,而且对于简单算法有了个初步认识,对于算法流程图有进一步的理解;
2、在实验中对分支结构的运用,加强了对if语句理解,以及掌握了if嵌套语句中else和if配对的方法;
3、明白了switch语句中break的作用,并且能够根据条件决定是否需要使用break在switch语句中形成独立结构;