第4章 循环结构程序设计
4.1 循环语句的四种循环格式 4.1.1 goto 格式 <标示符: > if <表达式>
{ <循环体;> goto <标示符;> }
2019年7月23日7时19分
1
例: 计算s=1+2+3+……+50
#include <iostream.h> main() {int i=0, s=0; loop: if (i<51)
{ s=s+i; i=i+1; goto loop;}
cout<<"s="<<s<<endl; }
2019年7月23日7时19分
2
4.1.2 while格式 while <表达式> { <循环体>; }
例: 计算 s=1+2+3+……+50
2019年7月23日7时19分
3
#include <iostream.h>
main()
{int i=0, s=0;
while (i<50)
{
i=i+1;
s=s+i;
}
cout<<"s="<<s<<endl;
}
2019年7月23日7时19分
4
4.1.3 do--- while格式 do { <循环体>; } while <表达式;>
例: 计算 s=1+2+3+……+50
2019年7月23日7时19分
5
#include <iostream.h> main()
{static int i, s; do { s=s+i;
i=i+1; } while (i<51); cout<<"s="<<s<<endl; }
2019年7月23日7时19分
6
4.1.4 for( ) 格式 for(<表达式1>;<表达式2>;<表达式3>)
{ <循环体> } 说明:
1. <表达式1>决定了循环的初值, <表达式2> 决定循环的条件, <表达式3>决定循环的增 量。
2. <表达式1>在循环中只执行一次。<表达式 2>,<表达式3>在循环中每次都要执行一次。
2019年7月23日7时19分
7
例:求S=1+2+3+……+100 程序1: #include <iostream.h> main() {int i, s=0; for (i=1; i<101; i++) s+=i; cout<<“sum=”<<s<<endl; }
8
2019年7月23日7时19分
程序2: #include <iostream.h> main() { int i=1, s; for (s=0; i<101; i++) s+=i; cout<<"sum="<< s<<endl; }
2019年7月23日7时19分
9
程序3: #include <iostream.h> main() {int i=1, s=0; for (; i<101;) s+=i++; cout<<"sum="<< s<<endl; }
10
2019年7月23日7时19分
程序4:
#include <iostream.h> main() { int i=1, s=0;
for (; i<101; s+=i++); cout<<"sum="<<s<<endl; }
2019年7月23日7时19分
11
程序5: #include <iostream.h> main() { int i=100, s=0; for (; i ; i--) s+=i ; cout<<"sum="<< s<<endl; }
2019年7月23日7时19分
12
例:编程计算下列各项
S=1+2+3+……+100
S=1+22+32+……+1002
S=1+3+5……+99
S=1+1/2+1/3+……+1/100
S=1/1+1/22+1/32+……+1/1002
n!=1*2*3*……*n
S=Σk!=1+2!+3!+……+n!
S=1-2+3+……+(-1)nn
S=1-1/2+1/3+……+(-1)n/n
S=1-22+32-……+(-1)n 1002
e=1+1/1!+1/2!+1/3!+……+1/n!直到最后一项小于
0.00001
13
2019年7月23日7时19分
ex=1+x/1!+x2/2!+x3/3!+……+xn/n!直到最后 一项小于0.001
s=1-1/2!+1/3!+……+(-)(n+1)/n! 直到最后一 项小于0.001
s=1+x+x/2!+x/3!+……+x/n! 直到最后一项 小于0.00001
s=1-x+x/2!-x/3!+……+(-)(n+1)x/n! 直到最 后一项小于0.001
π/4=1-1/3+1/5-1/7+…… 求π,直到最后一 项小于0.001
2019年7月23日7时19分
14
2. 循环可以从小向大,也可以从大到小。 例: 计算s=1+2+3+……+100
#include <iostream.h> main() {int i, s=0;
for (i=100;i>0;i--) { s=s+i; }
cou<<"s="<<s<<endl;
2019年7月23日7时19分
15
3.循环变量的值起三个作用,一是记数,二是可 以参加循环体计算,三是用做数组的下标。
例: 计算10个数的和 #include <iostream.h> main() {int i, s=0; static int a[10]={1,3,4,5,4,3,3,3,4,2}; for (i=1;i<10;i++) { s=s+a[i]; } cout<<"s="<<s<<endl; }
2019年7月23日7时19分
16
4. 三个表达式可以有,也可以全无,但“;”不 能少。如果表达式2无,程序将进入无限循环。
5. 可以用break命令中断循环. 例: 计算s=1+3+5+……+n直到最后一项为99止.
#include <iostream.h>
main()
{int i, s=0;
for (i=1; ;i=i+2)
{ if (i==101) break;
s=s+i;}
cout<<s<<endl;}
2019年7月23日7时19分
17
6. 可以用continue命令中断当前这一次循环,继续下一次 循环.
例: 计算s=1+3+5+……+99
#include <iostream.h>
main()
{int i, s=0;
for (i=1;i<100;i++)
{ if (i%2==0) continue;
s=s+i;
}
cout<<"s="<<s<<endl;
}
2019年7月23日7时19分
18
4.2 多层循环 例:开设3门课程,计算每个学生平均成绩
#include <iostream.h> main() {int i,j,s=0;
int a[5][3]={87,78,79,87,98,67,56,79,98}; for (i=0;i<3;i++)
{ s=0; for(j=0;j<3;j++) { s=s+a[i][j]; cout<<a[i][j]<<" ";} cout<<s/3<<endl;
} }
2019年7月23日7时19分
19
4.3 循环中断 break
4.4 exit()函数
例: 从键盘上输入字母,然后输出比它的ASCII码大1 的字 母 #include <iostream.h> #include "stdio.h"
main() { char ch='a'; cout<<"input letter s=";
2019年7月23日7时19分
20
while (ch!='#') { ch=getchar(); if (ch=='z'||ch=='Z' ) putchar(ch-25); else putchar(ch+1); }
}
2019年7月23日7时19分
21
题1:输出九九乘法表 123456789
11 2 3 4 5 6 7 8 9 2 2 4 6 8 10 12 14 16 18
9 9 18 27 36 45 54 63 72 81
2019年7月23日7时19分
22
#include <iostream.h>
#include "iomanip.h"
main()
{int k,j;
cout<<"
";
for(k=1;k<10;k++)
cout<<k<<setw(5); //width(5)
cout<<'\n';
2019年7月23日7时19分
23
for(k=1;k<10;k++) {cout<<setw(5)<<k; for(j=1;j<10;j++) {cout<<setw(5)<<k*j;} cout<<endl;} }
// {cout.width(5);cout<<k*j;}
2019年7月23日7时19分
24
#include <iostream.h> #include "iomanip.h" main() {int k,j; cout<<" "; for(k=1;k<10;k++) {cout.width(5); cout<<k;}
cout<<'\n'; for(k=1;k<10;k++)
{cout<<setw(5)<<k; for(j=1;j<10;j++)
{cout.width(5);cout<<k*j;} cout<<endl;} }
2019年7月23日7时19分
25
题2:判断m是否是素数。
#include <iostream.h>
main()
{int k,m,h=1;
cin>>m;
for(k=2;k<m;k++)
if (m%k==0) h=0;
if( h==1) cout<<m<<“ is a prime number”<<endl;
}
2019年7月23日7时19分
26
题3;求出100以内的所有素数 #include <iostream.h> main() {int k,m; for(m=3;m<100;m=m+1) {for(k=2;k<m;k++) if (m%k==0) break; if(k==m) cout<<m<<"is a prime number"<<endl; } }
2019年7月23日7时19分
27
题4:求m,n 的最大公约数
#include <iostream.h> main( )
{int m,n,m1,n1,r; cin>>m>>n; m1=m;n1=n; r=m%n; while (r!=0)
{ m=n;n=r;r=m%n;} cout<<"m="<<m1<<endl; cout<<"n1="<<n1<<endl; cout<<"r="<<n<<endl; }
2019年7月23日7时19分
28
题5:求Fibonaccii(斐波那契)数列中前20项中每一 项(递推法)
0,1,1,2,4,7,13,…… #include <iostream.h> main()
{long k,a=0,b=1,c=1,d; for(k=1;k<18;k++)
{d=a+b+c; cout<<d<<'\t'; a=b;b=c;c=d; }}
2019年7月23日7时19分
29
题6:2000年人口13亿,年增长0.5%和 2.1%,多少年后达到或超过20亿(87,21)?
#include <iostream.h>
main()
{int n=0;
float f=13,e=0.005;
while (f<20)
{f=f*(1+e); n=n+1;}
cout<<n<<endl;
}
2019年7月23日7时19分
30
题7:产生10个学生的成绩,呈正态分布
#include <iostream.h> #include <time.h> #include "math.h" #include "stdlib.h" #include "iomanip.h"
main( ) {int k;float x; srand(time(NULL)); for(k=1;k<11;k++) {x=rand()/32767.0*90; x=sin(x*3.14/180)*71+30; cout<<(int)x<<setw(5); if (k%10==0) cout<<endl;} }
2019年7月23日7时19分
31
题13:梯形法求积分:∫sin(x)dx 题14: 用牛顿迭代法求方程x5+2x3-x2+x+1=0在0附近的根。 题15:找出1000以内的水仙花数。三位数的立方和等于自身
(13+53+33=153) 题16:根据以下算术式,求A、B、C、D
ABCD -- C D C ----------------
ABC 题17:输出图形
A ABC ABCDE ABCDEFG
2019年7月23日7时19分
32