04 循环结构程序设计(第4章)
- 格式:doc
- 大小:231.07 KB
- 文档页数:12
第4章循环结构程序设计_编程序练习题aP110–18题:编写程序,输入某门功课的若干同学的成绩,以-1作为终止的特殊成绩,计算平均成绩并输出。
程序如下(用while语句编写):#include <stdio.h>void main( ){ int i=0,cj;float s=0,vs;scanf(“%d”,&cj);while(cj!=-1){ i=i+1 ; s=s+cj; scanf(“%d”,&cj); }vs=s/i ;printf("vs=%f\n",vs);}输入数据:80↙78↙90↙66↙88↙-1↙输出结果:vs =80.400000bP110–5题:编写程序,输出九九乘法表。
1×1=1 1×2=2 1×3=3 1×4=4 1×5=5 1×6=6 1×7=7 1×8=8 1×9=9 2×1=2 2×2=4 2×3=6 2×4=8 2×5=10 2×6=12 2×7=14 2×8=16 2×9=18 …程序如下(二重循环for语句):#include <stdio.h>void main( ){ int i,j;for(i=1;i<=9;i++){ for(j=1;j<=9;j++)printf("%d*%d=%2d ",i,j,i*j);printf("\n");}}输出结果:见上面形式bP110–6题:编写程序,输入一组字符(以#结尾),对该组字符进行统计,统计字母、数字和其他字符的个数,输出统计结果。
程序如下(单循环while语句):#include <stdio.h>void main( ){ int an=0,sn=0,tn=0; char ch;while((ch=getchar())!=’#’)if(ch>=’a’ && ch<=’z’ || ch>=’A’ && ch<=’Z’)an++;else if(ch>=’0’ && ch<=’9’)sn++;elsetn++;printf(“字母个数=%d\n ”,an);printf(“数字个数=%d\n ”,sn);printf(“其他字符个数=%d\n ”,tn);}输入数据:sd45&*abc23K+-D8wEv$s#↙输出结果:字母个数=11数字个数=5其他字符个数=5aP111–8题(修改):求 的值并输出。
第4章循环结构【练习 4-1】在例 4-1 程序中,如果对 item 赋初值 0,运行结果是什么?为什么?如果将精度改为 10-3,运行结果有变化吗?为什么?解答:如果对 item 赋初值 0,则程序运行结果是 pi=0,因为 item 为 0 时不满足 while 循环的执行条件,即不执行循环,故 pi 值为 0。
如果将精度改为10-3,运行结果会有变化,因为精度改变意味着 while 循环的条件改变,精度变大使得 while 循环次数减少,必然影响到π的值。
【练习 4-2】运行例 4-2 程序时,如果将最后一个输入数据改为-2,运行结果有变化吗?如果第一个输入数据是 -1,运行结果是什么?为什么?解答:如果将最后一个输入数据改为-2,运行结果没有变化,因为最后一个负数是一结束标志,不进行统计,故任意一个负数都可以。
如果第一个输入数据是-1,运行结果是:Grade averageis 0,因为第一个输入就是-1,则 while 循环条件不成立,不执行循环体。
【练习 4-3】序列求和(1-1/4+1/7-1/10+1/13-1/16+…):输入一个正实数 eps,计算序列1-1/4+1/7-1/10+1/13-1/16+…的值,精确到最后一项的绝对值小于eps(保留6位小数)。
试编写相应程序。
解答:#include <stdio.h>#include <math.h>int main(void){int denominator, flag;double item, s,eps;printf(“Input eps:”);scanf(“%lf”,&eps);flag = 1;denominator = 1 ;item = 1.0;s = 0;while(fabs (item) >= eps) {item = flag * 1.0 / denominator;s = s + item;flag = -flag;denominator = denominator +3;}printf ( “s = %f\n”, s);return 0;}【练习 4-4】如果将例 4-3 程序中的 do-while 语句改为下列 while 语句,会影响程序的功能吗?为什么?再增加一条什么语句,就可以实现同样的功能?while(number != 0){number = number / 10;count ++;}解答:会有影响,因为当输入数据 number 为 0 时,上述 while 循环将不执行,count 值仍为 0,故输出为 0,不符合题目要求。
第四章结构化程序设计的三种结构4.1 顺序结构程序设计一、结构化程序设计的程序结构顺序结构、分支结构/选择结构、循环结构二、C语言语句1、9种控制语句2、表达式语句3、特殊语句三、格式化输出--printf()函数printf()函数的作用:向计算机系统默认的输出设备(一般指终端或显示器)输出一个或多个任意类型的数据。
printf()函数的一般格式printf("格式字符串" [,输出项表]);1、"格式字符串"也称"转换控制字符串",可以包含三种字符(1)格式指示符。
格式指示符的一般形式如下:%[标志][宽度][.精度][F|N|h|L][类型]常用的标志字符如表3-1所示,常用的宽度指示符如表3-2所示,常用的精度指示符如表3-3所示,长度修饰符如表3-4所示,类型转换字符如表3-5所示。
(2)转义字符'\n'就是转义字符,输出时产生一个"换行"操作。
转义字符通常起控制作用(3)普通字符──除格式指示符和转义字符之外的其它字符。
格式字符串中的普通字符,原样输出。
例如printf("radius=%f\n", radius);语句中的"radius="是普通字符。
2.输出项表输出项表是可选的。
如果要输出的数据不止1个,相邻2个之间用逗号分开。
下面的printf()函数都是合法的:(1)printf("I am a student.\n");(2)printf("%d",3+2);(3)printf("a=%f b=%5d\n", a, a+3);必须强调:"格式字符串"中的格式指示符,必须与"输出项表"中、输出项的数据类型一致,否则会引起输出错误3、格式指示符输出不同类型的数据,要使用不同的类型转换字符。
编号:GXJG/JX-JL-12(08) 保存期限:三年教案审批表课题名称:4.1 while循环4.2 do...while循环教学目标:(1)知识目标:掌握while语句的格式及使用,掌握do…while语句的格式及使用;(2)能力目标:熟练使用while语句;(3)情感目标:培养学生的逻辑思维,提高学生分析问题解决问题的能力。
教学分析与准备:1.教学重点while语句的功能及运行过程,do…while语句的运行过程。
2.教学难点while语句的运行过程。
3.教学策略采用启发式教学方法,逐步引导学生对while,do...while语句的认识,结合具体实例由浅入深,加强学生对while,do...while语句认识。
4.课时安排2课时(45分钟×2)5.教学环境多媒体教室学习过程:在许多问题中需要用到循环控制,例如要求100个数之和,计算全班各个学生的成绩及其平均值等。
循环结构是结构化程序设计的三种基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。
因此熟练掌握选择结构和循环结构的基本概念和使用技巧是程序设计的最基本的要求。
请考虑以下一个问题:要计算全班各个学生某门课程考试的平均成绩应如何做呢?假定该班有40名学生,我们可以在程序中写40个scanf 函数,从键盘上输入40个学生的成绩。
实质上是重复40个同样的函数,如果你还能“忍受”的话,那么如果要统计全校1000名学生某门课程的成绩,难道你要在程序中写上1000个scanf 函数吗?这种重复操作的现象,在计算机中称为“循环”,程序设计中采用“循环语句”来完成该功能。
在任何一种高级语言中都存在循环语句。
我们将反复运行的那一部分程序称为循环的“循环体”。
在C 语言中有三种可以实现循环的语句:while 语句、for 语句和do 一while 语句。
4.1 while 语句while 语句的一般形式是:while (表达式)语句while 语句的执行流程是先计算表达式的值,如果值非零(真),则循环控制条件成立,执行while 中的“语句”,然后再计算表达式的值,如果此值仍旧为非零(真)则仍旧执行while 中的“语句”……,如此循环,直到表达式值为零(假),程序控制退出while 语句。
实验04 循环结构程序设计
(第4章MATLAB程序设计)
一、实验目的
二、实验内容
1. 求π的近似值
根据
2
2222
1111
6123n
π
=++++,求π的近似值。
当n分别取100、1000、10000时,
结果是多少?
要求:分别用循环结构和向量运算(使用sum函数)来实现。
程序及运行结果:
《数学软件》课内实验王平
2. 求级数部分和
根据
111
1
3521
y
n
=++++
-
,求:
(1) y<3时的最大n值。
(2) 与(1)的n值对应的y值。
3. 迭代过程收敛问题
考虑以下迭代公式:
1
n n
a
x b x +=
+ 其中a 、b 为正的常数。
(1) 编写程序求迭代的结果,迭代的终止条件为|x n+1-x n |≤10-5,迭代初值x 0=1.0,迭代次数不超过500次。
(2) 如果迭代过程收敛于r ,那么r 的准确值是2
b -,当(a,b)的值取(1,1)、
(8,3)、(10,0.1)时,分别对迭代结果和准确值进行比较。
4. 求解数列
已知
123123
11021323
n n n n f n f n f n f f f f n ---==⎧⎪==⎪⎨
==⎪⎪=-+>⎩
求f 1~f 100中:
(1) 最大值、最小值、各数之和。
(2) 正数、零、负数的个数。
5. 亲密数对问题
若两个连续自然数的乘积减1是素数,则称这两个连续自然数是亲密数对,该素数是亲密素数。
例如,2×3-1=5,由于5是素数,所以2和3是亲密数,5是亲密素数。
求[2,50]区间内:
(1) 亲密数对的对数。
(2) 与上述亲密数对对应的所有亲密素数之和。
程序及运行结果:
三、实验提示
四、教程:第4章 MATLAB程序设计(2/3)
4.2.3 循环结构p65
1.for语句
表达式1的值为循环变量的初值
表达式2的值为步长
表达式3的值为循环变量的终值。
步长为1时,表达式2可省略。
例4.7(for)水仙花数p65
一个三位整数各位数字的立方和等于该数本身(称水仙花数)。
输出全部水仙花数。
例4.8(for )求和 p66
已知
2
2221111123
y n
=
++++
例4.9(for )用梯形法求定积分 p66
设 0.5()sin 6x
f x e
x π-⎛
⎫=+ ⎪⎝
⎭,求30()s f x dx π=⎰。
for语句更一般的格式为:
执行过程是:
依次将矩阵的各列元素赋给循环变量;
然后执行循环体语句;
直至各列元素处理完毕。
例4.10(for)写出下列程序的执行结果。
2.while 语句
执行过程:
若条件成立,则执行循环体语句;
执行后再判断条件是否成立,若不成立则结束循环。
例4.11(while )求数组的平均值及和 p68
从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和。
例4.12(while )求矩阵指数
23
2!3!
!
n X
X X X e I X n =++++
++
3. break语句和continue语句
break 执行到该语句时,跳出循环。
continue 执行到该语句时,跳过循环体中剩下的语句,继续下一次循环。
例4.13 使用continue和break语句p69
4. 循环的嵌套(多重循环结构)
循环结构的循环体又包括一个循环结构。
例4.14(for二重循环)求完数p70
一个数恰好等于除它本身外的因子之和,称完数,如6=1+2+3,6是完数。
例4.15(for)用筛选法求某自然数范围内的全部素数p70。