第3章 结构化程序设计 本章导读 本章主要知识点 《 C语言程序设计》 (Visual C++ 6.0环境)

Slides:



Advertisements
Similar presentations
因数与倍数 2 、 5 的倍数的特征
Advertisements


3 的倍数的特征 的倍数有 : 。 5 的倍数有 : 。 既是 2 的倍数又是 5 的倍数有 : 。 12 , 18 , 20 , 48 , 60 , 72 , , 25 , 60 ,
2.8 函数的微分 1 微分的定义 2 微分的几何意义 3 微分公式与微分运算法则 4 微分在近似计算中的应用.
2.5 函数的微分 一、问题的提出 二、微分的定义 三、可微的条件 四、微分的几何意义 五、微分的求法 六、小结.
冀教版四年级数学上册 本节课我们主要来学习 2 、 3 、 5 的倍数特征,同学们要注意观察 和总结规律,掌握 2 、 3 、 5 的倍 数分别有什么特点,并且能够按 要求找出符合条件的数。
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
10.2.switch语句.
第4章 选择结构程序设计 选择结构是计算机科学用来描述自然界和社会生活中分支现象的手段。其特点是:根据所给定选择条件为真(即分支条件成立)与否,而决定从各实际可能的不同操作分支中执行某一分支的相应操作,并且任何情况下恒有“无论分支多寡,必择其一;纵然分支众多,仅选其一”的特性。
第六章 循环控制.
《高等数学》(理学) 常数项级数的概念 袁安锋
四种命题 2 垂直.
1.1.3四种命题的相互关系 高二数学 选修2-1 第一章 常用逻辑用语.
C语言实验 第一课 标题:学号+姓名.
数学建模与MATLAB 第五讲:循环结构(1) 2017/9/12.
C语言程序设计教程 (第4版) 第5章 循环结构 李丽娟 2013年2月.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
在PHP和MYSQL中实现完美的中文显示
第4章 选择结构程序设计 在现实生活中,需要进行判断和选择的情况是很多的 如果你在家,我去拜访你 如果考试不及格,要补考
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
程序设计基础.
C语言程序设计 第五章 选择结构程序设计.
C#程序设计基础 $5 流程控制.
循环结构又称为重复结构:用来处理需要重复处理的问题,它是程序中一种很重要的结构。
C程序设计.
EBNF 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
循环结构 NEAU ACM-ICPC TEAM 主讲人:NEAU_ACM_Team.
第3章 C语言的基本语句 和程序结构设计.
走进编程 程序的顺序结构(二).
元素替换法 ——行列式按行(列)展开(推论)
第4章 选择结构程序设计 4.1 关系表达式和逻辑表达式 关系表达式 1.关系运算符 关系运算符是比较两个操作数大小的符号。
第六章 循环结构程序设计 概述 while 语句 do-while 语句 for 语句 循环的嵌套 几种循环的比较
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第3章 选择结构与循环结构 王德俊 上海交通大学继续教育学院.
ENVI-IDL可视化程序设计 楚雄师范学院地理科学与旅游管理学院 杨云源 QQ:
§2 求导法则 2.1 求导数的四则运算法则 下面分三部分加以证明, 并同时给出相应的推论和例题 .
第五章 循环结构的C程序设计 5.1 while循环语句 5.2 do-while循环语句 5.3 for循环语句 5.4 多重循环
第二章 Java语言基础.
第六章 循环控制.
第一章 函数与极限.
第4章 PHP流程控制语句.
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
C语言程序设计 主讲教师:陆幼利.
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
C 语言程序设计 程序的循环结构 电大崇信县工作站 梁海亮.
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
《计算机应用基础》 第9章 程序设计基础(二).
几种基本语句 条件语句 广州市63中 岑光.
第4章 Excel电子表格制作软件 4.4 函数(一).
第九节 赋值运算符和赋值表达式.
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
College of Computer Science & Technology
第4课时 绝对值.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
ASP.NET实用教程 清华大学出版社 第4章 C#编程语言 教学目标 教学重点 教学过程 2019年5月5日.
第二章 Java基本语法 讲师:复凡.
C程序设计 实验二 数据类型、运算符和表达式 第6讲
第二节 C语言的特点.
五 循环结构程序设计 厦大附中信息技术.
第三节 数量积 向量积 混合积 一、向量的数量积 二、向量的向量积 三、向量的混合积 四、小结 思考题.
1.2.2条件语句.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
任课教师:戴开宇 TA:时均帅、谭肖、王安华 程序设计B班 :20-16:50(90分钟)
§4.5 最大公因式的矩阵求法( Ⅱ ).
考察点:switch\while\for System.in\Scanner char vs int
第二次课后作业答案 函数式编程和逻辑式编程
一元一次方程的解法(-).
C语言基础学习 从外行到入门.
9.3多项式乘多项式.
Presentation transcript:

第3章 结构化程序设计 本章导读 本章主要知识点 《 C语言程序设计》 (Visual C++ 6.0环境) 第3章 结构化程序设计 本章导读 本章从实例分析着手,使读者了解并掌握C语言三种基本流程控制结构:顺序、选择、循环结构 ,加深对C语言程序开发设计过程的感性认识,强化培养编程思路,为进一步进行C语言程序设计打下基础。 《 C语言程序设计》 (Visual C++ 6.0环境) 本章主要知识点 (1) 顺序结构及程序设计。 (2)选择结构及程序设计。     (3)循环结构及程序设计。 (4)结构化程序设计方法、编程思路与综合实训 返回本书目录

第3章 结构化程序设计 3.1 顺序结构程序设计 3.2 选择结构程序设计 3.3 循环结构程序设计 3.4 结构化程序设计方法与综合实训 第3章 结构化程序设计 《 C语言程序设计》 (Visual C++ 6.0环境) 3.1 顺序结构程序设计 3.2 选择结构程序设计 3.3 循环结构程序设计 3.4 结构化程序设计方法与综合实训 返回本章导读

