C语言-分支程序设计(条件表达式、switch语句)

  • Post author:
  • Post category:其他



条件运算符和条件表达式

条件运算符“?”和“:”  它是一个三目运算符,即有三个参与运算的量。

条件表达式的一般形式:表达式1?表达式2:表达式3

其求值规则为:如果表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式3的值作为整个条件表达式的值。

条件表达式通常用于赋值语句中

如:条件语句:

if(a>b) max=a;

可用条件表达式写为:

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?c:d

应该理解为:a>b?(c>d?c:d)

这也是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。

例1:

#include<stdio.h>

void main()

{

int a,b,max;

printf(“\n input two numbers:”);

scanf(“%d %d”,&a,&b);

printf(“max=%d\n”,a>b?a:b);

}

例2:输入一个字符,辨别它是否为大写字母,如果是,将它转换成小写字母;如果不是,不转换,然后输出最后得到的字符。

#include<stdio.h>

{

char ch;

scanf(“%c”,&ch);

ch=(ch>=’A’&&ch<=’Z’)?(ch+32):ch;

printf(“%c\n”,ch);

}


switch语句

switch语句的一般形式为:

switch(表达式)

case 常量表达式:语句1;

case 常量表达式:语句2;

……

case 常量表达式:语句n;

default:语句n+1;

其语义是,计算表达式的值,并逐个与其后的常量表达式的值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有的case后的语句。如果表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。

例1:

#include<stdio.h>

void main()

{

int a;

printf(“input a number:”);

scanf(“%d”,&a);

switch(a)

{

case1:printf(“Monday\n”);

case2:printf(“Tuseday\n”);

case3:printf(“Wednesday\n”);

case4:printf(“Thursday\n”);

case5:printf(“Friday\n”);

case6:printf(“Saturday\n”);

case7:printf(“Sunday\n”);

default:printf(“error\n”);

}

}

分析:为了避免上述情况,C语言还提供了一种break语句,用于跳出switch语句,break语句只有关键字break,没有参数。

例2:

#include<stdio.h>

void main()

{

int a;

printf(“input a number:”);

scanf(“%d”,&a);

switch(a)

{

case1:printf(“Monday\n”);break;

case2:printf(“Tuseday\n”);break;

case3:printf(“Wednesday\n”);break;

case4:printf(“Thursday\n”);break;

case5:printf(“Friday\n”);break;

case6:printf(“Saturday\n”);break;

case7:printf(“Sunday\n”);break;

default:printf(“error\n”);break;

}

}

在使用switch 语句时还应该注意以下几点:

1.在case后的各常量表达式的值不能相同,否则会出现错误。

2.在case后,允许有多个语句,可以不用()括起来;

3.各case和default子语的先后顺序可以变动,而不会影响程序执行结构。

4.default子句可以省略不用。

例3:计算器程序,用户输入运算数,和四则运算符,输出计算结构。

#include<stdio.h>

void main()

{

float a,b;

char c;

printf(“input expression:a+(-*%)b\n);

scanf(“%f%c%f”,&a,&c,&b);

switch(c)

{

case’+’:printf(“%f\n”,a+b);break;

case’-‘:printf(“%f\n”,a-b);break;

case’*’:printf(“%f\n”,a*b);break;

case’/’:printf(“%f\n”,a/b);break;

default:printf(“input error\n);break;

}

}



版权声明:本文为weixin_45939400原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。