第六章循环控制概要

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第六章循环控制

通过本章实验作业应达目标

1.熟悉while、for、do_while、break、continue语句的作用与使用规范。

2.学习并掌握利用while语句、for语句、do_while语句实现循环结构。

3.掌握循环结构和选择结构之间嵌套、多重循环间嵌套的设计方法。

4.进行算法设计训练,能综合所学控制结构语句解决一般问题。

本章必须上交作业

程序6_1.c、6_2.c、6_5.c、6_6.c、6_8.c上传至211.64.135.121/casp。

本章开始,上机实验项目量加大,希望同学们多多自行上机。本章实验项目有余力都可以做一下并上交。

循环程序设计

计算机解决问题都是按指定的顺序执行一系列的动作。按照特定的顺序执行相应的动作来求解问题的过程称为算法。程序中的语句是算法的体现,而算法要解决的是“做什么”和“怎么做”的问题。

计算机程序中指定语句的执行顺序称为“程序控制”。结构化的程序控制包含三种基本结构:顺序结构,选择结构和循环结构。

1. 循环设计

循环是在循环条件为真时反复执行的一组计算机指令,是计算机解题的一个重要结构。循环控制有两种基本方法:计数法和标志法。

1)计数器控制的循环

事先准确地知道循环次数,因此设计一个循环控制变量,由变量值来控制循环次数。每循环一次,循环变量的值会递增(增值通常为1或-1),当其值达到终值时结束循环。

教材例6.2、6.3、6.7都是典型的计数器控制的固定次数次数循环。

2)标志控制的循环

事先不知道准确的循环次数,由某一目标值标记循环的结束。如,教材例6.6中以|t|的值达到标记下限值1e-6作为循环的结束。

循环设计时要注意合理设计循环条件,使得循环不会成为死循环。

2. 算法

程序设计的首要工作是算法设计,离开了算法也就没有了程序。算法,是指完成某一项工作而采取的方法和步骤,具体到程序设计,是对解题过程的准确而完整的描述,并用一种程序设计语言的来实现。

循环主要用来解决程序设计中两类基本的算法:穷举和迭代。

1)穷举

穷举的基本思想是对问题的所有可能状态一一测试,直到找到解或将全部可能状态都测试过为止。穷举是一种重复型算法,其核心是设计循环,在循环体中依次测试。

例:输入两个正整数x和y,求其最大公约数。

main()

{int x,y,i,flag;

printf("Please input two numbers:");

scanf("%d%d",&x,&y);

for(i=x=1;i--) /* 使用i进行穷举*/ if(x%i==0&&y%i==0) break; /* 条件满足,就结束循环*/ printf("greatest common divisor=%d\n",i);

}

两个数中的小者到2之间任何一个数都有可能是公约数,因此用变量i从大到小一一穷举,直到找到为止。若两数互质,当i==1时也能使条件满足。

2)迭代

按照特定规律和方法,不断用新值取代变量的旧值,或由旧值递推出变量新值,直至问题解决为止,这种解决问题的方法为迭代。迭代的关键因素是:迭代初值、迭代公式和迭代次数(精度要求)。

例:使用辗转相除法求两数的最大公约数。

辗转相除法:如果x除以y的余数为0,则除数y就是最大公约数,或余数不为0,则被除数x被除数y取代,除数y被余数取代,再用新的x除以新的y,判断余数是否为0,如果不为0,则重复此迭代过程,直至余数为0,此时的除数y即为最大公约数。

main()

{int x,y,temp;

printf("Please input tw o numbers:");

scanf("%d%d",&x,&y);

temp=x%y;

while(temp!=0) /* 辗转相除,直到temp为0 */

{x=y; /*迭代*/

y=temp; /*迭代*/

temp=x%y;

}

printf("greatest common divisor=%d\n",y);

}

运行时输入:66 121

输出:greatest common divisor=11 各值的变化如下:

x y temp=x%y

66 121 66

121 66 11

66 11 0

实验一固定次数的循环设计

【实验目的】

学习设计固定次数的循环。

【实验内容】

编写程序,计算x的y次方。这里x为double型,y为int型。x、y通过键盘输入,要考虑y为负数的情况。

例:当输入2.5 3时,输出15.625000;当输入2.5 -3时则输出0.064000。程序以6_1.c命名并上交。

输入输出屏幕示例

【指导】

本实验中,假设y为正数时,可定义结果变量sum,想办法使sum*=x语句执行y次。

对固定次数的循环,通常方法是设计一个循环变量i,让其在初值与终值之间变化控制控制循环次数,循环条件通常是:i≤终值。如:

for(i=初值;i≤终值;i++)

循环体语句;

实验二整数按位折分求和

【实验目的】

学习设计与控制循环,并熟练%(求余)运算。

【实验内容】

输入一个不大于2×109(用long型数据)的正整数x,求这个数每位数字之和。例如,若输入33456781,输出37。程序以6_2.c命名并上交。

【提示】

设计循环,每次求出x的个位数(使用求余运算)并累加到和值变量中,再迭代操作,改变x的值,使原来的十位变个位。

【讨论与思考】

long型数据的最大值是2147483647,受变量类型限制,本程序只能接收不大于2×109的正整数。如果进行扩充,要求能接收并计算一个30位整数的各位之和,那么数据类型应如何设置,程序应该如何编写?

实验三输出九九乘法表

【实验目的】

学习多重循环的嵌套。

【实验内容】

下面程序输出九九乘法表如下图。请完善程序并以6_3.c命名。

#include

void main()

{int i,j;

clrscr();

for(_________________________)

{for(_________________________ )

printf("%d*%d=%-2d ",i,j,i*j);

相关文档
最新文档