七. 控制语句
7.1 if-else语句
if语句概述
if(表达式)
语句块1
else
语句块2
常见形式
简化形式
if(表达式)语句块,例如:
if(x>y) printf("%d",x);
阶梯形式
if(表达式1) 语句块1
if(表达式)
语句块1
else
语句块2
else if (表达式2) 语句块2
else if(表达式3) 语句块3
else if (表达式4) 语句块4
嵌套形式
if()
if () 语句1
注意:
1. 语句块,当有若干条语句的时候,必须用{... ...}括号起来
2. 表达式
1. 一般情况下为逻辑表达式或关系表达式
如:if(a==b && x==y) printf("%d",x);
2. 也可以是任意类型(包括整形,实型,字符型,指针类型)
1. 如: if ('a') printf("%d",a);
3. 请区分if(x=1)和 if(1==x)的不同
应用:
输入三个数,从小到大排列
#include<stdio.h>
int main()
{
int a,b,c,d;
printf("Place input three numbers:\n");
scanf("%d %d %d",&a,&b,&c);
if(a>b)
{
d=a;
a=b;
b=d;
}
if(a>c)
{
d=a;
a=c;
c=d;
}
if(b>c)
{
d=b;
b=c;
c=d;
}
printf("%d<%d<%d\n",a,b,c);
return 0;
}
7.2 switch语句
多分支选择结构
switch 语句的基本形式
switch(表达式)
{
case 常量表达式1: 语句块1 ;break;
case 常量表达式2: 语句块2; break;
case 常量表达式n: 语句块n: break;
default : 语句块n+1
}
switch语句的使用
- 每个常量表达式的值必须各不相同,否则将出现矛盾
- 当表达式的值与case后面的常量表达式的值相等时,就执行case后面的语句。
- switch中的表达式可以是整形,字符型表达式或枚举。
- case 常量:只起语句标号的作用
- break语句用于强行跳出switch体,一般每个case后面应有一个break语句,defalut
- 分支后的break可以省略
- 多个case可以执行一条语句
分数等级评判(ABCD)实例:
#include <stdio.h>
#include <stdlib.h>
int main()
{
float score;
printf("Please input your score\n");
scanf("%f",&score);
if(score<0||score>100)
printf("input error!");
else
{
switch((int)score/10)
{
case 10:
case 9:
printf("A\n");
break;
case 8:
case 7:
printf("B\n");
break;
case 6:
printf("C\n");
break;
default:
printf("D\n");
}
}
return 0;
}
7.3 循环语句
循环程序语句
7.3.1 goto
如何使用go to来完成1-100的求和
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a=1,sum=0;
loop:
if(a<=100)
{
sum+=a;
a++;
goto loop;
}
printf("sum=%d\n",sum);
return 0;
}
当程序有多个出口,使用goto把这些出口集中到一处很方便,特别是函数中有很多重
复的工作的时候。
理由是:
- 无条件跳转易于理解
- 可以减少嵌套
- 可以避免那些忘记更新某一个出口点的问题
算是帮助了编译器做优化
7.3.2 while
while语句构成循环
基本形式:
while(表达式)
{
statements;
}
循环条件:
1.变量初值
2.终止条件
3.变量变化
例子:1-100的求和:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a=1,sum=0;
while(a<=100)
{
sum+=a;
a++;
}
printf("sum=%d\n",sum);
return 0;
}
7.3.3 do-while
do-while构成循环
基本形式
do{
statements;
}while(表达式);
例子:1-100的求和:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a=1,sum=0;
do
{
sum+=a;
a++;
}while(a<=100);
printf("sum=%d\n",sum);
return 0;
}
7.3.4 for
一般形式
for(expression1;expressiojn2;expression3)
{
statements;
}
执行过程
1. 先求解表达式1,初始值。
2. 求解表达式2,若为真,则执行循环体,然后执行步骤三,若为假则执行步骤5
3. 求解表达式3
4. 转回执行步骤2
5. 执行for下面的语句
例子,1-100的求和:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,sum=0;
for(a=1;a<=100;a++)
{
sum+=a;
}
printf("sum=%d\n",sum);
return 0;
}
for语句构成循环
- 表达式1可以省略,但循环之前应要给循环变量赋值
- 表达式2可以省略,将陷入死循环
- 表达式3可以省略,但在循环体中增加循环使变量的值改变的语句
题目:打印九九乘法表
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b,sum=0;
for(a=1;a<=9;a++)
{
for(b=1;b<=a;b++)
{
sum=b*a;
printf(" %d*%d=%d",b,a,sum);
}
printf("\n");
}
return 0;
}
7.4 辅助控制语句
7.4.1 break
用于从循环体内跳出一层循环体,即提前结束循环
break只能用在循环语句和switch语句中。
例子:圆的面积
#include <stdio.h>
#include <stdlib.h>
#define PI 3.14
int main()
{
int r;
float s;
for(r=1;r<=10;r++)
{
s=PI*r*r;
if(s>100)
break;
printf("r=%d s=%f\n",r,s);
}
return 0;
}
7.4.2 continue
结束本次循环,接着判定下一次是否执行循环
注意break和continue的区别
continue直结束本次循环,而break终止本层循环
例子:从100-120中选出%3(模上3)余数不为0的数字
#include <stdio.h>
int main()
{
int n;
for(n=100;n<=120;n++)
{
if(n%3==0)
continue;
printf("%d\n",n);
}
return 0;
}
注:
用例子来理解不同的控制语句效果会更加显著