C4(循环结构1)

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

七Βιβλιοθήκη Baidu循环综合题目
程序设计基础 作者 鲍志斌 3
引例:编程计算1+2+. . . +10
• 可以这样实现: sum=1+2+3+4+5+6+7+8+9+10 ; • 但是,如果,问题是: 1+2+3+ „ +10000 =? 将无法用一个赋值语句实现。
• 这是一个典型的循环结构程序;
2013-8-12 程序设计基础 作者 鲍志斌 4
循环结构程序设计(1)
2013-8-12
程序设计基础
作者
鲍志斌
1
循环结构
入口
no
P
yes
A
出口
2013-8-12 程序设计基础 作者 鲍志斌 2
目录
一、引例
(1) 二、while语句
三、do - while语句
四、for语句 (2)
五、循环的嵌套
六、break和continue语句
(3)
2013-8-12
m++; } }
printf(“%6d”,m);
2013-8-12
程序设计基础
作者
鲍志斌
23
练习: 输入实数x和正整数n,计算xn .
xn = x * x * … * x
n个 x
2013-8-12
程序设计基础
作者
鲍志斌
24
练习:求n!
n! = 1*2*…*n
2013-8-12
程序设计基础
作者
鲍志斌
程序设计基础 作者 鲍志斌 29

2013-8-12
完 整 程 序
#include <stdio.h> #include <math.h> void main(){ int s, m ; float a, sum ; sum= 0; m= 1; a = 1.0; s = 1; while( fabs(a)>=1e-4 { sum+=a ; m++; a=s*1.0/(2*m-1); printf(“∏=%10.7f\n‖ , 4*sum } )
2013-8-12 程序设计基础 作者 鲍志斌 14
while(表达式) 循环体语句; while 语句执行流程:
循环入口 (while)
0 表达式=? 非0 循环体语句
开始下一次 循环
循环结束!
循环体外语句
2013-8-12 程序设计基础 作者 鲍志斌 15
问题1. 求满足 1 + 2 + 3 + „ + n<500 中最大 的 N ,并求其和,编写程序实现。
对变量赋初值
循环体
} } printf(“sinx≈ % 8.3f\n‖,sinx);
程序设计基础 作者 鲍志斌 37
2013-8-12
泰勒展开式(幂级数展开法):
f (a) f (a) f ( x) f (a) *( x a) *( x a) 2 1! 2! (n) f (a) ... *( x a) n ... n!
Output
End
Flowchart: Calculate the Maximum
编程求1+1/2+1/3+„„+ 1/100
#include<stdio.h>
#define n 100 void main() { int i=1 ,sum=0; 整除
while( i<= n)
{ sum += 1.0/i; 1/i; i ++ ;}
s=-s;
} );
30
2013-8-12
程序设计基础
作者
鲍志斌
计算π的公式还有:
π≈ π2 6 22
7
≈ 1
12
+
1
22
+
1
32
+ … +
1
n2
等等
2013-8-12
程序设计基础
作者
鲍志斌
31
练习:编程序计算e的值。
e
1 1 1+ + + + 1 ! 2! 3!
1

1 n!
2013-8-12
变量定义
float term ,sinx,x=0.5; int i ,s ;
程 序
i=1; sinx=0; term=x; s=1; while( fabs(term)>=1e-6 ) { sinx= sinx + term*s; 循环进 i++; s=-s;
行条件 term=term*x*x/((2*i-1)*(2*i-2));
2013-8-12 程序设计基础 作者 鲍志斌 21
练习: 把 100 ~ 200 之间的能被 3 整 除的数输出.
2013-8-12
程序设计基础
作者
鲍志斌
22
程序:
# include <stdio.h> void main(){
注意
int m ;m=100;
while( m<=200 )
{
if (m%3==0)
' "
2013-8-12
程序设计基础
作者
鲍志斌
38
实用幂级数:
ex = 1+x+x2/2!+x3/3!+...+xn/n!+... ln(1+x)= x-x2/3+x3/3- ...(-1)k-1*xk/k +... (|x|<1) sin x = x-x3/3!+x5/5!-...(-1)k-1*x2k-1/(2k-1)! +... (-∞<x<∞) cos x = 1-x2/2!+x4/4!-...(-1)k*x2k/(2k)! +... (-∞<x<∞)
不等于 0 的数。 表示成表达式:m % 3 != 0 寻找的范围:100 ~ 200 之间;


对应的语句:m=100;
while( m<=200 )
{
2. 3.


}
写出求解步骤: 写出程序:
程序设计基础 作者 鲍志斌 19
2013-8-12
2. 求解步骤:
1) 2)
#include <stdio.h> void main()
分析:
• 本题是一个累加求和的问题;
• 当“和” <500 时反复执行循环,否则结束循环。 步骤:

定义变量: sum,n; sum 和 n 分别赋初值;n = 0; ; ? sum = 0;? ; 当 sum < 500 时反复执行循环,否则结束循环。语 while(sum<500) 句为:
+ …
sum = sum an=
+
an
(符)
1 ?* m - 1× 2
求解步骤
① ② ③
相关的包含文件 void main(){ 变量定义; • m:项序号 1 • a→ —— * s 2*m-1
• s→符号(+ 或 -) Π • sum→ — 4
④ ⑤
为相关变量赋初值,设置初始状态 计算和:while(fabs(a)>=1e-4) {将a加到 sum 中;产生下一项a;} 输出4 * sum的值。
循环体
2013-8-12
}
printf(“e≈ % 8.3f\n‖,sum);
程序设计基础 作者 鲍志斌 34
练习:编程序计算sin(x)的值
sin(x)的泰勒级数展开式:
sin(x)
x
1
-x +
3!
(-1)
(2 n-1)
3
x - x + 5! 7!
(2 n-1)
5
7

