循环结构程序设计新.ppt

上传人:w****2 文档编号:16589781 上传时间:2020-10-16 格式:PPT 页数:40 大小:322KB
返回 下载 相关 举报
循环结构程序设计新.ppt_第1页
第1页 / 共40页
循环结构程序设计新.ppt_第2页
第2页 / 共40页
循环结构程序设计新.ppt_第3页
第3页 / 共40页
点击查看更多>>
资源描述
1 计算机学院鄢莉 2008.3 第六章 循环结构 本章要点: 第一节:概述 (了解) 第二节: goto语句 (自学 ) 第三节: while语句 ( 掌握 ) 第四节: do- while语句 ( 掌握 ) 第五节: for语句 ( 掌握 ) 第六节:循环的嵌套 ( 掌握 ) 第七节:循环的比较 (理解) 第八节: break语句和 continue语句 ( 掌握 ) 第九节:程序举例 (实验) 2 计算机学院鄢莉 2008.3 第一节 概述 在给定条件成立时,反复执行某程序段,直到条 件不成立为止。 给定的条件称为 循环条件 ,反复执 行的程序段称为 循环体 。 用 C语言实现循环共有四种方式: 1、用 goto语句和 if 语句构成循环; 2、用 while 语句构成循环; 3、用 do- while语句构成循环; 4、用 for 语句构成循环。 3 计算机学院鄢莉 2008.3 一般形式 : while(表达式 ) 循环体语句; 执行流程 : 第三节 while 语句 expr 循环体 假 (0) 真 (非 0) while 4 计算机学院鄢莉 2008.3 特点:先判断表达式,后执行循环体 说明: 循环体有可能一次也不执行 循环体可为任意类型语句 下列情况,退出 while循环 条件表达式不成立(为零) 循环体内遇 break, goto 无限循环 : while(1) 循环体 ; 5 计算机学院鄢莉 2008.3 例 1: 求 1到 100的累加和。 i = 1 当 i=100 sum=sum+i i = i + 1 #include main() int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%d,sum); 循环初值 循环终值 循环变量增值 循环条 件 循环体 6 计算机学院鄢莉 2008.3 例 2:显示 110的平方 main() int i=1; while(i=10) printf(%d*%d=%dn,i,i,i*i); i+; 运行结果: 1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49 8*8=64 9*9=81 10*10=100 7 计算机学院鄢莉 2008.3 例 3: 统计从键盘输入一行字符的个数。 #include main( ) int n=0; printf(“Please input a string:n”); while(getchar( )!=n) n+; printf(“%dn”,n); 8 计算机学院鄢莉 2008.3 第四节 do-while语句 用来实现 直到型 循环;先执行语句,后判断表达式。 一般形式: do 语句 while (表达式 ); 一般情况下, do-while结构和 while结构完全相同。但如果 判断条件在最初为假时,则前者多执行一次。 9 计算机学院鄢莉 2008.3 执行流程 : 说明: 至少执行一次循环体 dowhile可转化成 while结构 expr 循环体 假 (0) 真 (非 0) 循环体 While循环 do 循环体 expr 假 (0) 真 (非 0) while 10 计算机学院鄢莉 2008.3 例:求 1到 100的累加和。 main( ) int i, sum=0; i=1; do sum=sum+i; i+ +; while (i=100); printf(%d,sum); i = 1 sum=sum+i i = i + 1 当 i100) ; 不能少 11 计算机学院鄢莉 2008.3 注意: 1.在 if语句 , while语句中 , 表达式后面都不能加分号 , 而在 do-while语句的表达式后面则必须加分号 。 2.do-while语句也可以组成多重循环 , 而且也可以和 while语句 相互嵌套 。 3.在 do和 while之间的循环体由多个语句组成时 , 也必须用 括起来组成一个复合语句 。 4.do-while和 while语句相互替换时,要注意修改循环控制条件。 12 计算机学院鄢莉 2008.3 一般形式 : for(expr1 ; expr2 ; expr3) 循环体语句; 执行流程 : expr2 循环体 假 (0) 真 (非 0) for expr1 expr3 第五节 for 语句 13 计算机学院鄢莉 2008.3 for语句一般应用形式 : for(循环变量赋初值;循环条件;循环变量增值 ) 循环体语句; 说明: for语句中 expr1, expr2 ,expr3 类型任意,都可省略,但 分号;不可省 无限循环 : for(;) for语句可以转换成 while结构 expr1; while(expr2) 循环体语句; expr3; 例 用 for循环求 #include main() int i,sum=0; for(i=1;i=100;i+) sum+=i; printf(%d,sum); 14 计算机学院鄢莉 2008.3 例: #include main( ) int i=0; for(i=0;i10;i+) putchar(a+i); 运行结果: abcdefghij 例: #include main( ) int i=0; for(;i10;i+) putchar(a+i); 例: #include main( ) int i=0; for(;i10;) putchar(a+(i+); 例: #include main( ) int i=0; for(;i10;putchar(a+i),i+) ; 省略 exp1 循环体 内语句 15 计算机学院鄢莉 2008.3 main() int i,j,k; for(i=0,j=100;i=j;i+,j-) k=i+j; printf(%d+%d=%dn,i,j,k); #include main() char c; for(;(c=getchar()!=n;) printf(%c ,c); Exp1,exp3:逗 号表 达式 #include main() char c; for(;putchar(getchar()!=n;); #include main() int i; for(i=0;(getchar()!=n;i+=3) printf(%c ,i); 并非循环控 制量 16 计算机学院鄢莉 2008.3 例 4:从 2开始 , 输出 n个连续的偶数 。 void main() int a=1,n,i; printf(“n input n: ”); scanf(“%d”, for(i=1;i=n;i+) printf(“%d ”,i*2); printf(“n”); 17 计算机学院鄢莉 2008.3 第六节 循环的嵌套 一、循环的嵌套:一个循环体内又包含另一个完整的循 环结构。可多层嵌套。 二、嵌套的种类:三种循环都可以互相嵌套。 1、 while while 2、 do-while -dowhile while ( ) do while( ) do . while( ); while( ); 18 计算机学院鄢莉 2008.3 3、 for for 4、 for while for( ; ;) for(; ;) for ( ; ; ) while( ) 5、 while do-while 6、 do-while for while( ) do do for( ; ;) while( ); while ( ); 19 计算机学院鄢莉 2008.3 例 5:打印如右图图形 。 * * * main( ) int i,j,k; for(i=1;i=3;i+) for(j=1;j=3-i;j+) printf(“ ”); /*打印前导空格 */ for(k=1;k=2*i-1;k+) printf(“*”); /*打印 *符号 */ printf(“n”); 问:输出 5行呢, 9行呢?输出 n行程序怎样修改? 20 计算机学院鄢莉 2008.3 程序中的语句通常总是按顺序方向 , 或按语句功能 所定义的方向执行的 。 如果需要改变程序的正常流向 , 可以使用 转移语句 。 在语言中提供了 4种转移语句: goto , break , continue 和 return。 1.goto语句 goto语句也称为无条件转移语句 , 其一般格式如下: goto 语句标号; 其中语句标号是按标识符规定书写的符号 , 放在某一语句行的前 面 , 标号后加冒号 (: )。 第七节 转移语句 21 计算机学院鄢莉 2008.3 2、 break语句 break语句只能用在 switch语句或循环语句中 , 其作用是 跳 出 switch语句或跳出本层循环 , 转去执行后面的程序 。 break语句 的一般形式为: break; 使用 break语句可以使循环语句有多个出口 , 在一些场合下使编 程更加灵活 、 方便 。 3、 continue语句 continue语句只能用在循环体中 , 其一般形式是: continue; 其语义是: 结束本次循环 , 即不再执行循环体中 continue 语句之 后的语句 , 转入下一次循环条件的判断与执行 。 应注意的是 , 本 语句只结束本层本次的循环 , 并不跳出循环 。 4、 return语句 22 计算机学院鄢莉 2008.3 expr break; 假 (0) 真 (非 0) while break、 continue的流程图 expr continue; 假 (0) 真 (非 0) while 23 计算机学院鄢莉 2008.3 例 6:输出 100200之间的不能被 3整除的数。 main( ) int n; for(n=100;n=200;n+) if (n%3=0) continue; printf(%d ,n); printf(n); 若 n能被 3整除则终止本 次循环,继续执行“ n+ 24 计算机学院鄢莉 2008.3 例 7: 输出 100以内的素数 。 素数是只能被 1和本身整 除的数 。 可用 穷举法 来判断一个数是否是素数 。 P127例 6.9 main( ) int n,i; for(n=2;n=100;n+) for(i=2;i=n) printf(t%d,n); 若 n能被 i整除则跳 出内循环 ,执行下 条语句。 25 计算机学院鄢莉 2008.3 第八节 几种循环的比较 (1) for语句主要用于给定循环变量初值 , 步长增量以及循环次 数的循环结构 。 (2) 循环次数及控制条件要在循环过程中才能确定的循环可用 while或 do-while语句 。 (3) 三种循环语句可以相互嵌套组成多重循环 。 循环之间可以 并列但不能交叉 。 (4) 可用转移语句把流程转出循环体外 , 但不能从外面转向循 环体内 。 (5) 在循环程序中应避免出现死循环。 26 计算机学院鄢莉 2008.3 例 6.6用 /4 1-1/3+1/5-1/7+ 公式求 的近似值 , 直到 某一项的绝对值小于 10-6为止 。 ( 穷举 ) pi ; t项; s项的符号; n项的分母 N-S结构化流程图表示算法 第九节 程 序 举 例 掌握几种常用算法 ( 如 穷举、迭代、递推 等 ) t=1,pi=0,n=1.0,s=1 当 |t|1e-6 pi=pi+t n=n+2 s=-s t=s/n pi=pi*4 输出 pi 27 计算机学院鄢莉 2008.3 例 6.6 求 pi的近似值 #include #include void main() int s; float n, t, pi; t=1; pi=0; n=1.0; s=1; while(fabs(t)1e-6) pi=pi+t; n=n+2; s=-s; t=s/n; pi=pi*4; printf(pi=%10.6f n, pi); 运行结果: pi= 3.141594 28 计算机学院鄢莉 2008.3 6.9 程 序 举 例( 迭代 ) 例 6.7 求 Fibonacci数列前 40个数。这个数列有如下特点:第 1, 2两个数为 1, 1。从第 3个数开始,该数是其前面两个数之和。 即 : F(1)=1 (n=1) F(2)=1 (n=2) F(n)=F(n-1)+F(n-2) (n3) 算法如图所示 : 1F f1=1,f2=1 for i=1 to 20 输出 f1,f2 f1=f1+f2 f2=f2+f1 29 计算机学院鄢莉 2008.3 例 6.7求 Fibonacci数列前 40个数。 #include void main() long int f1, f2; int i; f1=1;f2=1; for(i=1; i=20; i+) printf(%12ld %12ld , f1, f2); if(i%2=0) printf( n); f1=f1+f2; f2=f2+f1; 1001n n 运行结果: 1 5 34 233 1597 10946 75025 514229 3524578 24157817 1 8 55 377 2584 17711 121393 832040 5702887 39088169 2 13 89 610 4181 28657 196418 1346269 9227465 63245986 3 21 144 987 6765 46368 317811 2178309 14930352 102334155 30 计算机学院鄢莉 2008.3 例 6.8判断 m是否素数。 #include #include main() int m, i, k; scanf(%d, k=sqrt(m); for (i=2;ik) printf(%d is a prime number n, m); else printf(%d is not a prime number n, m); 1001n n 运行结果: 17 17 is a prime number 问:输出 100到 1000的素数呢?怎么修改程序。 31 计算机学院鄢莉 2008.3 例 6.10 译密码。为使电文保密,往往按一定规律将其转换成密 码,收报人再按约定的规律将其译回原文。 例如 :可以按以下规律将电文变成密码: 将字母 A变成字母 E, a变成 e,即变成其后的第 4个字母, W变 成 A, X变成 B, Y变成 C, Z变成 D。素数。 如图所示 1F 32 计算机学院鄢莉 2008.3 例 6.10输入一行字符,要求输出其相应的密码 include void main() char c; while(c=getchar()!= n) if(c=a printf(%cn, c); 1001n n 运行结果: China! Glmre! 33 计算机学院鄢莉 2008.3 小结 : 1.从程序执行的流程来看 , 程序可分为三种最基本的结构: 顺序结构 , 分支结构以及循环结构 2.程序中执行部分最基本的单位是语句 。 语言的语句可分 为五类: (1)表达式语句 : 任何表达式末尾加上分号即可构成表达式 语句 , 常用的表达式语句为赋值语句 。 (2)函数调用语句 : 由函数调用加上分号即组成函数调用语 句 。 (3)控制语句 : 用于控制程序流程 , 由专门的语句定义符及 所需的表达式组成 。 主要有条件判断执行语句 , 循环执行语句 , 转向语句等 。 (4)复合语句 : 由 把多个语句括起来组成一个语句 。 复合 语句被认为是单条语句 , 它可出现在所有允许出现语句的地方 , 如循环体等 。 (5)空语句 : 仅由分号组成,无实际功能。 34 计算机学院鄢莉 2008.3 3.语言中没有提供专门的输入输出语句 , 所有的输入输出都是由 调用标准库函数中的输入输出函数来实现的 。 scanf和 getchar函数是输入函数 , 接收来自键盘的输入数据 。 scanf是格式输入函数 , 可按指定的格式输入任意类型数据 。 getchar函数是字符输入函数 , 只能接收单个字符 。 printf和 putchar函数是输出函数 , 向显示器屏幕输出数据 。 printf是格式输出函数 , 可按指定的格式显示任意类型的数 据 。 putchar是字符显示函数 , 只能显示单个字符 。 除调用 printf和 scanf库函数外的其它库函数均需使用 include命令将相关 头文件包含到本程序中来 。 4.关系表达式 和 逻辑表达式 是两种重要的表达式, 主要用于条件执行 的判断和循环执行的判断。 35 计算机学院鄢莉 2008.3 5.语言提供了多种形式的条件语句以构成分支结构 。 (1)if语句主要用于 单向选择 。 (2)if-else语句主要用于 双向选择 。 (3)if-else-if语和 switch语句用于 多向选择 。 这几种形式的条件语句一般来说是可以互相替代的 。 6.语言提供了三种循环语句 。 (1)for语句主要用于给定循环变量初值 , 步长增量以及循环次数的 循环结构 。 (2)循环次数及控制条件要在循环过程中才能确定的循环可用 while 或 do-while语句 。 (3)三种循环语句可以相互嵌套组成多重循环 。 (4)可用转移语句把流程转出循环体外 , 但不能从外面转向循环体内 。 (5)在循环程序中应避免出现死循环,即应保证循环变量的值在运行 过程中可以得到修改,并使循环条件逐步变为假,从而结束循环。 36 计算机学院鄢莉 2008.3 C语言语句小结: 名 称 一 般 形 式 简单语句 表达式语句 , 函数调用语句 ; 空语句 ; 复合语句 语句 ; 条件语句 if(表达式 ) 语句 ; if(表达式 ) 语句 1; else 语句 2; if(表达式 1) 语句 1; else if(表达式 2) 语句 2 else 语句 n; 开关语句 switch(表达式 ) case 常量表达式 : 语句 default: 语句 ; 37 计算机学院鄢莉 2008.3 循环语句: while语句 while(表达式 ) 语句 ; for语句 for(表达式 1; 表达式 2; 表达式 3) 语句 ; break语句 break; goto语句 goto; continue语句 continue; return 语句 return(表达式 ); 或 return 表达式; 38 计算机学院鄢莉 2008.3 本章作业:( P120) 必做题: 1、 4、 8、 10、 14 选做题: 2、 补充题: 1、设计一个程序要求输入两个整数 x 和 n,计算 xn ; 39 计算机学院鄢莉 2008.3 #includestdio.h main() int n,k=1,s=0,m,r; for(n=1;ns) printf(%d,n); 例:输出 1-100之间符合如下条件的数:该数的各 位数之乘积大于各位数之和。 40 计算机学院鄢莉 2008.3 例 9:打印出所有“水仙花”数。 ( 穷举法 )-P129习 题 6 所谓“水仙花数”即是指一个 3位数,其各位数字的立方和等于 该数本身。 main() int i,j ,k,n; printf(水仙花数 是 :” ); for (n=100;n1000;n+) i=n/100; j=n/10-i*10; k=n%10; if(n=i*i*i+j*j*j+k*k*k) /*判断是否“水仙花数” */ printf(%5d,n); printf(n); 取出三位数各 数位上的数字
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!