白 雪 飞
baixf@ustc.edu.cn
中国科学技术大学电子科学与技术系
Dept,of Elec,Sci,& Tech.,USTC
Fall,2003
第 3章 C语言的基本语句和程序结构设计
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 2
目 录
基本语句
关系运算符和关系表达式
逻辑运算符和逻辑表达式
分支程序设计
循环程序设计
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 3
基本语句 (Statements)
控制语句
表达式语句
函数调用语句
空语句
复合语句
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 4
控制语句
完成一定的控制功能
C语言的 9种控制语句
if-else
while
continue
switch
return
for
do-while
break
goto
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 5
表达式语句
形式
expression;
表达式最后加一个分号
举例
a=3; /* 赋值语句 */
z=x*y,z++; /* 一条语句 */
x-y; /* 语句,但无实际意义 */
i++; /* 语句 */
i++ /* 表达式,不是语句 */
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 6
函数调用语句
形式
function(arguments);
函数调用后加一个分号
函数调用语句可以看作一种表达式语句
举例
printf("%d",i);
getchar();
myfun(a,b);
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 7
空语句
形式;
只有一个分号
用法
作为转向点
作为循环语句中的循环体
举例
for(i=1; i<=100; i++) sum+=i;
for(i=1; i<=100; sum+=i++);
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 8
复合语句 (块语句,Block)
形式
{statements}
用 {}把若干条语句组合成为一个复合语句
{}内可以没有任何语句,可以只有一条语句,也可以有多条语句
可以包括复合语句、空语句、控制语句等
用法
一个复合语句当作一条语句来使用
需要把多条语句放在只允许一条语句的场合
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 9
复合语句举例
int x,y,t;
if (x > y)
{ /* 复合语句开始 */
t = x;
x = y;
y = t;
} /* 复合语句结束 */
printf("%d,%d",x,y);
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 10
C语言语句使用说明
除复合语句外,语句都以分号 ;作为结束
语句书写格式比较自由,确定语句结束的唯一标准是分号 (;)
注意区分表达式和表达式语句,它们的用法不同
举例,if((a=b)>0) t=a;
错例,if((a=b;)>0) t=a;
举例,if(x>y) {x--; y++;}
错例,if(x>y) {x--; y++}
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 11
关系运算符 (Relational Operators)
运算符 名称 举例 优先级
(算术运算符 )
< 小于 i<100
高<= 小于等于 a<=MAX> 大于 f>3.14
>= 大于等于 c>='a'
== 等于 a==b 低
!= 不等于 x!=0
(赋值运算符 )
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 12
关系表达式
用关系运算符将两个表达式连接起来
a+b>c+d,(a=3)>x
注意区分等于 (==)和赋值运算符 (=)
a=b,a==b
关系表达式的值是逻辑值 —“真”或“假”
C语言用整型表示逻辑值,“真” —1、
“假” —0
举例,a=3,b=2,c=1;
d=a>b; /* d=1 */
f=a>b>c; /* f=(a>b)>c=0 */
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 13
逻辑运算符 (Logical Operators)
运算符 名称 举例 优先级
! 逻辑非 !(a>b)
(算术运算符 )
(关系运算符 )
&& 逻辑与 (x>y)&&(y>z)
|| 逻辑或 (x>3)||(x<-3)
(赋值运算符 )
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 14
逻辑运算规则
!a
若 a为“真”,!a为“假”
若 a为“假”,!a为“真”
a&&b
若 a,b都为“真”,则 a&&b为“真”
若 a,b不全为“真”,则 a&&b为“假”
a||b
若 a,b都为“假”,则 a||b为“假”
若 a,b不全为“假”,则 a||b为“真”
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 15
逻辑表达式
逻辑运算符把逻辑量或表达式连接起来
(y%4==0&&y%100!=0)||(y%400==0)
逻辑表达式的值是逻辑值
用整型表示逻辑值
“真”?1,“假”?0
把一个表达式的值作为逻辑值使用
非零?“真”,零?“假”
这里的非零与零,包括整型、浮点型等
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 16
逻辑表达式举例
int i=3;
char c='a';
float f=0.0;
i==0; !i; /* 两者逻辑值相同 */
i!=0; i; /* 两者逻辑值相同 */
c && !f; /*,真” */
i && 1.23 || f;/*,真” */
c && 4 && f; /*,假” */
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 17
逻辑表达式求值特点
逻辑表达式中的运算符,只有会影响表达式求值时,才会执行
a&&b&&c 若 a为“假”,则不再判断 b和 c
a||b||c 若 a为“真”,则不再判断 b和 c
举例,(m=a>b)&&(n=c>d)
De Morgan定理
!(a&&b) (!a)||(!b)
!(a||b) (!a)&&(!b)
!((a&&b)||c) (!a||!b)&&!c
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 18
分支程序设计
if语句
条件运算符?:
switch语句
分支程序设计举例
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 19
if语句的三种形式
① if(expression) statement
② if(expression) statement1
else statement2
③ if(expression1) statement1
else if(expression2) statement2
else if(expression3) statement3
...,..
else if(expressionn-1) statementn-1
else statementn
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 20
if语句的说明
无论哪种形式,一条 if语句,包括 else
或 else if子句,只算作一条语句
if语句中的子句,可以是一条任何类型的语句,包括表达式语句、空语句、复合语句、控制语句
子句末尾的分号,只表示子句的结束,
不表示 if语句结束
注意复合语句末尾没有分号
else子句都是可以没有的
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 21
if语句举例
if (x > y) /* y为 x和 y的较大值 */
y = x;
if (x > y) /* d为 x和 y之间的距离 */
d = x - y;
else
d = y - x;
if (x > y); /* 合法,但没有实际操作 */
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 22
if语句的嵌套
if语句的各子句都可以又是 if语句
应注意 if-else的配对关系
else总是与其上面最近的 if配对
可以用 {}明确 if-else的配对关系
if(exp1) if(exp1)
if(exp2) {if(exp2)
statement1 statement1}
else else
statement2 statement2
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 23
条件运算符 (Conditional Operator)
条件运算符?:
条件表达式
exp1?exp2:exp3
先判断 exp1
若 exp1为“真”,表达式的值为 exp2的值
若 exp1为“假”,表达式的值为 exp3的值
举例,max = (x>y)? x,y;
同,if(x>y) max = x;
else max = y;
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 24
switch语句
switch (expression) {
case const-exp,statements
case const-exp,statements
...,..
case const-exp,statements
default,statements
}
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 25
switch语句的说明
先求 switch后表达式的值,若此值与某个 case后的常量表达式的值相等,则跳转到这个 case后的语句 ;若没有相等的常量表达式,则跳转到 default
跳转后程序一直往下执行,不会因为遇到另一个 case而直接跳出 switch
根据实际需要,可以没有 default
若需要跳出 switch,可使用 break语句
case和 default的顺序不影响执行结果
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 26
switch语句举例 (1)
switch (day) { /* 打印星期的缩写 */
case 1,printf("Mon.\n"); break;
case 2,printf("Tue.\n"); break;
case 3,printf("Wed.\n"); break;
case 4,printf("Thu.\n"); break;
case 5,printf("Fri.\n"); break;
case 6,printf("Sat.\n"); break;
default:printf("Sun.\n");
}
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 27
switch语句举例 (2)
switch (deptno) { /* 根据系编号打印学院 */
case 15:
case 16:
case 17,printf("商学院 \n"); break;
case 18:
case 25,printf("人文学院 \n"); break;
case 7,printf("地空学院 \n"); break;
default,printf("其他学院 \n");
}
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 28
分支程序设计举例
求一元二次方程的根
当 a=0时,不是一元二次方程
当 a≠0时,方程的根为
当 b2-4ac≥0,方程有两个实根
当 b2-4ac<0,方程有两个共轭复根
02 cbxax
aacbabx 24)2/( 2
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 29
例 1:求一元二次方程的根真
a =0
假真真假假
b
2
-4 ac =0
b
2
-4 ac > 0
输出两个实根
x
1
,x
2
输出两个复根
p + qi,p - qi
a
acbb
x
2
4
2
1

a
acbb
x
2
4
2
2

计算复根的实部和虚部实部 p =- b /2 a
虚部
a
acb
q
2
)4(
2

输出两个相等的实根
- b /2 a
输出提示信息
|
不是二次方程
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 30
循环程序设计
while语句
do-while语句
for语句
break和 continue语句
循环程序设计举例
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 31
while语句
while (expression)
statement
while型循环
先判断表达式,后执行语句
一般情况下,循环中应含有能使循环语句结束的操作
statement
a
b
expr,真假
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 32
while语句举例
int i,sum;
i = 1;
sum = 0;
while(i<=100) {
sum += i; /* 循环体缩进书写 */
i++; /* 使循环趋向结束 */
}
1 0 0
1i
is um
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 33
do-while语句
do
statement
while (expression);
类似于 Until型循环
先执行一次循环体语句,后判断表达式
statement
a
b
expr,真假
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 34
do-while语句举例
int i,sum;
i = 1;
sum = 0;
do {
sum += i;
i++;
}while(i<=100);
1 0 0
1i
is um
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 35
do-while与 Until型循环
do {
sum+=i;
i++;
}while(i<=100);
C语言形式
repeat {
sum+=i;
i++;
}until(i>100);
Until型循环
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 36
for语句
for (expr1; expr2; expr3)
statement
expr1;
while (expr2) {
statement
expr3;
}
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 37
for语句的说明
三个表达式的说明
expr1,初始化
expr2,循环条件
expr3,一般是循环变量的改变
三个表达式都可以省略
分隔表达式的分号不能省略
expr1省略,不进行初始化
expr2省略,认为循环条件永为“真”
expr3省略,不在这里改变循环变量
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 38
for语句举例
int i,sum;
for (i=1,sum=0; i<=100; i++)
sum += i;
for (i=1,sum=0; i<=100; )
sum += i++;
for (i=0,sum=0; i++<100; )
sum += i;
1 0 0
1i
is um
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 39
break语句
形式
break;
说明
跳出 switch语句
跳出本层循环语句
如果有多层循环存在,break只跳出它所在的那一层循环语句,不影响外层循环的执行
不能用于循环语句和 switch语句之外的任何其他场合
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 40
continue语句
形式
continue;
说明
结束本次循环
跳过循环体中余下的其他语句,接着进行下一次循环的判定
只能用于循环语句中
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 41
break和 continue语句
break语句
跳出 本层 循环
while(i<j){
...
if(i>100)
break;
...
}
continue语句
结束 本次 循环
while(i<j){
...
if(i>100)
continue;
...
}
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 42
循环程序设计举例
求最大公约数和最小公倍数
),g c d (),(l c m
0)%,g c d (
0
),g c d (
bababa
bbab
ba
ba

C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 43
例 2:求最大公约数和最小公倍数真 假
a < 1 或 b < 1
输 入 a,b
输 出
g c d ( a,b ) = a
l c m ( a,b ) = m / a
m = a * b
当 b ≠ 0
t = a % b
a = b
b = t
输 出 信 息
|
输 入 数 据错 误
C语言程序设计 - 第 3章 C语言的基本语句和程序结构设计 44
结束
The End