7.1 if-else语句
简化形式
if(表达式)语句块
阶梯形式
if(表达式1)语句块1
else if(表达式2)语句块2
嵌套形式
if()
if() 语句1
else 语句2
else
if() 语句3
else 语句4
表达式一般情况下为逻辑表达式或关系表达式
#include <stdio.h>//从小到大排序,输出顺序不变,值交换了
int main()
{int a,b,c,t;printf("请输入3个数:");scanf("%d%d%d",&a,&b,&c);if(a>b){t = a;a = b;b = t;}if(a>c){t = a;a = c;c = t;}if(b>c){t = b;b = c;c = t;}printf("从小到大为%d,%d,%d",a,b,c);return 0;
}
7.2 switch语句
多分支选择结构
switch(表达式)
{
case 常量表达式1: 语句块1:break;
default: 语句块n+1
}
1、每个常量表达式的值必须各不相同,否则将出现矛盾
2、当表达式的值与case后面的常量表达式的值相等时,就执行case后面的语句
3、switch中的表达式可以是整形,字符型表达式或枚举
4、case常量:只起语句标号的作用
5、break语句用于强行跳出Switch体,一般每个case后面应有一个break语句,defalut分支后的break可以省略
6、多个case可以执行一条语句
#include <stdio.h>
int main()
{int tmp = 1;switch(tmp){case 1:printf("A\n");//break;case 2:printf("B\n");break;default:printf("NOT");}return 0;
}
//Switch学生成绩
#include <stdio.h>
int main()
{float score = 0;printf("请输入成绩:");scanf("%f",&score);if(score<0 || score>100){printf("输入错误!\n");}else{switch((int)score/10)//强制转换类型(int){case 9:printf("A\n");break;case 8:printf("B\n");break;case 7:printf("C\n");break;default:printf("D");}}return 0;
}
7.3 循环语句
7.3.1 goto
当程序有多个出口,使用goto把这些出口集中到一处很方便,特别是函数中有很多重复的工作的时候
1、无条件跳转易于理解
2、可以减少嵌套
3、帮助编译器做优化
#include <stdio.h>
int main()
{int i,sum = 0;loop://loop跳转if(i<=100){sum += i;i++;goto loop;//跳转loop}printf("%d",sum);return 0;
}
7.3.2 while
while(表达式)
{
statements;
}
1、变量初值
2、终止条件
3、变量变化
#include <stdio.h>
int main()
{int i,sum = 0;while(i<=100)//先判断再执行{sum += i;i++;}printf("%d",sum);return 0;
}
7.3.3 do-while
do-while构成循环
do{
statements;
}while(表达式);
#include <stdio.h>
int main()
{int i,sum = 0;do{sum += i;i++;}while(i<=100);printf("%d",sum);return 0;
}
7.3.4 for
表达式1可以省略,但循环之前应要给循环变量赋值
表达式2可以省略,将陷入死循环
表达式3可以省略,但在循环体中增加循环使变量的值改变的语句
#include <stdio.h>
int main()
{int i = 0,sum = 0;for(;i<=100;){sum += i;i++;}printf("sum = %d",sum);return 0;
}
#include <stdio.h>//99乘法表
int main()
{int i = 0,j = 0;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%d*%d=%d\t",j,i,j*i);// \t缩进8位puts("");//输出字符串,字符串自动换行}return 0;
}
7.4辅助控制语句
7.4.1 break
用于从循环体内跳出一层循环体,即提前结束循环
break只能用在循环语句和Switch语句中
#include <stdio.h>
#define PI 3.14
int main()
{float r = 0,area = 0;for(r=1;r<=10;r++){area = PI*r*r;if(area>100)break;printf("r = %f,area = %f\n",r,area);}return 0;
}
7.4.2 continue
结束本次循环,接着判定下一次是否执行循环
continue只结束本次循环,break终止本层循环
#include <stdio.h>
#define PI 3.14
int main()
{int i;for(i=100;i<=120;i++){if(i%3 == 0)continue;//余0终止本次执行下一次printf("i = %d\n",i);}return 0;
}
7.4.3 return
终止包含它的函数执行