8992100五.扩展内容(可选)E94-5:输入一个三位数,若此数是水仙花数输出“Y”,否则输出“N”,若输入值不是三位数输出“dataerror”。提示:水仙花数是一个三位数,组成这个三位数的三个数字的立方和与这个三位数相等。如:153=1°+5+3。判断是否是水仙花数需把构成三位数的三个数字分离出来并存入变量。Eg4-6:输入两个操作数和一个运算符,编程实现简单的计算器。提示:操作数和运算符可以分开输入,关键是要对运算符作判断,然后输出相应的结果。17
17 89 92 100 五.扩展内容(可选) Eg4-5:输入一个三位数,若此数是水仙花数输出“Y”,否则输出“N”, 若输入值不 是三位数输出“data error”。 提示:水仙花数是一个三位数,组成这个三位数的三个数字的立方和与这个三位数 相等。如:153=13 +53 +33。判断是否是水仙花数需把构成三位数的三个数字分离出来并存 入变量。 Eg4-6:输入两个操作数和一个运算符,编程实现简单的计算器。 提示:操作数和运算符可以分开输入,关键是要对运算符作判断,然后输出相应的 结果
实验五循环控制实验目的1、熟练掌握for语句、while语句、do-while语句实现循环的方法:2、理解循环嵌套及其使用方法:3、掌握break语句与continue语句的使用;4、掌握用循环实现一些常用算法(如穷举、迭代、递推等)。相关知识点二、for语句是C语言中最常用的循环结构。一般形式为:for(表达式1;表达式2:表达式3)语句:执行过程如下:1、计算表达式1。2、计算表达式2。如为“真”(非0),则执行for后的语句:如为“假”,则跳出循环体。3、如表达式2为“真”,则执行完循环体后,计算表达式3的值。转回步骤2。最常用的形式是:for(循环变量赋初值:判断条件:循环变量增值)循环体语句:while语句用来实现“当型”循环结构,就是当满足某个条件时进行循环。形式为:while(表达式)循环体语句:当表达式为“真”(非0值时反复执行后面的语句。特点是先判断,后执行。一般来说,while中的语句是复合语句,用0括起来,叫做循环体。do-while语句用来实现“直到型”循环,就是进行循环直到某个条件不满足。形式为:do循环体语句;while(表达式):当表达式为“真”(非0值)时反复执行do后面的语句,特点是先执行,后判断(注意区分与while语句的区别)。while语句和do-while语句可以很容易的实现互相转换。一般情况下,如果while语句和do-while语句的循环体部分一样,则它们的运行结果也是一样的。但是,如果判断条件一开始就不满足,则运行结果不一样,因为此时while语句不执行循环体,而do-while18
18 实验五 循环控制 一、 实验目的 1、熟练掌握 for 语句、while 语句、do-while 语句实现循环的方法; 2、理解循环嵌套及其使用方法; 3、掌握 break 语句与 continue 语句的使用; 4、掌握用循环实现一些常用算法(如穷举、迭代、递推等)。 二、 相关知识点 for 语句是 C 语言中最常用的循环结构。一般形式为: for (表达式 1;表达式 2;表达式 3) 语句; 执行过程如下: 1、计算表达式 1。 2、计算表达式 2。如为“真”(非 0),则执行 for 后的语句;如为“假”,则跳出循 环体。 3、如表达式 2 为“真”,则执行完循环体后,计算表达式 3 的值。转回步骤 2。 最常用的形式是: for(循环变量赋初值;判断条件;循环变量增值) 循环体语句; while 语句用来实现“当型”循环结构,就是当满足某个条件时进行循环。形式为: while (表达式) 循环体语句; 当表达式为“真”(非 0 值)时反复执行后面的语句。特点是先判断,后执行。一般 来说,while 中的语句是复合语句,用{}括起来,叫做循环体。 do-while 语句用来实现“直到型”循环,就是进行循环直到某个条件不满足。形式 为: do 循环体语句; while (表达式); 当表达式为“真”(非 0 值)时反复执行 do 后面的语句,特点是先执行,后判断(注 意区分与 while 语句的区别)。 while 语句和 do-while 语句可以很容易的实现互相转换。一般情况下,如果 while 语 句和 do-while 语句的循环体部分一样,则它们的运行结果也是一样的。但是,如果判断 条件一开始就不满足,则运行结果不一样,因为此时 while 语句不执行循环体,而 do-while
语句要执行一次。辅助控制语句break、continue语句break功能:在循环语句和switch语句中终止并跳出循环体或开关体。break只能终止并跳出最近一层的结构,break不能用于循环语句和switch语句之外的任何其它语句之中。continue功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断,仅用于循环语句中。三、实验内容一(验证及程序分析)E95-1:输入一组整数,统计其中奇数偶数个数,直到遇到回车为止。(1)算法分析:可设一整型变量x,循环的输入整数的值,若x%2==0即为偶数,否则是奇数。提示:循环条件可在while语句后的括号中出现,也可以用break语句控制。(2)根据分析结果写出源程序。程序一:#include<stdio.h>void main():int x,xo=0,xj=0;/*将偶数个数xo与奇数个数xi赋0值*//*先输入一个整数*/scanf("%d",&x),while(x!='n')/*输入不是回车时循环*1if (x%2= =0)X0=X0+1 ;elsexj=xj+1 ;scanf("%d",&x);/*循环输入其余整数*/printf("xo:%d,xj:%d",xo,xi);1程序二:#include<stdio.h>void main()1int x,xo=0,xj=0 ;while(1)19
19 语句要执行一次。 辅助控制语句 break、continue 语句 break 功能:在循环语句和 switch 语句中,终止并跳出循环体或开关体。break 只能终 止并跳出最近一层的结构,break 不能用于循环语句和 switch 语句之外的任何其它语句 之中。 continue 功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执 行循环体的判断,仅用于循环语句中。 三、 实验内容一(验证及程序分析) Eg5-1: 输入一组整数,统计其中奇数偶数个数,直到遇到回车为止。 (1)算法分析:可设一整型变量 x,循环的输入整数的值,若 x%2==0 即为偶数, 否则是奇数。 提示:循环条件可在 while 语句后的括号中出现,也可以用 break 语句控制。 (2)根据分析结果写出源程序。 程序一: #include <stdio.h> void main( ) { int x,xo=0,xj=0 ; /* 将偶数个数 xo 与奇数个数 xj 赋 0 值 */ scanf("%d",&x); /* 先输入一个整数 */ while(x!='\n') /* 输入不是回车时循环 */ { if (x%2= =0) xo=xo+1 ; else xj=xj+1 ; scanf("%d",&x); /* 循环输入其余整数 */ } printf("xo:%d,xj:%d",xo,xj); } 程序二: #include <stdio.h> void main( ) { int x,xo=0,xj=0 ; while(1) {
scanf("%d"&x)if(x==10')break;/*在循环内部用break语句控制循环条件if(x%2==0)X0=X0+1 ;else xj=xj+1 ;1printf("xo:%d,xj:%d",xo,xi);1(3)在VC++编辑环境下编辑源程序。(4)编译直到没有错误。(5)运行并输入:131672368998610/(6)查看结果Eg5-2:打印如下图案****************(1)算法分析:从图案中找出行数,空格数,星号数间的关系如下:行数空格数星号数131223315740i4-i2*i-1可用双重循环控制整个图案的输出。若用循环变量i,j分别控制外层,内层循环,则i的取值从1到4,表示行数,在每行中要确定前面空格个数和星号个数,空格个数是4-i,星号个数是2*i-1。(2)根据分析结果写出源程序#include<stdio.h>void main()1/*定义循环控制变量*/int ij;for(i=1;i<=4;i++)for(j=1;j<=4-i;j++)printf("");/*输出4-i个空格*/for(j=1;j<=2*i-1;j++)20
20 scanf("%d",&x); if(x=='\0') break ; /* 在循环内部用 break 语句控制循环条件 if(x%2==0) xo=xo+1 ; else xj=xj+1 ; } printf("xo:%d,xj:%d",xo,xj); } (3)在 VC++编辑环境下编辑源程序。 (4)编译直到没有错误。 (5)运行并输入: 13 16 7 23 68 99 86 \0↙ (6)查看结果 Eg5-2: 打印如下图案 * * * * * * * * * * * * * * * * (1)算法分析:从图案中找出行数,空格数,星号数间的关系如下: 行数 空格数 星号数 1 3 1 2 2 3 3 1 5 4 0 7 i 4-i 2*i-1 可用双重循环控制整个图案的输出。若用循环变量 i,j 分别控制外层,内层循环, 则 i 的取值从 1 到 4,表示行数,在每行中要确定前面空格个数和星号个数,空格个数 是 4-i,星号个数是 2*i-1。 (2)根据分析结果写出源程序 #include <stdio.h> void main( ) { int i,j ; /*定义循环控制变量 */ for(i=1;i<=4;i++) { for(j=1;j<=4-i;j++) printf(" "); /* 输出 4-i 个空格 */ for(j=1;j<=2*i-1;j++)
printf("*"),printf("In");11(3)在VC++编辑环境下编辑源程序。(4)编译直到没有错误。(5)运行。因不需输入,故此程序运行时仅是屏幕闪一下就又回到编辑环境了。(6)查看结果。输出题目要求的图案。实验报告要求对照各程序运行结果分析以上各程序的算法(框图表示),解释产生该结果现象的原因。四、实验内容二(综合及设计类)Eg5-3:分别用while、do-while、for语句编程,求数列前20项之和:2/1,3/2,5/3,8/5,13/8..Eg5-4:一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少米?第10次反弹多高?Eg5-5:输入两个正整数m和n,求它们的最大公约数和最小公倍数。(1)算法分析:最大公约数和最小公倍数可以利用如下3条性质实现:性质1:如果a>b,则a和b的最大公约数与a-b和b的最大公约数相同;性质2:如果a<b,则a和b的最大公约数与a和b-a的最大公约数相同:性质3:如果a=b,则a和b的最大公约数与a和b的值相同;(2)编程(3)运行在运行时,输入的值m>n,观察结果是否正确。再输入时,使m<n,观察结果是否正确。修改程序,不论m和n为何值(包括负整数),都能得到正确结果。Eg5-6:【兔子问题】把费波拉契(Fibonacci)数列的前50个数输出。实验报告要求根据题目要求设计解决问题的算法,画出其流程框图,写出满足C语言规范的源程序,在VC++环境下调试运行,对照运行结果分析产生该结果现象的原因。五.扩展内容Eg5-7:素数问题:把100~2000之间的素数输出。Eg5-8:闰年问题:判断1000一2000年之间所有的闰年。E95-9:用牛顿迭代法求下面方程在1.5附近的根:2x3-4x2+3x-6=0在能力所及的情况下完成扩展内容的算法分析,程序编写,并利用实验时间上机调21
21 printf(" * "); printf("\n"); } } (3)在 VC++编辑环境下编辑源程序。 (4)编译直到没有错误。 (5)运行。因不需输入,故此程序运行时仅是屏幕闪一下就又回到编辑环境了。 (6)查看结果。输出题目要求的图案。 实验报告要求对照各程序运行结果分析以上各程序的算法(框图表示),解释产生该 结果现象的原因。 四、 实验内容二(综合及设计类) Eg5-3: 分别用 while、do-while、for 语句编程,求数列前 20 项之和:2/1,3/2,5/3, 8/5,13/8 „ Eg5-4:一球从 100 米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在 第 10 次落地时,共经过多少米?第 10 次反弹多高? Eg5-5: 输入两个正整数 m 和 n,求它们的最大公约数和最小公倍数。 (1) 算法分析: 最大公约数和最小公倍数可以利用如下 3 条性质实现: 性质 1:如果 a>b,则 a 和 b 的最大公约数与 a-b 和 b 的最大公约数相同; 性质 2:如果 a<b,则 a 和 b 的最大公约数与 a 和 b-a 的最大公约数相同; 性质 3:如果 a=b,则 a 和 b 的最大公约数与 a 和 b 的值相同; (2) 编程 (3) 运行 在运行时,输入的值 m>n,观察结果是否正确。 再输入时,使 m<n,观察结果是否正确。 修改程序,不论 m 和 n 为何值(包括负整数),都能得到正确结果。 Eg5-6: 【兔子问题】把费波拉契(Fibonacci)数列的前 50 个数输出。 实验报告要求根据题目要求设计解决问题的算法,画出其流程框图,写出满足 C 语 言规范的源程序,在 VC++环境下调试运行,对照运行结果分析产生该结果现象的原因。 五.扩展内容 Eg5-7: 素数问题:把 100~2000 之间的素数输出。 Eg5-8: 闰年问题:判断 1000-2000 年之间所有的闰年。 Eg5-9: 用牛顿迭代法求下面方程在 1.5 附近的根: 2x3 -4x2 +3x-6=0 在能力所及的情况下完成扩展内容的算法分析,程序编写,并利用实验时间上机调