实验四_循环结构程序设计_第1页
实验四_循环结构程序设计_第2页
实验四_循环结构程序设计_第3页
实验四_循环结构程序设计_第4页
实验四_循环结构程序设计_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验四 程序设计-循环结构程序设计4.1 实验要求与目的1. 理解循环条件、循环体以及循环的执行过程2. 掌握及正确使用for、while和do-while语句实现循环程序设计3. 掌握break,continue语句正确使用4. 掌握双循环结构的程序设计5. 掌握相关算法(累加、素数、最值、穷举法等)4.2 实验指导结构化程序设计的三大结构:顺序结构、选择结构和循环结构。在实际生活中常说重复执行某项工作多次,或重复执行某项工作,达到某种要求为止。如果需要重复执行某些操作,在程序设计就要用到循环结构。C语言中提供了三种循环语句:for语句、while语句和do-while语句。1. for语句

2、是常用的一种循环语句,它的一般格式:for (表达式1; 表达式2; 表达式3)循环体语句 for循环语句的执行过程:S1:计算表达式1的值;S2:计算表达式2的值,并判断其值是真值(非0值),还是假值(0值)。若为真值,执行步骤S3,反之执行步骤S5;S3:执行循环体语句;S4:计算表达式3的值;返回步骤S2;S5:结束循环(退出循环);继续执行for 语句之后的后继语句。2. while循环语句,它的一般格式:while ( 条件表达式 )循环体语句while循环语句的执行过程:S1:计算条件表达式的值,并判断其值是真值(非0值),还是假值(0值),若为真值,执行步骤S2,否则执行步骤S4

3、。S2:执行循环体;S3:返回S1;S4:退出循环,执行while语句的后继语句。3. do-while循环语句,它的一般格式:do 循环体语句while( 条件表达式 );do-while循环语句的执行过程:S1:执行循环体语句;S2:计算条件表达式的值,并判断其值是真值(非0值),还是假值(0值),若为真值,返回执行步骤S1,否则执行步骤S3;S3:退出循环,执行do-while语句的后继语句。循环结构在程序设计时,需清楚四个部分,循环控制变量的初值、循环条件的判断、循环体语句(需要重复操作的语句)和改变循环控制变量的变化值。【4.1】编程实现,从键盘输入10个整数,求出它们的最大数。程序

4、文件名ex4_1.c。分析:在上次实验,编程实现了求两个整数的最大数,现将问题扩展到20个数,算法思想是一样的。求任意n个整数的最大(小)数的常用算法:定义两个变量,一个变量max(min)存放最大(小)数,另一个变量a存放输入的一个整数。S1:首先对max赋初值。通常将输入的第一个数赋给最大(小)数,即max=a(min=a);S2:输入下一个数,并赋给a;S3:max与a进行比较,若a大于max的值,将a的值赋给max;S4:返回S2。依次循环(重复执行),直到20个数都一一进行了比较,max变量中最后存储的数就是最大值。而重复进行的“工作”,就是循环结构的循环体。解决的两个关键问题:1.

5、max的初值如何给定?常采用的方法是,把输入的第一个数赋给max变量。2.采用循环结构时,如何控制循环次数?因要从10个数中求最大值,但第一数已赋给max,因此max与剩下的9个数进行比较,所以循环9次。本题已确定了循环次数,通常采用for循环语句。编写源程序一,程序文件名ex4_1.c。#includevoid main() int a,max,i; scanf(%d,&a); max=a; /*将输入的第一个数作为最大数*/ for(i=1;i10;i+) /*循环9次*/ scanf(%d,&a); /*输入待比较的数*/ if (maxa) max=a; /*输入的数与max的值进行比

6、较*/ printf(The max value is:%dn,max);输入测试数据:21 765 78 9 456 89 76 32 90 76程序运行结果:The max value is:765循环结构的三种循环语句可以相互转换,也就是说选择任意一种循环语句能实现的循环结构,同样可以用其余两种循环语句实现。即用for语句可以实现的循环,用while或do-while同样可以实现。当给定了循环次数,首选for循环语句,若循环次数不明确,需要通过某条件控制循环时,首选while或do-while循环语句。while语句与do-while语句的区别是,while是先判断,后执行,而do-wh

7、ile是先执行,后判断。编写源程序二,程序文件名ex4_11.c。#includevoid main() int a,max,i; scanf(%d,&a); max=a; /*将输入的第一个数作为最大数*/ i=2; /*前面已经输入过一个数,因此i的初值从2开始*/ while (i=10) /*循环9次*/ scanf(%d,&a); if (maxa) max=a; i+; /*i为循环控制变量,统计输入数的个数*/ printf(The max value is:%dn,max);编写源程序三,程序文件名ex4_12.c:#includevoid main() int a,max,i

