页码 |
|
112、113 | 每被调用十次输出一个信息到屏幕的三个程序 |
117 | 用弦线法求方程的根 |
返回 总目录
程序 1:
/* 程序 1 无法完成所要求的工作。 */
void count10_1(void) {
int m = 0; /* m是函数内部定义的局部自动变量
*/
if (++m == 10) {
printf("Count 10\n");
m = 0;
}
}
程序 2:
int m = 0; /* m是个外部定义的变量 */
void count10_2(void) {
if (++m == 10) {
printf("Count 10\n");
m = 0;
}
}
程序 3:
void count10_3(void) {
static int m = 0; /* m是个静态局部变量
*/
if (++m == 10) {
printf("Count 10\n");
m = 0;
}
}
例:用弦线法求方程的根
#include <stdio.h>
#include <math.h>
double f (double); /* f的原型,函数定义可以写在任何地方 */
double crossp (double x1, double x2) {
double y1 = f(x1), y2 = f(x2);
return (x1 * y2 - x2 * y1) / (y2 - y1);
}
double root (double x1, double x2) {
double x, y, y1 = f(x1);
do {
x = crossp(x1, x2);
y = f(x);
if (y * y1 > 0) { /* y与y1符号相同,取新区间为
[x,x2] */
x1 = x; y1 = y;
}
else x2 = x; /* y与y1符号不同,取新区间为
[x1,x] */
} while (fabs(y) >= 1E-6); /* y值不够小,继续 */
return x;
}
main (void) { /* 定义从略 */ }
/* 假设被求值的函数为 f(x) = x* sin(x) - 2*x*x */
double f (double x) {
return x * sin(x) - 2 * x * x;
}