第三章 多项选择问题(二)

前言

在编程时,常常会遇到多项选择问题,在c语言中有两种方式处理多项选择问题,一种是采用else-if形式的if语句,这是处理多项选择最常见的方式,另一种是switch语句,它限制了某个选项的方式但是也提供了一种非常简洁且便于理解的解决方案

else-if 语句

#include <stdio.h>
int main(void)
{
    int a;
    scanf("%d",&a);
    if(a==1)
    printf("1");
    else  if(a==2)
    printf("2");
    else  if(a==3)
    printf("3");
    else if(a==4) 
    printf("4");
    else
    printf("5");


 }  

每个if表达式均可任意,只要其结果是true或false即可,如果第一个if表达式(a==1)时false,就执行下一个if,如果第二个if表达式(a==2)时false,就执行下一个if,直到找到一个结果为true的表达式为止,如果if条件都为false,就执行最后一个else

switch 语句

switch语句允许根据一个整数表达式的结果,从一组动作中选择一个动作,假定有一个彩票店,数字35可赢得一等奖,122可赢得二等奖,78可赢得三等奖,代码如下

#include <stdio.h>
int main(void)
{
    int zjh;  //变量中奖号
    scanf("%lf",&zjh);  //输入中奖号
    switch(zjh)  //zjh不能为浮点数
    //括号中表达式的值zjh,它确定执行那些语句,zjh的值与case指定的语句匹配,就执行case后面的语句
    {
        case 35: 
        printf("你获得了一等奖");
        break; //break的作用是跳过大括号中的其他语句
        case 122:
        printf("你获得了二等奖");
        break;
        case 78:
        printf("你获得了三等奖");
        break;
        default:   //如果都不对应任何case的值,就执行default后面的语句
        printf("抱歉!没有中奖");
        break;
    }   
 }

switch语句流程图

switch的一般形式如下

switch(integer_expression)
{
   case constant_expression_1:
     statements_1;
     break;
     ····
    case constant_expression_n: 
     statements_n;
     break;
    default:
     statements;
     break;
 }

还可以使用char值的表达式作为switch的控制表达式:如下代码区分元音字母和辅音字母

#include <stdio.h>
int main(void)
{
    char ch; 
    printf("请输入字母");
    scanf("%c",&ch);
    switch(ch)
    {
        case 'a':case'e':case'i':case'o':case'u':
        printf("你输入的是元音字母");
        break;
        case'b':case'c':case'd':case'f':case'j':case'k':case 'l':
        case'm':case'n':case'p':case'q':case'r':case 's':case't':
        case'v':case'w':case'x':case'y':case'z':
        printf("你输入的是辅音字母");
        break; 
        default:
        printf("输入有误");
        break; 
    }
}

使用<ctype.h>头文件声明isalpha()函数,会大大缩减代码。如果作为参数传入的字符是字母,isalpha()函数就会返回一个非零整数(true),否则返回(false).

#include <stdio.h>
#include <ctype.h>
int main()
{
      char ch;
      printf("请输入字母");
      scanf("%c",&ch);
      if(!isalpha(ch))   //如果不是大小写字母ch的值就是true,就执行printf,
       printf("输入有误");
       else
         {
             switch(tolower(ch)) //(tolower(ch)将ch的值转化为小写
               {
                   case'a':case'e':case'i':case'o':case'u':
                       printf("你输入的是元音字母");
                       break;
                default:
                printf("你输入的是辅音字母");
                break;        
               }
          } 
}

< ctype.h > 头文件好可以声明其他函数:

函数 测试内容
islower() 小写字母
isupper() 大写字母
isalnum() 大写或小写字母,或十进制数字
iscntrl() 控制字符
isprint() 可打印字符包括括号
isgraph() 可打印字符不包括括号
isdigit() 十进制数字0~9
isxdigit() 十六进制数字(0~9,A~F,a~f)
isblank() 标准空白字符(空格,\t)
isspac() 空位字符(空格,\n,\t,\v,\r,\f)
ispunct() isspace()和isalnum()返回false的可打印字符
isalpha() 大写或小写字母
tolower() 转换为小写形式
toupper() 转换为大写形式

goto语句

goto语句是一个比较生硬的指令,它可以无条件的改变程序的顺序,goto语句会直接跳转到指定的位置,无需检查任何值或者要求用户考虑这是否是他希望执行的操作

goto 语句的语法:

goto label;
···
···
label: statement;

在这里,label 可以是任何除 C 关键字以外的纯文本,它可以设置在 C 程序中 goto 语句的前面或者后面。

#include <stdio.h>
int main()
{
     printf("1");
     printf("2");
goto there;   //跳转到下一个 there;
     printf("3");
     printf("4");
 there:       //跳到这里开始执行
     printf("5");
     printf("6");
}
输出结果 1256

goto语句执行流程图