[IT认证]第4章 选择结构程序设计.ppt
C语言程序设计-第3章 C语言的基本语句和程序结构设计,1,第4章 选择结构程序设计,C语言程序设计-第3章 C语言的基本语句和程序结构设计,2,目 录,基本语句关系运算符和关系表达式逻辑运算符和逻辑表达式分支程序设计,C语言程序设计-第3章 C语言的基本语句和程序结构设计,3,基本语句(Statements),控制语句表达式语句函数调用语句空语句复合语句,C语言程序设计-第3章 C语言的基本语句和程序结构设计,4,控制语句,完成一定的控制功能C语言的9种控制语句if-elsewhilecontinueswitchreturn,fordo-whilebreakgoto,C语言程序设计-第3章 C语言的基本语句和程序结构设计,5,表达式语句,形式expression;表达式最后加一个分号举例a=3;/*赋值语句*/z=x*y,z+;/*一条语句*/x-y;/*语句,但无实际意义*/i+;/*语句*/i+/*表达式,不是语句*/,C语言程序设计-第3章 C语言的基本语句和程序结构设计,6,函数调用语句,形式function(arguments);函数调用后加一个分号函数调用语句可以看作一种表达式语句举例printf(%d,i);getchar();myfun(a,b);,C语言程序设计-第3章 C语言的基本语句和程序结构设计,7,空语句,形式;只有一个分号用法作为转向点作为循环语句中的循环体举例for(i=1;i=100;i+)sum+=i;for(i=1;i=100;sum+=i+);,C语言程序设计-第3章 C语言的基本语句和程序结构设计,8,复合语句(块语句,Block),形式statements用把若干条语句组合成为一个复合语句内可以没有任何语句,可以只有一条语句,也可以有多条语句可以包括复合语句、空语句、控制语句等用法一个复合语句当作一条语句来使用需要把多条语句放在只允许一条语句的场合,C语言程序设计-第3章 C语言的基本语句和程序结构设计,9,复合语句举例,int x,y,t;if(x y)/*复合语句开始*/t=x;x=y;y=t;/*复合语句结束*/printf(%d,%d,x,y);,C语言程序设计-第3章 C语言的基本语句和程序结构设计,10,交换两个变量值的方法,int x=-3,y=5,t;t=x;x=y;y=t;/*此复合语句能交换x,y的值*/具体执行步骤如下:(1)t=(x=-3)t=-3(2)x=(y=5)x=5(3)y=(t=-3)y=-3,C语言程序设计-第3章 C语言的基本语句和程序结构设计,11,C语言语句使用说明,除复合语句外,语句都以分号;作为结束语句书写格式比较自由,确定语句结束的唯一标准是分号(;)注意区分表达式和表达式语句,它们的用法不同举例,if(a=b)0)t=a;错例,if(a=b;)0)t=a;举例,if(xy)x-;y+;错例,if(xy)x-;y+,C语言程序设计-第3章 C语言的基本语句和程序结构设计,12,关系运算符(Relational Operators),C语言程序设计-第3章 C语言的基本语句和程序结构设计,13,关系表达式,用关系运算符将两个表达式连接起来a+bc+d,(a=3)x注意区分等于(=)和赋值运算符(=)a=b,a=b关系表达式的值是逻辑值“真”或“假”C语言用整型表示逻辑值,“真”1、“假”0举例:inta=3,b=2,c=1;d=ab;/*d=1*/f=abc;/*f=(ab)c=0*/,C语言程序设计-第3章 C语言的基本语句和程序结构设计,14,逻辑运算符(Logical Operators),C语言程序设计-第3章 C语言的基本语句和程序结构设计,15,逻辑运算规则,!a若a为“真”,!a为“假”若a为“假”,!a为“真”a&b若a、b都为“真”,则a&b为“真”若a、b不全为“真”,则a&b为“假”a|b若a、b都为“假”,则a|b为“假”若a、b不全为“假”,则a|b为“真”,C语言程序设计-第3章 C语言的基本语句和程序结构设计,16,逻辑表达式,逻辑运算符把逻辑量或表达式连接起来(y%4=0&y%100!=0)|(y%400=0)/*判断闰年 2004 2000*/逻辑表达式的值是逻辑值用整型表示逻辑值“真”1,“假”0把一个表达式的值作为逻辑值使用非零“真”,零“假”这里的非零与零,包括整型、浮点型等,C语言程序设计-第3章 C语言的基本语句和程序结构设计,17,逻辑表达式举例,int i=3;char c=a;float f=0.0;i=0;!i;/*两者逻辑值相同*/i!=0;i;/*两者逻辑值相同*/c/*“假”*/,C语言程序设计-第3章 C语言的基本语句和程序结构设计,18,逻辑表达式求值特点,逻辑表达式中的运算符,只有会影响表达式求值时,才会执行a,C语言程序设计-第3章 C语言的基本语句和程序结构设计,19,习题5.3 写出下面各逻辑表达式的值。(P104),int a=3,b=4,c=5;(1)a+bc,C语言程序设计-第3章 C语言的基本语句和程序结构设计,20,分支程序设计,if语句条件运算符?:switch语句分支程序设计举例,C语言程序设计-第3章 C语言的基本语句和程序结构设计,21,if语句的三种形式,if(表达式)语句if(表达式1)语句1else 语句2if(表达式1)语句1else if(表达式2)语句2else if(表达式3)语句3.else if(表达式n)语句nelse 表达式n+1,C语言程序设计-第3章 C语言的基本语句和程序结构设计,22,if语句的说明,无论哪种形式,一条if语句,包括else或else if子句,只算作一条语句if语句中的子句,可以是一条任何类型的语句,包括表达式语句、空语句、复合语句、控制语句子句末尾的分号,只表示子句的结束,不表示if语句结束注意复合语句末尾没有分号else子句可以没有,C语言程序设计-第3章 C语言的基本语句和程序结构设计,23,if语句举例,C语言程序设计-第3章 C语言的基本语句和程序结构设计,24,if语句的嵌套,if语句的各子句都可以又是if语句应注意if-else的配对关系else总是与其上面的最近的未配对的if配对!可以用明确if-else的配对关系if(exp1)if(exp1)if(exp2)if(exp2)statement1 statement1elseelse statement2 statement2,C语言程序设计-第3章 C语言的基本语句和程序结构设计,25,例5.3(P95),方法一:main()int x,y;scanf(“%d”,C语言程序设计-第3章 C语言的基本语句和程序结构设计,26,方法二:(if语句嵌套)main()int x,y;scanf(“%d”,C语言程序设计-第3章 C语言的基本语句和程序结构设计,27,方法三:(if语句嵌套的错例1,思考如何改正!)main()int x,y;scanf(“%d”,/*错误分析:else 的配对不是以对齐为准,而是以语法为准*/,C语言程序设计-第3章 C语言的基本语句和程序结构设计,28,方法四:(if语句嵌套的错例2,思考如何改正!)main()int x,y;scanf(“%d”,/*错误分析:else 的配对不是以对齐为准,而是以语法为准*/习题5.5,C语言程序设计-第3章 C语言的基本语句和程序结构设计,29,条件运算符(Conditional Operator),条件运算符?:条件表达式exp1?exp2:exp3先判断exp1若exp1为“真”,表达式的值为exp2的值若exp1为“假”,表达式的值为exp3的值举例,max=(xy)?x:y;同:if(xy)max=x;else max=y;,C语言程序设计-第3章 C语言的基本语句和程序结构设计,30,例5.4(P98)输入一个字符,判断它是否大写字母,如果是,将它转换为小写字母;如果不是,则不转换。,main()char ch;scanf(“%c”,输入:A输出:a,C语言程序设计-第3章 C语言的基本语句和程序结构设计,31,例题5.1 输入2个实数,由小到大输出。(P98)void main()float a,b,t;scanf(“%f,%f”,输出:6,8,输入:8,6,t=a=8,a=b=6,b=t=8,C语言程序设计-第3章 C语言的基本语句和程序结构设计,32,例题5.2 输入3个实数,由小到大输出。(P98)void main()float a,b,c,t;scanf(“%f,%f,%f”,输出:6,7,8,输入:8,6,7,C语言程序设计-第3章 C语言的基本语句和程序结构设计,33,switch语句,switch(含变量表达式)case 常量表达式1:语句1;break;case 常量表达式2:语句2;break;.case 常量表达式n:语句n;break;default:语句n+1,C语言程序设计-第3章 C语言的基本语句和程序结构设计,34,switch语句的说明,先求switch后表达式的值,若此值与某个case后的常量表达式的值相等,则跳转到这个case后的语句;若没有相等的常量表达式,则跳转到default跳转后程序一直往下执行,不会因为遇到另一个case而直接跳出switch根据实际需要,可以没有default若需要跳出switch,可使用break语句,C语言程序设计-第3章 C语言的基本语句和程序结构设计,35,switch语句举例1(P105),main()char grade;printf(“Please enter your grade:n”);scanf(“%c”,C语言程序设计-第3章 C语言的基本语句和程序结构设计,36,例题5.5 写程序判断某一年是否是闰年。void main()int year,leap;/*leap是状态变量*/scanf(“%d”,C语言程序设计-第3章 C语言的基本语句和程序结构设计,37,if(leap)printf(“%d is“,year);else printf(“%d is not“,year);printf(“a leap year.n);,输入:2007 输出:2007 is not a leap year.,输入:2004 输出:2004 is a leap year.,C语言程序设计-第3章 C语言的基本语句和程序结构设计,38,习题5.4 求a、b、c的最大值(方法一)。void main()int a,b,c,max;scanf(“%d,%d,%d”,输入:5,8,6 输出:8,C语言程序设计-第3章 C语言的基本语句和程序结构设计,39,习题5.4 求a、b、c的最大值(方法二)。void main()int a,b,c,max,d;scanf(“%d,%d,%d”,输入:5,8,6 输出:8,C语言程序设计-第3章 C语言的基本语句和程序结构设计,40,习题5.5 求y=void main()float x,y;scanf(“%f”,输入:5 输出:9,C语言程序设计-第3章 C语言的基本语句和程序结构设计,41,习题5.6 给出百分制成绩,输出等级(5)。void main()float score;char grade;scanf(“%f”,输入:76 输出:C,C语言程序设计-第3章 C语言的基本语句和程序结构设计,42,习题5.6 给出百分制成绩,输出等级(5)。void main()float score;char grade;int n;printf(“Please enter your score:n”);scanf(“%f”,C语言程序设计-第3章 C语言的基本语句和程序结构设计,43,case 6:grade=D;break;case 5:case 4:case 3:case 2:case 1:case 0:grade=E;break;printf(“score=%f,grade=%cn”,score,grade);,输入:83 输出:B,C语言程序设计-第3章 C语言的基本语句和程序结构设计,44,习题5.7 给一个不多于3位的正整数,求:它是几位数?每一位的数字?void main()unsigned int n;scanf(“%u”,C语言程序设计-第3章 C语言的基本语句和程序结构设计,45,else if(n1000)printf(“It has 3 numbers:%d,%d,%dn”,n/100,n/10%10,n%10);分析:n=45678 n/100=4 n/10%10=45%10=5 n%10=6,输入:456 输出:It has 3 numbers:4,5,6,C语言程序设计-第3章 C语言的基本语句和程序结构设计,46,习题5.9:输入4个整数,按从小到大的顺序输出。void main()int a,b,c,d,t;scanf(“%d,%d,%d,%d”,输入:9,8,7,6,8,9,7,6,7,9,8,6,6,9,8,7,6,8,9,7,6,7,9,8,6,7,8,9,6,7,8,9,C语言程序设计-第3章 C语言的基本语句和程序结构设计,47,结束,The End,