页码
程 序
131 打印Fibonacci序列前30个数 
134、135 求2.38、3.142、5.674、8.257、6.44的平均值的2个程序
137 统计由标准输入得到的文件中各个数字字符出现的次数
138 求数组的各元素的平方和的2个程序
140 将数组元素翻转
143、144 字符串的复制的3个程序
145、146 读入一个文件,输出其中最长的一行的2个程序
151、152 计算矩阵乘积
151 求出任何n×5的数组中所有数据的平均值

返回 总目录

例:打印Fibonacci序列前30个数
 
#include <stdio.h>

int main (void) {
    long fib[30];
    int n;

    fib[0] = 1;
    fib[1] = 1;
    for (n = 2; n < 30; n++)
        fib[n] = fib[n-1] + fib[n-2];

    for (n = 0; n < 30; n++) {
        printf("%d", fib[n]);
        putchar(n % 6 == 5 ? '\n' : ' ');
    }

    return 0;
}

例:求2.38、3.142、5.674、8.257、6.44的平均值的2个程序

程序 1:

#include <stdio.h>

double a[5] = {2.38, 3.142, 5.674, 8.257, 6.44};

int main (void) {
    int n;
    double sum = 0.0;
    for (n = 0; n < 5; n++)
        sum += a[n];
    printf("Average: %f\n", sum / 5);
    return 0;
}

程序 2:
#include <stdio.h>

double a[] = {2.38, 3.142, 5.674, 8.257, 6.44};

#define NUM (sizeof(a) / sizeof(a[0]))

int main (void) {
    int n;
    double sum = 0.0;

    for (n = 0; n < NUM; n++)
        sum += a[n];

    printf("Average: %f\n", sum / NUM);

    return 0;
}

例:统计由标准输入得到的文件中各个数字字符出现的次数

#include <stdio.h>

int main (void) {
    int c, i, cs[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

    while ((c = getchar()) != EOF)
        if (c >= '0' && c <= '9')
            cs[c - '0']++;

    for (i = 0; i < 10; i++)
        printf("%d ", cs[i]);
    putchar('\n');

    return 0;
}

例:求数组的各元素的平方和2个程序

程序 1:

double sqsum0(double a[]) {
    double x = 0.0;
    int i;
    for (i = 0; i < LEN; i++)
    /*符号常量 LEN 是数组的长度 */
        x += a[i] * a[i];
    return x;
}

程序 2:

double sqsum(double a[], int n) {
    double x = 0.0;
    int i;

    for (i = 0; i < n; i++)
        x += a[i] * a[i];

    return x;
}

例:将数组元素翻转

void rev(int a[], int n) {
    int x, i, m = n/2;

    for (i = 0; i < m; i++) {
        x = a[i];
        a[i] = a[n - i - 1];
        a[n - i - 1] = x;
    }

}

int main (void) {
    int i, b[] = {1, 2, 3, 4, 5, 6, 7};

    for (i = 0; i < 7; i++)
        printf("b[%d] = %d\n", i, b[i]);

    rev(b, 7);

    printf("After reversion:\n");

    for (i = 0; i < 7; i++)
        printf("b[%d] = %d\n", i, b[i]);

    return 0;
}

例:字符串的复制的3个程序

程序 1:

void str_copy (char s[], char t[]) {
    int i = 0;
    while (t[i] != '\0') {
        s[i] = t[i];
        i++;
    }
}
 

程序 2:
void str_copy (char s[], char t[]) {
    int i = 0;
    while ((s[i] = t[i]) != '\0')
        i++;
}

程序 3:
void str_copy (char s[], char t[]) {
    int i = 0;
    while (s[i] = t[i]) i++;
}

例:读入一个文件,输出其中最长的一行

程序 1:
#include <stdio.h>

#define MAXLEN 1024

int getline(char line[], int limit);
void str_copy (char s[], char t[]);

int main (void) {
    int n, max = 0; /* 记录当前行和最长行的长度 */
    char line[MAXLEN], maxline[MAXLEN];

    while ((n = getline(line, MAXLEN)) > 0)
        if (n > max) {
            max = n;
            str_copy(maxline, line);
        }

    if (max > 0)
        printf("%s\n", maxline);

    return 0;
}

void str_copy (char s[], char t[]) {
    int i = 0;
    while ((s[i] = t[i]) != '\0')
        i++;
}

int getline(char line[], int limit) {
    int c, i = 0;
    while (i < limit - 1 &&
            (c = getchar()) != EOF && c != '\n') {
        line[i] = c;
        i++;
    }

    if (c == '\n') {
        line[i] = '\n';
        i++;
    }

    line[i] = '\0';
    return i;
}

程序 2:
 
#include <stdio.h>

#define MAXLEN 1024

int getline(void);
void str_copy (void);

char line[MAXLEN], maxline[MAXLEN];

main (void) {
    int n, max = 0; /* 记录当前行和最长行的长度 */
    while ((n = getline()) > 0)
        if (n > max) {
            max = n;
            str_copy();
        }

    if (max > 0)
        printf("%s\n", maxline);
    return 0;
}

void str_copy () {
    int i = 0;
    while ((maxline[i] = line[i]) != '\0')
        i++;
}

int getline(void) {
    int c, i = 0;
    while (i < MAXLEN - 1 &&
            (c = getchar()) != EOF && c != '\n') {
        line[i] = c;
        i++;
        }

    if (c == '\n') {
        line[i] = '\n';
        i++;
    }

    line[i] = '\0';
    return i;
}

例:计算矩阵乘积

#include <stdio.h>
#define N 5
double A[N][N] = { ... ...}, B[N][N] = { ... ...},
C[N][N]; /* 数组A和B的实际数据需要填充 */

int main (void) {
    int i, j, k;
    double x;
    for (i = 0; i < N; i++)
        for (j = 0; j < N; j++) {
            x = 0.0;
            for (k = 0; k < N; k++)
                x += A[i][k] * B[k][j];
            C[i][j] = x;
        }
    for (i = 0; i < N; i++)
        for (j = 0; j < N; j++)
            printf("%f%c", C[i][j], j == N-1 ? '\n' :' ');
    return 0;
}

例:求出任何n×5的数组中所有数据的平均值

double aaverage(double a[][5], int n) {
    int i, j;
    double sum = 0.0;
    for (i = 0; i < n; i++)
        for (j = 0; i < 5; j++)
            sum += a[i][j];
    return sum / (5 * n);
}