3.1 顺序结构程序设计 3.1.1 顺序结构的C程序实例 3.1.2 顺序结构语句 3.1.3 程序实训 3.1 顺序结构程序设计 《 C语言程序设计》 (Visual C++ 6.0环境) 3.1.1 顺序结构的C程序实例 3.1.2 顺序结构语句 3.1.3 程序实训 返回本章目录

3.1.1 C程序实例 C程序实例 《 C语言程序设计》 (Visual C++ 6.0环境) 【例3.1】编程实现:输入一个长方形的二边长,求长方形的面积并输出。 /*程序名为l3_1.cpp。*/ #include "stdio.h" main() { float a,b,s; scanf("%f%f",&a,&b); s=a*b; printf("The area of rectangle is %5.2f .\n",s); } 返回本节目录

【例3.1】编程 《 C语言程序设计》 (Visual C++ 6.0环境) 程序运行情况如下: 输入: 3.0 4.0 < CR > 输出: The area of rectangle is 12.00 . 这个程序属于顺序结构,程序是按照书写的顺序自上而下一步步执行,程序中的每一条语句都被执行一次,且仅能被执行一次。 返回本节目录

3.1.2 顺序结构语句1 C语言的顺序结构语句可以分为四大类: 《 C语言程序设计》 (Visual C++ 6.0环境) 1.表达式语句 3.1.2 顺序结构语句1 《 C语言程序设计》 (Visual C++ 6.0环境) C语言的顺序结构语句可以分为四大类: 1.表达式语句  表达式的后面加一个分号就构成了一个语句,例如:sum=a+b; 。事实上,C语言中有使用价值的表达式语句主要有3种: (1)赋值语句。 例如: sum=a+b; (2)自动增1、减1运算符构成的表达式语句。例如: i++; (3)逗号表达式语句。例: x=1,y=2; 2.空语句 语句仅有一个分号“;”,它表示什么也不做。一般和后面章节所讲循环语句结合使用起到延时作用。 3. 复合语句 由"{"和"}"把一些变量定义和执行语句组合在一起,称之为复合语句,又称语句块。复合语句的语句形式如下: {语句1;语句2;…;语句n;} 返回本节目录

3.1.2 顺序结构语句2 《 C语言程序设计》 (Visual C++ 6.0环境) 例如:{int a=0,b=1,sum; 3.1.2 顺序结构语句2 《 C语言程序设计》 (Visual C++ 6.0环境) 例如:{int a=0,b=1,sum; sum=a+b; printf("%d",sum); } 【注意】与C语言中的其他语句不同,复合语句不以分号作为结束符,若复合语句的"}"后面出现分号,那不是该复合语句的组成成分,而是单独的一个空语句。在复合语句起始部分可以有变量定义,如:"int a=0,b=1,sum;",也可以没有。复合语句的"{}"内可能会有多个语句,但在语法上把它整体上视为一条语句看待。 4.函数调用语句 由一个函数调用加上一个分号组成一个语句,如: scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b); 返回本节目录

3.1.3 程序实训【例3.2】 C程序实例 《 C语言程序设计》 (Visual C++ 6.0环境) 3.1.3 程序实训【例3.2】 C程序实例 《 C语言程序设计》 (Visual C++ 6.0环境) 【例3.2】由键盘输入两个整数给变量a和b,然后输出a和b,在交换a和b中的值后,再输出a和b,验证两个变量中的数值是否正确地进行了交换。 /*程序名为l3_2.cpp。*/ #include "stdio.h" main() { int a,b,t; printf("Enter a and b:\n"); scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b); t=a;a=b;b=t; } 程序运行情况如下: Enter a and b: 123 456 < CR > a=123,b=456 a=456,b=123 返回本节目录

3.1.3 程序实训【例3.3】 《 C语言程序设计》 (Visual C++ 6.0环境) 3.1.3 程序实训【例3.3】 《 C语言程序设计》 (Visual C++ 6.0环境) 注意:在程序中交换两个变量a 和b的值,不可以简单地用: a=b;b=a;两条语句来实现。假设a 和b的值分别为23和78,赋值语句a=b;将使a的值变为78,接下来的b=a;使b的值变为78,这样,a和b的值最终都变为78。所以在本例中引入了中间变量t,用来临时存放a的值,这样才能完成变量a和b的正确交换。 【例3. 3】输入一个double类型的数,使该数保留小数点后两位,对第三位小数进行四舍五入处理,然后输出此数,以便验证处理是否正确。 /*程序名为l3_3.cpp。*/ #include "stdio.h" main() { double x; printf("Input x:\n"); scanf("%lf",&x); 返回本节目录

3.1.3 程序实训【例3. 3】 《 C语言程序设计》 (Visual C++ 6.0环境) 3.1.3 程序实训【例3. 3】 printf("(1) x=%f\n",x); /*将x输出*/ x=x*100; x=x+0.5; x=(int)x; x=x/100; /*将x扩大100倍,加上0.5之后取整,再缩小100倍*/ printf("(2) x=%f\n",x); /*将四舍五入后的x输出*/ } 程序运行情况如下: Input x:3.14159< CR > 则输出的结果为: (1) x=3.141590 (2) x=3.140000 《 C语言程序设计》 (Visual C++ 6.0环境) 返回本节目录

3.1.3 程序实训【例3.4】 《 C语言程序设计》 (Visual C++ 6.0环境) 3.1.3 程序实训【例3.4】 【例3.4】从键盘上输入一大写英文字母,要求改用相应的小写字母输出。 /*程序名为l3_4.cpp。*/ #include "stdio.h" main() { char c1,c2; scanf("%c",&c1); printf("The upper case is %c .\n",c1); c2=c1+'a'-'A'; printf("The lower case is %c .\n",c2); } 《 C语言程序设计》 (Visual C++ 6.0环境) 程序运行时: 输入:B<CR> 输出: The upper case is B . The lower case is b . 返回本节目录

