【例4-1】使用格里高利公式求π的近似值。
/* 用格里高利公式计算π的近似值,精度要求:最后一项的绝对值小于0.0001 */
#include <stdio.h>
#include <math.h> /* 程序中调用绝对值函数 fabs(),需包含 math.h */
int main(void)
{
int denominator, flag;
double item, pi; /* pi 用于存放累加和 */
/* 循环初始化 */
flag = 1; /* flag 表示第 i 项的符号,初始为正 */
denominator = 1; /* denominator表示第 i 项的分母,初始为1 */
item = 1.0; /* item 中存放第 i 项的值,初值取 1 */
pi = 0; /* 置累加和 pi 的初值为0 */
while(fabs(item) >= 0.0001){
/* 当|item| ≥ 0.0001时,执行循环 */
item = flag * 1.0 / denominator; /* 计算第 i 项的值 */
pi = pi + item; /* 累加第 i 项的值 */
flag = -flag; /* 改变符号,为下一次循环做准备 */
denominator = denominator + 2; /* 分母递增2 ,为下一次循环做准备 */
}
pi = pi * 4; /* 循环计算的结果是 pi/4 */
printf ("pi = %.4f\n", pi);
return 0;
}
【例4-2】更改例3-3。从键盘输入一批学生的成绩,计算平均成绩,并统计不及格学生的人数。
/* 输入一批学生的成绩,以负数作为结束标志,计算平均成绩,并统计不及格学生的人数 */
#include <stdio.h>
int main(void)
{
int count, num; /* num 记录输入的个数,count记录不及格学生人数 */
double grade, total; /* 分别存放成绩、成绩之和 */
num = 0;
total = 0;
count = 0;
printf("Enter grades: "); /* 输入提示 */
scanf ("%lf", &grade); /* 输入第一个数据,%lf中的l是字母 */
/* 当输入数据 grad 大于等于0时,执行循环 */
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;
}
例4-3】从键盘读入一个整数,统计该数的位数。例如,输入12534,输出5;输入-99,输出2;输入0,输出1。
/* 统计一个整数的位数 */
# include <stdio.h>
int main(void)
{
int count, number; /* count 记录整数number的位数 */
count = 0;
printf("Enter a number:"); /* 输入提示 */
scanf ("%d", &number);
if(number < 0) number = -number; /* 将输入的负数转换为正数 */
do{
number = number / 10; /* 整除后减少一位个位数,组成一个新数 */
count++; /* 位数加1 */
}while(number != 0); /* 判断循环条件 */
printf("It contains %d digits.\n", count);
return 0;
}
【例4-4-1】输入一个正整数m,判断它是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。
/* 判断正整数m是否为素数 */
#include<