你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
1
第四章 C程序流程设计
C语句概述程序的三种基本结构选择型程序设计循环型程序设计辅助控制语句你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
2
4.1 C语句概述
C语句,以,;”作分隔符,编译后产生机器指令,
C语句分类
表达式语句:表达式加分号构成。
空语句,;
程序控制语句 (9种):
if( )~else~
switch
for( )~
while( )~
do~while( )
continue
break
goto
return
分支循环辅助控制如 total=total+limit;
a=3;
func( );
printf(“Hello,world!\n”);
你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
3
,用 {… }括起来的一组语句
一般形式,{ [数据说明部分; ]
执行语句部分;
}
说明:
,}”后不加分号
语法上和单一语句相同
复合语句可嵌套复合语句你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
4
结构化程序设计
基本思想:任何程序都可以用三种基本结构表示,限制使用无条件转移语句( goto)
结构化程序:由三种基本结构反复嵌套构成的程序叫
~
优点:结构清晰,易读,提高程序设计质量和效率
三种基本结构
顺序结构
A
B
A
B
流程图 N-S图
4.2 程序的三种基本结构你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
5
P
A B
真 假 P
BA
真 假
k
A1 A2 Ai An
k=k2k=k1
k=kn
k=ki
...,..
二分支选择结构
多分支选择结构选择结构你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
6
当型循环结构
直到型循环结构
P
A
假真当 P为真
A
A
P
真假
A
直到 P为真注,A,B,A1….An 可以是一个简单语句,也可以是一个基本结构循环结构你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
7
if语句 (条件选择语句)
if语句的三种形式
形式一:
格式,if (expression)
statement
执行过程:
expr
statement
非 0
=0
例,if (x>y)
printf(“%d”,x); expr
statement1 statement2
非 0 =0?形式二,
格式,if (expression)
statement1
else
statement2
执行过程,例,if (x>y) max=x;
else max=y;
4.3 选择型程序设计你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
8
三:
格式:
if ( expr1 ) statement1
else if (expr2 ) statement2
else if (expr3 ) statement3
…...
[ else statementn ]
expr1
statemnt1
非 0
=0
expr2
expr3
statemntnstatemnt3statemnt2
非 0
非 0
=0
=0
执行过程:
例,if (salary>1000) index=0.4;
else if (salary>800) index=0.3;
else if (salary>600) index=0.2;
else if (salary>400) index=0.1;
else index=0;
选择型程序设计形式你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
9
如,if(a==b&&x==y) printf(“a=b,x=y”);
if(3) printf(“OK”);
if(?a?) printf(“%d”,?a?);
if后面的表达式类型任意
语句可以是复合语句
if(x)? if(x!=0)
if(!x)? if(x==0)
例 考虑下面程序的输出结果,
#include <stdio.h>
main()
{ int x,y;
scanf(“%d,%d”,&x,&y);
if(x>y)
x=y; y=x;
else
x++; y++;
printf(“%d,%d\n”,x,y);
}
Compile Error!
说明:
你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
10