3.2 选择结构程序设计 3.2.1 选择结构的C程序实例 3.2.2 if 语句 3.2.3 switch 语句 3.2.4 程序实训 3.2 选择结构程序设计 《 C语言程序设计》 (Visual C++ 6.0环境) 3.2.1 选择结构的C程序实例 3.2.2 if 语句 3.2.3 switch 语句 3.2.4 程序实训 返回本章目录

3.2.1 选择结构的 C程序实例 《 C语言程序设计》 (Visual C++ 6.0环境) 【例3.5】请输入两个整数a,b,比较a+b和a×b哪个大,输出判断结果。 /*程序名为l3_5.cpp。*/ #include "stdio.h" main() { int a,b,s1,s2; printf("请输入两个整数a,b:"); scanf("%d,%d",&a,&b); s1=a+b; s2=a*b; /*求两个数的和、积*/ if(s1>s2) printf("(a+b)>(a*b) /n"); /*语句A*/ else printf(" (a+b)<=(a*b)\n"); /*语句B*/ } 《 C语言程序设计》 (Visual C++ 6.0环境) 返回本节目录

3.2.1 选择结构的 C程序实例结果 《 C语言程序设计》 (Visual C++ 6.0环境) 运行结果为: 请输入两个整数a,b:2,3<CR> (a+b)<=(a*b) 在这个程序中使用了if分支语句,它不像前面的程序那样,按照语句的书写顺序一步步执行下去,而是根据所给条件的真假,选择两者其中之一执行。该程序执行的过程是:比较两数的和与积,如果s1>s2,则执行语句A(跳过语句B不执行),否则,就跳过语句A执行语句B。可见if语句在程序中起到了改变语句执行顺序的作用。if语句就是我们在下一节中要介绍的条件分支语句。 返回本节目录

3.2.2 if 语句 1. if语句的一般形式 2. if-else中的复合语句 3. 非关系、非逻辑表达式构成的条件表达式 《 C语言程序设计》 (Visual C++ 6.0环境) 1. if语句的一般形式 2. if-else中的复合语句 3. 非关系、非逻辑表达式构成的条件表达式 4. if语句的嵌套 返回本节目录

1. if语句的一般形式1 1.if语句的一般形式: 《 C语言程序设计》 (Visual C++ 6.0环境) if语句有两种形式: (1)不含else子句的if语句 语句形式如下: if(<表达式>) <语句1> 例如if(a<b){t=a;a=b;b=t;} 其中,if是C语言的关键字,表达式两侧的圆括号不可少,最后是一条语句,称为if子句。如果在if子句中需要多个语句,则应该使用花括号把一组语句括起来组成复合语句,这样在语法上仍满足"一条语句"的要求。 执行过程:首先计算紧跟在if后面一对圆括号中的表达式的值,如果该表达式的值为非零(“真”),则执行其后的if子句,然后去执行if语句后的下一个语句。如果该表达式的值为零(“假”),则跳过if子句,直接执行if语句后的下一个语句。 《 C语言程序设计》 (Visual C++ 6.0环境) 返回3.2.2目录

1. if语句的一般形式2 《 C语言程序设计》 (Visual C++ 6.0环境) (2)含else子句的if语句 语句形式如下: <语句体1> [else <语句体2>] 执行过程:首先计算<表达式>的值,如果该表达式的值为非零("真"),则执行<语句体1>,如果该表达式的值为零("假"),则跳过<语句体1>,直接执行<语句体2>,两者执行其一后再去执行if语句后的下一个语句。 返回3.2.2目录

1. if语句的一般形式实例 《 C语言程序设计》 (Visual C++ 6.0环境) 【例3.6】求分段函数的值,如果x≥0, y=2x+1,否则, y=0 。 #include "stdio.h" main() /*程序名为l3_6.cpp。*/ { int x,y; /*变量y存放f(x)的值*/ printf("请输入x的值:"); scanf("%d",&x); if(x>=0) y=2*x+1; else y=0; printf("当x=%d时,f(x)=%d",x,y); } 《 C语言程序设计》 (Visual C++ 6.0环境) 返回3.2.2目录

1. if语句的一般形式实例 《 C语言程序设计》 (Visual C++ 6.0环境) 运行结果: 请输入x的值:3<CR> 当x=3时,f(x)=7 因为输入x=3,那么x>=0为真,所以输出2*3+1=7。 C语言中有一种特有的条件运算符“?:”,我们在前面章节已作介绍,它在某种程序上可以起到逻辑判断的作用。本例中的if语句也可用条件运算符表达式实现如下: y=x>=0?2*x+1:0; 但有些判断不能用条件表达式完成,或者很繁琐、表达不清晰。 《 C语言程序设计》 (Visual C++ 6.0环境) 返回3.2.2目录

2. if-else中的复合语句 2. if-else中的复合语句 《 C语言程序设计》 (Visual C++ 6.0环境) 如果两个分支中需要执行的语句不止一条,必须用“{}”括起来,作为一个复合语句使用。若只是一条语句,“{}”可以省略。 【注意】 (1)if后面的<表达式>一定要有括号; (2)if和else同属于一个if语句,else不能作为语句单独使用,它只是if语句的一部分,与if配对使用,因此程序中不可以没有if而只有else; (3)只能执行与if有关的语句或者执行与else有关的语句,而不可能同时执行两者; (4)如果<语句1>和<语句2>是非复合语句,那么该语句一定要以分号结束, (5)if语句的表达式可以是任意类型的C语言的合法的表达式,但计算结果必须为整型、字符型或浮点型之一。 返回3.2.2目录

