聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> 循环结构程序设计:三种循环语句

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

时间:2019-08-12 18:52:05    下载该word文档

一、循环结构(Iteration Structure)的概述

1.目的

为了解决含有重复处理内容的问题,必须采用循环语句(Loop Statement)来编程实现。

2.类型

1 当型循环结构word/media/image1_1.png

2)直到型循环结构word/media/image1_1.png

二、循环语句

1.while语句

功能:实现当型循环结构。

形式

while(表达式){

循环体

}

特点:先判断后执行。

举例:(累加和问题)编程计算整数1~100的和。

int i ; //循环变量

int sum = 0 ; //累加和清0

i = 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 ; //累加和清0

i = 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 ; //累加和清0

for( 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.104.114.124.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.循环次数未知的累加和(累乘积)问题

word/media/image1_1.png

这也是累加求和的问题,但不同的是,这里的循环次数是预先未知的,而且累加项以正负交替的规律出现。实现方法,累加项通式term=sign/n表示。其中,sign+1-1+1-1……交替变化,可用sign=-sign实现,sign的初值为1n1,3,5,7……变化,可用n=n+2实现,n的初值为1;统计累加项数只有设置一个计数器变量count即可,初值为0

详细算法描述和代码实现参见课本第112页例题4.12

注意:能够正确得到累加项或累乘项通式。

计算累加和问题时注意清0,计算累乘积问题时注意置1

注意累加项或累乘项是否满足循环终止条件的判断。

159页课后习题 4.154.164.17 属于循环次数未知,计算累加和的问题。参考代码

4.循环结构和选择结构的综合应用

1 猜数字游戏升级版:编程实现猜数字游戏,要求所猜数字为1~10之间的整数,游戏者只有三次机会,猜数字游戏过程中会根据游戏者所猜数字的大小给出一定的信息提示,增强游戏的趣味性。

#include

#include

#include

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

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++){ //查看从2number-1之间所有整数是否整除number

if(number % i == 0){

flag = 0 ; //如果能整除number,则说明number不是素数,存在因子,故素数标识改为0

}

}

printf("\n");

if(flag) //========素数标识为1,输出是素数,否则输出不是素数==========

printf("YES====>%d is a prime number!\n",number);

else

printf("NO====>%d is not a prime number!\n",number);

}

改进:为了减少循环次数,用数学的方法可以证明:只需用2~sqrt(m)之间的数去除m,即可得到正确的判定结果。

/*方法二:目的使用sqrt()*/

#include

#include

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++ ){ //查看从2sqrt(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);

else

printf("NO====>%d is not a prime number!\n",number);

}

3 从键盘任意输入一个正整数,编程实现:若该整数不是素数,则打印它所有因子;否则,打印没有因子,是素数的提示信息。(参见课本第131页例4.20

#include

main(){

int number ;

int i ;

int flag = 1 ;

printf("please input a number :\n");

scanf("%d",&number); //=====从键盘输入一个整数===

for( i = 2 ; i<=number-1 ; i++){ //查看从2number-1之间所有整数是否整除number

if(number % i == 0){

flag = 0 ; //如果能整除number,则说明number不是素数,存在因子,故素数标识改为0

printf("%d\t" , i ) ; //依次输出因子

}

}

printf("\n");

if(flag)

printf("%d没有因子,是素数。\n",number);

}

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服