页码
程 序
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;
}