3.非关系、非逻辑表达式构成的条件表达式 3.非关系、非逻辑表达式构成的条件表达式1 《 C语言程序设计》 (Visual C++ 6.0环境) 分支条件<表达式>的类型不限于逻辑/关系表达式,可以是任意的C语言有效表达式(如赋值表达式,算术表达式等等),因此也可以是作为表达式特例的常量或变量。 【例3.10】以"赋值表达式"为分支条件的实例。 /*程序名为l3_10.cpp。*/ #include"stdio.h" main() { int s; if(s=2) printf("hello"); else printf("error"); } if后面圆括号中的<表达式>表示 返回3.2.2目录

3.非关系、非逻辑表达式构成的条件表达式2 《 C语言程序设计》 (Visual C++ 6.0环境) 【例3.10】中的条件表达式是一个赋值表达式,并不是判断s是否等于2。相当于if(2)printf("hello");,这是合法的。由于该条件表达式的值是非零值,恒为真,故本程序的printf("error");无论如何都不会被执行。if语句最终执行哪一个分支,取决于条件表达式的计算结果。同一个条件的也可以用多种表达方式。 【例3.11】以"变量"为分支条件的实例。 /*程序名为l3_11.cpp。*/ #include "stdio.h" main() { int x,y; scanf("%d",&x); if(x) y=1; else y=-1; 《 C语言程序设计》 (Visual C++ 6.0环境) 返回3.2.2目录

3.非关系、非逻辑表达式构成的条件表达式3 《 C语言程序设计》 (Visual C++ 6.0环境) printf("y=%d\n",y); } 现把程序中if(x)改成if(x!=0),此时虽然条件表达式写法不同,但是完成的功能是相同的。 下面两种表示方法经常使用: if(x)等价于if(x!=0) if(!x)等价于if(x==0) 返回3.2.2目录

4. if语句的嵌套1 在一个if语句中又包含另一个if语句,从而构成了if语句的嵌套使用。内嵌的if语句既可以嵌套在if子句中,也可以嵌套在else子句中。例如: 《 C语言程序设计》 (Visual C++ 6.0环境) 【例3.12】输入a,b两个整数的值,比较大小并输出结果。 #include "stdio.h“ /*程序名为l3_12.cpp。*/ main() { int a,b; printf("请输入a,b:") ; scanf("%d%d",&a,&b); if(a>b) printf("a>b\n"); else if(a<b) printf("a<b\n"); printf("a=b\n"); } 返回3.2.2目录

4. if语句的嵌套2 《 C语言程序设计》 (Visual C++ 6.0环境) if与else的配对规则 if语句出现嵌套形式时,C语言规定:else子句总是和前面最近的不带else子句的if语句配对,与书写格式无关。注意从书写格式要有层次感(好的程序员应该养成这一习惯,以便他人理解你的程序和自己将来的修改)。如果if的数目和else的数目相同,从内层到外层一一对应,不易出错。如果if与else的数目不一致,为实现编程者的意图,必要的时候必须加"{}",来强制确定配对关系。否则,就不能实现编程者的真正意图。 返回3.2.2目录

4. if语句的嵌套实例1 《 C语言程序设计》 (Visual C++ 6.0环境) 【例3.13】写出下列程序的输出结果。 /*程序名为l3_13.cpp。*/ #include"stdio.h" main() { int x=4,y=5,z=2,max; max=x; if(z>y) if(z>x) max=z; else if(y>x) max=y; printf(" max=%d",max); } 运行结果: max=4 《 C语言程序设计》 (Visual C++ 6.0环境) 返回3.2.2目录

4. if语句的嵌套实例2 《 C语言程序设计》 (Visual C++ 6.0环境) 【例3.14】编写程序,根据输入的学生成绩,给出相应的等级。90分以上的等级为A,60分以下的等级为E,其余每10分一个等级。程序如下: #include"stdio.h" main() /*程序名为l3_14.cpp。*/ { int g; printf("input g:"); scanf("%d",&g); printf("g=%d: ",g); if(g>=90) printf("A\n"); else if(g>=80) printf("B\n"); else if(g>=70) printf("C\n"); else if(g>=60) printf("D\n"); else printf("E\n"); } 《 C语言程序设计》 (Visual C++ 6.0环境) 返回3.2.2目录

4. if语句的嵌套实例3 《 C语言程序设计》 (Visual C++ 6.0环境) 当执行以上程序时,首先输入、输出学生的成绩,然后进入if语句; if语句中的表达式将依次对学生成绩进行判断,若能使某 if 后的表达式值为1,则执行与其相应的子句,之后便退出整个if结构。 例如,若输入的成绩为78分,首先输出: g=78 : ,当从上至下逐一检测时,使g>=70这一表达式的值为1,因此在输出"g=78 :"之后再输出C,便退出整个if结构。 若输入的成绩为30分,首先输出相应成绩"g=30:",其次进入相应判断,最后再输出相应等级"E",便退出整个if结构。 《 C语言程序设计》 (Visual C++ 6.0环境) 返回3.2.2目录

3.2.3 switch 语句 1. switch语句的一般形式 2. switch语句的执行过程 3. switch语句的实例 《 C语言程序设计》 (Visual C++ 6.0环境) 1. switch语句的一般形式 2. switch语句的执行过程 3. switch语句的实例 返回本节目录

1 . switch语句的一般形式 1. switch语句的一般形式 《 C语言程序设计》 (Visual C++ 6.0环境) {case <常量表达式1>:<语句序列1> case <常量表达式2>:<语句序列2> …… case <常量表达式n>:<语句序列n> [default:<语句序列n+1>] } 【说明】: ①switch语句是关键字,其后面大括号里括起来的部分称为 switch语句体。要特别注意必须写这一对大括号。 ②switch后<表达式>的运算结果可以是整型、字符型或枚举型表达式等,<表达式>两边的括号不能省略。 返回3.2.3目录

