计算机二级C语言程序设计第4讲.ppt_第1页
计算机二级C语言程序设计第4讲.ppt_第2页
计算机二级C语言程序设计第4讲.ppt_第3页
计算机二级C语言程序设计第4讲.ppt_第4页
计算机二级C语言程序设计第4讲.ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第4讲 选择结构程序设计,要设计选择结构程序,要考虑两个方面的问题:一是在C语言中如何来表示条件,二是在C语言中实现选择结构用什么语句。 在C语言中表示条件,一般用关系表达式或逻辑表达式,实现选择结构用if语句或switch语句。 4.1 if语句 4.2 switch语句 4.3 选择结构程序举例,4.1 if 语句,if 语句是用来判断所给定的条件是否满足,根据判定的结果(真或假)决定执行给定的某种操作之一。,一、if 语句的形式1单边选择结构,格式: if (表达式) 语句,执行过程:,判断条件,表达式取值非0,即条件成立,执行语句后继续向下执行,表达式取值为0,即条件不成立,跳过语句向

2、下执行,P,语句,(入口),(出口),Y,N,一、if 语句的形式1单边选择结构,main( ) int x,y=0; scanf(%d, ,程序运行后,当从键盘上输入3时,程序运行的结果是多少?,程序运行后,当从键盘上输入-5时,程序运行的结果是多少?,x=3,y=7,x=-5,y=0,例如,求: y=,2x+1 x=0 0 x0,二、if 语句的形式2双边选择结构,格式: if (表达式) 语句1 else 语句2,执行过程:,判断条件,表达式取值非0,即条件成立,执行语句1后继续向下执行,表达式取值为0,即条件不成立,跳过语句1执行语句2后向下执行,P,语句1,(入口),(出口),Y,N

3、,语句2,二、if 语句的形式2双边选择结构,main( ) int x,y; scanf(%d, ,程序运行后,当从键盘上输入3时,程序运行的结果是多少?,程序运行后,当从键盘上输入-5时,程序运行的结果是多少?,x=3,y=7,x=-5,y=26,例如,求: y=,2x+1 x=0 x2+1 x0,这是一个双边结构,三、多层选择结构,格式: if (表达式1) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句3 : : : : else if (表达式n) 语句n else 语句n+1,执行过程: 依次计算各表达式的值,若表达式之值为非0,即条件成立执行其后

4、的语句后,跳过其它语句,向下执行;若表达式之值为0,即条件不成立,则继续判断其它条件;当所有的条件都不成立时,执行语句n+1后继续向下执行。,三、多层选择结构,表达式1,这是一个单边结构,单边选择结构举例按升序输出两个实数,main( ) float a,b,t; scanf(%f,%f, ,程序运行后,如果从键盘上输入6,2.8,则程序运行的顺序为:,程序运行后,如果从键盘上输入2.8,6,则程序运行的顺序为:,2.80, 6.00 End,2.80, 6.00 End,两个变量交换数据的实现方法,变量a,3,变量b,5,注意:变量a,b交换内容不能简单地用a=b;b=a;来实现,正确的方法

5、是借助一个中间变量(如t)来实现,先执行t=a;将a的值保存在中间变量t中,再执行a=b;将b的值赋给变量a,最后执行b=t;将t中保存的变量a的原来值赋给变量b,main( ) float a,b,t; scanf(%f,%f, ,复合语句及其花括号的使用,main( ) float a,b,t; scanf(%f,%f, ,有花括号时程序的运行顺序 (假设从键盘上输入2.8, 6),2.80, 6.00 End,复合语句及其花括号的使用,main( ) float a,b,t; scanf(%f,%f, ,去掉花括号时程序的运行顺序 (假设从键盘上输入2.8, 6),6.00, 随机值 E

6、nd,复合语句及其花括号的使用,将前2个分号改为逗号时程序的运行情况 (假设从键盘上输入2.8, 6),main( ) float a,b,t; scanf(%f,%f, ,2.80, 6.00 End,复合语句及其花括号的使用,将前2个分号改为逗号时程序的运行情况 (假设从键盘上输入2.8, 6),main( ) float a,b,t; scanf(%d,%d, ,2.80, 6.00 End,结论:将条件成立时要进行的所有操作变成一个语句,if 语句的嵌套,一般形式: if (条件1 ) if (条件2 ) 语句1 else 语句2 else if (条件3) 语句3 else 语句4,

7、在if 语句中又包含一个或多个if 语句,称为if 语句的嵌套,if 与 else 的配对关系:从最内层开始,else 总是与它上面最近的且尚未配对的if 配对。,求分段函数的值,1 (x0) 0 (x=0) -1 (x0),程序分析:要对x 的值判断之后计算y 的值,要用到选择结构。考虑到要进行两次判断,因而使用单边或双边选择结构都不能很好地解决这一问题,应使用多层选择结构或选择结构的嵌套。,y=,根据所输入的x之值,求:,这是一个嵌套结构,用if 嵌套结构求分段函数的值,main ( ) int x,y; scanf(%d, ,/* x=0不成立,即x0 */,/* x=0成立且x0不成立

8、,即x=0 */,从键盘上输入2时程序的运行顺序,x=2,y=1,用多层选择结构求分段函数的值,main ( ) int x,y; scanf(%d, ,/* x0和x=0都不成立,即x0 */,/*x0不成立再判断x=0是否成立*/,从键盘上输入2时程序的运行顺序,x=2,y=1,条件运算符,条件运算符(三目): ? : (表达式1)?(表达式2):表达式3) 条件运算符的结合性: 自右向左 条件运算符的执行:先计算表达式1之值,若条件表达式的值非0(即条件成立),计算表达式2之值并将该值作为条件表达式之值;若表达式1的值为0(即条件不成立),计算表达式3之值并将表达式3之值作为整个条件表达

9、式的值。,条件运算符的优先等级: 高于赋值和逗号运算符,比其它运算符都低,条件运算符使用举例,有如下程序: main( ) int a=3,b=4,c; c=ab?a:b; printf(max=%dn,c); ,语句:c=ab?a:b;执行以后,变量c中存放的是 变量a,b中的最大值,输入一个字母并将其转换为小写(小写不变),main () char ch ; scanf(%c, printf (%cn,ch) ,要求掌握的两点内容: 掌握条件运算符的使用。 掌握判断大写字母或小写字母的方法。,1、在嵌套使用if语句时,C语言规定else总是 A) 和之前与其具有相同缩进位置的if配对 B)

10、 和之前与其最近的if配对 C) 和之前与其最近的且不带else的if配对 D) 和之前的第一个if配对 2、设变量x和y均已正确定义并赋值。以下if语句中,编译产生错误的是 A) if(x+); B) if(xy ,2006-9,2007-4,3、有以下计算公式 sqrt(x) (x=0) y= sqrt(-x) (x=0)y=sqrt(x); B)y=sqrt(x) elsey=sqrt(-x); if(x=0)y=sqrt(x); D)y=sqrt(x=0?x:-x); if(x main() inta,b,c,t1,t2; scanf(%d%d%d, ,2007-9,2007-9,a:

11、b c:t1,5、若变量已经正确定义,有以下程序段 inta=3,b=5,c=7; if(ab)a=b; c=a; if(c!=a)c=b; printf(%d,%d,%dn,a,b,c); 其输出的结果是 A)程序段有语法错B)3,5,3C)3,5,5D)3,5,7 6、有以下程序段 inta,b,c; a=10;b=50;c=30; if(ab)a=b, b=c;c=a; printf(a=%db=%dc=%dn,a,b,c); 程序的输出结果是 A)a=10b=50c=10B)a=10b=50c=30 C)a=10b=30c=10D)a=50b=30c=50,2008-4,2008-9,

