
while (<表达式> )<语句>
(1)计算循环头部中圆括号内表达式的值,假定其值为M;
(2)若M的值为非0,则执行循环体,否则结束整个循环的执行;
(3)循环体执行结束后转向第1步,继续执行下一次循环。
(1) while (x<=0) scanf("%d",&x);
(2) while (1) {s+=i*i; i++; if(s>50) break;}
(3) while(i++<N) {
x=rand()%99+1;
if(x%2==0) c2++;
if(x%3==0) c3++;
if(x%5==0) c5++;
}
#include<stdio.h>
#include<stdlib.h>
void main()
{
int i=10;
while(i>0) {
int a,k;
a=rand()%189+11;
for(k=2; k*k<=a; k++)
if(a%k==0) break;
if(k*k>a) {printf("%d ",a); i--;}
}
printf("\n");
}
程序功能:随机产生出10个11~199之间的素数并显示出
来。149 17 113 83 73 61 191 179 163 197
编程举例1:编一程序求出满足不等式 的最小n值。
分析:对于和式中的每个数据项,对应的通式为1/i,i=1、2、...、n。设循环变量为i,它应从1开始取值,每次增加1,直到和式的值不小于5为止,此时的i值就是所求的n值;设累加变量为s,初值为0,在循环体内应把1/i的值累加到s上。
#includestdio.h
void main()
{
int i=1; double s=0;
while(s<5) s+=1.0/i++;
printf("n=%d s=%Lf\n",i-1,s);
} //n=83 s=5.002068
编程举例2:编写一个程序,采用辗转相除法求出两个正整数的最大公约数。
分析:设两个正整数分别为a和b,a除以b的整余数用r表示,若r==0,则表明b能被a整除,则b就是a和b的最大公约数,否则,令b赋给a,r赋给b,再接着上述过程,直到整余数r为0时止,此时的b的值就是原有两个正整数a和b的最大公约数。
#includestdio.h
void main()
{
int a,b,r;
printf("请输入两个正整数:");
scanf("%d %d",&a,&b);
while(a<=0 || b<=0) {printf("重输:"); scanf("%d %d",&a,&b);}
printf("正整数%d和%d的最大公约数:",a,b);
r=a%b;
while(r) {
a=b; b=r;
r=a%b;
}
printf("%d\n",b);
}
//请输入两个正整数:40 24
//正整数40和24的最大公约数:8