1 . switch语句的一般形式 《 C语言程序设计》 (Visual C++ 6.0环境) ③case也是关键字,与其后面<常量表达式>合称为case语句标号。<常量表达式>的值在运行前必须是确定的,不能改变,因此不能是包含变量的表达式,而且数据类型必须与<表达式>一致。如: int x=3,y=7, z; switch(z) { case 1+2: /*是正确的*/ case x+y: /*是错误的*/ } ④case和常量之间要有空格,case后面的常量之后有":"。 ⑤default也是关键字,起标号的作用。代表所有case标号之外的那些标号。default可以出现在语句体中任何标号位置上。在switch语句体中也可以无default标号。 ⑥<语句序列1>、<语句序列2>等,可以是一条语句,也可以是若干语句。 ⑦必要时,case 语句标号后的语句可以不写。 《 C语言程序设计》 (Visual C++ 6.0环境) 返回3.2.3目录

2 . switch语句的执行过程 2. switch语句的执行过程 《 C语言程序设计》 (Visual C++ 6.0环境) 首先计算<表达式>的值,然后在switch语句体内寻找与该吻合的case标号,如果有与该值相等的标号,则执行从该标号后开始的各语句,包括在其后的所有case和default语句,直到switch语句体结束。如果没有与该值相等的标号,并且存在default标号,则从default标号后的语句开始执行,直到switch语句体结束。如果没有与该值相等的标号,并且不存在default标号,则跳过switch语句体,什么也不执行。 在switch语句中使用break语句 break语句也称间断语句。可以在各个case之后的语句最后加上break语句,每当执行到break语句时,立即跳出switch语句体。switch语句通常总是和break语句联合使用,使得switch语句真正起到多个分支的作用。 返回3.2.3目录

3 . switch语句的实例 3. switch语句的实例 《 C语言程序设计》 (Visual C++ 6.0环境) 【例3.17】模拟自动饮料机。按屏幕所示功能,输入所选择的合法数字,输出可获得的相应饮料名称。程序如下: /*程序名为l3_17.cpp。*/ #include "stdio.h" main() { int button; printf("==========自动饮料机 ==========\n"); printf("1.可口可乐\n"); printf("2.雪碧\n"); printf("3.芬达\n"); printf("4.百事可乐\n"); printf("5.非常可乐\n"); printf("请按1--5键选择饮料:\n"); scanf("%d",&button); 返回3.2.3目录

3 . switch语句的实例 《 C语言程序设计》 (Visual C++ 6.0环境) switch(button) { case 1:printf("\n你获得一听可口可乐\n");break; case 2:printf("\n你获得一听雪碧\n");break; case 3:printf("\n你获得一听芬达\n");break; case 4:printf("\n你获得一听百事可乐\n");break; case 5:printf("\n你获得一听非常可乐\n");break; default:printf("\n非法操作!\n");break; } 运行结果: =============自动饮料机============== 1.可口可乐 2.雪碧 3.芬达 4.百事可乐 5.非常可乐 请按1-5按钮选择饮料:3<CR> 你获得一听芬达 《 C语言程序设计》 (Visual C++ 6.0环境) 返回3.2.3目录

3.3 循环结构程序设计 3.3.1 循环结构的C程序实例 3.3.2 while语句 3.3.3 do-while语句 3.3 循环结构程序设计 3.3.1 循环结构的C程序实例 《 C语言程序设计》 (Visual C++ 6.0环境) 3.3.2 while语句 3.3.3 do-while语句 3.3.4 for 语句 3.3.5 循环的嵌套 3.3.6 break语句和continue语句 3.3.7 程序实训 返回本章目录