12、7、有以下程序 #include main() intx=1,y=2,z=3; if(xy) if(yz)printf(%d, +z); elseprintf(%d, +y); printf(%dn, x+); 程序的运行结果是 A)331B)41C)2D)1,2008-9,8、以下是if语句的基本形式: if(表达式)语句 其中表达式 A)必须是逻辑表达式 B)必须是关系表达式 C)必须是逻辑表达式或关系表达式 D)可以是任意合法的表达式,2009-3,9、有以下程序 #include main( ) intx; scanf(%d, 程序运行时,输入的值在哪个范围才会有输出结果 A)不等于1

13、0的整数 B)大于3且不等于10的整数 C)大于3或等于10的整数 D)小于3的整数,2009-3,10、有以下程序 #include main( ) inta=1, b=2, c=3, d=0; if(a=1 程序运行后输出结果是 A)1,2,3 B)1,3,2 C)1,3,3 D)3,2,1,2009-3,11、 设有定义:inta=1,b=2,c=3;,以下语句中执行效果与其它三个不同的是 A)if(ab)c=a,a=b,b=c; B)if(ab)c=a,a=b,b=c; C)if(ab)c=a;a=b;b=c; D)if(ab)c=a;a=b;b=c; 12、以下程序段中,与语句:k=

14、ab?(bc?1:0):0;功能相同的是 A)if(ab),2009-9,2009-9,填空题 请补充main函数,该函数的功能是:从键盘输入一个长整数,如果这个数是负数,则取它的绝对值,并显示出来。例如,输入:-3847652,结果为:3847652。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。 试题程序: #include #include #include void main() long int n; system(CLS); printf(Enter the data:n); scanf(【1】)

