第三章C语言流程控制
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.2 选择结构程序设计
真
二分支选择结构
语句A
条件
假
真
P
A B
假
语句B
k k=k1 k=k2 A2 ... k=kn k=ki Ai ... An
多分支选择结构
A1
3.2 选择结构程序设计
–if 语句(条件选择语句)if语 句的三种形式 形式一: (单边形式) 格式:if (expression) statement
[例1-5] 从键盘输入两个整数 a 和 b , 运行结果: 输出a、b的值以及他们交换后的值。5 7 Input a and b:
main( ) old a = 5 b = 7 b7 b = 5 { int a b, c; a, new a = printf(“Input a and b:”); scanf(“%d%d”, &a, &b); printf(“old a=%d b=%d\n”, a, b); c c = a; a = b; b = c; printf(“new a=%d b=%d\n”, a, b);
第三章 C语言流程控制
3.1 顺序结构编程
A
A
B
流程图
B
C N-S图
C
[例3-1] 输入一个华氏温度f, 将其转换为摄氏 温度c并输出。转换公式为 c = 5/9 * (f-32)
#include <stdio.h> void main( ) { …… }
[例3-2] 输入一个三位数, 将该数逆序输出输出。 例如,输入123, 则输出321。
非0
expr
=0
非0
x>y max = x
=0
statement1
statement2
max = y
形式三:多层嵌套
if ( expr1 )
statement1
else if (expr2 )
statement2
else 例:if (salary>10000) if (expr3 ) statement3 printf(“very rich”); else if (salary>5000) printf(“rich”) ; …... else if =0 (salary>2000) printf(“medium”); expr1 [ else statementn ] else if (salary>1000) printf(“good”); =0 非0 expr2 else if (salary>700) printf(“ok”); =0 非0 expr3 printf(“poor”); else
#include <stdio.h> 文件包含预处理命令 #include <math.h> void main( ) { float a, b, c, s, area; 变量定义 输入数据 scanf("%f, %f, %f", &a, &b, &c); s = 1.0 / 2 * ( a + b + c ) ; 输出数据 area = sqrt (s*(s-a)*(s-b)*(s-c) ); printf("a=%7.2f, b=%7.2f, c=%7.2f, s=%7.2f\n", a, b, c, s); printf("area=%7.2f\n", area); }
设a=1, b=2, c=3, 求以下逻辑表达式的值。 (a>1) || (b+1>4)
// 0
// 1 // 0
(a>b) && (c>0) || a
!a || (b>=0) && (camp; (b==c) && !a
// 0
对 if 语句的说明: if 例 : 后面的表达式类型任意 if (x) <stdio.h> 如:★if (a==b&&x==y) printf(“a=b,x=y”); #include if (x!=0) if★if (!3) printf(“OK”); (!x) void main( ) if (x==0) ★if y; { 0<x<5必须表示为 ( x>0) && (x<5), int x,(„a‟&&5) printf(“%d”,‟a‟); scanf(“%d,%d”,&x,&y); 而不能写成 0<x<5 if (x>y) 其中的语句可以是复合语句 如果丢失大括 { x-- ; y-- ;} 号 Compile Error! else { x++; y++;} printf(“%d,%d\n”,x,y); }
注意: else 必须与if 配对使用,不能单独使用。 在多层嵌套中,else总是与前面最近的 if 配对,与程序书写格式无关。
a = b = 5; if ( a==b ) { if ( b==c ) printf(“a==b==c”); } 复合语句 else printf(“a!=b”);
例: 输入3个数a、b、c, 要求按由小到大的顺序输出 #include <stdio.h> void main( ) { float a, b, c, t ; scanf( “%f,%f,%f”, &a, &b, &c ); ……… printf(“%5.2f, %5.2f, %5.2f\n”, a, b, c );
expr
非0
=0
例:if ( x > 0 )
statement
printf(“%d”, x); 下一条语句
next statement
形式二: (双边形式) if (expression) statement1 例:if (x>y) max=x; else else max=y; statement2
例: 考虑下面程序的输出结果: void main( ) { int x=100, a=10, b=20; int v1=5, v2=0; 如果分支较多,嵌 if ( a<b ) 套 if 语句的层数较 if ( b!=15 ) 多,程序冗长且可 if ( !v1 ) 读性降低。 x=1; else if ( v2 ) x=10; 结果:-1 else x = -1; printf(“%d”, x); }
#include <stdio.h> void main( ) 这个程序有什 { char c1; 么问题吗? c1 = getchar( ); c1 = c1+32; printf("%c\n", c1); }
输入:a=1,b=3,c=2 #include <stdio.h> 分析:一元二次方程的根为: 输出:x1=-1.00 #include <math.h> 令 delta = b2 – 4ac , x2=-2.00 main( ) p = -b/(2*a) ; q = sqrt(delta)/(2*a); { float a, b, c, x1, x2, delta, p, q; 则方程的两个根为: x1scanf("a=%f, = p – q c=%f", &a, &b, &c); = p + q; x2 b=%f, 。 delta = b*b - 4*a*c; p = -b/(2*a); q = sqrt(delta)/(2*a); x1 = p+q; x2 = p-q; printf("\nx1=%5.2f\nx2=%5.2f\n", x1, x2); }
(1) fabs(x-y) < 1.0e-6 (2) z > x+y (3) x != y == z-2 (4) x = y == z-1 z > (x+y) (x!=y) == (z-2)
x = (y ==( z-1))
2.6.3 逻辑运算符和逻辑表达式
逻辑运算符: ! && ||
逻辑非
逻辑与
逻辑或
例:从键盘输入一个整数,输出它的绝对值。
#include <stdio.h> void main( ) { int x, y; printf("Enter an integer:"); scanf("%d", &x); ……… printf("\nx = %d |x| = %d\n", x, y); } 运行:Enter an integer:-12 x= -12 |x| = 12
if ( ch >= „a‟ && !a <= „z‟ ) ch :表示对a求反 ! 单目运算符 if ( 双目运算符 5 a&&b : a、b都为非0时,结果为1 && number % == 0 && number %7 == 0 )
|| 双目运算符 a||b : a、b都为0时,结果才为0 if ( (year%4==0 && year%100 !=0) || (year%400==0) )
★ 条件 所谓 条件 就是一个 表达式 。例如算术表达式、 赋值表达式、逗号表达式、以及关系表达式、逻辑表 达式等。
表达式非0
表达式成立
逻辑真
表达式0 例如:3+2 表达式不成立 是一个算术表达式; 逻辑假
if ( 3+2 ) 语句;
2.6.2 关系运算符和关系表达式
关系运算符: > >= < <= == !=
优先级:
(1) x > 0 (2) x % 2 == 0 (3) x == y
高
x >= 0 x % 2 != 0 x != y
低
(4) fabs(x-y) < 1.0E-06
关系表达式
一个表达式中可同时出现算术运算符、 关系运算符、赋值运算符。
设 x = 1, y = 2, z = 3; 以下表达式的值?
}
例 : 对于随机输入的半径r ,计算圆的直径D、 圆周长L、圆面积S、圆球表面积M和球体积V。 #define PI 3.14159运行结果: Input r : 1.5 main( ) D= 3.00 L= 9.42 S= 7.07 { float r, d, l, s; M= 28.27 V= 14.14 double m, v; printf(“Input r:”); scanf(“%f”, &r); d = 2*r; l = 2*PI*r; s = PI*r*r; m = 4*PI*r*r; v = m*r/3; printf(“D=%6.2f L=%6.2f S=%6.2f\n”, d, l, s); printf(“M=%6.2f V=%6.2f\n”, m, v ); }
}
if 语句的嵌套
if ( 表达式 ) 语句1; else 语句2;
if ( 表达式 ) if ( 表达式 ) …… else …… else 语句2;
例: 输入两数, 根据大小关系输出 x>y、x==y 或 x<y。
#include <stdio.h> void 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"); }
输入:3, 4, 6 顺序结构程序设计举例 输出:a= 3.00, b= 4.00, 例: 输入三角形边长,求面积. area= 5.33
1 s (a b c) 2 c= s(s a)(s b)(s c) 6.00 s= 6.50 area
例 从键盘输入一个大写字母,用小写字母输出
#include <stdio.h> void main( ) { …… }
[例2-23] 输入几个小写字母,输出它们的ASCII 码和对应的大写字母。
void main( ) { char a, b, c; printf("input character a, b, c\n"); scanf("%c %c %c", &a, &b, &c); printf(“%d, %d, %d\n", a, b, c); printf("%c, %c, %c\n", a-32, b-32, c-32); }
非0 statemnt1 statemnt2 statemnt3 … statemntn
例:输入三个整数,输出其中的最大数。
void main() { int x, y, z,max; printf(“Input x, y, z: ”); scanf(“%d,%d,%d”, &x, &y, &z); max = x; if ( max < y ) max = y; if ( max < z) max = z; printf(“max = %d\n”, max); } 运行:Input x, y, z : 5 ,8, 2 max = 8