3.3.1 循环结构的C程序实例 《 C语言程序设计》 (Visual C++ 6.0环境) 【例3.19】有一张厚度为0.1毫米的纸,假设它足够大,重复将其对折,问对折多少次之后,其厚度可以抵达(再对折一次就超过)珠穆朗玛峰的高度?程序如下: main() /*程序名为l3_14.cpp。*/ { double h=0.1; int n=0; /* n用来累计对折次数*/ while(h<=8848180) { h=h*2; n=n+1; } printf("对折次数为:%d,此时厚度:%.2f\n",n-1,h/2); 重复对折一张纸,实质就是厚度乘以2,次数加1。用顺序结构编程为: h=h*2; n=n+1; …… 这样的语句一直重复写到h满足题目要求为止。实际中这类问题,就可用循环结构编程实现。本例中,使用的是循环结构中的while语句。 C语言共有三种类型的循环语句,while、do-while和for语句。 《 C语言程序设计》 (Visual C++ 6.0环境) 返回本节目录

3.3.2 while语句 1.while语句的一般形式 2.while语句的执行过程 《 C语言程序设计》 (Visual C++ 6.0环境) while(<表达式>) <循环体语句> 说明:while语句是C的关键字,其后面的一对括号中的<表达式>,可以是C语言的任意合法表达式,由它来控制循环体语句是否执行,括号不能省略。<循环体语句>可以是一条语句,也可以是多条语句,一般来说循环体是一条语句时不用加"{}",如果是多条语句,就一定要加"{}" 构成复合语句。其中的语句可以是空语句、表达式语句或作为循环体一部分的复合语句,如果循环体是一个空语句,表示不执行任何操作(一般用于延时)。 2.while语句的执行过程 (1)计算while后一对括号中的<表达式>的值。当值为非零时,则执行步骤(2);当值为零时,则执行步骤(3)。 (2)执行<循环体语句>后,转去执行步骤(1)。 (3)退出while循环。 返回本节目录

while语句实例 3.while语句实例 《 C语言程序设计》 (Visual C++ 6.0环境) /*程序名为l3_21.cpp。*/ #include "stdio.h" main() / *若sum的值超过int型变量能表示的范围,则设置成长整型*/ { int sum=0,i=1; while(i<=100) { sum+=i; i++;} printf("其和是 %d\n",sum); /*若sum为长整型,则相应的输出也设置成长整型ld*/ } 运行结果: 其和是5050 返回本节目录

3.3.3 do-while语句 1.do-while语句的一般形式 2.do-while语句的执行过程 《 C语言程序设计》 (Visual C++ 6.0环境)      do <循环体语句> while(<表达式>); 说明:do是C语言的关键字,必须和while联合使用。do-while循环由do开始,用while结束;注意,在while结束后必须有分号,它表示该语句的结束。其它同while循环语句。 2.do-while语句的执行过程   (1)执行do后面的<循环体语句>。 (2)计算while后一对括号中的<表达式>的值。当值为非零时,转去执行步骤(1)。当值为零时,则执行步骤(3)。 (3)退出while循环。 返回本节目录

do-while语句实例 3.do-while语句实例 《 C语言程序设计》 (Visual C++ 6.0环境) #include "stdio.h" /*程序名为l3_23.cpp。*/ main() { int sum=0,i=1; / *若sum的值超过int型变量能表示的范围,则设置成长整型*/ do { sum+=i; i++;} while(i<=100); printf("其和是 %d\n",sum); /*若sum为长整型,则相应的输出也设置成长整型ld*/ } 运行结果: 其和是5050 在本例中,循环条件和循环体以及得到的结果都是和while循环一样的,只是用do-while语句来实现。 返回本节目录

3.3.4 for 语句 1.for语句的一般形式 《 C语言程序设计》 (Visual C++ 6.0环境) <循环体语句> 说明:for是C语言的关键字,三个表达式之间的必须用分号";"隔开。三个表达式可以是任意形式的C表达式,通常主要用于for循环的控制。一般<表达式1>用于计算循环变量初始值,<表达式2>为循环体是否执行的条件,<表达式3>为循环变量的调整。<循环体语句>的使用同while、do-while循环语句。for循环语句的格式还可以表示为: for(<初始化表达式>;<条件表达式>;<修正表达式>) 在某种情况下,用for语句表示循环,显得紧凑而清晰。尤其是它能利用<表达式3>自动地使循环变量发生改变,不像while结构那样要在循环体中设置"修正操作"。实际上,for语句中的<表达式3>不仅限于修正循环变量,而且可以是任何操作。例如前面例题中介绍的求1到100的和,用for语句可以表示为: for(sum=0,i=1;i<=n;sum+=i,i++); 返回本节目录

for 语句的执行过程 2.for语句的执行过程 3.for语句实例 《 C语言程序设计》 (Visual C++ 6.0环境) ①首先计算<表达式1>。 ②求<表达式2>的值;若其值为非零,则转去执行③;若<表达式2>的值为零,则转去执行⑤,结束for语句。 ③执行一次for循环体。 ④求解<表达式3>,转②执行。 ⑤结束循环,执行循环之后的语句。 3.for语句实例 【例3.25】用for语句实现求1-100之和。 #include "stdio.h" main() /*程序名为l3_25.cpp。 { int sum=0,i=1; / *若sum的值超过int型变量能表示的范围,则设置为长整型*/ 返回本节目录

for 语句的实例 《 C语言程序设计》 (Visual C++ 6.0环境) for( ;i<=n;i++) sum+=i; printf("其和是 %d\n",sum); /*若sum为长整型,则相应的输出也设置成长整型ld*/ } 运行结果: 其和是5050 for循环的执行过程:先执行表达式1,为空语句,然后判断"i<=n"是否成立,如果为真,执行循环体"sum+=i",转而执行"i++",再判断"i<=n",如此反复,直到"i<=n"为假为止。在这个例子中,i是循环控制变量,每次循环时,它的值都被改变且进行检验。 《 C语言程序设计》 (Visual C++ 6.0环境) 返回本节目录

for 语句多样性 for语句的多样性 《 C语言程序设计》 (Visual C++ 6.0环境) (3)用空循环来延长时间 由于C语言中表达式的形式十分丰富,对for语句的三个控制表达式可以灵活运用,因此造成for语句形式多种多样。 (1)<表达式1>为空语句 如上例中求1-100的和。本来由<表达式1>完成的初始化可提到循环之外完成。 (2)<表达式1>和<表达式3>是逗号表达方式 (3)用空循环来延长时间 常用空循环来产生延时,以达到某种特定要求。如: for(t=0;t<time;t++); (4)无限循环 for循环的三个表达式中,任何一个都可以省略,但是分号";"不可省略。所以下面的写法: for(;;) <语句> 是一个无限循环。将成为死循环。 返回本节目录

3.3.5 循环的嵌套 《 C语言程序设计》 (Visual C++ 6.0环境) 在一个循环内又完整地包含另一个循环,称为循环的嵌套,即循环体自身包含循环语句。 前面介绍了三种类型的循环,它们自己本身可以嵌套,如在for循环中包含另一个for循环,也可以互相嵌套,例如可以for循环中包含一个while循环或者do-while循环等等。 下面通过几个例子来介绍循环嵌套的概念和运用。 《 C语言程序设计》 (Visual C++ 6.0环境) 【例3.26】打印如下形式的乘法小九九表: 1*1=1 2*1=2 2*2=4 …… 9*1=9 9*2=18 9*3=27 …… 9*9=81 分析:表体共九行,所以首先考虑一个打印九行的算法: for(i=1;i<=9;i++) { 打印第i行} 其次考虑如何"打印第i行"。每行都有i个表达式?*?=积,可以写为: for(j=1;j <= i;j++) { 打印第j个表达式} 返回本节目录

