第四章分支结构实验

C程序设计实验报告(三)

♦实验项目:4.3.1 if语句的应用;4.3.2 switch...case语句的应用;4.3.3 switch...case语句嵌套if语句;4.3.4 switch...case结构嵌套;4.3.5 分析程序;4.3.5(1)分析程序并改错

♦姓名:聂石燕     

♦实验地点:家中

♦实验时间:2020.03.25

一、实验目的与要求

1、掌握C语言逻辑值的表示方法(0代表“假” ,1代表“真”)。
2、学会正确使用关系表达式和逻辑表达式。
3、掌握各种形式的if语句语法和使用方法。注意if语句中if和else的匹配关系,以及if语句的嵌套。
4、掌握switch语句的语法和使用方法。注意在switch语句中break语句的用法及switch语句的嵌套。
5、能独立编写分支结构程序并调试通过。
6、用if语句、switch语句解决简单的应用问题并上机实现。

二、实验内容

1、实验练习:4.3.1 if语句的应用

1问题的简单描述:输入3个代表箱子长、宽、高的整数值,判断并输出该箱子是正方体还是长方体。

2实验代码:(需要使用MARKDOWN插入代码。)

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

 

3问题分析:(重点分析在实验过程中出现的问题,及解决方法。)

      注意 逻辑与 && 的表达。

 

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()
{
    int a,b,c,x,sum;
    //a、b、c分别代表打印纸、墨盒和光盘的数量,x用来判断优惠率 
    float y,d;
    //sum代表购买商品总额,y代表优惠后应付款额 ,d代表优惠率 
    printf("请输入打印纸、墨盒、光盘的数量:\n");
    scanf("%d%d%d",&a,&b,&c);
    sum=18*a+132*b+4.5*c;
    x=sum/100;//判断优惠率    
    switch(x)
    {
        case 0:d=0;break;
        case 1:d=0.05;break;
        case 2:d=0.06;break;
        case 3:d=0.07;break;
        case 4:d=0.08;break;        
        default:d=0.1;break; 
    } 
    y=sum*(1-d);//最终的应付款数 
    printf("应付款数:%.2f 元\n",y); 
}

 

3问题分析 代表优惠率,用 x=sum/100 来判断优惠率,这样进行计算更方便,代码也更简洁明了。

 

3、实验练习:4.3.3 switch...case语句嵌套if语句

1问题的简单描述:输入某一年、月的数值,输出该月的天数。

2实验代码:

#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))//判断是否是闰年
        {
            days=29;
            printf("%d年%d月有%d天\n",year,month,days);break;
        }    
        else
            days=28;
            printf("%d年%d月有%d天\n",year,month,days);break;
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:days=31; //以上月份的天数
        printf("%d年%d月有%d天\n",year,month,days);break;
        case 4:
        case 6:
        case 9:
        case 11:days=30;
        printf("%d年%d月有%d天\n",year,month,days);break;     
    }
    
}

 

3问题分析:问题:输入 (2020 2)  输出 (2020年1月有31天)

                   分析:在判断是否为闰年那里,少打了一个 break

4、实验练习:4.3.4 switch...case结构嵌套

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

2实验代码:

#include<stdio.h>
main()
{
    int x,n,y;
    float sum;
    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);
}

3问题分析:代码比较长,中文也比较多,注意中英文的切换。

 

5、实验练习:4.3.5 分析程序

1问题的简单描述:分析程序。

2实验代码:

#include<stdio.h>
main()
{
    double x=1000/3.0;
    double y=x-33.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问题分析:double定义的双精度实数型数据,字节长度为 8

 

6、实验练习:4.3.5(1)分析程序并改错

1问题的简单描述:条件表达式num大于等于5且小于等于10,表达错误。

2实验代码:

原代码:
#include<stdio.h>
int main()
{
    int num=20;
    if(5<num<10) 
        printf("%d in range (5,10)!\n",num);
    else
        printf("%d out of range (5,10)!\n",num);
}
 
改错后的代码:
#include<stdio.h>
int main()
{
    int num=20;
    if(num>=5&&num<=10)
        printf("%d in range (5,10)!\n",num);
    else
        printf("%d out of range (5,10)!\n",num);
}

 

3问题分析:5<num>10,这是数学中的表达方式;在C语言中我们可以用逻辑表达式(逻辑与 && )来表达,num>=5&&num<=10 。

 

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

1、设计思路:设计一个能循环多次计算两个数的加、减、乘、除的简单计算器。(只能进行两个数的四则运算)

    首先,选择运算符号;其次,输入要计算的两个数;然后用switch...case结构判断、计算并输出相应的结果;最后,用while()语句实现多次循环计算,再用if语句结束循环。

    特别注意:计算除法时,除数不能为零,要如何正确表达。

2、流程图:

3、设计过程中遇到的问题及改进的方法:

问题:♦怎样实现多次计算

           ♦怎样让实验代码更规范、简洁明了。

           ♦除数不能为零,该如何表达。

改进的方法:

           ♦为了实现多次计算,我用了while()循环语句,先判断后循环。while(1)表示为真,进行无限重复;结束循环用 if 语句,break 。

           ♦while(1)表示为真,进行无限重复;结束循环用 if 语句break

           ♦关于getchar( ) 函数,我是参考了书和网上的资料。(也没有完全弄明白)

4、代码:

#include<stdio.h>
main()
{
    while(1)
    {
        float x,y,z;
        int a;
        printf("请输入你的选择\n");
        printf("   1. +  \n");
        printf("   2. -  \n");
        printf("   3. *  \n");
        printf("   4. /  \n");
        scanf("%d",&a);
        printf("请输入两个数(1000000以内),中间用逗号隔开:\n");
        scanf("%f,%f",&x,&y);
        switch(a) //判断运算符号 
        {
            case 1:z=x+y;printf("%f+%f=%f",x,y,z);break;
            case 2:z=x-y;printf("%f-%f=%f",x,y,z);break;
            case 3:z=x*y;printf("%f*%f=%f",x,y,z);break;
            case 4:
                 if(y!=0) //判断除数是否为零 
                 {
                     z=x/y;
                     printf("%f/%f=%f",x,y,z);break; 
            
                 }
                 else
                     printf("除数不能为零,请重新输入!\n");
                
        }
        getchar();
        printf("\n b 继续计算,c 退出\n");
        if(getchar() =='c') 
        break;          
    }
}

 

 ♥ 运行结果:

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

这次实验主要是第四章分支结构的实验,主要涉及 if 结构和 switch 结构。我对 if 结构的应用倒是比较熟悉了,对于switch...case语句不熟练,有时候会忘记 break 。前面的五个实验都没有太大的问题,但是设计一个计算器真的难,遇到了很多问题。实现多次计算要用到循环结构,这就要我们自己去看书查资料,提前把循环结构熟悉一下。我们要学习别人好的地方,真真实实地把它弄明白,创造出属于自己的东西。

posted @ 2020-03-28 19:59  石燕  阅读(283)  评论(0)    收藏  举报