一般形式:
if (表达式) ?语句1
[ else ?语句2 ]
其他形式,常用的有以下三个:
(1)if (表达式) ? 语句1
(2)if (表达式)
? ??语句1
? ?else
? ??语句2
(3)if (表达式1)? ???语句1
? ?else if (表达式2)? 语句2
? ?else if (表达式3)? 语句3
? ?…?
? ?else if (表达式m)? 语句m
? ?else???????语句m+1
整个 if 语句可以写在多行上,也可以写在一行上
//写法1
if (number>500) cost=0.15;
else if (number>300) cost=0.10;
else if (number>100) cost=0.075;
else if (number>50) cost=0.05;
else cost=0;
//写法2(推荐这种写法)
if(number>500)
cost=0.15;
else if(number>300)
cost=0.10;
else if(number>100)
cost=0.075;
else if(number>50)
cost=0.05;
else
cost=0;
常用形式(3)中的语句1
~语句m+1
都是 if 语句的内嵌语句
,它们是 if 语句中的一部分。每个内嵌语句结尾都要有分号(它是语句组成的成分),否则出现语法错误。
if(x>0)
y=1; //结尾必须有分号
else
y=-1; //结尾必须有分号
if 语句无论写在几行上,都是一个整体,属于同一个语句。不要认为 if 部分是一个语句,else 部分是一个语句。注意:else 子句不能作为语句单独使用,它必须是 if 语句的一部分,与 if 配对使用。
语句1
~语句m
可以是一个简单的语句,也可以是一个包括多个语句的复合语句(用花括号括起来)。
if(x>0)
{
y=1;
z=2;
}
else
{
y=-1;
z=9;
}
内嵌语句也可以是一个if语句。
如用 if 语句表示阶跃函数:
y
=
{
1
???
(
x
>
0
)
0
???
(
x
=
0
)
?
1
???
(
x
<
0
)
y=\left\{ \begin{aligned} 1 \ \ \ (x>0)\\ 0 \ \ \ (x=0)\\ -1 \ \ \ (x<0)\\ \end{aligned} \right.
y=?
?
??1???(x>0)0???(x=0)?1???(x<0)?
if(x<0)
y=-1;
else //内嵌语句是一个 if 语句,它也是else的一部分
{
if(x==0)
y=0;
else
y=1;
}
在 if 语句中要对给定的条件进行检查,判定所给定的条件是否成立。判断的结果是一个逻辑值“是”(“真”)或“否”(“假”)。
#include <stdio.h>
int main(void)
{
int x,y;
printf("输入x:");
scanf("%d",&x);
if(x<1)
{
y=x;
printf("x=%d,y=x=%d\n",x,y);
}
else if(x>=1 && x<10)
{
y=2*x-1;
printf("x=%d,y=2*x-1=%d\n",x,y);
}
else
{
y=3*x-11;
printf("x=%d,y=3*x-11=%d\n",x,y);
} 2
}
运行结果1:
运行结果2:
运行结果3:
上面 switch 一般形式中括号内的表达式
,其值的类型应为整数类型(包括字符型)。
switch(a+b)//a+b的值是整数
{
case 2: break;
case 33: break;
case 'a': break;
default: break;
}
switch 下面的花括号内是一个复合语句。
可以没有 default 标号,此时如果没有与 switch 表达式相匹配的 case 常量,则不执行任何语句,流转到 switch 语句的下一个语句。
各个 case 标号出现次序不影响执行结果。
每一个 case 常量必须互不相同;否则就会出现互相矛盾的现象。但是如果语句后面加上 break 则执行到 break 后跳出 switch 语句。
case 标号只起到标记的作用,不作条件检查。
在 case 子句中虽然包含了一个以上执行语句,但可以不必用花括号括起来,会自动执行 case 后面所有的语句。当然加上大括号也可以。
多个 case 标号可以共用一组执行语句。
case 'A':
case 'B':
case 'C':printf(">60\n");break;
...
#include <stdio.h>
int main(void)
{
float score;
char grade;
printf("请输入学生的成绩:");
scanf("%f",&score);
while(score>100 || score<0)
{
printf("\n输入错误,请重新输入:");
scanf("%f",&score);
}
switch((int)(score/10))
{
case 10:
case 9:
grade='A';
break;
case 8:
grade='B';
break;
case 7:
grade='C';
break;
case 6:
grade='D';
break;
default:
grade='E';
break;
}
printf("学生成绩等级为 %c\n",grade);
return 0;
}
运行测试结果1:
运行测试结果2:
条件运算符:由两个符号(?和:)组成,必须一起使用。
要求3个操作对象,称为三目(元)运算符,它是C语言中唯一的一个三目运算符。
条件表达式的一般形式为:
表达式1 ? 表达式2 : 表达式3
执行顺序:
【说明】
//赋值表达式
max=(a>b)?a:b;//功能:将a和b二者中的大者赋给max
//赋值表达式形式
max=(a>b)?a:b;
//条件表达式语句形式
(a>b)?(max=a):(max=b);
//相当于
if(a>b) max=a;
else max=b;
//还可以写成以下形式
(a>b)?printf("%d",a):printf("%d",b);
//相当于
if(a>b) printf("%d",a);
else printf("%d",b);
#include <stdio.h>
int main(void)
{
char ch;
scanf("%c",&ch);
ch=(ch>='A' && ch<='Z')?(ch+32):ch;
printf("%c\n",ch);
return 0;
}
运行结果:
本节完