循环的嵌套实例 《 C语言程序设计》 (Visual C++ 6.0环境) 打印第j个表达式,可写为: printf("%d*%d=%-3d",i,j,i*j); 在写这个语句时,不写换行,只能在第j个表达式输出后写一个语句使之换行。 printf("\n"); 综上所述,打印以上形式的乘法小九九表的程序如下: 《 C语言程序设计》 (Visual C++ 6.0环境) 【例3.26】 /*程序名为l3_26.cpp。*/ #include "stdio.h" main() { int i,j; /* i,j 分别控制行和列的输出*/ for(i=1;i<=9;i++) { for(j=1;j <= i;j++) printf("%d*%d=%-3d",i,j,i*j); printf("\n"); /*另起一行*/ } 返回本节目录

3.3.6 break语句和continue语句 1. break语句 2. continue语句 《 C语言程序设计》 (Visual C++ 6.0环境) 1. break语句 2. continue语句 返回本节目录

1. break语句 1. break语句 《 C语言程序设计》 (Visual C++ 6.0环境) 前面已经介绍过用break语句跳出当前的switch语句流程。在循环结构中,也可以用break语句使流程跳出本层循环体,从而提前强制性结束本层循环。 break语句的一般形式为: break; 【例3.28】在循环体中break语句执行示例。 #include "stdio.h" main() /*程序名为l3_28.cpp。*/ { int i,s=0; for(i=1;i<=10;i++) { s=s+i; if(s>5) break; printf("s=%d\n",s); } printf("使用break语句时,s的最终值为:%d\n",s); 返回3.3.6目录

break语句 《 C语言程序设计》 (Visual C++ 6.0环境) 程序运行后的输出结果如下: s=1 s=3 使用break语句时,s的最终值为:6 本例中,如果没有break语句,程序将进行10次循环;但当i=3时,s的值为6,if语句中的表达式s>5 值为1,于是执行break语句, 循环立即中断,跳出for循环,从而提前中止循环,并转向循环体外的下一条语句。此时,s的值为6。 break语句使用说明: (1)只能在switch语句体和循环体内使用break语句。 (2)当break语句出现在,其作用是跳出该switch语句体。当break语句出现在循环体中,但并不在switch语句体内时,则在执行break语句后,使流程跳出本层循环体。 《 C语言程序设计》 (Visual C++ 6.0环境) 返回3.3.6目录

2. Continue语句 2.continue语句 《 C语言程序设计》 (Visual C++ 6.0环境) 【例3.30】将【例3.28】中的break语句改用continue语句,来比较两者的区别。 #include "stdio.h" main() /*程序名为l3_30.cpp。*/ { int i,s=0; for(i=1;i<=10;i++) { s=s+i; if(s>5) continue; printf("s=%d\n",s); } printf("使用continue语句时,s的最终值为:%d\n",s); 返回3.3.6目录

Continue语句 《 C语言程序设计》 (Visual C++ 6.0环境) 程序运行后的输出结果如下: s=1 s=3 使用continue语句时,s的最终值为:55 在本例中,当i=1时,输出s=1,当i=2时,输出s=3,当i=3时,s的值为6,if语句中的表达式s>5 值为1,于是执行continue语句,跳过循环体中余下的语句,而去对for语句中的"表达式3"求值,然后进行"表达式2"的条件测试,最后根据"表达式2"的值来决定循环是否继续执行。不论continue是作为何种语句成分出现的,都将按此功能执行,这点与break有所不同。可以看出,continue语句的功能是结束本次循环。 《 C语言程序设计》 (Visual C++ 6.0环境) 返回3.3.6目录

3.3.7 编程实训1 《 C语言程序设计》 (Visual C++ 6.0环境) 【例3.32】编程输出如下图形: * *** ***** 3.3.7 编程实训1 【例3.32】编程输出如下图形: * *** ***** ******* ********* 程序如下: 《 C语言程序设计》 (Visual C++ 6.0环境) #include "stdio.h" main() /*程序名为l3_32.cpp。*/ { int i,j; for(i=1;i<=5;i++) { for(j=1;j<=10-i;j++) printf(" "); for(j=1;j<=2*i-1;j++) printf("*"); printf("\n"); } 返回本节目录

