1、第 四 章 循环结构4.1 用格里高利公式求 的近似值 (while 语句)4.2 统计一个整数的位数 (do-while 语句)4.3 判断素数 (break 和 continue 语句)4.4 求 1!+2!+.+100! (循环嵌套)4.5 循环结构程序设计本章要点什么是循环? 为什么要使用循环 ? 如何实现循环?实现循环时,如何确定循环条件和循环体?怎样使用 while 和 do-while 语句实现次数不确定的循环?while 和 do-while 语句有什么不同?如何使用 break 语句处理多循环条件 ?如何实现多重循环?4.1 用格里高利公式求 的近似值使用格里高利公式求 的近
2、似值,要求精确到最后一项的绝对值小于 104。4.1.1 程序解析4.1.2 while 语句 4.1.3 输入一批学生的成绩,统计平均分4.1.1 程序解析求 的近似值#include int main(void)int denominator, flag; double item, pi;flag = 1; denominator = 1 ; item = 1.0; pi = 0;while(fabs (item) = 0.0001) item = flag * 1.0 / denominator; pi = pi + item; flag = -flag; denominator = d
3、enominator +2; pi = pi * 4; printf ( “pi = %fn”, pi);return 0;4.1.2 while 语句while (条件)循环体语句; while 语句说明while 语句和 for 语句都是在循环前先判断条件 while 和 for 的比较for (i = 1; i Int main(void) int num; double grade, total; num = 0; total = 0;printf(“Enter grades: n“); scanf(“%lf“, /* 输入第 1 个数*/while (mark = 0) /* 输入负
4、数,循环结束 */total = total + grade; num+; scanf (“%lf”, if(num != 0)printf(“Grade average is %.2fn“, total/num);elseprintf(“ Grade average is 0n“);return 0;4.2 统计一个整数的位数从键盘读入一个整数,统计该数的位数。4.2.1 程序解析4.2.2 do - while 语句 4.2.3 循环语句的选择4.2.1 程序解析统计一个整数的位数int main(void) int count, number; count = 0;printf(“Ent
5、er a number: “);scanf (“%d“, if (number m/2 ) printf(“%d is a prime number! n“, m); elseprintf(“No!n“); break 语句while(exp)语句 1if (expb) break;语句 2continue 语句while(exp)语句 1if (expb) continue;语句 2break 和 continue#include “stdio.h“int main(void) char c;int i;for (i = 0; i double fact (int n); int main(
6、void) int i;double sum;sum = 0;for(i = 1; i int main(void) int i, j;double item, sum; /* item 存放阶乘 */sum = 0;for(i = 1; i int main(void) int i, mark, max, n; printf(“Enter n: “); scanf (“%d“, printf(“Enter %d marks: “, n);scanf (“%d“, /* 读入第一个成绩 */max = mark; /* 假设第一个成绩是最高分 */for (i = 1; i int main(
7、void) int mark, max; printf(“Enter marks:“); scanf (“%d“, /* 读入第一个成绩 */max = mark; /* 假设第一个成绩最高分 */while (mark = 0)if(max int main(void) int mark, max; max = -1; /* 给 max 赋一个小初值 */printf(“Enter marks: “); do scanf (“%d“, if (max = 0); printf(“Max = %dn“, max);例 4-8 将一个正整数逆序输出确定:循环条件和循环体(循环不变式 )例 4-9
8、 求 500 以内的全部素数,每行输出 10 个for (m = 2; m #include int main(void) int count, i, m, n; count = 0; for (m = 2; m n) /* 如果 m 是素数 */printf(“%6d“, m); count+; if (count %10 = 0) printf(“n”); 例 4-10 求 Fibonacci 序列:1,1,2,3,5,8,13, 1, 1, 2, 3, 5, 8, 13, x1 x2 xx1 x2 x例 4-11 古典算术问题搬砖头某地需要搬运砖块,已知男人一人搬 3 块,女人一人搬 2 块,小孩两人搬一块。问用 45 人正好搬 45 块砖,有多少种搬法?例 4-11 源程序(2)for (men = 0; men = 15; men+)for (women = 0; women = 22; women+)child = 45 women men; if (men * 3 + women * 2 + child * 0.5 = 45)printf(“men=%d women=%d child=%dn“, men, women, child);4.5 循环程序设计习题习题 4-9 输入一个整数,从高位开始逐个数字输出。