计算表达式 真(非0) 表达式 语句1 electi The number is even 再次运行 Ing 如果你曾经是个 PASCAL程序员,就要注意,else之前的语句后的分号不能丢,因为 PASCAL中分号用于分隔两个语句,而C中的分号是标识一个语句的结束。 下面我们再来看一个例子。这个例子中语句的条件表达式稍微复杂一些。 例34判断某一年是否闰年 闰年是其年份能够被4整除,但不能被100整除的年,或者是能被400整除的年。因此 国年的条件可用逻辑表达式表示为 (year%4==08&.year%100!=0)ll(year%400==0) 式中的括号不是必须的,但可以把较长的表达式分成两部分,这样看起来清楚一些。完整的 程序如下; /*判断某年是否为闰年兼/ main() scanf("%d",&year)i if((year%4==08&.year%100!=0)|i(year%400==0)) printf ("%d is leap year\", year);
printf("%d is not a leap year\n", year); 运行一次 Type in a year 1993 is not a leap year 再次运行 Type in a year 2000 is a leap year 再运行一次 Type in a ye l900 1900 is not a leap year 3.3.3 else-if结构 f-ese结构可对只有两种可能的条件做判断,而实际中有些问题可能需要在多种情况 中做判断,如数学中的符号函数,它定义为: 这种情况用前面介绍的ⅱ-ese结构就显得不得心应手了。幸好迁语句允许嵌套,也就是说 语句中还可以包括另一个正语句,而迁语句嵌套的最常见的形式是ese-结构,它可以 很方便地解决这类问题。 else-if结构的一般形式为 (表达式1) 语句1 leif(表达式2) 语句2 else if(表达式n) 语句n 语句 其含义是:如果表达式1为真,则执行语句1,否则如果表达式2为真,则执行语句2,…,依 此类推。如果表达式n为真,则执行语句n,如果各表达式都不为真则执行语句n+1。其逻 辑结构由图3-4给出。 现在我们就用这种结构来编一个求解符号函数的程序。 例3.5
表达式2 真 语句2 语句n+1 /*求解符号函数*/ main() printf("please input a number n"); scanf("%d”,8x); if (x>o) sign=1i if(x==0) printf("The sign is %d\n", sign); 运行一次 please input a number The sign is-1 再次运行 please input a number
The sign is 1 再次运行 please input a number The sign is 0 3.3.4i语句的嵌套 f语句中还可以包含语句,这在前面的else-结构中已经看到。但并不是所有的嵌 套都能表示成ele-迁结构,更一般的情况是后和else后的语句都可以再包含ⅱ语句 例3.6求一个点所在的象限 printf("Input the coordinate of a point n")i printf("x=" scanf("%fe&x); scanf(%f",&y) f(x>0) f(y>0) printf("The point is in Ist quadrant. \n' printf("The point is in 4th quadrant n"); if (y>0) printf(" The point is in 2nd quadrant\n"); printf("The point is in 3rd quadrant n"); 运行情况 Input the coordinate of a point 3 The point is in 1st quadrant. 再运行一次 Input the coordinate of a point y=-7 The point is in 3rd quadrant. 这个程序没有考虑点在x轴或y轴时的情况
if语句中的ele并不总是必须的,在嵌套的结构中,可能有的f语句带有else,有的 语句不带else,那么一个ele究竟与哪个i配对呢?C语言规定 else总是与前面最近的f相配对。 例如 f(n>0) if (a>b) 这里,ele与内层的结合,如果你希望else与外层的相结合的话,你不能写成 if (n>o) if (a>b) 因为缩进只是为了便于阅读,计算机执行时是不理睬的,它总是把else与前面最近的相结 合。如果要想使else与前面的证配对,办法就是用花括号,如 f(n>0){ if (a> b) 这样else就与外层的证相配对了 3.3.5条件运算符 求a、b中较大者可以用语句 if (a >b) max s a 来实现,类似这种和ele各带一个赋值语句的结构,C语言提供了一种专门的条件运算 符,上面语句可以用条件运算符实现 max=(a>b)? a: b: 其中a>b)?a:b是一个条件表达式,执行过程为:如果a>b为真,则表达式取a的值,否则 取b的值。 运算符“?”是C语言中唯一的一个三目运算符,它连接三个运算量,一般形式为 表达式1?表达式2表达式3 条件表达式的逻辑结构如图3-5所示。 条件运算符的优先级较低,只高于赋值运算符和逗号运算符,而低于算术运算符、关系 40