3.3.7 编程实训2 《 C语言程序设计》 (Visual C++ 6.0环境) 【例3.33】求整数3-100中的素数。为了检查某数是否是素数,采用的方法是,从n=3起直到100止,逐个用i=2~n/2去试除n,只要有一个能整除,说明该数不是素数。程序如下: 《 C语言程序设计》 (Visual C++ 6.0环境) main() /*程序名为l3_27.cpp。*/ { int i,n,num; for(n=3,num=0;n<=100;n++) { for(i=2;i<=n-1;i++) if(n%i==0) break; if(n==i) /*若n=i,则说明n不能被2~n-1整除,所以n为素数 */ { printf("%4d",n); num++; } } printf("\n素数个数是:%d\n",num); 运行结果: 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 素数个数是:24 返回本节首

3.4 结构化程序设计方法与综合实训 3.4.1 结构化程序设计方法 3.4.2 综合实训 《 C语言程序设计》 (Visual C++ 6.0环境) 3.4.1 结构化程序设计方法 3.4.2 综合实训 返回本章目录

3.4.1 结构化程序设计方法 《 C语言程序设计》 (Visual C++ 6.0环境) 3.4.1 结构化程序设计方法 结构化程序设计的思想是由E.W.Dijkstra等人于上世纪60年代后期提出的。其思想是:一个程序的任何逻辑问题均可用“顺序”、“选择”和“循环”这三种基本逻辑结构来描述。实现这些程序流程的语句都是流程控制语句。流程控制语句在程序设计中起着重要的作用,通过三种基本控制结构,使结构化程序具有唯一入口和唯一出口,没有死循环。再一个特点是程序组织结构化,即程序设计采用自顶向下,逐步细化,功能模块化的方法。这种方法就是将程序设计成一个个功能简单独立的模块. C语言是一种很好的结构化程序设计语言,它提供了比其他高级语言更丰富的流程控制语句。有四种语句是顺序执行的:(1)空语句;(2)表达式语句;(3)函数调用语句;(4)复合语句。选择语句有if语句和switch语句。循环语句有for,while和do-while语句以及一些辅助流程转向语句,如continue,break等。顺序结构、选择结构和循环结构共同作为各种复杂程序的基本构造单元。由三种结构经过反复嵌套构成的程序称为结构化程序。使用结构化程序设计的优点是:结构化构造减少了程序的复杂性,提高了可靠性、可测试性和可维护性;使用少数基本结构,使程序结构清晰,易读易懂;容易验证程序的正确性。 循环程序设计是有一定的编程规律和思路的,穷举与迭代是两类具有代表性应用的基本算法。 本节主要内容是引导读者编程来实现这些基本算法。 《 C语言程序设计》 (Visual C++ 6.0环境) 返回本节目录

3.4.2 综合实训1 《 C语言程序设计》 (Visual C++ 6.0环境) 3.4.2 综合实训1 【例3.34】用泰勒级数求e的近似值。直到最后一项小于1e-6为止。 e=1+1/1!+1/2!+1/3!+…+1/n!+… 程序如下: /*源程序名为l3_34.cpp。 泰勒级数 e*/ 《 C语言程序设计》 (Visual C++ 6.0环境) #include "stdio.h" main() { float e=1.0,t=1.0; /*用e存放结果,用t存放n!,n的值每次加1*/ int n=1; while(1/t>1e-6) { t=t*n; /*求n!*/ e=e+1/t; /* 实现求n!的倒数的和 */ n++; } printf("e=%8.6f\n",e); 运行结果: e=2.718282 返回本节目录

3.4.2 综合实训2 《 C语言程序设计》 (Visual C++ 6.0环境) 3.4.2 综合实训2 通过本例可以体现这样一个编程思路:凡是遇到求若干个有规律变化的项的乘积,就可在循环体中用求累乘积的编程通式t=t*x来编程实现;求其和,用求累加和的编程通式s=s+x来编程实现,其中t 、s分别为累积、累和,初值分别为t=1,s=0,x为变化的项的通式。 《 C语言程序设计》 (Visual C++ 6.0环境) 【例3.35】百钱百鸡问题。公元前,我国古代数学家张丘建在《算经》一书中提出了"百鸡问题":鸡翁一,值钱五,鸡母一,值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何? 分析:这是一个有名的不定方程问题。设: cocks:鸡翁数、 hens:鸡母数、chicks:鸡雏数,则有: cocks+hens+chicks=100 5*cocks+3*hens+chicks/3=100 据上述不定方程,很容易得到三个变量的取值条件: cocks:0-19之间的整数。 hens:0-33之间的整数。 chicks:0-100之间的整数。 解题思路:依次取cocks值域中的一个值,然后再在试取hens值域中的每一个值,根据前两者取值,求出chicks后,看是否合乎题意,合乎者为解。 返回本节目录

3.4.2 综合实训3 《 C语言程序设计》 (Visual C++ 6.0环境) 3.4.2 综合实训3 编程如下:/*源程序名为l3_35.cpp。百钱百鸡问题*/ #include "stdio.h" main() { int cocks,hens,chicks; for(cocks=1;cocks<=19;cocks++) for(hens=1;hens<=33;hens++) { chicks=100-cocks-hens; if(5*cocks+3*hens+chicks/3.0==100) printf("cocks=%d,hens=%d,chicks=%d\n",cocks,hens,chicks"); } } 程序运行结果如下: cocks=4,hens=18,chicks=78 cocks=8,hens=11,chicks=81 cocks=12,hens=4,chicks=84 本例采用的编程算法是穷举法。其基本思想是:对问题的所有可能状态一一测试,直到找到解或全部可能状态都测试过为止。下面例题为另一类型的穷举问题。 《 C语言程序设计》 (Visual C++ 6.0环境) 返回本节目录

3.4.2 综合实训4 《 C语言程序设计》 (Visual C++ 6.0环境) 【例3.36】爱因斯坦的阶梯问题。 3.4.2 综合实训4 【例3.36】爱因斯坦的阶梯问题。 设有一阶梯,每步跨2阶,最后余1阶;每步跨3阶,最后余2阶;每步跨5阶,最后余4阶;每步跨6阶,最后余5阶;每步跨7阶时,正好到阶梯顶。问共有多少阶梯? 问题分析:设阶梯数为:ladders,则题中条件可以改写为: (1)ladders % 2 =1 (2)ladders % 3 =2 (3)ladders % 5 =4 (4)ladders % 6 =5 (5)ladders % 7 =0 由条件(5)知,阶梯数一定为7的倍数。于是可以从7开始,分别对7、17、21、28、35…数列进行测试,看哪一个符合题意。由条件(1)又知,阶梯数一定是奇数,因此可把上述数列中的数去掉一半。 算法:依次对7、7+14、7+14+14、…用条件(2)(3)(4)进行测试,找出符合题意者。 《 C语言程序设计》 (Visual C++ 6.0环境) 返回本节目录

3.4.2 综合实训5 《 C语言程序设计》 (Visual C++ 6.0环境) ladders=119 程序如下: 3.4.2 综合实训5 《 C语言程序设计》 (Visual C++ 6.0环境) 程序如下: /*程序名为l3_36.cpp。*/ #include "stdio.h" main() { int ladders=7; while(ladders % 3!=2||ladders % 5!=4||ladders % 6!=5) ladders+=14; printf("ladders=%d\n",ladders); } 运行结果: ladders=119 返回本节目录