例4-1
#include<stdio.h>
#include<math.h>
int main()
{
int deno,flag;
double item,pi;
flag=1;
deno=1;
item=1.0;
pi=0;
while( fabs (item) >=0.0001){
item=flag*1.0/deno;
pi=pi+item;
flag=-flag;
deno=deno+2;
}
pi=pi*4;
printf("pi*=%.4f\n",pi);
return 0;
}
pi*=3.1418
while语句
while ( 表达式 )
循环体语句;
注意:只有一个表达式和一条循环体语句
将for循环改成while语句
for (表达式1 ; 表达式2 ; 表达式3 ){
循环体语句
}
表达式1;
while (表达式2){
for的循环体语句;
表达式3;
}
例4-2
#include<stdio.h>
int main()
{
int count,num;
double grade,total;
num=0;
total=0;
count=0;
printf("Enter grade: ");
scanf("%lf",&grade);
while(grade>=0){
total=total+grade;
num++;
if(grade<60)
count++;
scanf("%lf",&grade);
}
if(num!=0){
printf("Grade average is %.2f\n",total/num);
printf("Number of failures is % d\n",count);
}
else
printf("Grade average is 0\n");
return 0;
}
Enter grade: 67 88 73 54 82-1
Grade average is 72.80
Number of failures is 1
Enter grade: 67 88 73 54 82 -2 (最后一个数输-2,结果不变)
Grade average is 72.80
Number of failures is 1
Enter grade: -1 67 88 73 54 82 (第一个就数输负数,直接跳出循环)
Grade average is 0
练习4-1
#include<stdio.h>
#include<math.h>
int main()
{
int deno,flag;
double item,pi;
flag=1;
deno=1;
item=0.0;/*将item赋值0,0的绝对值小于0.0001,直接跳出循环,pi=0*4=0*/
pi=0;
while( fabs (item) >=0.0001){
item=flag*1.0/deno;
pi=pi+item;
flag=-flag;
deno=deno+2;
}
pi=pi*4;
printf("pi*=%.4f\n",pi);
return 0;
}
pi*=0.0000
练习4-3
#include<stdio.h>
#include<math.h>
int main()
{
double eps;
scanf("%lf",&eps);
int deno,flag;
double item,s;
deno=1;
flag=1;
item=1.0;
s=0.0;
while(fabs(item)>=eps){
item=flag*1.0/deno;
s=s+item;
flag=-flag;
deno=deno+3;
}
printf("%lf",s);
return 0;
}
0.001
0.836147