第四章:分支程序设计04
让编程改变世界
Change the world by program
if语句的嵌套
当if语句中的执行语句又是if语句时,则构成了if 语句嵌套的情形。 其一般形式可表示如下: if(表达式)if语句;
或者为 if(表达式)if语句;
elseif语句;
在嵌套内的if语句可能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。 例如: if(表达式1) if(表达式2)语句1;
else语句2;
其中的else究竟是与哪一个if配对呢? [caption id="attachment_75" align="aligncenter" width="150"] if语句配对[/caption] 为了避免这种二义性,C语言规定,else 总是与它前面最近的if配对,因此对上述例子应按前一种情况理解。 比较以下两题目:哪一个是运用嵌套方法? [codesyntax lang="c"]#include <stdio.h> void main() { int a,b; printf("please input A,B: "); scanf("%d%d",&a,&b); if( a!=b ) if( a > b ) printf("A>Bn"); else printf("A<Bn"); else printf("A=Bn"); }[/codesyntax] [codesyntax lang="c"]
#include <stdio.h> void main() { int a,b; printf("please input A,B: "); scanf("%d%d",&a,&b); if( a == b ) printf("A=Bn"); else if( a > b ) printf("A>Bn"); else printf("A<Bn"); }[/codesyntax] 采用嵌套结构实质上是为了进行多分支选择,实际上有三种选择即A>B、A<B或A=B。 这种问题用if-else-if语句也可以完成。而且程序更加清晰。 因此,在一般情况下较少使用if语句的嵌套结构。以使程序更便于阅读理解
条件运算符和条件表达式
条件运算符为“?和:”,它是一个三目运算符,即有三个参与运算的量。由条件运算符组成条件表达式的一般形式为:
表达式1? 表达式2: 表达式3
其求值规则为:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。 条件表达式通常用于赋值语句之中。 例如条件语句: if( a > b )max = a;
elsemax = b;
可用条件表达式写为 max = (a>b) ? a : b; 执行该语句的语义是:如a>b为真,则把a赋予max,否则把b 赋予max。使用条件表达式时,还应注意以下几点:
1) 条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。 因此max=(a>b)?a:b
可以去掉括号而写为max=a>b?a:b
2) 条件运算符?和:是一对运算符,不能分开单独使用。 3) 条件运算符的结合方向是自右至左。 例如:a>b?a:c>d?c:d
应理解为a>b?a:(c>d?c:d)
这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。 [codesyntax lang="c"]#include <stdio.h> void main() { int a,b,max; printf("n input two numbers: "); scanf("%d%d",&a,&b); printf("max=%d",a>b?a:b); }[/codesyntax] 补充:输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。 [codesyntax lang="c"]
#include <stdio.h> void main ( ) { char ch; scanf("%c", &ch); ch=(ch>='A' && ch<='Z') ? (ch+32) : ch; printf("%cn", ch); }[/codesyntax]
switch语句
C语言还提供了另一种用于多分支选择的switch语句, 其一般形式为: [caption id="attachment_76" align="aligncenter" width="150"] switch语句[/caption] 其语义是:计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。 如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。 [codesyntax lang="c"]#include <stdio.h> void main() { int a; printf("input integer number: "); scanf("%d",&a); switch (a) { case 1:printf("Mondayn"); case 2:printf("Tuesdayn"); case 3:printf("Wednesdayn"); case 4:printf("Thursdayn"); case 5:printf("Fridayn"); case 6:printf("Saturdayn"); case 7:printf("Sundayn"); default:printf("errorn"); } }[/codesyntax] 为了避免上述情况,C语言还提供了一种break语句,专用于跳出switch语句,break 语句只有关键字break,没有参数。 请看后边例子…… [codesyntax lang="c"]
#include <stdio.h> void main() { int a; printf("input integer number: "); scanf("%d", &a); switch (a) { case 1:printf("Mondayn"); break; case 2:printf("Tuesdayn"); break; case 3:printf("Wednesdayn"); break; case 4:printf("Thursdayn"); break; case 5:printf("Fridayn"); break; case 6:printf("Saturdayn"); break; case 7:printf("Sundayn"); break; default:printf("errorn"); } }[/codesyntax]