第二次试验报告

实验项目简单算法&分支结构
姓名:杨伟宏      实验时间: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语句中形成独立结构;

四、思维导图

posted on 2021-04-17 11:27  睦晨  阅读(66)  评论(0编辑  收藏  举报