打印

用if语句和switch语句实现选择结构程序

[复制链接]
6071|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sttstt|  楼主 | 2014-12-26 21:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
if语句
if语句是一种用来实现选择结构程序的语句。
一、if语句的四种形式:
 1.单分支if语句
     一般形式为:if  (表达式)  {语句组}
含义:若表达式为真,执行语句,否则执行if后面的语句组。

2.双分支if语句
一般形式为:if  (表达式)  {语句组1}
            else   {语句组2}
含义:若表达式为真,执行语句组1,否则执行语句组2。

例题:
输入任意三个整数num1、num2、num3,求三个数中的最大值。
main()
{int num1,num2,num3,max;
  printf("请输入三个数:");
  scanf("%d,%d,%d",&num1,&num2,&num3);
  if (num1>num2)
       max=num1;
  else
       max=num2;
  if (num3>max)
       max=num3;
  printf("这三个数是:%d,%d,%d\n",num1,num2,num3);
  printf("max=%d\n",max);

3. 多分支选择结构的if语句
     if(表达式1) {语句组1;}
           else if(表达式2) {语句组2;}
                     else if(表达式3) {语句组3;}
                          .
                          .
                          .
                                else if(表达式m) {语句组m;}
                              else {语句组m+1;}

例题:
从键盘上输入一个百分制成绩score,按下列原则输出其等级:score≥90,等级为A;80≤score<90,等级为B;70≤score<80,等级为C;60≤score<70,等级为D;score<60,等级为E。
main( )
{ int  score;
  scanf(“%d”, &score);
if ( score<60)  printf(“%c” , ’E’);
   else if ( score <70)  printf(“%c” , ’D’);
         else if (score <80)
                  printf(“%c” , ’C’);
                else if (score <90)
                        printf(“%c” , ’B’);
                       else
                            printf(“%c” , ’A’);

4.If语句的嵌套:
If语句的嵌套:
在上述3种if语句结构中,当if(表达式)或else后面的语句本身又是一个if语句结构时,就形成了if语句的嵌套结构。
if 语句的二层嵌套结构如下:
if ( 表达式)
  if ( 表达式1)
        {语句11};
  else
        {语句12};
else
  if ( 表达式2)
        {语句21};
else
       {语句22};
功能:判断表达式的值,若为非0,再判断表达式1的值,非0执行语句11,否则执行语句12
若表达式的值为0,再判断表达式2的值,非0执行语句21,否则执行语句22

例题1:

已知y(x)=-1(x<0) ,y(x)=0(x=0),y(x)=1(x>0),编写程序输入一个X 的值,输出Y值。
程序为:              
              main( )
             { int  x, y;
                    scanf(“%d”,&x);
                    if(x<0)  y=-1;   
                    else if(x== 0)  y=0;
                              else   y=1;
                    printf(“x=%d,  y=%d\n”, x, y);
             }
例题2:
写一程序,从键盘上输入1年份year(4位十进制数),判断其是否闰年。闰年的条件是:能被4整除、但不能被100整除,或者既能被100整除,又能被400整除。
算法设计要点:
(1)如果X能被Y整除,则余数为0,即如果X%Y的值等于0,则表示X能被Y整除!
(2)首先将是否闰年的标志leap预置为0(非闰年),这样仅当year为闰年时将leap置为1即可。这种处理两种状态值的方法,对优化算法和提高程序可读性非常有效,请仔细体会。参考程序如下:

main()
{
  int  year,leap=0;/* leap=0:预置为非闰年*/
  printf("Please input the year:");
  scanf("%d",&year);
  if (year % 4==0)     
      {
       if (year % 100 != 0)     leap=1;
       else     
           if (year%400==0)     leap=1;
     }
  if (leap==1)   
      printf("%d is a leap year.\n",year);
  else  
     printf("%d is not a leap year.\n",year);
}

说明:
(1)条件后面不加分号
(2)语句之后有分号
(3)else不是语句,不能单独使用
(4)当if后有多个执行语句时,必须用{ }将多
   个语句括起来,构成一个复合语句, { }之外不必有分号。
二 switch语句
C语言提供了switch语句直接处理多分支选择。
switch(表达式)
{   case  常量表达式1:语句组1    [break;]
     case  常量表达式2:语句组2    [break;]
     ……
     case  常量表达式n:语句组n    [break;]
     [default: 语句组n+1]
}
执行过程
(1)当switch后面“表达式”的值,与某个case后面的“常量表达式”的值相同时,就执行该case后面的语句(组);当执行到break语句或switch语句中的最后一条语句时,跳出switch语句,转向执行switch语句的下一条。

(2)如果没有任何一个case后面的“常量表达式”的值,与“表达式”的值匹配,则执行default 后面的语句(组)。然后,再执行switch语句的下一条。

例题:
从键盘上输入一个百分制成绩score,按下列原则输出其等级:score≥90,等级为A;80≤score<90,等级为B;70≤score<80,等级为C;60≤score<70,等级为D;score<60,等级为E。
main()
{int  score, grade;
  printf(“请输入成绩(0~100): ”); scanf(“%d”, &score);
  grade = score/10;  
/*将成绩整除10,转化成switch语句中的case标号*/
  switch (grade)
{case  10:
  case    9: printf(“grade=A\n”); break;  
  case    8: printf("grade=B\n"); break;
  case    7: printf("grade=C\n"); break;
  case    6: printf("grade=D\n"); break;
  case    5:  case    4:
  case    3:
  case    2:
  case    1:
  case    0: printf(“grade=E\n”); break;
  default: printf(“分数不在范围内!\n”);       
}
}       






相关帖子

沙发
keer_zu| | 2014-12-27 11:23 | 只看该作者
采用好的数据结构可以减少if else.switch的使用,增加程序可读性,可扩展性也有所改善。

使用特权

评论回复
板凳
sttstt|  楼主 | 2014-12-28 20:24 | 只看该作者
哦哦

使用特权

评论回复
地板
sttstt|  楼主 | 2014-12-28 20:44 | 只看该作者

使用特权

评论回复
5
sttstt|  楼主 | 2014-12-28 20:52 | 只看该作者
学号1306163125自动131 孙腾腾

使用特权

评论回复
6
keer_zu| | 2014-12-29 11:14 | 只看该作者
sttstt 发表于 2014-12-28 20:52
学号1306163125自动131 孙腾腾

哪个学校的?

使用特权

评论回复
7
TTK0314| | 2014-12-31 11:59 | 只看该作者
单片机软件设计还是建议用基于函数指针的状态机。

使用特权

评论回复
8
keer_zu| | 2014-12-31 12:49 | 只看该作者
TTK0314 发表于 2014-12-31 11:59
单片机软件设计还是建议用基于函数指针的状态机。

讲讲看

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

6

帖子

0

粉丝