循环结构程序设计:三种循环语句

上传人:桔**** 文档编号:547920637 上传时间:2023-12-07 格式:DOCX 页数:9 大小:19.83KB
返回 下载 相关 举报
循环结构程序设计:三种循环语句_第1页
第1页 / 共9页
循环结构程序设计:三种循环语句_第2页
第2页 / 共9页
循环结构程序设计:三种循环语句_第3页
第3页 / 共9页
循环结构程序设计:三种循环语句_第4页
第4页 / 共9页
循环结构程序设计:三种循环语句_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《循环结构程序设计:三种循环语句》由会员分享,可在线阅读,更多相关《循环结构程序设计:三种循环语句(9页珍藏版)》请在金锄头文库上搜索。

1、、循环结构(Iteration Structure)的概述1. 目的为了解决含有重复处理内容的问题,必须采用循环语句(Loop Statement)来编程实现。2. 类型( 1 ) 当型循环结构( 2 )直到型循环结构二、循环语句1. while 语句 功能:实现当型循环结构。 形式while(表达式)循环体 特点:先判断后执行。 举例:(累加和问题)编程计算整数1100的和。int i ; /循环变量int sum = 0 ; /累加和清0i = 1 ; /循环变量 i 赋初值while( i = 100)sum = sum + i ; /循环变量累加到 sum 中i = i + 1; 改变

2、循环变量i的值2. do-while 语句 功能:实现直到型循环结构。 形式do循环体while (表达式);注意最后的分号 特点:先执行后判断。 举例:修改上例。/*利用 do-while 语句编程实现整数1100的和。*/int i ; /循环变量int sum = 0 ; /累加和清0i = 1 ; /循环变量 i 赋初值dosum = sum + i ; /循环变量累加到 sum 中i = i + 1; /改变循环变量 i 的值while(iv=100);注意最后的分号3.for 语句 功能:实现当型循环结构。 形式for(表达式1;表达式2;表达式3)循环体 特点:先判断后执行;使用

3、频率最高。 举例:修改上例。/*使用 for 语句编程计算整数1100的和。 */int i ; /循环变量int sum = 0 ; /累加和清0for( i = 1 ; i =100 ; i+ )/第一个表达式完成循环变量i赋初值;第三个表达式实现改变循 环变量 i 的值sum = sum + i ; /循环变量累加到 sum 中4.几种循环语句的比较 由于 while 语句和 for 语句均实现当型循环结构,两者是完全等价的。for(表达式1;表达式2;表达式3)循环体;表达式1 ;while(表达式2)循环体;表达式3; for语句适合循环次数事先已知的情况;而while语句和do-w

4、hile语句适合循环次数事先 未知的情况。 当第一次进入循环时条件就不满足,while语句和do-while语句就不等价。除此情况外, while 语句和 do-while 语句均等价。三、程序举例1. 循环次数已知的累加和问题 编程实现计算10 0以内偶数的和。/*方法一:使用for语句*/sum = 0 ;for( i = 2 ; i =100 ; i = i + 2 )sum = sum + i ;/*方法二:使用 while 语句*/sum = 0 ;i = 2 ;while( i =100 )sum = sum + i ;i = i + 2 ;/*方法三:使用 do-while 语句

5、*/sum = 0 ;i = 2 ;dosum = sum + i ;i = i + 2 ;while(i = 100) ;第159页课后习题4.10、4.11、4.12、4.13属于循环次数已知,计算累加和的问题。参考代码 注意:计算累加和时,需要累加和变量清0。2. 循环次数已知的累乘积问题编程计算n ! =1*2*3*4*n的值。(课本第107页例题4.10)要想解决这个问题,需要用到“递推”的程序设计方法。也就是说,求n!时,先求1!,用1! *2得到2!,用2! *3得到3!,以此类推,直到利用(n-1)! *n得到n!为止,问题即可解决。/*方法一:利用 for 语句实现。 */i

6、nt i , n ;long int p = 1 ;scanf(%d , &n) ;for( i = 1 ; i = n ; i+ )p = p * i ;printf(%d!=%ldn, n , p );/*方法二:利用while语句实现。*/int i , n ;long int p = 1 ;scanf(%d , &n) ;i = 1 ;while( i = n )p = p * i ;printf(%d!=%ldn, n , p );/*方法三:利用 do-while 语句实现。*/int i , n ;long int p = 1 ;scanf(%d , &n) ;dop = p *

