c语言第三章 分支程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C中规定,0值为假,非0为真。
3.1.2 关系运算(Relational Operator) 用来比较两个操作数的大小。
操作对象可以是算术、关系、逻 辑、赋值表达式等任意表达式。
如: 5>3 ‘X‟<„Y‟ 3<=y x= =y x+5>y-3 (x>y)<(y<z) (x=10)>(y=5)
}
例:以下程序的输出结果是________。 main() { int a=1, b=2, c=3; if(c=a) printf(" %d\n" , c); else printf(" %d\n" , b); }
答案:1
例:以下程序的输出结果是( )。 main() { int a=0, b=0, c=0,d=0; if(a=1) b=1;c=2; else d=3; printf("%d,%d,%d,%d",a,b,c,d) ; }
如3:编程求前100个自然数的和并输出
1+2+3+……+100 1.令i=1,sum=0;
2.如果i<=100 sum=sum+i; 3.i=i+1,执行2;
4.输出结果。
2.算法的结构
算法结构又叫程序控制结构,就是程 序的执行结构。
3.算法的描述工具
流程图,N-S图
(1)顺序结构
S1
S1 S2
计算两复根输出两复根输出x输出信息系数无效输出x计算两实根输出两实根32双路分支twowayselection321ifelse语句流程图flowchart与代码例如intprint程序设计
3.1关系与逻辑运算 3.1.1 逻辑数据(Logical Data) 用来表示 “真”和“假”的数据。 C中没有逻辑数据类型。
说明
一旦某个case语句被执行,还要继续 执行随后的所有case语句。
2. 含break语句 (with break)
switch(表达式) { case c1: s1; break; case c2: s2; break; …… case cn: sn; break; default: sn+1; break; }
注意事项
(3)各case语句后的值必须不同,各 case的顺序任意。
(4)允许几个case执行同一操作语句组。 (5) default不是必须的,但建议使用。
(6)至多有一个default语句,位置可以 任意,但通常放在最后。
3. if…else if 结构
if(expression1) s1; else if(expression2) s2; …… else if(expressionn) sn; else sn+1;
说明
(1)关系运算是二元运算。 (2)对两个操作对象进行大小比较, 结果为“真”,则表达式值是整数1, 若为“假”,则数值为整数0。 如:int a=3,b=2,x=5; 5>3 真,值为1 x<=3 假,值为0 --a>=b++ 真,值为1
说明
(3)前四个运算符优先级为10,大 于后两个,结合性为左结合。 如:a==b>c a>b>c a==(b>c) (a>b)>c
答案:B
例:设有定义:int a=2,b=3,c=4;,则以下选项中值为0的 表达式是( )。 [2005.9] A. (!a==1)&&(!b==0)
B. (a<b)&&!c||1 C. a&&b D. a||(b+b)&&(c-a)
答案:A
例:设有定义:int k=1,m=2; float f=7;,则以下选项中错 误的表达式是( )。 [2005.9] A. k=k>=k
A. 1 C. 非0的数
B. 0 D. -1
答案:A
例:若有以下程序 main() { int a,b,d=25; a=d/10%9; b=a&&(-1); printf(" %d , %d\n" , a , b); } 程序运行后的输出结果是( )。 [2005.4]
A. 6,1 C. 6,0 B. 2,1 D. 2,0
例:输入一个小数,判断是正数还是非正数。
#include <stdio.h> main( ) { float x; printf(“please enter a float number:”); scanf(“%f”,&x); if(x>0) printf(“%f is a positive number!”,x); else printf(“%f is a non_positive number!”,x); }
计算两复根 输出两复根
T
b=0? F
x=-c/b
T
T T p=0? F
计算两实根 输出两实根
输出信息 输出x “系数无效”
X=-b/(2*a) 输出x
3.2 双路分支(Two-Way Selection)
3.2.1 if…else语句
流程图(Flow chart)与代码
例如
int m; if(x>y) {m=x; printf("%d",x);} else {m=y; printf("%d",y);}
A. C. 0,1,2,0 1,1,2,0 B. 0,0,0,3 D. 编译有错
答案:D
3.2.3 if语句的嵌套
含义: if…else语句中又含有if…else语句。
例:输入一个整数x,判断x是正数、零还是负数。
#include <stdio.h> main( ) { int x; printf(“please enter an integer number (x>0):”); scanf(“%d”,&x); if(x>0) printf(“\n%d is a positive number!”,x); else if(x==0) printf(“\n%d is zero !”,x); else printf(“\n%d is a negative number!”,x);
B. -k++ C. k%int(f) D. k>=f>=m
答案:C
算法的基本概念(补充)
程序=数据结构+算法
1.算法的含义 (1)算法是解决问题的方法和步骤。 (2)是为解决特定问题而要一步一 步 执行的有穷操作的描述。
如1:编程求任意输入两个数的和并输出
1.任意输入两个数X,Y;
2.计算它们的和X+Y;
说明
只执行一个case语句,就跳出switch。
注意事项
(1)switch(e)中表达式e可以是整型,字符 型表达式。 如: int x,y; char c; switch(c),switch(x*x+y),switch(y/z) (√) (2)case后的判断值必须是整型常量表达 式。 如: case 3: case 3+4: case „A‟:(√)
为了提高程序的执行效率。
exp1&&exp2: exp1为假即不再处理exp2 exp1||exp2: exp1为真即不再处理exp2
如:int a=1, b=2, c=3, d=4, m=2, n=2; 则执行语句: (m=a>b)&&(n=c>d)后 m和n的值是?
互补运算
逻辑运算符间存在互补关系
说明 (1)表达式的值若不是整数不能使 用switch语句,可以使用else-if 结构实现多路分支。
(2) else-if常用于以下场合:条 件表达式中使用的是同一个变量, 并且不是整型。
The End
3.2.2 if语句
例:输入一个正整数,若为偶数,输出“x是偶 数”。
#include <stdio.h> main( ) { int x; printf(“please enter an integer number (x>0):”); scanf(“%d”,&x);
if(x%2==0) printf(“\n%d is an even number!”,x);
3.输出X+Y;
如2:编程求任意构建的一元二次方程的根并输出根
ax2+bx+c=0
1.任意输入三个数a,b,c; 2.如果a=0,b=0,x不存在 3.如果a=0,b≠0,x=-c/b; 4.如果a≠0 (1)如果△>=0,有两个实根 求出两个实根 (2)如果△<0,有两个虚根 求出两个虚根 5.输出求的根

