第二次实验报告

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、实验练习:if语句的应用(4.3.1)

1问题的简单描述:读入三个数分别表示箱子的长、宽、高的整数值,判断并输出该箱子是正方体还是长方体。
2实验代码:(需要使用MARKDOWN插入代码。)

#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问题分析:
C语言跟数学表达式有差别的,我们都习惯了数学的表达式,而在C语言编程环境中要用到C语言的逻辑关系&& 在这个编程题中lwh,这是我们数学中的表达,而在C语言环境中,我们要用到逻辑与。

2、2、实验练习:switch/case语句的应用(4.3.2)

1问题的简单描述:编一程序实现如下功能:商店有打印纸(18元/本)、墨盒(132元/个)、光盘(4.5元/片)出售,商店进行优惠活动。具体做法如下:顾客购买商品的总额达到了100元,优惠5%;达到了200元以上,优惠6%;达到了300元以上,优惠7%;达到了400元以上,优惠8%;达到了500元以上,优惠10%。根据不同的购买量,打印应付款。
2实验代码:

#include <stdio.h>
main()
{
	int a,b,c,x;
	float sum,money;
	printf("请输入打印纸、墨盒、光盘的数量: 
");
	scanf("%d,%d,%d",&a,&b,&c);
	sum=a*18+b*132+c*4.5;
	x=sum/100;
	switch (x)
	{
		case 1:money=sum*0.95;break;
		case 2:money=sum*0.94;break;
		case 3:money=sum*0.93;break;
		case 4:money=sum*0.92;break;
	    default:money=sum*0.90;break;
	}
	printf("应付款数= %.2f",money);
	return 0;
}

3问题分析:
这个编程题我用到的是switch结构,刚开始我在case后面的常量表达式那卡住了,因为后面的那个范围,我不知道该怎么表示,一开始我用的是最浅显的表示方法100<=sum<200,就这样以此类推,可是程序一直报错,我想了很久没想出来其他表达方式,然后先写完的同学上去讲,我发现他们的解决办法很棒,可是我想了很久没想出别的有效的方式,最后还是用了那个x=sum/100.

3、实验练习:switch/case语句嵌套if语句的应用(4.3.3)

1问题的简单描述:输入某一年月,输出该月的天数。2实验代码:

#include <stdio.h>
main()
{
	int year,month,days;
	printf("Pleas enter yaer and month:
");
	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);
	return 0;
}

3问题分析:
首先要知道怎么算润年(能被4整除但不能被100整除,或者能被400整除。)在C语言编程中表达出来的话我用了逻辑关系(year%40&&year%100!=0||year%4000) ,然后就是用到了switch结构因为答曰都是31天,小月都是30天,所以可以用到break来简洁代码。

4、实验练习:switch/case结构的嵌套应用(4.3.4)

1问题的简单描述:编写一个自动售货机的程序。该程序应具如下功能:有二级菜单,一级菜单是商品类型的选择,二级菜单是具体商品的选择(商品价格和品种可以自拟)。顾客先选择商品类型,然后选择具体商品,输入购买数量。自动售货机根据选择的商品和输入的数量,计算出所选商品总金额。
2实验代码:

#include <stdio.h>
int main()
{
	int x,n,y;
	float sum;
	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问题分析:
用switch结构更简单明了。

5、实验练习:判断最后z等不等于0(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问题分析:
这个编程题输出的z=0.000000,但是z并不是为0,这里是因为用了float z,所以z输出的是0.000000,但是实际上z并不是0,所以输出的是z不等于0.

6、实验练习:原先的程序运行有误,请修改程序,使其输出正确地结果。(4.3.5.2)

1问题的简单描述:运行下列程序,分析错误的原因,并修改程序,使其输出正确地结果。
2实验代码:

#include <stdio.h>
main()
{
	int num=20;
	if(5<num<10)
	    printf("%d in range (5,10)!
",num);
	else
	    printf("%d out of range (5,10)!
",num);
}

改了的代码:

#include <stdio.h>
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);
}

3问题分析:
这个题就是说C语言环境中跟数学表达方式不一样,加上逻辑与就能对了。

改了以后:

三、实验小结

    第二次写实验报告,这回做实验的我明显比以前的我会更好一点,这是肯定的嘛,人都是在不足中慢慢变强的,我还是很垃圾,很多时候不能想到那些不好表达的语言(用C语言语言来表达),第四章分支结构更多的是逻辑关系,还有一个字重点就是数学的表达跟C语言的表达有差别,不能直接的等同,所以我们编程的时候可能程序并没有报错,可是结果就是不太对,这个时候就要想想是不是表达上出错了。还有就是switch结构,好用又不太好用,它比较细,我们用的时候也要细心的看着点。
原文地址:https://www.cnblogs.com/wangyuqing1126/p/10667723.html