zoukankan      html  css  js  c++  java
  • 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("请输入箱子的长、宽、高:
    ");
        scanf("%d%d%d",&i,&w,&h);
        if(i==w&&w==h)  //如果长、宽、高相等,则为正方形//
    	    printf("该箱子是正方体。
    ");
        else
    	    printf("该箱子是长方体。
    ");
        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("请输入打印机、墨盒、光盘的数量:
    ");
        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:
    ");
    	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.食品
    ");
    	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问题分析:英文半角和中文输入的转换,以及嵌套规则。

    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
    ",x);
    	printf("y=%lf
    ",y);
    	printf("z=%lf
    ",z);
    	if(z==0) printf("z==0.
    ");
    		else printf("z不等于0.
    ");
    	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)!
    ",num);
    	else
    		printf("%d out of range (5,10)!
    ",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
    ",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
    ",x,c,y,z);
    }
    

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

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

  • 相关阅读:
    HDU 1874 畅通工程续(dijkstra)
    HDU 2112 HDU Today (map函数,dijkstra最短路径)
    HDU 2680 Choose the best route(dijkstra)
    HDU 2066 一个人的旅行(最短路径,dijkstra)
    关于测评机,编译器,我有些话想说
    测评机的优化问题 时间控制
    CF Round410 D. Mike and distribution
    数字三角形2 (取模)
    CF Round410 C. Mike and gcd problem
    CF Round 423 D. High Load 星图(最优最简构建)
  • 原文地址:https://www.cnblogs.com/Xiongyi1218/p/12589189.html
Copyright © 2011-2022 走看看