版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C 语言程序设计教学辅导(三)- 第 3 章 流程控制语句主要讲解如下内容:一、if 条件语句二、switch 开关语句三、for 循环语句四、while 循环语句五、do 循环语句六、跳转类语句一、if 条件语句 条件处理的概念 在日常生活中,许多事情的处理都是带条件的。如哪些人能增加工资,哪些 人不能增加工资,是由具体条件决定的。又如参加高考后哪些学生能被哪个 大学录取,是由填报志愿和高考分数决定的。这些反映到计算机的语言中, 必须有相应的条件处理语句, 在 C语言中就是 if 语句和 switch 语句来描述。 条件语句格式if ( ) else 表达式给出该语句要处理的条件, 通常是
2、关系或逻辑表达式 ,也可以是数值 表达式( 0为假,非 0为真),语句 1称为 if 子句,语句 2称为 else 子句。语句执行过程首先求出作为条件的 表达式 的值,得到的结果为逻辑值真或假; 接着,若条件为真则执行 语句 1,若条件为假同时存在 else 子句则执行 语句 2,当不存在 else 子句时不执行任何操作。格式举例:(1) if(x!=-1) c+;(2) if(x=60 & grade=100) printf(Pass!n);(4) if(x*x+y*y=z*z) c+; w=x+y+z;(5) if(x) y=3*x-1; z=sqrt(fabs(x)+2; else y=
3、6; z=y*pow(y,4)-3; 多重 if 语句( if 语句的嵌套)if ( 表达式 1 ) 语句 1else if (表达式 2 ) 语句 2else 语句 3含有 if 语句的程序举例程序 1: #include void main()int x,y; printf(从键盘输入一个整数 :);scanf(%d,&x); /if(x0) y=2*x-1; /else y=7*x+4;/printf(x=%d, y=%dn, x,y); / 此程序的功能: 根据从键盘上输入的 式为输入一个整数到 x当 x=0 时 y 的值为 7 x+4 输出 x 和 y 的值x 的值计算并输出 y 的
4、值。计算 y 的公27xx-+14 (x0)(x 0)程序运行时, 假定从键盘上输入的是一个整数 5,则输出 y 的值为 39,若输 入的是一个整数 -5 ,则输出 y 的值为-11 。程序 2:#includevoid main()int a,b,c,temp;printf(输入三个整数 : );输入 3 个整数到变量 a,b,c为真交换 a 和 b 的值, a 大 为真交换 a 和 c 的值, a 最为真交换 b 和 c 的值,b 较 按从大到小顺序输出scanf(%d %d %d,&a,&b,&c); / 中if(ab) temp=a; a=b; b=temp; /if(ac) temp
5、=a; a=c; c=temp; / 大if(bc) temp=b; b=c; c=temp; / 大printf(%d %d %dn,a,b,c); /此程序的功能:把从键盘上输入的按任意次序排列的三个整数转变为按从大 到小的次序排列(即 abc)并输出出来使用 if 语句的编程举例编写一个程序,求出一元二次方程 ax2+bx+c=0 的实数根。分析: 由初等数学知识可知,一元二次方程的实数根为 b 2ba2 4ac ,其中 a 2a 0,b2-4ac0。编写程序时,首先需要从键盘上为 a、b、c输入 3个实数,接 着对 a=0和 b -4ac 0的特殊情况进行处理(如输出无实根信息并退出运
6、行) , 然后分别求出 x1 和 x2 两个实根。参考程序如下:#include#include#includevoid main()double a,b,c,d,x1,x2;printf( 输入一元二次方程的二次项系数、一次项系数和常数项:);scanf(%Lf %Lf %Lf,&a,&b,&c);if(a=0.0) printf(此方程不是二次方程 !n);exit(1); /中止程序运行d=b*b-4*a*c; /d作为计算过程中为方便计算而使用的中间变量if(d0.0) printf(此方程没有实数根 !n);exit(1); /中止程序运行if(d=0.0)x1=x2=-b/(2*a
7、); / 具有相同的实数根 else x1=(-b+sqrt(d)/(2*a); x2=(-b-sqrt(d)/(2*a);printf(此方程的两个根为 :%Lf 和 %Lfn,x1,x2);二、switch 开关语句switch 语句的概念 在日常生活中,经常会碰到多种选择。如一个单位需要同时为不同级别的人 增加各自不同的工资; 一个班主任需要根据学生成绩的不同分数段进行不同 的成绩评定(评价)。这些都需要根据职工级别和学生成绩进行多种不同的 选择和操作。在 C语言中就是通过 switch 语句(开关、分情况)来处理的。 语句格式switch ( ) case : case : defau
8、lt: 每个 case 部分称为 case 子句,其中冒号前面为子句标号, 后面为执行语句。 每个 switch 语句中可以包含多个 case 子句,当然相应的常量表达式的值各不同; default 部分称为 default 子句,每个 switch 语句中最多包含一条 default 子 句,该子句也可以被省略。语句执行过程switch 语句的执行过程分为以下 3 步描述。计算出语句关键字 switch 后面圆括号内 的值,假定其值用 M 表示,若它不是整型,系统将自动舍去其小数部分,只取整数部分作为 结果值;依次计算出每个 case 子句中常量表达式的值, 假定它们的值依次为 M1、M2、
9、,同样若它们的值不是整型,则自动转换为整型;让 M依次同 M1、 M2、. 进行比较,一旦遇到 M 与某个值相等,则就从 对应标号后面的语句序列开始向下执行;在碰不到相等的情况下,若存 在 default 子句,则就执行其冒号后面的语句序列,否则不执行任何操 作;当执行到复合语句最后的右花括号时就结束整个 switch 语句的执 行。switch 语句的执行。注意:通常在 switch 语句的每个子句中的语句序列的最后使用 break 语句, 当执行到该语句时立即结束整个表达式为 n%3,其值为 Mcase 0:c0+; break;/0相当于M1case 1:c1+; break;/1相当于
10、M2case 2:c2+; break;/2相当于M3/举例 2: switch(ch) case a:case A: printf(case b:case B: printf(case c:case C: printf( default: printf(/表达式为ch,其值为 M优秀n); break; /a良好n); break; /b一般n); break; /c 较差 n);/和A 相当于 M1和 M2和B 相当于 M3和 M4和C 相当于 M5和 M6 带有 default 子句语句格式举例 举例 1: switch(n%3) 使用 switch 语句的程序举例#include vo
11、id main() int x; printf(#includescanf(%d,&x);/输入一个整数到 xif(x15) printf(输入数据不正确 !n); exit(1);switch(x) case 10: printf(%c,A); break;case 11: printf(%c,B); break;case 12: printf(%c,C); break;case 13: printf(%c,D); break;case 14: printf(%c,E); break;case 15: printf(%c,F); break;default: printf(%c,x+48);
12、 break;/48为数字 0的 ASCII码 printf(n);输入 015 之间的一个整数 :); / 提示信息程序功能:首先设定一个整数变量并为它输入 015 之间的一个整数,接着 通过开关(分情况)语句输出与之对应的十六进制的数字字符。编程举例 根据从键盘上输入的两个整数和一个二目算术运算符求出运算结果。分析因需要从键盘输入和向屏幕输出,所以要在程序开始包含 stdio.h 头文 件;因需要从键盘上输入两个整数, 所以需要定义两个整数变量来保存它们, 假定为 x 和 y,再定义一个字符变量,假定为 op,用来保存从键盘输入 的一个二目的算术运算符; 定义一个整数变量保存运算结果,假定
13、用标识符 z 表示, z=x op y; 程序中只需一个主函数,开始定义变量,接着输入数据,再接着利用 switch 语句按 op 的值不同进行相应的计算,最后输出结果。根据分析编写程序#include#includevoid main() int x,y,z; char op;printf( 输入两个整数和一个运算符 : );scanf(%d %d %c,&x,&y,&op);switch (op) case +: z=x+y; break;case -: z=x-y; break;case *: z=x*y; break;case /: z=x/y; break;case %: z=x%y
14、; break;default: printf( 运算符错 !n);exit(1);printf(%d %c %d = %dn,x,op,y,z);程序运行结果输入两个整数和一个运算符 : 50 8 /50 / 8 = 6三、for 循环语句循环的概念在日常生活中,有许多事情需要重复来做。如财务人员需要给每个人计算工 资,虽然对每个人来说只计算一次,但对所有人来说就需要重复计算多次, 每次计算的方法(或者所采用的规则)都相同。再如,一个商店每天关门时,可以采用重复计算的方法进行,开始设总额为 0,以后每次把一笔销售额累加到总额上,通过重复累加 n 次,就计算出 n笔销售额的总金额。在 C语言中
15、设置有专门用来处理循环问题的语句, 包括 for 、while 、do 等 3 种循环语句。for 循环语句的格式:for ( ; ; ) for 和后面括号部分称为 循环头 ,后面的语句称为 循环体 。for 循环语句的执行过程:1. 计算表达式 1 的值;2. 计算表达式 2 的值,假定其值为 M,若缺省其值为 1;3. 若 M为逻辑真则执行 循环体 ,否则结束整个 for 循环语句的执行过程;4. 计算表达式 3 的值,紧接着自动转向第 2步继续执行下一次循环。 for 循环语句的执行过程的图形表示如教材第 3 章的图 3-3 所示。格式举例(1) for(i=0; i5; i+) pr
16、intf(%d ,i*i); /0 1 4 9 16/ 循环变量 i ,初值、终值、步长为 0、 5、 1(2) for(j=1,p=1; j5) break;/ 表达式 1、2 省略,循环体为复合语句 语句嵌套(1) for(i=1; i5; i+)/i 的初、终、步为 1、4、1for(j=1; j=i; j+) p+=i*j; /j的初、终、步为 1、 i 、 1/若 p=0 则 p=1*1+2*1+2*2+3*1+3*2+3*3+4*1+4*2+4*3+4*4=65(2) for(i=1; i=5; i+) scanf(%d,&x); for(j=2; j3) printf(%d ,x
17、); /输出不能被 2 和 3 整除的 x 值使用 for 循环的程序举例程序 1:#include#includevoid main()定义变量输入提示 输入值赋 nint n,x,max,min;/printf( 输入待处理数据的个数: ); / scanf(%d,&n);/for(;n=1) :); scanf(%d,&n);printf( 需要从键盘上输入 scanf(%d,&x); / max=min=x; / for(;-n;) /scanf(%d,&x); / if(xmax) max=x; / if(xmin) min=x; /%d个待处理的数据 !n,n); /输入提示第 1
18、 个数据输入到 x 中 把x 值同时赋给 max和 min 省略表达式 1 和 3 输入下一个数据到 x 较大的数赋给 max 较小的数赋给 minprintf(max:%d, min:%dn,max,min); / 输出最大数和最小数 处理结果:假定需处理 6 个数据,这 6 个数据为: 48,62,30,24,55,36 ,则程序运行结 果为:输入待处理数据的个数: 6需要从键盘上输入 6 个待处理的数据 :48 62 30 24 55 36 max:62 min:24程序 2:#includevoid main()int a,b; / 定义变量 for(a=0,b=1; b20; a=a
19、+b,b=a+b) / 处理过程 printf(%d %d ,a,b);/0 1 1 2 3 5 8 13printf(%d %dn,a,b); /21 34 / 输出最后结果 程序功能:此程序的功能是输出一个数列的前若干项,其中第 1项为 0,第 2项为 1, 以后每一项等于其前两项之和。 如第 7项为 8,它等于第 5项 3和第 6项5之和利用 for 循环编程举例举例 1:编一程序计算出 1+2+4+6+ +50 的值。 分析:此题所给的计算公式是一个和式,它除第一项外,其余项为从 2至 50的 每一个偶数的平方,因此可采用循环累加的方法来计算, 即依次把每个数据项 (在 此为偶数的平方
20、)累加到一个变量中。设循环变量为 i ,它的初值、终值和步长 应分别为 2、50和 2,设用于累加的变量为 s,它的初值应为和式中的第一项 1, 因为它不能够通过有规律的循环累加到 s 上。在循环体中通过赋值语句每次把 i 的平方值累加到 s 上,当循环结束后, s 的值就是所求的结果。根据分析编写出程序如下:#includevoid main()int i,s=1;for(i=2;i=50;i+=2) s+=i*i;printf(s=%dn,s);运行结果: s=22101举例 2:由勾股定理可知,在一个直角三角形中,两条直角边 a 和b与斜边 c 的关系为 a2+b2=c2,编一程序求出每
21、条直角边均不大于30 的所有整数组解。如(3,4,5) 、(5,12,13) 就是该题的 2 组解。分析:根据题意,需要使用二重循环来解决, 设外循环变量用 a 表示,它的初值、 终值和步长应分别取 1、30 和 1,内循环变量用 b 表示,它的初值、终值和步长 应分别取 a+1,30 和 1。内循环变量的初值若取 1,而不是取 a+1,则会出现象 (3,4,5) 和(4,3,5) 这样的重复组,为了避免重复组的出现,所以让 b从 a+1开始, 即使第二条直角边大于第一条直角边。根据分析编写出程序如下:#include#includeconst int N=30;void main()int
22、a,b;double c; / 存放斜边的值for(a=1; a=N; a+)for(b=a+1; b=N; b+) c=sqrt(a*a+b*b); /sqrt 求平方根 if(fabs(c-(int)(c+1e-5)1e-5) / 若斜边同为整数则输 出printf(%d, %d, %d)n,a,b,(int)(c+1e-5); / 由于 c 为双精度,可能产生误差,不能用 c=(int)c 比较四、while 循环语句语句格式while ( ) while ( ) 称为循环头 ,后面紧随的 称为循环体 。while 循 环和 for 循环具有类似的功能, 都能够通过条件控制循环体重复执行
23、。 所不同的 表现在循环头的格式上, 在 for 循环头中有 3 个表达式, 通常第 1 个表达式为循 环变量赋初值, 第 2个为循环控制条件, 第 3 个为改变循环变量的值 (增加或减 少)。而在 while 循环头中,只有一个表达式,它给出循环控制条件。while 循环语句的执行过程(1) 计算循环头中 表达式 的值,假定其值为 M;(2) 若 M为逻辑值真(非 0),则执行 循环体 ,否则结束整个循环的执行;(3) 循环体执行结束后转向第 1 步继续执行下一次循环。 格式举例:(1) while (x0 止,进入循环前 x 值 50) break;/ 每次循环把 i 平方值累加到 s 上
24、,直到 s 的当前值大于 50 退出(3) while(i+N) /假定 i 的初值为 0,此循环体执行 N次x=rand()%100;if(x%2=0) c2+;if(x%3=0) c3+;if(x%5=0) c5+; / 对随机产生的 N个 100以内的整数,分别统计出被 2、3、5 整除的个 数带有 while 循环的程序举例#include/#include/#include / void main() int i=10;/while(i0) int a,j,k;/a=rand()%190+10; / k=(int)(sqrt(a)+1e-5);/ for(j=2; jk) print
25、f(%d ,a);支持数据输入和输出 支持随机函数和退出程序运行 支持数学函数运算/否则 a 是非素数(合数) printf(n);给 i 赋值 0 ,用 i 作循环变量定义 3 个整数变量产生一个 10-199 之间的随机整数送 a 求出 a 的平方根,取整后赋给 k判断 a 是否能被 2-k 之间的任一数整除i-; / 条件成立 a 是素数( 质数) , 输出素数,循环变量减 1while 循环,内层为 for 循环,每执程序功能:该程序是一个双重循环,外层为行一遍外循环体可能显示出一个 10至 199之间的一个素数。该程序的功能是: 随机产生出 10 个 10199 之间的素数并显示出来
26、。使用 while 循环编程举例 编程举例 1:编一程序求出满足不等式 1 1 1 1 5的最小 n 值。2 3 n 分析 :此题不等式的左边是一个和式, 该和式中的数据项个数是未知的, 也正是 要求出的。对于和式中的每个数据项,对应的通式为 1,i=1 、2、. 、n,所以i 可采用循环累加的方法来计算出它的值。设程序中的循环变量为i ,它应从 1 开始取值,每次增加 1,直到和式的值不小于 5 为止,此时的 i 值就是所求的 n; 设累加变量为 s,在循环体内应把 1/i 的值累加到 s 上。根据以上分析,采用 while 循环编写出程序如下:#includevoid main()int
27、i=0; double s=0; while(s5) s+=(double)1/+i; printf(n=%dn,i);编程举例 2: 编写一个程序,采用辗转相除法求出两个整数的最大公约数。 分析:设两个整数分别为 a和 b,a除以 b的整余数为 r,若 r=0,则表明 b能 被 a 整除,则 b 就是它们的最大公约数,否则,令 b 赋给 a, r 赋给 b,再接着 上述过程,直到整余数 r 为0时止,此时的 b的值就是原有两个整数的最大公约 数。根据分析,采用 while 循环编写出程序如下:#includevoid main()int a,b,r;printf(请输入两个正整数: ); /
28、输入提示信息scanf(%d %d,&a,&b); while(a=0 | scanf(%d %d,&a,&b);r=a%b; / while(r) /a=b; b=r;r=a%b; printf(%dn,b); /向 a 和 b 输入 2 个整数b=0) printf( 重 新 输 入 :);输出最大公约数求出 a 除以 b 的整余数 通过辗转相除求出 a和 b的最大公约数五、do 循环语句语句格式do while ( 表达式 );do 和 while 保留字之间的部分 为循环体,while 保留字后面 表达式 为 循环控制条件。特点: 是先执行循环体后进行循环条件的判断。执行过程(1) 执
29、行一次 循环体 语句;(2) 计算表达式 的值,若为逻辑真(非 0)再继续执行下一次循环体,否则 结束整个循环执行过程。格式举例:do s+=i+; while (s100); /循环体为 s+=i+; 循环条件为 s100do scanf(%d,&x); s*=x; while (-n); /输入的 n 各整数累乘到 s上程序举例 程序 1:#include#define NM 10/ 定义符号常量 NM的值为 10void main() 10int x,n=1,c=0; /定义变量并赋初值输入一个整数到 x若x 在30-60 之间则 c 增 1 循环执行 NM次 输出 c 的值统计出 30
30、至 60范围内的整数个数,do / 处理过程 scanf(%d,&x); / if(x=30 & x=60) c+; / while(n+NM); / printf(c=%dn,c); /程序功能: 根据从键盘上输入的 NM个整数, 最后输出统计结果。* 程序 2:#includevoid main()int i,x;printf( 请输入一个整数,若小于 3 则重输: );do scanf(%d,&x); while(x=3i=2;dowhile(x%i=0) printf(%d ,i); x/=i; /依次输出 x 的因数ii+; while(i=x); / 进行下一次循环时,输出 x 的更大的因数 i printf(n);例如:当 输入的 x 值为 24 时,得到的输出结果为“ 2 2 2 3 ”,输入的值为 50 时得到的输出结果为“ 2 5 5 ”,输入的值为 37时得到的输出结果为“ 37”。 程序功能: 把从键盘上输入的一个大于等于 3 的整数分解为质因数的乘积。三钟循环语句的比较for 和 while 语句是先判断循环条件再执行循环体,而 do 循环是先执行循 环体而后判断。一般情况下
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版场监督管理局合同示范文本(公共安全监控)4篇
- 专业化苗木搬运合作合同范本版B版
- 2025年度草花种植基地农业废弃物处理合同4篇
- 2024离婚双方的社会关系及人际网络处理合同
- 2024年04月华夏银行总行社会招考笔试历年参考题库附带答案详解
- 2025年度电子商务策划与运营合同范本4篇
- 2024院长任期内薪酬福利与教育教学改革合同范本3篇
- 专用场地四年承包合同样本版B版
- 2024年钢筋结构施工合同
- 2025年度拆除工程安全防护材料供应协议3篇
- 公路工程施工现场安全检查手册
- 公司组织架构图(可编辑模版)
- 1汽轮机跳闸事故演练
- 陕西省铜川市各县区乡镇行政村村庄村名居民村民委员会明细
- 礼品(礼金)上交登记台账
- 北师大版七年级数学上册教案(全册完整版)教学设计含教学反思
- 2023高中物理步步高大一轮 第五章 第1讲 万有引力定律及应用
- 青少年软件编程(Scratch)练习题及答案
- 浙江省公务员考试面试真题答案及解析精选
- 系统性红斑狼疮-第九版内科学
- 全统定额工程量计算规则1994
评论
0/150
提交评论