C语言程序设计》课程教案表
授课题目
第三章 程序的控制结构(4——选择结构switch
课时安排
1
授课时间
教学目的和要求
1.掌握:条件运算符 switch语句
2.熟悉:选择结构程序设计
教学内容
1.基本内容:(1)条件运算符(2)多分支语句(3)程序设计举例
2.重点:条件运算符、多分支语句、选择结构程序设计
3.难点:条件运算符
1、条件运算符(10分钟)
条件运算符的格式:变量=〈表达式1?〈表达式2〉:〈表达式3;
执行过程:当表达式1的值为时,将表达式2的值赋给变量;当表达式1的值为时,将表达式3的值赋给变量。
即:无论表达式1还是为,都执行一个赋值语句且给同一个变量赋值。可以看出,用条件运算符?:的功能,来实现if 语句的第2种格式。
说明:条件表达式中的表达式2”表达式3”,又可以是条件表达式,即嵌套使用;C语言中条件运算符的优先级高于赋值运算符,但低于逻辑运算符;条件运算符要求有三个操作对象,称三目(元)运算符;条件运算符的结合方向为自右至左。如条件表达式:
    y=x>10x/10:x>0x:-x;从右至左结合,等价于:y=x>10x/10:(x>0x:-x);它的功能是:当x>10时,y的值为x/10;当x<10时,y的值取决于表达式x>0 
【例4.4】输入两个整数,并将其中较大者显示出来。
      #include <stdio.h>
      main()
   
        int abmax;
        scanf(″%d%d″,&a&b;
        max=a>b?a:b;
        printf(″max=%d″,max;
   
【例4.5】利用条件运算符实现对输入的学生成绩划分等级:学习成绩>=90分的同学用A表示;60-89分之间的用B表示;60分以下的用C表示。程序代码:
#include "stdio.h"
main()
{
  int score;
  char grade;
  printf("please input a score\n");
  scanf("%d",&score);
  grade=score>=90 ? 'A' (score>=60?'B':'C');
  printf("%d belongs to %c",score,grade);
}
运行:please input a score
输入:86
显示:86 belongs to B
练习:
下面程序段的运行结果是[      ]
int x=1,y=1,z=1;
x+=y+=z;
printf(“%d\n”,x<y?y:x);
A3      B2  C4  D、不确定的值
执行以下程序的输出结果是[      ]
main()
{    int k=4,a=3,b=2,c=1;
printf(“%d\n”,k<a?k:c<b?c:a);    }
A4      B3        C2            D1
若运行下面程序时,给变量a输入15,则输出结果是[      ]
main()
{    int a,b;
scanf(“%d”,&a);
b=a>15?a+10:a-10;
printf(“%d\n”,b);
}
A5        B25      C15            D10
2、多分支语句(25分钟)
switch语句是多分支选择语句。一般形式:
switch(表达式)
{
case 常量表达式1:  语句1;[break;]
case 常量表达式2:  语句2;[break;]

case 常量表达式n:  语句n;[break;]
default:  语句n+1;
}
执行过程:首先计算switch后面圆括号内表达式的值,若此值等于某个case后面的常量表达式的值,则转向该case后面的语句去执行;若表达式的值不等于任何case后面的常量表达式的值,则转向default后面的语句去执行;如果没有default部分,则将不执行switch语句中的任何语句,而直接转到switch语句后面的语句去执行。其流程图如图4-3所示。
说明:
1switch后面圆括号内的表达式的值和case后面的常量表达式的值,必须是整型或字符型。
2)同一个switch语句中的所有case后面的常量表达式的值都必须互不相同,其中default和〈语句n+1〉可以省略。
3switch语句中的casedefault的出现次序是任意的。
4)由于switch语句中的“case常量表达式部分只起语句标号的作用,所以,在执行完某个case后面的语句后,如果没有“break”来结束多分支语句,将自动转到该语句后面的语句去执行,直到遇到switch语句的右花括号为止,而不再进行条件判断。
5)每个case的后面既可以是一个语句,也可以是多个语句,当是多个语句的时候,也不需要用花括号括起来。
6)多个case的后面可以共用一组执行语句。如:
      switchn
   
        case 1
        case 2 x=10; break;
          …
     
【例4.7】从键盘输入一个星期(17),并显示该星期的英文名称。
    #include <stdio.h>
    main()
 
      int week;
      scanf(″%d″,&week;
      switchweek
      { 
                case 1 printf(″Monday″); break;
                case 2 printf(″Tuesday″); break;
                case 3 printf(″Wednesday″);  break;
                case 4 printf(″Thursday″);  break;
                case 5 printf(″Friday″);  break;
                case 6 printfswitch的用法c语言(″Saturday″);  break;
                case 7 printf(″Sunday″);  break;
                defaultprintf(″Data Error!″);
        }
    }
