C语言实验(三)

て烟熏妆下的殇ゞ 提交于 2020-03-28 17:45:28

第四章分支结构实验

实验项目:第四章实验设计

实验项目:4.3.1  if语句的应用 ,4.3.2  switch case的应用 ,4.3.3  switch case嵌套if语句的应用 ,4.3.4  switch case结构嵌套的运用 ,4.3.5  分析程序,  计算器。

姓名:蔡鹏 实验地点:家中  实验时间:2020.03.25

实验目的与要求:

1、掌握各种形式的if语句语法和使用方法


 

2、掌握使用算术运算符和运算规则,switch  case语句的使用方法


 

3、掌握switch  case结构的嵌套使用,break语句的用法


 

4、熟练掌握C语言的运算符,即运算符的优先级和结合性、运算规则、运算对象类型等。


 

 实验内容:

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

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


 

(2)实验代码:

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

 

(3)问题分析:比较长,宽,高用 l==w&&w==h&&l==h


 

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

 

(3) 问题分析:购买商品的总额=打印纸数x18(元) +墨盒數x 132 (元)+光盘数x4.5(元),当sum≥100.元时,给予相应的优惠,将sum/100,使用switch语句判定优惠率。


 

 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%400==0)||((year%4==0)&&(year%100!=0)))
           days=29;
           else
           days=28;
           break;
    case 1:days=31;break;
    case 3:days=31;break;
    case 4:days=30;break;
    case 5:days=31;break;
    case 6:days=30;break;
    case 7:days=31;break; 
    case 8:days=31;break;   
    case 9:days=30;break;
    case 10:days=31;break;
    case 11:days=30;break;
    case 12:days=31;break;
    }
    printf("%d年%d月有%d天",year,month,days);
    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("数量?\n");
           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 ("数量?\n");
           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("数量?\n");
           scanf ("&d",&n);
           switch(y)
           {
           case 1:sum=3.6*n;break;
           case 2:sum=n;break;
           case 3:sum=2*n;break;
           case 4:sum=3.6;break;
           }
    break;
    }
    printf("总计:%.2f元",sum);
}

 

(3) 问题分析:代码编写过程中中英文输入法切换容易出错


5.实验练习:4.3.5

问题的简单描述:找出代码错误的地方,并更改。


 

实验代码(1) :

#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);
}

 

 

 

实验代码(2):

#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);
}

 

 问题分析:确定值是否在区间的判断不能直接直接5<num<10,需要用到5<num&&num<10


 

 6.实验练习:计算器

(1)问题描述:模拟一个简单计算器,进行两位数的加减乘除的计算

 (2)具体分析:

( 1 )程序接收用户输人的算术表达式,表达式包含两个操作数、一个操作符,因此用float型声明两个变量,用于保存操作数的值,用char型声明- - 个变量,用于保存操作符( +.-.*./)。


(2)采用switch--case结构,根据操作符的种类不同,进行不同的运算。

(3)考虑除法的特殊情况,即当除数为零时,出现.异常。

(4)考虑用户输人非法操作符的情况。

流程图:

(3)实验代码:

#include<stdio.h>
main()
{
    float a,b;
    char c;
    printf("请输入两位数进行运算:");
    scanf("%f%c%f",&a,&c,&b);
    switch(c)
    {
        case'+':printf("%.2f+%.2f=%.2f\n",a,b,a+b);
        break;
        case'-':printf("%.2f-%.2f=%.2f\n",a,b,a-b);
        break;
        case'*':printf("%.2f*%.2f=%.2f\n",a,b,a*b);
        break;
        case'/':printf("%.2f/%.2f=%.2f\n",a,b,a/b);
        break;
        default:printf("输入有误"); 
    }
}

实验小结:

在本次的实验过程中用到了if语句以及switch语句,通过实验过程去使用和掌握各种形式的if语句语法和使用方法,if语句中if和else的匹配关系和if语句的嵌套,switch语句的使用。if语句已经很熟练了,switch语句还是不怎么会用,尤其是break语句的用法及switch语句的嵌套。计算器没有进一步的扩展功能,只能进行简单的计算没有将循环运用到里面去,也不能进行差错的控制,没有解决0不能做被除数的问题,在以后学习过程中,多向那些代码写的好的人学习,从中找到新知识,得到进步,提高自己。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!