目录
重复:while循环语句,do语句,for循环语句 和 跳转·退出循环:continue、break、goto语句:
选择:if语句,switch语句
形式:
if语句几乎没有什么知识点,if语句后面不加";"
if(表达式){
if(表达式){语句}
else if(…){语句}
else{语句}
}
else if(表达式){
if(){语句}
else{语句}
}
…
else{
if(){语句}
else{语句}
}
在上面的语句里,圆括号的表达式值非零,则执行该{}里的语句,否则跳过。
注:else没有圆括号括起来的表达式
else悬空问题:
else悬空即else语句的数量比if语句数量少,此时else语句属于哪一个if语句呢?
if (y != 0)
if(x != 0) result = x/y;
else printf("error");
看起来else语句好像和if (y != 0)并列,缩进格式暗示它属于if (y != 0),但是C语言规定else语句属于离它最近的且还未和其他else语句匹配的if语句,在这里属于if(x != 0)语句。将语句用{}括起来将不会出现这一问题。
推荐替换:
if语句可以用 表达式1 ?表达式2:表达式3 来代替
练习:
#include <stdio.h>
#include<stdlib.h>
//选择语句·计算佣金
int main(void)
{
float commission, value;//commission:佣金,value:交易额
printf("Enter value of trrade: ");
scanf("%f",&value);
if(0<value && value < 2500.00f){
//记得把数字都写成浮点数形式
commission = 30 + .017f * value;
}
else if (value >= 2500.00f && value < 6250.00f )
{
commission = 56 + .0066f * value;
}
else if (value >= 6250.00f && value < 20000.00f )
{
commission = 76 + .0034f * value;
}
else if (value >= 20000.00f && value < 50000.00f )
{
commission = 100 + .0022f * value;
}
else if (value >= 50000.00f && value < 500000.00f )
{
commission = 155 + .0011f * value;
}
else {
commission = 255 + .0009*value;
}
printf("commission: $%.2f\n",commission);
return 0;
}
/**
Enter value of trrade:2435
commission: $71.40
*/
switch语句:
if语句可以替换为switch语句。
case 常量表达式:语句 这里的常量表达式不可以包含变量和函数调用。
5, 5 + 10 都属于常量表达式 ✅
一定要有break语句,如果想多个分支共享代码从而忽略break,则应该明确指出这里故意忽略了break语句。以防止别人或者自己再加上break语句来修正“错误”。
可加注释:/* FALL THROUGH*/
下面两个是一样的:
//级联式if语句根据成绩的等级显示出相应的英语单词
if (grade == 4)
printf("Excellent");
else if (grade == 3)
printf("Good");
else if (grade == 2)
printf("Average");
else if (grade == 1)
printf("Poor");
else if (grade == 0)
printf("Failing");
else
printf("Illegal grade");
//switch语句等价于前面的级联式if语句
switch (grade)
{
case 4:printf("Excellent");//case 4 即grade = 4
break;
case 3:printf("Good");
break;
case 2:printf("Average");
break;
case 1:printf("Poor");
break;
case 0:printf("Failing");
break;
default:printf("Illegal grade");
break;
}
//多个分支放置在同一组语句的前面:
switch (grade)
{
case 4:
case 3:
case 2:
case 1:printf("Passing");
break;
case 0:printf("Failing");
break;
default:printf("Illegal grade");
break;
}
//或者这样:
switch (grade)
{
case 4: case 3: case 2: case 1:
printf("Passing");
break;
case 0:printf("Failing");
break;
default:printf("Illegal grade");
break;
}
//在这种情况下,4,3,2,1 都会输出 Passing
重复:while循环语句,do语句,for循环语句 和 跳转·退出循环:continue、break、goto语句:
另开一篇来写: