循环结构程序设计:三种循环语句
- 格式:doc
- 大小:61.50 KB
- 文档页数:9
循环结构程序设计(C语言实验报告)实验目的:1. 掌握循环结构程序设计流程2. 熟悉while、do-while和for循环语句的使用3. 掌握循环语句的嵌套应用实验原理:循环结构是一种非常重要的程序设计结构,其目的是为了让程序可以重复执行一段代码块,从而达到省去大量代码重复编写的目的,也可以是让程序能够按照用户的需求反复执行一段代码块。
在C语言中,常用的循环结构有while、do-while和for三种,这三种循环语句的基本语法结构是:while(循环条件){循环体语句;}其中,while循环和do-while循环的区别在于:while循环条件成立时,不一定会执行一次循环体,但do-while循环条件成立时,会先执行一次循环体,然后判断循环条件是否成立;至于for循环,则是将循环条件、循环初值和循环增量三个要素集成在一起,使用比较方便。
另外,循环结构也可以进行嵌套应用,即在循环体内部再嵌套一个循环,这样可以实现多个变量的循环控制。
应用实例包括如下:1. 打印九九乘法表2. 对一个数组进行排序3. 多重循环实现字谜游戏实验内容:1. while循环:目的是求出1~100的整数和,并在程序运行过程中输出1~100的所有整数。
目的是输入若干个数字,计算它们的平均值。
3. for循环:目的是输入一个数n,求1~n中可以被3或5整除的所有整数和。
4. 循环嵌套:目的是打印九九乘法表。
实验总结:本次实验通过三种常用的循环结构,并结合实例进行学习掌握,同时还熟悉了循环嵌套的应用。
相信这对于日后的程序设计和代码优化应用会非常有帮助。
c语言循环结构三种形式
循环结构是c语言程序设计中重要的一环,它是指将指定的语句重复执行多次的程序结构,循环结构有三种形式:for循环,while循环和do…while循环。
for循环是一种最常用的循环结构,其结构形式为:for(表达式1;表达式2;表达式3)语句;(注意:表达式1、2、3之间用分号隔开,表达式3要用分号结尾),每次循环都会按照表达式1、2、3的顺序执行,其中表达式1一般是初始化变量的值,表达式2则是作为循环条件(集限),表达式3则是更改变量的值。
while循环是另一种比较常用的循环结构,其结构形式为:while(表达式)语句,while循环的作用是当表达式值为真时则重复执行相应的语句,也就是说,只要表达式的值为真,语句就会一次被执行,最后当表达式值为假时,结束循环。
最后一种结构是do…while循环,其结构形式为:do句 while (表达式),不同于while循环,do…while循环会先执行语句,然后才判断表达式,也就是说,无论表达式的值是真还是假,语句都会被至少执行一次。
c语言程序设计中,for循环,while循环和do…while循环共同构成了循环结构的三种形式,它们均是c语言中重要的程序控制结构。
对于for循环,我们可以使用其来完成同一段代码的多次执行;而对于while循环,可以利用其来完成当表达式值为真时的重复执行;最后,对于do…while循环,可以利用其来完成将语句至
少执行一次的操作。
从上面可以看出,不论是c语言编程还是其他编程语言,都不可缺少循环结构,其中for循环,while循环和do…while循环是循环结构当中最为常用的三种形式,他们能够极大地提高程序员的编程效率,帮助我们完成一些复杂的程序编写工作。
一、循环结构(Iteration Structure)的概述1.目的为了解决含有重复处理内容的问题,必须采用循环语句(Loop Statement)来编程实现。
2.类型(1)当型循环结构(2)直到型循环结构二、循环语句1.while语句①功能:实现当型循环结构。
②形式while(表达式){循环体}③特点:先判断后执行。
④举例:(累加和问题)编程计算整数1~100的和。
int i ; //循环变量int sum = 0 ; //累加和清0i = 1 ; //循环变量i赋初值while( i <= 100){sum = sum + i ; //循环变量累加到sum中i = i + 1; //改变循环变量i的值}2.do-while语句①功能:实现直到型循环结构。
②形式do{循环体}while(表达式); //注意最后的分号③特点:先执行后判断。
④举例:修改上例。
/*利用do-while语句编程实现整数1~100的和。
*/int i ; //循环变量int sum = 0 ; //累加和清0i = 1 ; //循环变量i赋初值do{sum = sum + i ; //循环变量累加到sum中i = i + 1; //改变循环变量i的值}while(i<=100);//注意最后的分号3.for语句①功能:实现当型循环结构。
②形式for(表达式1;表达式2;表达式3){循环体}③特点:先判断后执行;使用频率最高。
④举例:修改上例。
/*使用for语句编程计算整数1~100的和。
*/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-while语句适合循环次数事先未知的情况。
③当第一次进入循环时条件就不满足,while语句和do-while语句就不等价。
除此情况外,while语句和do-while语句均等价。
三、程序举例1.循环次数已知的累加和问题①编程实现计算100以内偶数的和。
/*方法一:使用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语句*/sum = 0 ;i = 2 ;do{sum = 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语句实现。
*/int i , n ;long int p = 1 ;scanf("%d" , &n) ;for( i = 1 ; i <= n ; i++ ){p = p * i ;}printf("%d!=%ld\n", n , p );/*方法二:利用while语句实现。
*/int i , n ;long int p = 1 ;scanf("%d" , &n) ;i = 1 ;while( i <= n ){p = p * i ;i = i + 1 ;printf("%d!=%ld\n", n , p );/*方法三:利用do-while语句实现。
*/int i , n ;long int p = 1 ;scanf("%d" , &n) ;do{p = p * i ;i = i + 1 ;}while( i <= n) ;printf("%d!=%ld\n", 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;统计累加项数只有设置一个计数器变量count即可,初值为0。
详细算法描述和代码实现参见课本第112页例题4.12。
注意:①能够正确得到累加项或累乘项通式。
②计算累加和问题时注意清0,计算累乘积问题时注意置1。
③注意累加项或累乘项是否满足循环终止条件的判断。
第159页课后习题 4.15,4.16,4.17属于循环次数未知,计算累加和的问题。
参考代码4.循环结构和选择结构的综合应用(1)猜数字游戏升级版:编程实现猜数字游戏,要求所猜数字为1~10之间的整数,游戏者只有三次机会,猜数字游戏过程中会根据游戏者所猜数字的大小给出一定的信息提示,增强游戏的趣味性。
#include <stdio.h>#include <stdlib.h>#include <math.h>main(){int magic ; //计算机“想”的数int guess ; //人猜的数int count ;srand(time(NULL)); //标准库函数srand()为函数rand()设置随机数种子magic = rand() % 10 +1; //生成1-10之间的整数//=====利用do-while循环完成猜数字游戏======count = 0 ; //计算器清零do{printf("请您输入您要猜的整数:(1-10之间)\n");scanf("%d",&guess); //读入人猜的数count++ ;//判断计算机“想”的数与人猜的数的大小if(guess > magic){printf("猜错了!Too big!\n");}else if(guess < magic){printf("猜错了!Too small!\n");}else{printf("猜对了!\n");printf("您猜的数字为:%d\n",guess);}}while( guess!=magic && count <=3 ); //判断循环终止条件,最多三次机会}(2)从键盘任意输入一个正整数,编程判断它是否是素数,若是素数,输出“Yes!”,否则输出“No!”。
(参见课本第127页例4.19)判断素数的方法:由于素数是指除了能被1和它本身整除外,不能被其他任何整数整除的数。
(1不是素数。
2是最小的素数。
)把m作为被除数,把i=2~(m-1)依次作为除数,判断被除数m与除数i相除的结果,若都除不尽,即余数都不为0,则说明m是素数。
反之,只要有一次能除尽(余数为0),则说明m存在一个1和它本身以外的另外一个因子,它不是素数。
/*方法一*/#include <stdio.h>main(){int number ;int i ; //===========定义循环变量i=====int flag = 1 ;//======定义素数标识,初始为1=====printf("please input a number :\n");scanf("%d",&number); //=====从键盘输入一个整数===for( i = 2 ; i<=number-1 && flag ; i++){ //查看从2至number-1之间所有整数是否整除numberif(number % i == 0){flag = 0 ; //如果能整除number,则说明number不是素数,存在因子,故素数标识改为0}}printf("\n");if(flag) //========素数标识为1,输出是素数,否则输出不是素数==========printf("YES====>%d is a prime number!\n",number);elseprintf("NO====>%d is not a prime number!\n",number);}改进:为了减少循环次数,用数学的方法可以证明:只需用2~sqrt(m)之间的数去除m,即可得到正确的判定结果。
/*方法二:目的使用sqrt()*/#include <stdio.h>#include <math.h>main(){int number ;int i ; //===========定义循环变量i=====int flag = 1 ; //======定义素数标识,初始为1=====int k ;printf("please input a number :\n");scanf("%d",&number); //=====从键盘输入一个整数===k= (int)sqrt(number);for( i = 2 ; i<=k && flag ; i++ ){ //查看从2至sqrt(number)之间所有整数是否整除number,与方法一相比,减少了循环次数if(number % i == 0){flag = 0 ; //如果能整除number,则说明number不是素数,存在因子,故素数标识改为0}}printf("\n");if(flag) //========素数标识为1,输出是素数,否则输出不是素数==========printf("YES====>%d is a prime number!\n",number);elseprintf("NO====>%d is not a prime number!\n",number);}(3)从键盘任意输入一个正整数,编程实现:若该整数不是素数,则打印它所有因子;否则,打印“没有因子,是素数”的提示信息。