#include <stdio.h>
#include <math.h>
int main(void)
{
int denominator,flag,i;
double eps,item,pi;
printf("Enter eps"); //这里书上有个笔误,是printf不是print;
scanf("%lf",&eps);
i=1; //循环初始化
flag=1;
denominator=1;
item=1.0;
pi=0;
while(fabs(item)>=eps){
pi=pi+item;
i++;
flag=-flag;
denominator=denominator+2;
item=flag*1.0/denominator;
}
pi=pi+item;
pi=pi*4;
printf("pi =%.4f\n",pi);
printf("i =%d\n",i);
return 0;
}
while语句
一般形式:
while(表达式){
循环体语句;
}
执行流程:当表达式的值为“真”时,循环执行,直到表达式的值为“假”,循环中止并继续执行while的下一条语句。
讨论while语句
1.while语句中的表达式可以是任何合法的表达式,循环体语句只能是一条语句。
2.从两种循环语句的形式和执行流程可以看出,while语句的构成简单,只有一个表达式和一条循环体语句,分别对应循环的两个核心要素:循环条件和循环体,可以直接把循环问题的分析设计转换成语句实现。
3.循环的实现一般包括4个部分,即初始化,条件控制,重复的操作以及通过改变循环变量的值最终改变条件的真假性,使循环能正常结束。这4个部分可以直接和for语句中的4个部分(表达式1,表达式2,循环体语句和表达式3)相对应,当使用while语句时,由于它只有2个成分(表达式和循环体语句),就需要另加初始化条件,至于第4个部分,从4.1和4.2图可知,while语句的循环体语句可包含for语句的循环体语句和表达式3,所以while的循环语句中必须包含最终能改变循环条件真假性的操作。
do-while语句
一般形式
do{
循环体语句
}while(表达式);
执行流程:第一次进入循环时,首先执行循环体语句,然后再检查循环控制条件,即计算表达式,若值为“真”,继续循环,直到表达式的值为“假”,循环结束,执行do-while的下一条语句。
讨论:
(1)do-while语句和while语句的区别:do-while语句是,先执行循环体,后判断循环条件。所以无论循环条件的值如何,至少执行一次循环体。
关于while语句和do-while应用的环境:
do-while语句适合于先循环,后判断循环条件的情况,一般在循环体的执行过程中明确循环控制条件。它每执行一次循环体后,再判断条件,以决定是否进入下一次循环。
while语句和for循环语句都能实现循环。一般情况下,如果题目中指定了循环次数,使用for语句更清晰,循环的4个组成部分一目了然;其他的情况下多使用while语句。例如某些情况下没有直接给出循环次数,而是由某一项的值来控制循环,因此就选用了while语句。
for语句
一般形式
for(表达式1;表达式2;表达式3)
循环体语句
执行流程:先计算表达式1;在判断表达式2,若值为“真”,则执行循环体语句,并接着计算表达式3,然后继续循环;若值为“假”,则结束循环,继续执行for的下一条语句。
注意:在for语句执行的时候,表达式2,循环体语句和表达式3将重复执行,而表达式1只在进入循环之前执行一次。
讨论:
(1)表达式1:初值表达式,对循环变量赋值,从而指定循环的起点。如fahr=lower,置fahr的初值为温度取值范围的下限值lower,即循环从lower开始。
(2)表达式2:条件表达式,给出循环的条件,通常判断循环变量是否超过循环的终点。若该表达式为“真”,则继续循环;为“假”,则结束循环。如fahr<=upper,uppper作为温度取值范围的上限值,一旦fahr的值超过upper,表达式2为“假”,循环随之结束。
(3)表达式3:步长表达式,设置循环的步长,改表循环变量的值,从而可改变表达式2的结果。如fahr++,使fahr的值增加1,这样,最终fahr>upper,表达式2为“假”,循环随之结束.
(4)循环体语句:被反复执行的语句,只能是一条语句。
for语句反应了循环(重复执行)的规则,从哪儿开始(起点),到哪结束(终点),每次跨多大的步子(步长),重复做什么。
经典代码:求素数
#include <stdio.h>
#include <math.h> //关于素数
int main()
{ int i,limit,m;
printf("Enter a number");
scanf("%d",&m);
if(m<=1){
printf("No!\n");
}else if(m==2){
printf("%d is a prime number!\n",m);
}else{
limit=sqrt(m)+1;
for(i=2;i<=limit;i++){
if(m%i==0){
break;
}
}
if(i>limit){
printf("%d is a prime number!\n",m);
}else{
printf("No!\n");
}
}
return 0;
}