资源预览内容
第1页 / 共42页
第2页 / 共42页
第3页 / 共42页
第4页 / 共42页
第5页 / 共42页
第6页 / 共42页
第7页 / 共42页
第8页 / 共42页
第9页 / 共42页
第10页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第第5讲讲 循环结构程序设计循环结构程序设计2计算机与通信工程学院第第5讲 循环结构程序设计讲 循环结构程序设计1. 用用goto语句实现循环语句实现循环2. while循环循环3. do-while循环循环4. for循环循环5. break语句与语句与continue语句语句6. 程序设计示例程序设计示例1. 用用goto语句实现循环语句实现循环4计算机与通信工程学院goto 语句语句为无条件转向语句,一般形式:为无条件转向语句,一般形式: goto 语句标号语句标号;语义:语义:将程序控制流程转移到语句标号所标志的语句 处继续执行。将程序控制流程转移到语句标号所标志的语句 处继续执行。语句标号语句标号用用标示符标示符表示,语句标号的命名规则与 变量命名规则相同,表示,语句标号的命名规则与 变量命名规则相同,标号的后面要紧跟一个冒号标号的后面要紧跟一个冒号。语句标号可以位于对应的。语句标号可以位于对应的goto语句所在函数的任 何语句前面。语句所在函数的任 何语句前面。标号的作用域是整个函数。标号的作用域是整个函数。1. 用用goto语句实现循环语句实现循环5计算机与通信工程学院goto语句有两种用途:语句有两种用途:?与与 if语句语句一起构成循环结构;一起构成循环结构;?从循环体中跳到循环体外。从循环体中跳到循环体外。从理论上讲,从理论上讲,goto语句是没有必要的,实践中不 使用语句是没有必要的,实践中不 使用goto语句也可以很容易地写出代码。语句也可以很容易地写出代码。大多数情况下,使用大多数情况下,使用goto语句的程序段比不使用语句的程序段比不使用 goto语句的程序段要难以理解和维护语句的程序段要难以理解和维护(少数情况除外少数情况除外)。在在C语言中可以使 用语言中可以使 用break和和continue 语句跳出本层循环 和结束循环。语句跳出本层循环 和结束循环。结构化程序设计方法主张限制使用结构化程序设计方法主张限制使用goto语句!语句!1. 用用goto语句实现循环语句实现循环6计算机与通信工程学院示例:示例:求求1100的整数之和。的整数之和。 #include void main() int i , sum=0; i=1; loop: sum+=i; i+; if(i void main() int sum , i; sum=0; i=2; while(i void main() charc; printf(“nInput a string:”); while(c=getchar()!=#) putchar(c); 说明:说明:程序在执行时并不是输入一个字符后立即把它 送到屏幕,而是先放入缓冲区中,只有在打了回车键 之后才把缓冲区里的内容一起输出。程序在执行时并不是输入一个字符后立即把它 送到屏幕,而是先放入缓冲区中,只有在打了回车键 之后才把缓冲区里的内容一起输出。运行输出:运行输出: Input a string: This is a string# This is a string2. while循环循环11计算机与通信工程学院示例:示例:爱因斯坦阶梯问题。爱因斯坦阶梯问题。设有阶梯,不知其阶数,但知:每步跨两阶最后 剩设有阶梯,不知其阶数,但知:每步跨两阶最后 剩1阶;每步跨阶;每步跨3阶最后剩阶最后剩2阶;每步跨阶;每步跨5阶最后剩阶最后剩4 阶;每步跨阶;每步跨6阶最后剩阶最后剩5阶;每步跨阶;每步跨7阶正好到楼顶, 求共有多少阶。阶正好到楼顶, 求共有多少阶。 编程思路:编程思路:采用穷举法采用穷举法,即从整数,即从整数1试起,一旦发现 某个整数符合所有条件限制,则算法结束。试起,一旦发现 某个整数符合所有条件限制,则算法结束。 以上方法逐次加以上方法逐次加1地测试,虽然可以实现最终目 标,但太机械,可以根据条件,找出一个相对快捷的 算法。地测试,虽然可以实现最终目 标,但太机械,可以根据条件,找出一个相对快捷的 算法。2. while循环循环12计算机与通信工程学院设阶数为设阶数为n,根据所给的条件有下列关系:,根据所给的条件有下列关系: n%2=1 n%3=2 n%5=4 n%6=5 n%7=0 由由可知,阶梯数一定是可知,阶梯数一定是7的倍数,所以测试的 初值可以从的倍数,所以测试的 初值可以从7开始并且在开始并且在7的倍数的倍数14、21、28、 35、中测试。中测试。 有条件有条件知,阶梯一定是奇数,则范围可进一步 简化为知,阶梯一定是奇数,则范围可进一步 简化为:7、21、35、此数列的公差为此数列的公差为14,对此范围 内的数去测试条件,对此范围 内的数去测试条件 。2. while循环循环13计算机与通信工程学院程序如下:程序如下: #include void main() int n=7; while(n%3!=2 | n%5!=4 | n%6!=5) n+=14; printf(“Total =%dn“,n); 2. while循环循环运行输出:运行输出: Total=11914计算机与通信工程学院示例:示例:求两个正整数求两个正整数max,min的最大公约 数的最大公约 数GCD(Greatest Common Divisor)。 #include void main() int max, min, r, t; printf(“ nInput 2 integers:“); scanf(“%d%d“, if (max void main() char c; printf(“nInput a string:”); do c=getchar(); putchar(c); while(c!=#); 运行输出:运行输出:Input a string: this is a string#this is a string#3. do-while循环循环18计算机与通信工程学院示例:示例:输入一个正整数,然后按反向输出。 比如输入输入一个正整数,然后按反向输出。 比如输入12345,则输出为,则输出为54321。编程思路:编程思路: 将输入的正整数进行分解,然后再按要求先 输出最低位、次低位、将输入的正整数进行分解,然后再按要求先 输出最低位、次低位、最高位。、最高位。怎样才能把最低位分离出来呢怎样才能把最低位分离出来呢?方法:方法:采用采用对10求模对10求模的方法分离最低位的方法分离最低位。然 后用。然 后用对10求商对10求商的方法求出除掉最低位后的整数的方法求出除掉最低位后的整数, 作为进一步倒置输入的基数。, 作为进一步倒置输入的基数。3. do-while循环循环19计算机与通信工程学院#include void main() long number; int digit; printf(“nInput an integer:“); scanf(“%ld“, do digit=number%10; printf(“%d“,digit); number/=10; while(number); printf(“n“); 运行输出:运行输出: Input an integer: 12345 54321number!=03. do-while循环循环4. for循环循环21计算机与通信工程学院4. for循环循环 1. for循环语句循环语句 for语句的基本形式如下:语句的基本形式如下: for(表达式表达式1;表达式表达式2;表达式表达式3) 循环体语句循环体语句 语义如图语义如图: 表达式表达式2?计算表达式计算表达式1T(真真)F(假假)循环体语句循环体语句计算表达式计算表达式322计算机与通信工程学院示例示例: 求求1100之间所有奇数之和。之间所有奇数之和。 #include void main() int i, sum=0; for(i=1; i100) break;(4) 省略循环体,把循环体变成空语句,原来的工作 放到循环头中完成省略循环体,把循环体变成空语句,原来的工作 放到循环头中完成 int i,sum=0; for(i=1; i #include void main() int n; double a , p=10000.0 , r=0.035; printf(“%s%21sn“, “Year“,“Amount“); for(n=1; n void main() int i, j; for(i=1;i void main() int x=1, y, z; while(x void main() int i=0; for( ; ; ) printf(“%4d“, i); i+; if(i=5) break; 运行输出:运行输出:0 1 2 3 45. break与与continue语句语句32计算机与通信工程学院例:例: 判定正整数判定正整数n是否为素数。是否为素数。 #include void main() int n, i, j; printf(“nInput an Integer:“); scanf(“%d“, for(i=2; i void main() char c; printf(“nInput a string:”); while(c=getchar()!=n) if(c=ac=ec=ic=oc=u) continue; putchar(c); 5. break与与continue语句语句35计算机与通信工程学院示例示例: 输出输出100之内之内3的倍数。的倍数。 #include void main() int i; for(i=1; i #include void main() int s; float pi, n, t; pi=0; t=1; n=1; s=+1; while(fabs(t)1e-6) pi=pi+t; n=n+2; s=-s; t=s/n; pi=pi*4; printf(“pi=%10.6fn”, pi); 定义四个变量定义四个变量: pi 表示表示 t 表示公式中某一项表示公式中某一项 n 表示某一项的分母表示某一项的分母 s 表示某项的符号表示某项的符号运行输出:运行输出: Pi= 3.141593浮点数 取绝对 值函数浮点数 取绝对 值函数38计算机与通信工程学院示例:示例:求求Fibonacci数列前数列前28个数。数列特点:个数。数列特点: F1=1 ( n=1 ) F2=1( n=2 ) Fn=Fn-1+Fn-2(n=3) 原程序如下:原程序如下: #include void main() long int f1, f2; int i; f1=1; f2=1; for(i=1; i #include void main() int m, k, i, n=0; for(m=101; m=k+1) printf(“%d”, m); n=n+1; if(n%5=0) printf(“n”); printf(“n”); 运行输出运行输出: 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199变量说明变量说明: m 表示被测试整数表示被测试整数 k 素数判断时最后试除整数素数判断时最后试除整数 i 循环变量循环变量 n 输出素
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号