第五章 循环结构程序设计
例5.1求1+2+3+……+100
例5.2用do……while语句求1+2+3+……+100
例5.3while和do……while循环的比较
例5.4在全系1000名学生中举行慈善募捐,当总数达到10万时就结束,统计此时捐款的人数以及平均每人捐款对待数目
例5.5要求输出100~200的不能被3整除的数
例5.6输出以下4*5的矩阵
例5.7用公式求Π/4≈1-1/3+1/5-1/7+……求Π的近似值,直到发现某一项的绝对值小于10^-6(该项不累加)
例5.8求Fibonacci数列的前40个数
例5.9输入一个大于3的整数n,判定它是否为素数
例5.10求100~200的全部素数
例5.11译密码
例5.1求1+2+3+……+100
#include<stdio.h>
int main()
{
int i=1,sum=0;
while(i<=100)
{
sum=sum+i;
i++;
}
printf("sum=%d\n",sum);
return 0;
}
运行结果如下:
sum=5050
Press any key to continue
例5.2用do……while语句求1+2+3+……+100
#include<stdio.h>
int main()
{
int i=1,sum=0;
do
{
sum=sum+i;
i++;
}
while(i<=100);
printf("sum=%d\n,sum);
return 0;
}
运行结果如下:
sum=5050
Press any key to continue
例5.3while和do……while循环的比较
#include<stdio.h>
int main()
{
int i,sum=0;
printf("Please enter i,i=?");
scanf("%d",&i);
while(i<=100)
{
sum=sum+i;
i++;
}
printf("sum=%d\n",sum);
return 0;
}
运行结果如下:
Please enter i,i=?5
sum=5040
Press any key to continue
例5.4在全系1000名学生中举行慈善募捐,当总数达到10万时就结束,统计此时捐款的人数以及平均每人捐款对待数目
#include<stdio.h>
#define SUM 10000
int main()
{
float amount,aver,total;
int i;
for(i=1,total=0;i<=1000;i++)
{
printf("please enter amount:");
scanf("%f",&amount);
total=total+amount;
if(total>=SUM) break;
}
aver=total/i;
printf("num=%d\naver=%f\n",i,aver);
return 0;
}
运行结果如下:
please enter amount:2000
please enter amount:6000
please enter amount:50000
num=3
aver=19333.333333
Press any key to continue
例5.5要求输出100~200的不能被3整除的数
#include<stdio.h>
int main()
{
int n;
for(n=100;n<=200;n++)
{
if(n%3==0) continue;
printf("%5d",n);
}
printf("\n");
return 0;
}
运行结果如下:
100 101 103 104 106 107 109 110 112 113 115 116 118 119 121 122 124 125 127 128 130 131 133 134 136 137 139 140 142 143 145 146 148 149 151 152 154 155 157 158 160 161 163 164 166 167 169 170 172 173 175 176 178 179 181 182 184 185 187 188 190 191 193 194 196 197 199 200
Press any key to continue
例5.6输出以下4*5的矩阵
#include<stdio.h>
int main()
{
int i,j,n=0;
for(i=1;i<=4;i++)
for(j=1;j<=5;j++,n++)
{
if(n%5==0) printf("\n");
printf("%d\t",i*j);
}
printf("\n");
return 0;
}
运行结果如下:
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
Press any key to continue
例5.7用公式求Π/4≈1-1/3+1/5-1/7+……求Π的近似值,直到发现某一项的绝对值小于10^-6(该项不累加)
#include<stdio.h>
#include<math.h>
int main()
{
int sign=1;
double pi=0.0,n=1.0,term=1.0;
while(fabs(term)>=1e-6)
{
pi=pi+term;
n=n+2;
sign=-sign;
term=sign/n;
}
pi=pi*4;
printf("pi=%10.8f\n",pi);
return 0;
}
运行结果如下:
pi=3.14159065
Press any key to continue
例5.8求Fibonacci数列的前40个数
#include<stdio.h>
int main()
{
int f1=1,f2=1,f3;
int i;
printf("%12d\n%12d\n",f1,f2);
for(i=1;i<=38;i++)
{
f3=f1+f2;
printf("%12d\n",f3);
f1=f2;
f2=f3;
}
return 0;
}
运行结果如下:
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269
2178309
3524578
5702887
9227465
14930352
24157817
39088169
63245986
102334155
Press any key to continue
修改后:
#include<stdio.h>
int main()
{
int f1=1,f2=1;
int i;
for(i=1;i<=20;i++)
{
printf("%12d %12d ",f1,f2);
if(i%2==0) printf("\n");
f1=f2+f1;
f2=f2+f1;
}
return 0;
}
运行结果如下:
1 1 2 3
5 8 13 21
34 55 89 144
233 377 610 987
1597 2584 4181 6765
10946 17711 28657 46368
75025 121393 196418 317811
514229 832040 1346269 2178309
3524578 5702887 9227465 14930352
24157817 39088169 63245986 102334155
Press any key to continue
例5.9输入一个大于3的整数n,判定它是否为素数
#include<stdio.h>
int main()
{
int n,i;
printf("please enter a integrer number,n=?");
scanf("%d",&n);
for(i=2;i<n;i++)
if(n%i==0) break;
if(i<n) printf("%d is not a prime number.\n",n);
else printf("%d is a prime number.\n",n);
return 0;
}
运行结果如下:
please enter a integrer number,n=?5
5 is a prime number.
Press any key to continue
例5.10求100~200的全部素数
#include<stdio.h>
#include<math.h>
int main()
{
int n,k,i,m=0;
for(n=101;n<=200;n=n+2)
{k=sqrt(n);
for(i=2;i<=k;i++)
if(n%i==0)break;
if(i>=k+1)
{
printf("%5d",n);
m=m+1;
}
if(m%10==0) printf("\n");
}
printf("\n");
return 0;
}
运行结果如下:
101 103 107 109 113 127 131 137 139 149
151 157 163 167 173 179 181 191 193 197
199
Press any key to continue
例5.11译密码
#include<stdio.h>
int 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",c);
}
printf("\n");
return 0;
}
运行结果如下:
d
h
Press any key to continue