Categories: All

by zhang di 8 years ago

931

循环结构1

在编程中,循环结构是一种基本的控制流,用于重复执行一段代码块。do-while循环是其中一种常见的循环类型,它的特点在于先执行循环体,再判断循环条件是否为真。与while循环不同,do-while循环确保循环体至少执行一次。通常在需要至少执行一次的场景中,do-while循环显得尤为适用。

例如,在从键盘读取整数并统计其位数的程序中,由于循环次数取决于输入的位数,无法事先确定,因此使用do-while循环较为合适。

循环结构1

循环结构1

总结

do-while循环

例3,用do-while循环解决同一问题
#include int main(void){ int denominator, flag; double item, sum; /*初始化*/ flag=1; denominator=1; item=1.0; sum=0; /*while循环*/ do{ item = flag*1.0/denominator; sum = sum + item; flag = - flag; denominator = denominator +2; }while(fabs(item)>=0.0001); //当型循环,先判断再执行 printf("π值为%.4f\n", sum*4); return 0; }

在这一题中,while和do while两种循环结构都不会丢失可能的情况。因此可以直接套用。

例2:将前一个例子中的do-while循环直接改成while循环,程序还会对吗?
#include int main(void){ int count=0, number; printf("please enter a number:\n"); scanf("%d", &number); while(number!=0){ number = number /10; count ++; } printf("number:%d\n", count); return 0; }

输入0时会出错,因为直接不满足循环条件,不会进入循环体。

为此种情况补充一个判断语句,即可不出错

例:从键盘读入一个整数,求该数的位数
分析:一个数字由多个位数组成。 统计过程需要逐个地数,而循环的次数由位数决定,无法事先确定

#include int main(void){ int count=0, number; printf("please enter a number:\n"); scanf("%d", &number); do{ number = number /10; count ++; //printf("%d\n", number); }while(number!=0); printf("number:%d\n", count); return 0; }

do while循环结构是典型的直到型循环结构

其中包含do-while循环语句 相对于wihle循环,其具有以下特点

因为是先执行后判断,所以do-while循环需要在循环体中包含最终改变循环条件真假性的操作

do-while循环使用方法与while类似,唯一的不同在于,循环条件的判断时机

while循环

例2:从键盘输入一批学生的成绩,计算平均分。
分析:这还是一个求累加和的问题。 但是不知道输入数据的个数,无法事先确定循环次数。因此适合用while循环,用一个特殊数据作为结束输入的标志。 例如选用一个不合法数据(小于0或大于100的数)做结束标志。同时在每次循环输入时,统计总分和输入次数。

#include int main(void) { int num; double grade, total; num = 0; total = 0; printf("Enter grades: \n"); scanf("%lf", &grade); /* 先输入第1个数*/ while (grade >= 0 && grade <=100) { total = total + grade; num++; scanf ("%lf", &grade); } if(num != 0) printf("Grade average is %.2f\n", total/num); else printf("Grade average is 0\n"); return 0; }

例1
分析:这道题跟之前的求格里高利公式前n项和的题目类似,但是不容易事先估计n的个数。因此,这里需要使用while循环。

#include #include int main(void){ int denominator, flag; double item, sum; /*初始化*/ flag=1; denominator=1; item=1.0; sum=0; /*while循环*/ while(fabs(item)>=0.0001){ //当型循环,先判断再执行 item = flag*1.0/denominator; sum = sum + item; flag = - flag; denominator = denominator +2; } printf("π值为%.4f\n", sum*4); return 0; }

while型循环的控制结构

把for循环改写成while循环

分支主題

#include #include int main(void){ int denominator, flag; double item, sum; /*初始化*/ flag=1; item=1.0; sum=0; for(denominator=1; fabs(item)>=0.0001; denominator = denominator +2){ item = flag*1.0/denominator; sum = sum + item; flag = - flag; } printf("π值为%.4f\n", sum*4); return 0; }

其中包含while型循环语句, 相对于for循环,while具有以下特点

相对于for循环,while循环适用于不容易推算循环次数的循环结构

while循环语句是典型的当型循环结构。只有当判断条件为真时才进入循环。

while语句的结构更简单,只有条件控制表达式和循环体。 因此使用时要另加初始化部分,并在循环体中包含能最终改变循环条件真假性的操作。

while语句的条件控制表达式只能是一条语句,而for循环的条件控制表达式中包含三个部分(循环变量初始化,判断条件,循环变量修改)

for循环

例3:输出一张华氏度和摄氏度之间的转换表,每次增加1华氏度。华氏度的取值范围是[lower, upper], 这两个整型数值依赖用户的输入。
#include /*printFormula是专门负责数值转换的函数*/ double printFormula(int f){ return (5.0/9.0)*(f-32); //温度转换,兼强制类型转换 } int main(){ int fahr, lower, upper; double celsius; printf("enter lower and upper:\n"); scanf("%d%d", &lower, &upper); if(lower < upper){ //判断lower和upper是否合法 for(fahr=lower; fahr<=upper; fahr ++){ //循环 printf("%4d%6.1f\n", fahr, printFormula(fahr)); } } else{ printf("your lower and upper invalid\n"); } return 0; }
例2
#include int main(){ int denominator=1; //代表每一项的分母 int flag=1; //flag代表符号位 double item; //代表每一项的值 double sum = 0; //代表最终计算和 int n; //循环次数 printf("enter n:\n"); scanf("%d", &n); //输入n,初始化完毕 for(int i=1; i<=n; i++){ item = (double)flag/denominator; //计算item值,强制类型转换 printf("item=%f\n", item); sum = sum + item; //计算sum值 flag = - flag; //改变符号位,为下一次计算做准备 denominator = denominator +2; //改变分母,为下一次计算做准备 } printf("sum=%f\n", sum); //输出结果 return 0; }
引子:输入一个正整数n,求n的累加和
#include int main(void){ int n, sum; printf("please enter n:\n"); scanf("%d", &n); sum = 0; for(int i=0; i<=n; i++){ sum = sum + i; } printf("n!=%d\n", sum); return 0; }

for循环语句的执行流程

例子程序的执行流程

在for循环中的语句整体缩进,可以明确地标识循环体的范围,这与if语句一致

其中使用了for循环语句, for循环一般包含四个部分

循环体: 指其中重复执行的语句(循环体), 例如 sum=sum+1

改变循环变量: 在每次循环中都要改变循环变量的值, 以进行循环条件的判断。 这里循环变量是i,改变它的语句是i++;

如果不改变循环变量,就会导致死循环

条件控制: 判断循环是否继续执行,要有判断条件。 对于for循环而言,是其括号中的i<=n

初始化: 指定循环起点,指定循环变量的初始值。 例如int i=1, sum = 0

初始化只执行一次,其他步骤则循环执行