S2 …
Sn 流程图
Sn N-S图
(2)分支结构
根据条件来决定执行哪个语句块。 C
T
C F S2 S1 S1
T
F
S2
流程图
N-S图
(3)循环结构
根据条件来决定对某处理块执行多次。
当C为真
S C F T S
S C F
S T
直到C为假
流程图
N-S图
读a,b,c a=0? F p=b*b-4*a*c F p>=0? F
例:以下程序的功能是:输出a、b、c三个变量中的最 小值,请填空。 [2007.9] #include<stdio.h> main() { int a,b,c,t1,t2; scanf(“ %d %d%d”,&a,&b,&c ); t1=a<b?______; t2=c<t1?______; printf(" %d\n" , t2); } 答案:a:b
说明
(1) if后必须带( ),if(expression) 和else后无分号。
(2)if后括号内可以是任意表达式。
(3)可执行语句s1和s2可以是一条 语句、空语句、复合语句。
说明
(4)执行过程:先算 expression的 值,若非0(真),执行if后的s1, 否则执行else后的s2。s1和s2中只 能有一个被执行。 (5)有时利用表达式的互补关系, 程序就有两种程序格式。
如:x>=3 相当于 !(x<3)
例:能正确表达逻辑关系:“a≥10或a≤0”的C语言表达 式是( )。 [2005.9] A. a>=10&&a<=0
B. a>=10 or a<=0 C. a>=10||a<=0 D. a>=0|a<=10
答案:C
例:以下程序的输出结果是( )。 main() { int a=4, b=5, c=0,d; d=!a&&!b||!c ; printf(" %d\n" , d); }
}
说明
(1)任何else总是与其前方距离 最近的未与else配对的if配对。
如: int a=2,b=-1,c=2; if(a<b) if(b<0) c=0; else c++; printf(“%d\n”,c);
说明 (2)if语句的嵌套结构对嵌套的 层数没有要求,但一般不要超过 三层。
(3)可以把语句用{ }括起来来 明确if与else的配对关系。
3.2.4
条件表达式
运算符: ? : 格式: exp1? exp2: exp3 先求exp1,若非0结果为exp2的值, 否则为exp3的值。 如:x>5?y=1:y=0
说明
(1)允许嵌套但不提倡。 如:x>0?1:x<0?-1:0
(2)优先级 3。 x=a>b?a:b+1
(3)常把结果赋给变量。 result=(x%2= =0)? 0: 1
(4)关系运算不能简单连接几个表 达式。
3.1.3 逻辑运算符(Logical Operator)
用来对逻辑量进行运算。C语言 中有三个逻辑运算,逻辑与、逻 辑或、逻辑非。
逻辑真值表
逻辑真值表
逻辑操作对象可以是任何表达式
如:int x=5,y=6; !5 !y 3&&8 x>=5&&x<=8 ! (x<0)||(x> -3 && x< -1)
任何非0值为“真”,0值为“假”。 若表达式为“真”,则值为1,若 表达式为“假”,则值为0。
如:若:x=5,y=-1,c=„A‟ 则: !x , !y , !c 结果均为0。 x&&y 结果为1。
闰年的条件:
(year%4==0&&year%100!=0)||(year%400==0)
逻辑短路(Short-Circuit)
c:t1
3.3
多路分支(Multiway Selection) 多路分支是根据某一条件在很多 选项中选择其中的一个执行。
C语言中,有两种语句实现多路 分支,switch语句和if…else if语 句。
3.3.1 switch语句
1.不含break语句
switch(表达式) { case c1: s1; case c2: s2; …… case cn: sn; default: sn+1; }
相关文档
最新文档