C语身教程第三章: C言语次第计划开端(5)

3.第三种办法为if-else-if办法
前二种办法的if语句一样伟多数用于两个分支的情况。 当有多个分支选择时,可给与if-else-if语句,其一样伟大办法为:
if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3;

else if(表达式m)
语句m;
else
语句n;
其语义是:顺次判别表达式的值,当出现某个值为真时, 则实施其对应的语句。然后跳到整个if语句之外经受实施次第。 要是齐全的表达式均为假,则实施语句n 。 然后经受实施后续次第。 if-else-if语句的实施过程如图3—3所示。
#include"stdio.h"
void main(){
char c;
printf("input a character: ");
c=getchar();
if(c<32)
printf("This is a control character\n");
else if(c>='0'&&c<='9')
printf("This is a digit\n");
else if(c>='A'&&c<='Z')
printf("This is a capital letter\n");
else if(c>='a'&&c<='z')
printf("This is a small letter\n");
else
printf("This is an other character\n");
}
本例要求判别键盘输出字符的类别。可以按照输出字符的ASCII码来判别范例。由ASCII码表可知ASCII值小于32的为控制字符。 在“0”和“9”之间的为数字,在“A”和“Z”之间为年夜写字母, 在“a”和“z”之间为小写字母,其他则为此外字符。 这是一个多分支选择的结果,用if-else-if语句编程,判别输出字符ASCII码地址的规模,分袂给出差此外输出。比方输出为“g”,输出表现它为小写字符。

4.在应用if语句中还应留神以下结果

(1) 在三种办法的if语句中,在if环节字之后均为表达式。 该表达式通常是逻辑表达式或关系表达式, 但也可以是此外表达式,如赋值表达式等,以致也可以是一个变量。比方: if(a=5) 语句;if(b) 语句; 都是允许的。只需表达式的值为非0,即为“真”。如在if(a=5)…;中表达式的值永远为非0,以是后来的语句总是要实施的,当然这种情况在次第中不必然会出现,但在语法上是公允的。
又如,有次第段: if(a=b)
printf("%d",a);
else
printf("a=0"); 本语句的语义是,把b值付与a,如为非0则输出该值,否则输出“a=0”字符串。这种用法在次第中是通常出现的。

(2) 在if语句中,前提判别表达式必需用括号括起来, 在语句之后必需加分号。

(3) 在if语句的三种办法中,齐全的语句应为单个语句,要是要想在惬心前提时实施一组(多个)语句,则必需把这一组语句用{} 括起来组成一个复合语句。但要留神的是在}之后不克不及再加分号。
比方:
if(a>b){
a ;
b ;
}
else{
a=0;
b=10;
}

if语句的嵌套

当if语句中的实施语句又是if语句时,则组成了if 语句嵌套的情况。其一样伟大办法可表示如下:
if(表达式)
if语句;
年夜概为
if(表达式)
if语句;
else
if语句;
在嵌套内的if语句可以或许又是if-else型的,这把会出现多个if和多个else堆叠的情况,这时要不凡留神if和else的配对结果。比方:
if(表达式1)
if(表达式2)
语句1;
else
语句2;
此中的else究竟是与哪一个if配对呢?
应该了解为:   照样应了解为:
if(表达式1)    if(表达式1)
 if(表达式2)     if(表达式2)
  语句1;       语句1;
else         else
  语句2;       语句2;
为了停止这种二义性,C言语划定,else 总是与它后面迩来的if配对,因此对上述例子应按前一种情况了解。
比赛两个数的巨细关系。
void main(){
int a,b;
printf("please input A,B: ");
scanf("%d%d",&a,&b);
if(a!=b)
if(a>b) printf("A>B\n");
else printf("A<B\n");
else printf("A=B\n");
}
本例顶用了if语句的嵌套结构。 给与嵌套结构本性上是为了进行多分支选择,例3.16现实上有三种选择即A>B、A<B或A=B。这种结果用if-else-if语句也可以完成。并且次第愈加明白。因此, 在一样伟大情况下较少应用if语句的嵌套结构。 以使次第更便于阅读了解。
void main(){
int a,b;
printf("please input A,B: ");
scanf("%d%d",&a,&b);
if(a==b) printf("A=B\n");
else if(a>b) printf("A>B\n");
else printf("A<B\n");
}

前提运算符和前提表达式

要是在前提语句中,只实施单个的赋值语句时, 常可应用前提表达式来完成。不单使次第简捷,也进步了运转服从。
前提运算符为?和:,它是一个三目运算符,即有三个插足运算的量。由前提运算符组成前提表达式的一样伟大办法为:
表达式1? 表达式2: 表达式3
其求值法则为:要是表达式1的值为真,则以表达式2 的值作为前提表达式的值,否则以表达式2的值作为整个前提表达式的值。 前提表达式通常用于赋值语句之中。
比方前提语句:
if(a>b) max=a;
else max=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又是一个条
件表达式。
void main(){
int a,b,max;
printf("\n input two numbers: ");
scanf("%d%d",&a,&b);
printf("max=%d",a>b?a:b);
}
用前提表达式对上例从新编程,输出两个数中的年夜数。


版权声明: 原创作品,允许转载,转载时请务必以超链接办法标明文章 原始理由 、作者信息和本声明。否则将穷究功令责任。

原文地址:https://www.cnblogs.com/zgqjymx/p/1975618.html