+
2013-8-12
结果
2013-8-12
n=31 ,sum=496
程序设计基础 作者 鲍志斌 17
练习: 把 100 ~ 200 之间的不能被 3 整除的数输出.
2013-8-12
程序设计基础
作者
鲍志斌
18
把 100 ~ 200 之间的不能被 3 整除的数输出。
1.
分析:
求什么?不能被 3 整除的数。即:除以 3 的余数
编程计算: 1+2+. . . +10
#include<stdio.h>
void main() {
int i=1 ,sum; sum=0; while( i<= 10) {
sum = sum + i;
i ++ ; } printf(“sum =%d\n”,sum); }
2013-8-12 程序设计基础 作者 鲍志斌 5
#include<stdio.h> #define n 100 10000 void main(){ int i=1 ,sum=0;
while( i<= n)
{sum += }
2013-8-12 程序设计基础 作者 鲍志斌 7
i;
i ++ ;}
printf(“sum =%d\n”,sum);
编程求1+1/2+1/3+„„+ 1/100
1. 2.
问题本质: 数据描述: 和: sum
求和
项号: i i =1 an
作者
每一项: an an = 1 an不断变化
鲍志斌 8
3.
数据的初始值: sum = 0
4.
累加和的计算: sum = sum +
程序设计基础
2013-8-12
流程图:
Start 变量初始化 No
i < =100?
Yes sum sum+an i++; an=1.0/i
x (2 n-1)!
程序设计基础
作者
鲍志斌
35
sin( x)

x 1
-
x 3!
3
3
+
x 5!
5
5
-
x 7!
7
+ …
sin( x)

x 1
+
x 3!
x + 5!
+ an
+
x 7!

7
+

sum = sum an=
x 2*m-1 ? m - 1)! × ( signal ) (2 *
#include<stdio.h> void main(){
1+2+3+„+1000的程序:
#include<stdio.h> void main(){
int i=1 ,sum=0;
while( i<= 1000)
{sum +=
i;
i ++ ;} printf(“sum =%d\n”,sum); }
2013-8-12 程序设计基础 作者 鲍志斌 6
引入符号常量之后: 1+2+. . . +100的程序: +10000的程序:
{ n ++ ; sum=sum + n;
2013-8-12 程序设计基础 作者 鲍志斌
}
16
程序
#include<stdio.h> Why? void main() { int n=0,sum=0; while (sum<500) { ++ n; sum += n;} printf("n=%d,sum=%d\n",n-1,sum- n); 而不是n,sum? }
arcsinh x = x - 1/2*x3/3 + 1*3/(2*4)*x5/5 - ... (|x|<1)
arctanh x = x + x^3/3 + x^5/5 + ... (|x|<1)
printf(“sum =%d\n”,sum); }
2013-8-12 程序设计基础 作者 鲍志斌 10
实现循环的语句
2013-8-12
程序设计基础
作者
鲍志斌
11
实现循环的语句
while语句 实现循环结构的语句 do-while语句
for语句
了解每一个语句的功能、 格式、执行过程
程序设计基础 鲍志斌 作者 12
程序设计基础
作者
鲍志斌
32
#include<stdio.h> void main(){
float term ,sum ; int term=1; )
循环进 行条件
i

程 序
i=1; sum=1;
对变量赋初值
while( term>=1e-6 { term=term/i; sum= sum + term; i++; }
3)
4)
{
变量定义;
5)
6)
while( ){
}
„ „
}
2013-8-12
程序设计基础
作者
鲍志斌
20
3. 程序:
# include <stdio.h> void main(){
int m ;m=100;
while( m<=200 )
{
if (m%3)
m++;
printf(“%6d” , m);
}
}
2013-8-12
while 语句
2013-8-12
程序设计基础
作者
鲍志斌
13
while 语句
1. 格式:
while
(表达式) 复合语句;
2. 功能:
while 语句用来实现“当型”循环。 3. 执行过程: 首先计算“表达式”的值,当“表达式”的值为 非 0 时,反复执行 while 中的复合语句;直到 “表达式”的值为零,while循环结束。
arcsin x = x + 1/2*x3/3 + 1*3/(2*4)*x5/5 + ... (|x|<1)
arccos x = π - ( x + 1/2*x3/3 + 1*3/(2*4)*x5/5 + ... ) (|x|<1) arctan x = x - x^3/3 + x^5/5 - ... (x≤1) sinh x = x+x3/3!+x5/5!+...(-1)k-1*x2k-1/(2k-1)! +... (-∞<x<∞) cosh x = 1+x2/2!+x4/4!+...(-1)k*x2k/(2k)!+... (-∞<x<∞)
25
问题2 .利用格里高利公式求Π 值:
Π

4

1 1 - — 3
1 +— 5
1 - — + … 7
要求精确到最后一项的绝对值小于10–4
2013-8-12
程序设计基础
作者
鲍志斌
26
1 1 1 ≈ 1 - — + — - — + … 4 7 5 3
1 ≈ 1 + -— 4 3
1 1 + +— + -— 5 7 …
相关文档
最新文档