7、 i ;i = i + 1 ;while( i = n) ;printf(”d!=%ldn. n , p );第159页课后习题4.14属于循环次数已知,计算累乘积的问题。参考代码 注意:计算累乘积时,需要累乘积变量置1。3. 循环次数未知的累加和(累乘积)问题这也是累加求和的问题,但不同的是,这里的循环次数是预先未知的,而且累加项以正负交 替的规律出现。实现方法,累加项通式 term=sign/n 表示。其中, sign 按+1 , -1 , +1 , -1 , 交替变化,可用sign=-sign实现,sign的初值为1; n按1,3,5,7, 变化,可用n=n+2实现, n的初值为1;统计

8、累加项数只有设置一个计数器变量count即可,初值为0。详细算法描述和代码实现参见课本第112页例题4.12。注意:能够正确得到累加项或累乘项通式。 计算累加和问题时注意清0,计算累乘积问题时注意置1。 注意累加项或累乘项是否满足循环终止条件的判断。第159页课后习题4.15, 4.16, 4.17属于循环次数未知,计算累加和的问题。参考代码4. 循环结构和选择结构的综合应用(1) 猜数字游戏升级版:编程实现猜数字游戏,要求所猜数字为110之间的整数,游戏者 只有三次机会,猜数字游戏过程中会根据游戏者所猜数字的大小给出一定的信息提示,增强 游戏的趣味性。#include #include #i

9、nclude intmagic ;/计算机“想”的数intguess ;/人猜的数int count ;srand(time(NULL);标准库函数srand()为函数rand()设置随机数种子magic = rand() % 10 +1;/生成1-10之间的整数/=利用 do-while 循环完成猜数字游戏=count = 0 ;/计算器清零doprintf(”请您输入您要猜的整数:(1-10之间)n);scanf(”d,&guess);读入人猜的数count+ ;/判断计算机“想”的数与人猜的数的大小if(guess magic)printf(猜错了! Too big! n);else i

10、f(guess magic)printf(猜错了! Too small! n);elseprintf(猜对了! n);printf(” 您猜的数字为:dn”,guess);while( guess!=magic & count =3 ); /判断循环终止条件,最多三次机会(2) 从键盘任意输入一个正整数,编程判断它是否是素数,若是素数,输出Yes! ”,否则 输出“No! ”。(参见课本第127页例4.19) 判断素数的方法:由于素数是指除了能被1和它本身整除外,不能被其他任何整数整除的数。(1不是素数。 2是最小的素数。)把m作为被除数,把i=2(m-1)依次作为除数,判断被除数m与除数i相

11、除的结果,若 都除不尽,即余数都不为0,则说明m是素数。反之,只要有一次能除尽(余数为),则说明 m 存在一个1 和它本身以外的另外一个因子,它不是素数。/*方法一*/#include main()int number ;int i ;/=定义循环变量 i=int flag = 1;/=定义素数标识,初始为1=printf(please input a number :n);scanf(%d,&nu mber);/=从键盘输入一个整数=for( i = 2 ; iv=number-l & flag ; i+)查看从2至number-1之间所有整数是否整除numberif(number % i

12、= 0)flag = 0 ; /如果能整除number,则说明number不是素数,存在因子,故素 数标识改为0printf(n);if(flag)/=素数标识为1,输出是素数,否则输出不是素数printf(YES=%d is a prime number!n,number);elseprintf(NO=%d is not a prime number!n,number);改进:为了减少循环次数,用数学的方法可以证明:只需用sqrt(m)之间的数去除m,即可 得到正确的判定结果。/*方法二:目的使用 sqrt()*/#include #include int number ;int i ;/=

13、定义循环变量 i=int flag = 1 ;/=定义素数标识,初始为1=int k ;printf(please input a number :n);scanf(%d,&nu mber);/=从键盘输入一个整数=k= (int)sqrt(number);for( i = 2 ; iv=k & flag ; i+ )查看从2至sqrt(number)之间所有整数是否整除number,与方法一相比,减少了循环次数if(number % i = 0)flag = 0 ;如果能整除number,则说明number不是素数,存在因子,故素数标识改为0printf(n);if(flag)/=素数标识为1,输出是素数,否则输出不是素数printf(YES=%d is a prime number!n,number);elseprintf(NO=%d is not a prime number!n,number);(3) 从键盘任意输入一个正整数,编程实现:若该整数不是素数,则打印它所有因子;否 则,打印“没有因子,是素数”的提示信息。(参见课本第131页例4.20)#include main()int number ;int i ;int flag = 1printf(please input a number :n);scanf(%d,&number);/=从键盘输入一个整数=f

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号