C语言第三次实验报告

C程序设计实验报告

姓名:熊毅

实验地点:家

实验时间:2020.3.25

实验项目:

1、4.3.1if语句的应用
2、4.3.2switch-case的应用
3、4.3.3switch-case嵌套if语句的应用
4、4.3.4switch-case结构嵌套的运用
5、4.3.5分析程序
6、项目课外练习:计算器的实现

一、实验目的与要求

1.掌握C语言逻辑值的表示方法(0代表“假”,1代表“真”)。
2.学会正确使用关系表达式和逻辑表达式。
3.掌握各种形式的if语句用法和使用方法。if语句中if和else的匹配关系,以及if语句的嵌套。
4.熟练掌握switch语句的语法和使用方法,注意在switch语句中break语句的用法及switch语句的嵌套。

二、实验内容

1、实验练习:实验3.4.1if语句的应用
1问题的简单描述:读入3个表示箱子的长、宽、高的整数值,判断并输出该箱子是正方体还是长方体。
2实验代码:

#include<stdio.h>
int main()
{
    int i,w,h;
    printf("请输入箱子的长、宽、高:\n");
    scanf("%d%d%d",&i,&w,&h);
    if(i==w&&w==h)  //如果长、宽、高相等,则为正方形//
	    printf("该箱子是正方体。\n");
    else
	    printf("该箱子是长方体。\n");
    return 0;
}

3问题分析:逻辑运算符&&的使用,之前直接用iwh,导致无法得出正确结果。

2、实验练习:实验4.3.2 switch.....case语句的应用

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

#include<stdio.h>
main()
{
    float x,y,z,w;
    int sum;
    printf("请输入打印机、墨盒、光盘的数量:\n");
    scanf("%f %f %f",&x,&y,&z);
    sum=((x*18+y*132+z*4.5)/100);
    switch(sum)
    {
	    case 0:w=(x*18+y*132+z*4.5);
	    break;
	    case 1:w=0.95*(x*18+y*132+z*4.5);
	    break;
	    case 2:w=0.94*(x*18+y*132+z*4.5);
	    break;
	    case 3:w=0.93*(x*18+y*132+z*4.5);
	    break;
	    case 4:w=0.92*(x*18+y*132+z*4.5);
	    break;
	    case 5:w=0.90*(x*18+y*132+z*4.5);
	    break;
	    default:w=0.90*(x*18+y*132+z*4.5);
	    break;
    }
    printf("计算结果为: %.2f",w);
 } 

3问题分析:对折扣的理解不够到位,导致计算折扣的公式错误。

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)
		           printf("day=29");
		        else
		           printf("day=28");
		        break;
	    case 1:
	    case 3:
	    case 5:
	    case 7:
	    case 8:
	    case 10:
	    case 12:printf("day=31");break;
	    case 4:
	    case 6:
	    case 9:
	    case 11:printf("day=30");
	            break;
	return 0;
	}
}

3问题分析:无

4、实验练习:实验4.3.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问题分析:英文半角和中文输入的转换,以及嵌套规则。

5、实验练习: 实验4.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=%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.3.5.2

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

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

4问题分析:逻辑运算符&&的使用

三、项目实训:计算器的实现

1、设计思路:用代码进行简单的四则运算,同时具有循环使用功能,和对除数进行判断的情况。
2、流程图:

3、设计过程中遇到的问题及改进的方法:
①开始时代码:

#include<stdio.h>
void main()
{
	int x,y,z;char c;
	scanf("%f%c%f",&x,&c,&y);
	switch ( c )
 {
    case '+': z=x+y; break;
    case '-': z=x-y; break;
    case '*': z=x*y; break;
    case '/': z=( y==0 )?(0):(x/y); break;
    default: z=0; break;
  }
	printf("%f%c%f=%f\n",x,c,y,z);
}

②问题分析:代码不为0的处理不对。
③解决问题:考虑代码不为零的情况,对被除数进行分类讨论是否为0.以及将int改为float,因为除法可能涉及到小数,因此定义为浮点型。
4、代码:

#include<stdio.h>
void main()
{
	float x,y,z;char c;
	printf("简单计算器");
	printf("例如“1+2,2-1,2*3,3/4”"); 
	scanf("%f%c%f",&x,&c,&y);
	switch ( c )
 {
    case '+': z=x+y; break;  //加法运算// 
    case '-': z=x-y; break;  //减法运算// 
    case '*': z=x*y; break;  //乘法运算// 
    case '/': 
    	if(y==0) 
    		printf("输入错误!!!");
		else
			z=x/y;break;     //除法运算// 
    default: z=0; break;
  }
	printf("%f%c%f=%f\n",x,c,y,z);
}

四、实验小结(剖析个人得失)

①得:对于本次实验,巩固了对if分支语句的理解,以及学会了正确使用C语言的逻辑运算符、关系表达式和逻辑表达式,还学会了if...else语句的使用。
②失:就拿制作计算器而言,在现实做计算题时,尤其是在做除法运算时,我们首先会考虑被除数不为0的情况,而在用C语言制作程序时而忘了这一点,这是不应该的。其次对与循环功能使用的不够流畅,所以在制作计算器时想用循环功能也无能为力,所以希望今后能对该部分进行加强训练。

猜你喜欢

转载自www.cnblogs.com/Xiongyi1218/p/12589189.html