练习:运行下面程序时,从键盘输入字母H,则输出结果是[      ]
#include <stdio.h>
main()
{    char ch;
      ch=getchar()
      switch(ch)
      {    case‘H’: printf(“Hello!\n”);
          case‘G’: printf(“Good morning!\n”);
            default:  printf(“Bye_Bye\n”);
        }
}
运行下面程序时,输入数据为“2135<CR>”,则输出结果是[      ]
main()
{    int abc
      scanf“%d%d%d”&a,&b,&c;
      switch(a)
  {    case1:    printf(“%d\n”,b+c); break;
        case2:    printf(“%d\n”,b-c); break;
        case3:    printf(“%d\n”,b*c); break;
        case4:    {    if(c!=0) { printf(“%d\n”,b/c); break; }
                              else { printf(“error\n”); break; }
        default: break;
    }
}
3、程序设计举例(10分钟)
【例4.8】输入三个数,按由小到大的顺序输出。
  #include <stdio.h>
  main()
        int abctemp;
        printf(″Enter three integers:\t″);
        scanf(″%d%d%d″,&a&b&c;
        ifa>b){temp=a;a=b;b=temp;
        ifa>c){temp=a;a=c;c=temp;
        ifb>c){temp=b;b=c;c=temp;
        printf(″%d<%d<%d″,abc;
   
    解释:语句temp=a;a=b;b=temp;是实现a,b二个数的互换,temp是一个临时中间单元。相当于一瓶可乐a,一瓶橘汁b互换瓶,需要一个空瓶temp,才可以实现互换。
【例4.10】写一程序,从键盘上输入年份year(用4位十进制数,如2008),判断是否闰年。
算法分析: 闰年的条件是:某年能被4整除、但不能被100整除,或者能被400整除。我们用取余来判断year能否被4整除,余数为0则能整除,否则不能整除。据此写出是闰年的条件表达式:(Year%4==0 and year%100!=0|| (year%400==0)
程序代码:
      main( )
      {
        int year;     
        printf("Please input the year:");
        scanf("%d",&year);
        if ((year%4==0 && year%100!=0|| (year%400==0))
              printf("%d is a leap year.\n",year);
      else  printf("%d is not a leap year.\n",year);
    }
运行结果:
①输入:1989
输出:1989 is not a leap year.
②输入:2000
输出:2000 is a leap year.
【例4.11】大学对不同性质的学生听课收费不同。某校是这样规定的:本校全日制学生不收费;本校夜大学生选课12学分及以下付200元,然后每增加一个学分付20元;对外校学生选课12学分及以下付600元,然后每增加一个学分付60元。输入某个学生的编号、选课学分以及学生类型,编程计算该学生应付的学费。
算法分析:学分用n,收费用x,编号用number,学生的类别用p。根据题意,分三种情况考虑:
1)本校全日制:x=0
2)本校夜大: n12x=200
                n>12x=200+n-12*20
3)外校:    n12x=600
                n>12x=600+n-12*60
main()
    int nxnumberp;
    printf(″\t  学生收费管理\n″);
    printf(″\t= = = = = = = = = = = =\n″);
    printf(″\t1-本校全日制学生\n\t2-本校夜大学生\n\t3-外校学生\n″);
    printf(″\t= = = = = = = = = = = =\n″);
    printf(″\t请输入学生的类别(13:″);
    scanf(″%d″,&p;
    printf(″\t请输入学生的编号和学分:″);
    scanf(″%d%d″,&number&n;
  ifp= =1x=0;
  else  ifp= =2
              ifn<=12 x=200;
            else  x=200+n-12*20;
          else
              ifn<=12x=600;
            else  x=600+n-12*60;
printf(″\t学生%4d应交费%4d\n″,numberx;
运行结果:
                学生收费管理
            = = = = = = = = = = = =
            1—本校全日制学生
            2—本校夜大学生
            3—外校学生
            = = = = = = = = = = = =
  请输入学生的类别(13:2
            请输入学生的编号和学分:100134
            学生1001应交费640
    按照输入,类别是2,编号是1001,学分是34
4.12 编程:根据输入的学生的成绩判断等级。当成绩score 90时为 A; 成绩80score <90 B; 成绩70score <80 C;成绩60score <70 D等成绩score < 60 E (score 为整数)
分析: score为整型数,在score90 的范围内,score可能取100, 99,.....,90,利用两个整数相除,结果自动取整的特性,score score /10 有如下对应关系:
    score            score/10 
    90            10, 9
    80~89            8
    70~79            7
    60~69            6
    60以下          default 因此,可以用score /10的值来确定分支。
#include <stdio.h>
main()  /*switch 语句评级  */
{ int score;
  scanf("%d" ,&score);
  switch (score /10)
  {case  10:
    case  9: printf("%d: A\n", score);break;
    case  8:printf("%d: B\n", score);break;
    case  7: printf("%d: C\n", score);break;
    case  6: printf("%d: D\n", score);break;
    default: printf("%d: E\n", score);
  }}
讨论、思考题、作业:
实验指导书习题
参考资料(含参考书、文献等):
叶斌 陈世强. C语言程序设计. 北京:科学出版社
授课类型:理论课  讨论课□  实验课□  练习课□  其他□
教学方式:传统授课 双语□  讨论□  示教□  指导□  其他□
教学资源:多媒体  模型□  实物□  挂图□  音像□  其他□

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。