c语言---switch的用法

HELLO,大家好,又是我,clive。两天没有更新博客了,一直在忙开学的事情。好了,让我们进入正题,今天我们来讲一下switch的用法。
用switch语句实现多分支选择结构
首先我们来看一道例题
1.要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为7084分,C等为6069分,D等为60分以下。成绩的等级由键盘输入。
代码如下

#include<stdio.h>
int main()
{
    char grade
    scanf("%c,&grade)
    printf(Your score: )
    switch(grade)
    {
        case'A': printf("85-100\n");break;
        case'B': printf("70-84\n");break;
        case'C': printf("60-69\n");break;
        case'D': printf("<60\n");break;
        default: printf("enter data error!\n");
    }
    return 0;
}

运行如下:
在这里插入图片描述
等级 grade定义为字符变量,从键盘输入一个大写字母,赋给变量 grade, switch得到 gradel的值并把它和各case中给定的值(A,B,C"D之一)相比较,如果和其中之一相同(称为匹配),则执行该case后面的语句(即 printf语句)。如果输入的字符与A,B,C,D都不相同,就执行 default后面的语句,注意在每个case后面后的语句中,最后都有一个 break语句,它的作用是使流程转到 switchi语句的末尾(即右花括号处)。
在这里插入图片描述
干货来了
(1)括号内的"表达式",其值的类型应为整数类型(包括字符型)。
(2)花括号内是一个复合语句,内包含多个以关键字case开头的语句行和最多一个以 default开头的行。case后面跟一个常量(或常量表达式),它们和 default都是起标号作用,用来标志一个位置。执行switch语句时,先计算 switch后面的"表达式"的值,然后将它与各case标号比较,如果与某一个case标号中的常量相同,流程就转到此case标号后面的语句。如果没有与 switch表达式相匹配的case常量,流程转去执行 default标号后面的语句。
(3)可以没有 default标号,此时如果没有与 switch表达式相匹配的case常量,则不执行任何语句。
(4)各个case标号出现次序不影响执行结果。
(5)每一个case常量必须互不相同;否则就会出现互相矛盾的现象。
(6)case标号只起标记的作用。在执行 switch语句时,根据 switch表达式的值找到匹配的入口标号,在执行完一个case标号后面的语句后,就从此标号开始执行下去,不再进行判断。因此,一般情况下,在执行一个case子句后,应当用 break语句使流程跳出 switchs结构。最后一个case子句(今为 default子句)中可不加 break语句。
(7)在case子句中虽然包含了ー个以上执行语句,但可以不必用花括号括起来,会自动顺序执行本case标号后面所有的语句。当然加上花括号也可以。
(8)多个case标号可以共用一组执行语句。
干货说完,我们来实践一下
2.用 switchi语句处理菜单命令。在许多应用程序中,用菜单对流程进行控制,例如从键盘输入一个A或a字符,就会执行A操作,输入ー个B或b字符,就会执行B操作。

#include <stdio.h>
int main()
{
    void action1(int;int),action2(int,int);//函数声明
    char ch;
    int a=15,b=23;
    ch=getchar();
    switch(ch)
    {
        case'a';
        case'A': action1(a,b);break;//调用 action1函数,执行A操作
        case'b';
        case'B'; action2(a,b); break;//调用 action2函数,执行B操作
             .
             .
             . 
        default: putchar('\a');//如果输入其他字符,发出警告
    }    
    return O;
}

void action1(int x,int y)是执行加法的函数,即{printf(“x+y=%d\n”,x+y);
void action2(int x,int y)是执行乘法的函数,即{printf("xy=%d\n",xy);
在这里插入图片描述
代码如下:

#include <stdio.h>
int main()
{
    int c,s;
    float p,w,d,f;
    printf("please enter price,weight,discount:");//提示输入的数据
    scanf("%f,%f,%d",&p,&w&s);//输入单价、重量、距离
    if(s>=3000)
    c=15;//3000km以上为同一折扣
    else c=s/250;//3000km以下各段折扣不同,c的值不相同
    switch(c)
    {
        case 0:d=0;break;//c=0,代表250km以下折扣d=0
        case 1:d=2;break;//c=1,代表250~500km以下折扣d=2%
        case 2:
        case 3:d=5;break;//c=2和3,代表500~1000km折扣d=5%
        case 4:
        case 5:
        case 6:
        case 7:d=8;break;//c=4~7,代表1000~2000km.折扣d=8%
        case 8:
        case 9:
        case 10:
        case 11:d=10;break;//c=8~11,代表2000~3000km折扣d=10%
        case 12:d=15;break;//c12,代表3000km以上,折扣d=15%
    }
    f=p*w*s*(1-d/100);//计算总运费
    printf("freight=%10.2f\n",f);//计算总运费,取两位小数
    return 0;
}

在这里插入图片描述
今天就先讲这两道例题吧,明天接着讲关于switch的习题。

  • 17
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值