8、; scanf(%d,&a); max=a; i=2;do scanf(%d,&a); if (maxa) max=a; i+; while (i=10);printf(The max value is:%dn,max);小结:1. 无论选择哪种循环语句,循环体若由两条以上的语句,必须用花括号括起来,组成一条复合语句。C程序约定,循环体默认只有一条语句。2. 无论何种循环语句,其执行特点是:循环条件为真,继续执行循环体,循环条件为假,退出循环。【4.2】编程实现,判断一个正整数是否是素数,若是输出“YES”,否则输出“No”。程序文件名ex4_2.c 。分析:所谓素数(质数)就是除1和它本身之

9、外没有其他因子的数。换句话说只能被 1和它本身整除的数就是素数(质数)。判断一个数是否是素数,可分两步实现:第1步,逐一验证除1和它本身之外数能否整除该数。若该数为m,则验证从2开始至m-1为止的所有数能否整除该数。第2步,得出结论。由第1步可知若其中有一个数能整除该数,则该数不是素数,否则是素数。将问题的所有可能的情况逐一验证,直到找到解或将全部可能的情况都测试为止的算法,称为穷举法。穷举法是程序设计中常用的算法之一。穷举算法特点是算法简单,但运行时所花费的时间量大。穷举法在程序设计中,主要采用循环语句和选择语句,循环语句用于控制穷举所有可能的情况,也可以说是对所有可能进行验证的范围,而选择

10、语句判断当前设定的条件是否满足的状态解。采用穷举法编程实现判断整数m是否是素数。程序设计的循环语句控制验证范围,1到m-1。选择语句的条件就是判断该数能否被1到m-1的数整除,若验证有一个数能整除该数,就立刻中断循环退出验证过程。由此循环语句退出,一种可能是所有的可能都验证完退出,即从2到m-1的所有数都验证完,没有一个数能整除数m,其结论是数m是素数;另一种可能是其中一个数能整除该数,则循环语句中断退出,其结论是数m不是素数。#include void main( ) int m,i; printf(Please enter a integern); scanf(%d,&m); for(i=

11、2;i=m-1;i+) if(m%i=0) break; if(im) printf(NOn); else printf(YESn);第一次运行程序:输入测试数据:23程序运行结果:YES第二次运行程序:输入测试数据:145程序运行结果:NO小结:1. 验证m是否是素数的范围:2到m-1或2到m/2或2到。2. 在验证过程中,当有一个数能整除数m,则其后的数就不必验证,可由break语句中断该循环。 3. break 语句只能用在switch语句和循环语句,在循环语句中使用break语句时,通常和if语句连用,其含义是满足某个条件时,退出循环。4. 当循环退出时,循环控制变量i的值,决定了数m

12、到底是不是素数。当i=m时,m是素数。5. 选择结构if-else可以有多种变数,程序并非唯一的。如,if-else也可修改为:if(i=m) printf(YESn);else printf(NOn);【4.3】编程实现:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。程序文件名ex4_3.c。分析:本程序的关键问题求和,则采用累加算法,该算法采用循环结构。算法思想,引入一个和变量sum,一个加数变量b,求和表达式为,sum=sum+b; 累加算法就是重复执行求和表达式sum=sum+b的过程。细化问题,该求和表达式要执行多少次,或满足何条件就不再执行;每次执行时b如何变化。

13、具体问题具体分析。由题意,求自然数的倒数之和,倒数可考虑为1/i。循环次数为n。#include void main( ) int i,n; float sum=0.0; scanf(%d,&n); for(i=1;i=n;i+) if(i%5=0|i%9=0) sum+=1.0/i; printf(%f ,sum);输入测试数据:20程序运行结果:s=0.583333小结: 1. 求满足能被5或9整除的所有自然数的条件表达式:i%5=0|i%9=0 2. 求分数之和时,一定要考虑整型除整型的情况。源程序中变量i为整型,所以倒数1/i,在具体编程时可处理为1.0/i或1/(float)i的形式

14、。【4.4】编程实现,计算的值。程序文件名:ex4_4.c。 分析:原题为求1+2!+10!。程序设计的核心是累加。观察第n-1项与第n项,可知第n-1项与第n项的关系为:n!=(n-1)!*n。由此该程序设计,可采用递推算法。递推算法是计算机数值计算中的一个重要算法,算法思想是给定一个已知条件,根据前后项的关系,由前项推后项。假设变量t表示项,t的初始值为1,则第n项的表达式为: t=t*n。 递推算法,采用循环语句。#include void main() long i,n,sum=0,t=1; for(i=1;i=a&c=A&c=Z) c=c+32; putchar (c); 输入测试数