15、; printf(* the absolute value *n); if(n0) 【2】 printf(nn); printf(【3】); ,填空题 请补充main函数,其功能是:从键盘输入3个整数,然后找出最大的数并输出。 例如,输入:12,45,43,最大值为45。 试题程序: #include #include #include void main() int a, b, c,max; system(CLS); scanf(%d,%d,%d, ,4.2 switch 语句(开关语句、多分支选择语句),switch 语句的格式: switch (表达式) case 常量1 : 语句1;

16、break; case 常量2 : 语句2; break; case 常量3 : 语句3; break; case 常量n : 语句n;break; default : 语句n+1 ; ,执行过程: 先计算表达式之值,如果与某个case语句中的常量的值匹配(即相同),则执行其后的语句;若所有的case语句中的常量的值都 不能与之匹配,则执行default后的语句n+1。,根据表达式的值找入口,注意:则执行完入口语句后,则自动转到下一个case后面的语句执行;如果语句中有break;,则执行完一个入口语句后跳出switch选择结构。,switch 语句流程图(有break;语句),表达式,语句1

17、,语句2,语句3,语句n,=常量1,=常量2,=常量3,=常量n,语句n+1,=其它,switch 语句流程图(无break;语句),表达式,语句1,语句2,语句3,语句n,=常量1,=常量2,=常量3,=常量n,语句n+1,=其它,switch语句的使用举例1:求分段函数的值,1+x x=1 2*x x=2 x*x x=3 x 其它,y=,求分段函数的值:,main( ) int x,y; scanf(%d, ,用switch语句求分段函数的值程序,注意:关键字case后面一定要留空格,且case后面应为常量。,程序运行后,如果从键盘上输入3,则程序运行的顺序和结果如下:,x=3,y=9,这

18、是一个switch语句,switch 语句使用说明,各个语句后如果没有break;语句,则执行了相应的操作后,会自动转到下一个case后面的语句执行。 可以使多个case共用同一组执行语句。 case后面的表达式不能相同。 各个case和default语句的顺序可以改变。,案例4.1 从键盘上输入一个百分制成绩score,按下列原则输出其等级:score90,等级为A;80score main()int score, grade; printf(“Input a score(0100): ”); scanf(“%d”, ,switch语句应用例2:,case 8: printf(grade=B

19、n); break; case 7: printf(grade=Cn); break; case 6: printf(grade=Dn); break; case 5: case 4: case 3: case 2: case 1: case 0: printf(“grade=En”); break; default: printf(“The score is out of range!n”); 程序演示 程序运行情况如下: Input a score(0100): 85 grade=B,4.3 选择结构程序举例,求一元二次方程的根 小学生做算术题 数字拆分 判断字母、数字,求一元二次方程的根程序,#include main( ) float a,b,c,disc,x1,x2,real,imag; scanf(%f,%f,%f, ,小学生解100以内加法问题,#include #include main( ) int a,b,c; a=rand( )%100; b=rand( )%100; scanf(%d, ,/* 产生一个099之间的随机数 */,/* 再产生一个099之间的随机数 */,/* 为学生显示题目 */,/* 学生输入答案 */,printf(%d + %d = ?,a,b);,将一个三位数进行拆分,#incl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论