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

条件运算符和条件表达式

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

条件表达式的一般形式:表达式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;

}

}

 

 

 

 

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值