一般形式:
if (expr1)
if (expr2) statement1
else statement2
else
if(expr3) statement3
else statement4
内嵌 if
内嵌 if
if (expr1)
if (expr2)
statement1
else
statement2
内嵌 if
if (expr1)
if (expr2)
statement1
else
statement3
内嵌 if
if (expr1)
statement1
else
if(expr3)
statement3
else
statement4
内嵌 if
if语句嵌套你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
11
/*ch4_4.c*/
#include <stdio.h>
main()
{ int x,y;
printf("Enter integer x,y:");
scanf("%d,%d",&x,&y);
if(x!=y)
if(x>y) printf("X>Y\n");
else printf("X<Y\n");
else
printf("X==Y\n");
}
运行,Enter integer x,y:12,23?
X<Y
Enter integer x,y:12,6?
X>Y
Enter integer x,y:12,12?
X==Y
例 输入两数并判断其大小关系你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
12
缺省 { }时,else总是和它上面离它最近的未配对的 if配对
if(……)
if(……)
if(……)
else…...else…...
else…...
if ~ else 配对原则:
你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
13
例,if (a==b)
if(b==c)
printf(“a==b==c”);
else
printf(“a!=b”);
修改,if (a==b)
{ if(b==c)
printf(“a==b==c”);
}
else
printf(“a!=b”);
实现 if ~ else 正确配对方法:加 { }
实现 if ~ else 正确配对方法你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
14
一般形式:
switch( 表达式 )
{ case E1:
语句组 1;
break;
case E2:
语句组 2;
break;
…….
case En:
语句组 n;
break;
[default:
语句组 ;
break;]
}?执行过程,
switch
表达式语句组 1 语句组 2 语句组 n 语句组…...
E 1 E 2 En default
case
switch语句 ( 开关分支语句 )
你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
15

E1,E2,… En是常量表达式,且值必须互不相同
语句标号作用,必须用 break跳出
case后可包含多个可执行语句,且不必加 { }
switch可嵌套
多个 case可共用一组执行语句如,……
case?A?:
case?B?:
case?C?,
printf(“score>60\n”);
break;
……..
说明:
你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
16
例 switch(score)
{ case 5,printf(“Very good!”);
case 4,printf(“Good!”);
case 3,printf(“Pass!”);
case 2,printf(“Fail!”);
default,printf(“data error!”);
}
运行结果,score为 5时,输出:
Very good! Good! Pass! Fail! data error!
例子( 1)
你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
17
/*ch4_5.c*/
#include <stdio.h>
main()
{ int c;
printf("Enter m or n or h or other:");
c=getchar();
switch(c)
{ case 'm',printf("\nGood morning!\n");break;
case 'n',printf("\nGood night!\n"); break;
case 'h',printf("\nHello!\n"); break;
default,printf("\n\n"); break;
}
}
例子( 2) 根据输入字母输出字符串你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
18
概述
C语言可实现循环的语句:
用 goto 和 if 构成循环
while 语句
do ~ while 语句
for 语句
goto语句及用 goto构成循环
goto语句一般格式:
goto 语句标号 ;
….…..
标号:语句 ;
4.4 循环型程序设计你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
19
功能:无条件转移语句
说明:
不能用整数作标号
只能出现在 goto所在函数内,且唯一
只能加在可执行语句前面
限制使用 goto语句
4.4 循环型程序设计( 1)
你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
20
/*ch5_1.c*/
#include <stdio.h>
main()
{ int i,sum=0;
i=1;
loop,if(i<=100)
{ sum+=i;
i++;
goto loop;
}
printf("%d",sum);
}
sum=0+1
sum==1+2=3
sum=3+3=6
sum=6+4
……
sum=4950+100=5050
循环初值循环终值循环变量增值循环条件循环体例 用 if 和 goto语句构成循环你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
21
一般形式,
while(表达式 )
循环体语句;
执行流程,
expr
循环体假 (0)
真 (非 0)
while
while语句你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
22
一般形式,
while(表达式 )
循环体语句;
执行流程,
expr
循环体假 (0)
真 (非 0)
while
while语句形式和执行流程你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
23
特点:先判断表达式,后执行循环体
说明:
循环体有可能一次也不执行
循环体可为任意类型语句
下列情况,退出 while循环
条件表达式不成立(为零)
循环体内遇 break,return,goto
无限循环,while(1)
循环体 ;
While语句特点和说明你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
24
用 while循环求
/*ch5_2.c*/
#include <stdio.h>
main()
{ int i,sum=0;
i=1;
while(i<=100)
{ sum=sum+i;
i++;
}
printf("%d",sum);
}
循环初值循环终值循环变量增值循环条件循环体例子你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
25
/*ch5_21.c*/
#include <stdio.h>
main()
{ int i=1;
while(i<=10)
{ printf("%d*%d=%d\n",i,i,i*i);
i++;
}
}
运行结果:
1*1=1
2*2=4
3*3=9
4*4=16
5*5=25
6*6=36
7*7=49
8*8=64
9*9=81
10*10=100
例 显示 1~10的平方你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
26
一般形式,do
循环体语句;
while(表达式 );
执行流程,
do
循环体
expr
假 (0)
真 (非 0) while
do~while语句你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
27
特点:先执行循环体,后判断表达式
说明:
至少执行一次循环体
do~while可转化成 while结构
expr
循环体假 (0)
真 (非 0)
循环体
While循环
do~while语句特点和说明你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
28
一般形式:
for([expr1] ;[ expr2] ;[ expr3])
循环体语句;
执行流程,
expr2
循环体假 (0)
真 (非 0)
for
expr1
expr3
for语句你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
29