15、据:ABCd#$GTabc23程序运行结果:abcD#$gtABC23小结: 1. 循环条件表达式 (c=getchar()!=n,依据运算符的优先级,圆括号最优先,先运算c=getchar() ,从键盘上接收一个字符,赋予变量 c,然后再判断变量 c的值是否不等于n,若是条件为真,执行循环体,否则退出循环。 2. 循环条件表达式若修改为:c=getchar()!=n,关系运算符优先赋值运算符,首先计算getchar()!=n,即当从键盘接收的一个字符不等于回车符,返回值1,然后将1赋给字符变量c,数值既不是大写字母也不是小写字母,所以直接执行putchar (c);输出ASCII码为1的字符

16、 。当从键盘是接收的字符是回车符时,返回值0,条件为假,退出循环。 3. 若本题改为,从键盘输入任意一串字符,以#号键结束时,while循环的循环条件表达式可修改为: (c=getchar()!=# 。【4.6】编程实现,利用循环嵌套在屏幕上显示如下图形。程序文件名ex4_6.c。分析:打印图形的程序设计的算法是将图形看作是由行和列组成字符图案,采用双循环结构,外循环控制图形的行数,内循环控制每一行输出的字符。该图形总共7行,第一行看上去只的一个“*”,但输出时先要输出6个空格,再输出1个“*”,第二行先输出5个空格,再输出3个“*”,依次规律输出每行的字符。每行应由两种字符组成的图案,一个字

17、符是空格,一个字符是星号。因此,内循环采用两个并行循环,第一个循环控制每行空格输出的个数,第二个循环控制每行“*”输出的个数。由于每行的空格个数和“*”号数都不一样,因此内循环次数不是一个固定值,根据每行空格或“*”个数的规律设置内循环的循环条件。若以第七行第一个“*”为坐标原点,则每行上空格的个数变化可设置为k6-i。用变量i表示行数,用变量j表示每行上打印“*”的个数,则每行上“*”的个数变化可设置j2*i+1。#include void main() int i,j,k; for (i=0;i7;i+) /*外循环控制图形的行数*/ for (k=0;k6-i;k+) /*循环控制每行的

18、空格数*/ printf( ); for (j=0;j2*i+1;j+) /*循环控制每行的星号个数*/ printf(*); printf(n); /*每输完一行图形字符须换行*/ 小结:1. 通常情况下图形打印采用双循环结构。外循环控制图形的行数,内循环控制每行的字符个数。内循环的循环次数不是一个固定值,一般需要找出循环次数与外层循环控制变量之间的关系,以便确定内层循环的次数。2. 外循环的循环体的最后一条语句通常是printf(n); 语句,控制每行的换行。3. 本程序使用了三个循环结构,其中第一个循环和第二、第三个循环是嵌套关系,而第二与第三个循环之间是并列关系。 循环嵌套编程时,内外

19、循环的循环控制变量必须不相同,否则会出错。但并行循环时循环控制变量可以相同,互不干涉。4.3 实验内容4.3.1 夯实基础【4.7】编程实现,从键盘上输入10个学生的成绩,求平均成绩、最高分和最低分。程序文件名ex4_7.c。 输入测试数据:34 56 87 90 87 65 78 87 96 69 程序运行结果:max=96 min=34 avg=74.90【4.8】编程实现,求 。程序文件名ex4_8.c。 程序的运行结果为 47977.928968【4.9】编程实现,计算。程序文件名ex4_9.c。【提示,在C语言中可调用log(n)求ln(n)。】 输入测试数据:20 程序的运行结果为

20、 6.506583【4.10】编程实现,求的值,其中a是一个数字。例如当a为2,n为5时,计算,222222222222222的值。【要求,a和n的值由键盘输入。提示,可采用递推算法。】程序文件名ex4_10.c。输入测试数据:8 10 (其中a=8,n=10)程序运行结果:1286608608 【4.11】编程实现,输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数。程序文件名:ex4_11.c。输入测试数据:abcd !# 123 EFG 890 *&程序运行结果:英文字符的个数:7,空格的个数:5, 数字字符的个数:6,其它字符的个数:6【4.12】编程实现,求2100间的

21、所有素数。程序文件名ex4_12.c。 程序运行结果: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97【4.13】编程实现,利用双循环编程,输出下列所示的图形。程序文件名ex4_13.c。4.3.2 应用提高【4.14】程序填空题。程序实现的功能是译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。请填空,填空时不得增行或删行,也不得更改程序的结构,一条横线上只能填写一条语句!程序文件名ex4_14.c。例如,可以按如下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D。字母按上述规律转换,非字母字符不变。输入测试数据:Welcome to the country! 程序运行结果:Aipgsqi xs xli gsyrxvc!#include void main() char c;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论