第六章

13
1 第第第 第第第第第第第第 第第 ()

description

第六章. 循环结构程序设计 (二). 第六章 循环 结构程序设计. 主要内容. 一、循环嵌套 二、循环结构程序设计举例. 第六章 循环 结构程序设计. for i=1 to 4. for j=1 to 4. 输出 i*j. 换行. 一、循环嵌套. 概念. 一个循环体内又包含另一个完整的循环结构,称为循环嵌套。. 举例. 打印乘法口诀表。. 1 2 3 4 2 4 6 8 3 6 9 12 4 8 12 16. #include - PowerPoint PPT Presentation

Transcript of 第六章

Page 1: 第六章

1

第六章循环结构程序设计

(二)

Page 2: 第六章

2

第六章 循环结构程序设计

一、循环嵌套

二、循环结构程序设计举例

主要内容

Page 3: 第六章

3

概念 一个循环体内又包含另一个完整的循环结构,称为循环嵌套。

1 2 3 4 2 4 6 8 3 6 9 12 4 8 12 16

举例 打印乘法口诀表。

#include <stdio.h>void main(){ int i,j; for (i=1;i<=4;i++) { for (j=1;j<=4;j++) printf(“%4d”,i*j); printf(“\n”); }}

i=1, j=1 1*1 j=2 1*2 j=3 1*3 j=4 1*4i=2, j=1 2*1 j=2 ……i=3i=4

i=1, j=1 1*1 j=2 1*2 j=3 1*3 j=4 1*4i=2, j=1 2*1 j=2 ……i=3i=4

for i=1 to 4

输出 i*j

for j=1 to 4

换行

一、循环嵌套第六章 循环结构程序设计

Page 4: 第六章

4

1 2 4 3 6 9 4 8 12 16

#include <stdio.h>void main(){ int i,j; for (i=1;i<=4;i++) { for (j=1;j<=i;j++) printf(“%4d”,i*j); printf(“\n”); }}

一、循环嵌套思考 1

第六章 循环结构程序设计

Page 5: 第六章

5

#include <stdio.h>void main(){ int i,j; for (i=1;i<=4;i++) { for (j=1;j<=5-i;j++) printf(“%4d”,i*j); printf(“\n”); }}

一、循环嵌套思考 2

1 2 3 4 2 4 6 3 6 4

第六章 循环结构程序设计

Page 6: 第六章

6

#include <stdio.h>void main(){ int i,j; for (i=1;i<=4;i++) {for (j=1;j<=4-i;j++) p

rintf(“%4d”,’ ‘); for (j=5-i;j<=4;j++) printf(“%4d”,i*j); printf(“\n”); }}

一、循环嵌套思考 3

4 6 8 6 9 12 4 8 12 16

第六章 循环结构程序设计

Page 7: 第六章

7

#include <stdio.h>void main(){ int i,j; for (i=1;i<=4;i++) {for (j=1;j<=i-1;j++) p

rintf(“%4d”,’ ‘); for (j=i;j<=4;j++) printf(“%4d”,i*j); printf(“\n”); }}

一、循环嵌套思考 4

1 2 3 4 4 6 8 9 12 16

第六章 循环结构程序设计

Page 8: 第六章

8

例 1 利用公式: /4=1-1/3+1/5-1/7+…求 的近似值,直到某一项的绝对值小于 10-6 为止。

#include <stdio.h>#include <math.h>void main(){ int s; float n,t,pi; t=1;pi=0;n=1.0;s=1; while((fabs(t))>1e-6) { pi=pi+t; n=n+2; s=-s; t=s/n;} pi=pi*4; printf("pi=%10.6f\n",pi);}

思考:使用那一种循环控制语句?

二、程序举例第六章 循环结构程序设计

pi=1-1/3+…输出 4* pis=1(-1)n=1,3,5,7…t=s/n

Page 9: 第六章

9

例 2

求 Fibonacci 数列的前 40 个数。

#include <stdio.h>

void main()

{

long int f1,f2;

int i;

f1=1;f2=1;

for(i=1;i<=20;i++)

{

printf("%12ld%12ld",f1,f2);

if(i%2==0) printf("\n");

f1=f1+f2;

f2=f2+f1;

}

}

特点:第 1 、 2 个数为 1 、 1 。从第三个数开始,该数是其前面两个数之和。

F1=1 (n=1)

F2=2 (n=2)

Fn=Fn-1+Fn-2 (n>=3)

P116 1 1 2 3 5 8 13 21 34 55 89 144 … …

二、程序举例第六章 循环结构程序设计

Page 10: 第六章

10

例 3 判断 m 是否为素数。

素数(质数) : 只能被 1 和它本身整除的数。

判别方法:57 :若 2~56 之间的每一个数都除不开 56 ,则 56 为素数,否则 56 不是素数。m, k=m-1 , i=2~k :若每一个 i 的值都除不开 m, 则 m 为素数,否则 m 不是素数。

flag=1;k=m-1;for (i=2;i<=k;i++) if (m%i=0) flag=0;if (flag==1) printf(“yes!”);else printf(“no!”);

k=m-1;for (i=2;i<=k;i++) if (m%i=0) break;if (i>=k+1) printf(“yes!”);else printf(“no!”);

k=m-1;k=[m/2];[(m+1)/2];k=[sqrt(m)];[sqrt(m+1)]

k=m-1;k=[m/2];[(m+1)/2];k=[sqrt(m)];[sqrt(m+1)]

二、程序举例第六章 循环结构程序设计

Page 11: 第六章

11

例 3 输出 101~200 之间的全部素数。

for m=101 to 200

①判断 m 是否为素数

②若 m 是素数,则输出并统计个数 n.

③每输出 10 个素数,换行

#include <stdio.h>#include <math.h>void main(){ int m,k,i,n=0; for(m=101;m<=200;m=m+2) { k=sqrt(m); for(i=2;i<=k;i++) if(m%i==0) break; if(i>=k+1) { printf("%d ",m); n=n+1; } if(n%10==0) printf("\n"); } printf("\n");}

二、程序举例第六章 循环结构程序设计

Page 12: 第六章

12

例 4 译密码。输入一行字符,输出其相应的密码。( 119 页)译码规律:将字母变成其后的第 4 个字母,非字母字符不变。

#include <stdio.h>void main(){ char c; while((c=getchar())!='\n') { if((c>'a'&&c<='z')||(c>'A'&&c<='Z')) { c=c+4; if((c>'Z'&&c<='Z'+4)||c>'z') c=c-26; } printf("%c\n",c); }}

二、程序举例第六章 循环结构程序设计

Page 13: 第六章

13

作业P120: 6.4, 6.8, 6.6, 6.11

第六章 循环结构程序设计