for(循环变量赋初值;循环条件;循环变量增值 )
{
循环体语句;
}
说明:
for语句中 expr1,expr2,expr3 类型任意,都可省略,但分号;不可省
无限循环,for(;;)
for语句可以转换成 while结构
expr1;
while(expr2)
{
循环体语句;
expr3;
}
for语句一般应用形式你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
30
例,#include<stdio.h>
main( )
{ int i=0;
for(i=0;i<10;i++)
putchar(‘a’+i);
}
运行结果,abcdefghij
例,#include<stdio.h>
main( )
{ int i=0;
for(;i<10;i++)
putchar(‘a’+i);
}
例,#include<stdio.h>
main( )
{ int i=0;
for(;i<10;)
putchar(‘a’+(i++));
}
例,#include<stdio.h>
main( )
{ int i=0;
for(;i<10;putchar(‘a’+i),i++);
}
例子你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
31
0
y
xa a+h a+ih a+(i+1)h b
f(x)
例 ( f0r)梯形法求数值积分你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
32
三种循环可互相嵌套,层数不限
外层循环可包含两个以上内循环,但不能相互交叉
嵌套循环的执行流程
(1) while()
{ ……
while()
{ ……
}
…...
}
(2) do
{ ……
do
{ ……
}while( );
…...
}while( );
(3) while()
{ ……
do
{ ……
}while( );
…….
}
(4) for( ; ;)
{ ……
do
{ ……
}while();
……
while()
{ ……
}
…...
}
内循环外循环内循环
嵌套循环的跳转禁止:
从外层跳入内层
跳入同层的另一循环
向上跳转循环的嵌套你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
33
i<10
printf
假 (0)
真 (非 0)
i=1
j++
j=1
j<10
真 (非 0)
假 (0)
i++
for(i=1;i<10;i++)
for(j=1;j<10;j++)
printf((j==9)?"%4d\n":"%4d",i*j);
外循环内循环循环的嵌套(图解)
你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
34
4.5 辅助控制语句
break语句
功能:在循环语句和 switch语句中,终止并跳出循环体或开关体
说明:
break只能终止并跳出最近一层的结构
break不能用于循环语句和 switch语句之外的任何其它语句之中你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
35
4.5 辅助控制语句(图解 1)
expr
……
break;
……
假 (0)
真 (非 0)
while do
……
break;
…...
expr
假 (0)
真 (非 0) while
你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
36
expr2
……
break;
…...
假 (0)
真 (非 0)
for
expr1
expr3
switch
expr
语句组 1
break;
语句组 2
break;
语句组 n
break;
语句组
break;
…...
const 1 const 2 const n default
case
4.5 辅助控制语句(图解 2)
你现在所处的位置,首页?C语言教学?幻灯片版?第四章 C程序流程设计
37
功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断
仅用于循环语句中
expr
……
continue;
……
假 (0)
真 (非 0)
while
真 (非 0)
do
……
continue;
…...
expr
假 (0)
while
expr2
……
continue;
…...
假 (0)
真 (非 0)
for
expr1
expr3
continue语句