《明解C语言》示例代码和练习代码[第5章]

来源:互联网 发布:红包破解软件 编辑:程序博客网 时间:2024/05/29 19:34

第5章 数组


示例代码:


示例代码 5-1

/*    输入5名学生的分数并显示它们的总分和平均分 */#include <stdio.h>int main(void){int uchida;int satoh;int hiraki;int masaki;int sum = 0;puts("请输入分数。");printf("1号:");scanf("%d", &uchida);printf("2号:");scanf("%d", &satoh);printf("3号:");scanf("%d", &hiraki);printf("4号:");scanf("%d", &masaki);printf("5号:");scanf("%d", &masaki);sum += uchida;sum += satoh;sum += hiraki;sum += masaki;sum += masaki;printf("总分:%5d\n", sum);printf("平均分:%5.1f\n", (double)sum / 5);return (0);}

示例代码 5-2

/*    依次把1,2,3,4,5赋值给数组每个元素并显示 */#include <stdio.h>int main(void){int vc[5];                                // 包含5个元素的数组 vc[0] = 1;vc[1] = 2;vc[2] = 3;vc[3] = 4;vc[4] = 5;printf("vc[0] = %d\n", vc[0]);printf("vc[1] = %d\n", vc[1]);printf("vc[2] = %d\n", vc[2]);printf("vc[3] = %d\n", vc[3]);printf("vc[4] = %d\n", vc[4]);return (0);}

示例代码 5-3

/*    依次把1/2/3/4/5赋值给数组每个元素并显示 (使用for语句) */#include <stdio.h>int main(void){int i;int vc[5];                                // 包含5个元素的数组 for (i = 0; i < 5; i++)vc[i] = i + 1;for (i = 0; i < 5; i++)printf("vc[%d] = %d\n", i, vc[i]);return (0);}

示例代码 5-4

/*    将数组的全部元素赋值为(0.0)并显示 */#include <stdio.h>int main(void){int i;double vd[5];for (i = 0; i < 5; i++)vd[i] = 0.0;for (i = 0; i < 5; i++)printf("vd[%d] = %.1f\n", i, vd[i]);return (0);}

示例代码 5-5

/*    从头开始顺次为数组各元素进行初始化(1,2,3,4,5)并进行显示 */#include <stdio.h>int main(void){int i;int vc[5] = {1, 2, 3, 4, 5};for (i = 0; i < 5; i++)printf("vc[%d] = %d\n", i, vc[i]);return (0);}

示例代码 5-6

/*    把数组中的全部元素赋值到另一个数组中 */#include <stdio.h>int main(void){int i;int va[5] = {15, 20, 30};int vb[5];for (i = 0; i < 5; i++)vb[i] = va[i];puts(" va vb");puts("------");for (i = 0; i < 5; i++)printf("%3d%3d\n", va[i], vb[i]);return (0);}

示例代码 5-7

/*    输入数组元素的值并显示 */#include <stdio.h>int main(void){    int i;    int vx[5];        for (i = 0; i < 5; i++) {        printf("vx[%d]:", i);        scanf("%d", &vx[i]);    }        for (i = 0; i < 5; i++)        printf("vx[%d]=%d\n", i, vx[i]);            return (0);    }

示例代码 5-8

/*    对数组中的全部元素进行倒序排列 */#include <stdio.h>int main(void){    int i;    int vx[5];        for (i = 0; i < 5; i++) {        printf("vx[%d]:", i);        scanf("%d", &vx[i]);    }        for (i = 0; i < 2; i++) {        int temp = vx[i];        vx[i] = vx[4 - i];        vx[4 - i] = temp;        }        for (i = 0; i < 5; i++)        printf("vx[%d]=%d\n", i, vx[i]);            return (0);    }

示例代码 5-9

/*    输入5名学生的分数并显示出它们的总分和平均分 */#include <stdio.h>int main(void){    int i;    int tensu[5];                              // 5名学生的分数    int sum = 0;                               // 总分        puts("请输入学生的分数。");    for (i = 0; i < 5; i++) {        printf("%2d号:", i + 1);        scanf("%d", &tensu[i]);        sum += tensu[i];    }        printf("总分:%5d\n", sum);    printf("平均分:%5.1f\n", (double)sum / 5);        return (0);        }

示例代码 5-10

/*    输入5名学生的分数并显示出它们的总分和平均分 */#include <stdio.h>#define NUMBER 5                               // 学生人数 int main(void){    int i;    int tensu[NUMBER];                              // 5名学生的分数    int sum = 0;                                    // 总分        puts("请输入学生的分数。");    for (i = 0; i < NUMBER; i++) {        printf("%2d号:", i + 1);        scanf("%d", &tensu[i]);        sum += tensu[i];    }        printf("总分:%5d\n", sum);    printf("平均分:%5.1f\n", (double)sum / NUMBER);        return (0);        }

示例代码 5-11

/*    输入5名学生的分数并显示出其中的最高分和最低分 */#include <stdio.h>#define NUMBER 5                                      // 学生人数 int main(void){    int i;    int tensu[NUMBER];                               // 5名学生的分数    int max, min;                                    // 总分        puts("请输入学生的分数。");    for (i = 0; i < NUMBER; i++) {        printf("%2d号:", i + 1);        scanf("%d", &tensu[i]);    }        min = max = tensu[0];        for (i = 1; i < NUMBER; i++) {        if (tensu[i] > max)    max = tensu[i];        if (tensu[i] < min)    min = tensu[i];    }        printf("最高分:%d\n", max);    printf("最低分:%d\n", min);        return (0);        }

示例代码 5-12

/*    输入5名学生的分数并显示出60分以上的一览表 */#include <stdio.h>#define NUMBER 5                             // 学生人数 int main(void){    int i;    int snum = 0;                             // 及格学生人数    int tensu[NUMBER];                       // NUMBER名学生的分数    int succs[NUMBER];                       // 及格学生一览表(保存及格学生的下标)        puts("请输入学生的分数。");    for (i = 0; i < NUMBER; i++) {        printf("%2d号:", i + 1);        scanf("%d", &tensu[i]);        if (tensu[i] >= 60)            succs[snum++] = i;               // 添加到及格学生一览表中     }        puts("及格学生一览表");    puts("--------------");    for (i = 0; i < snum; i++)        printf("%2d号(%3d分)\n", succs[i] + 1, tensu[succs[i]]);        return (0);     }

示例代码 5-13

/*    输入学生的分数并显示出分布情况 */#include <stdio.h>#define NUMBER 80                                 // 人数上限 int main(void){    int i, j;    int num;                                      // 实际的人数    int tensu[NUMBER];                            // 学生的分数    int bunpu[11] = {0};                          // 分布图         printf("请输入学生人数:");        do {        scanf("%d", &num);        if (num < 1 || num > NUMBER)            printf("\a人数范围[1到%d] :", NUMBER);    } while (num < 1 || num > NUMBER);        puts("请输入学生的分数。");    for (i = 0; i < num; i++) {        printf("%2d号:", i + 1);        do {             scanf("%d", &tensu[i]);            if (tensu[i] < 0 || tensu[i] > 100)                printf("\a分数范围[0到100]:");        } while (tensu[i] < 0 || tensu[i] > 100) ;        bunpu[tensu[i] / 10]++;    }         puts("\n----分布图----");    printf("      100:");    for (j = 0; j < bunpu[10]; j++)        putchar('*');    putchar('\n');        for (i = 9; i >= 0; i--) {        printf("%3d - %3d:", i * 10, i * 10 + 9);        for (j = 0; j < bunpu[i]; j++)            putchar('*');        putchar('\n');    }          return (0);   } 

示例代码 5-14

/*    计算2行3列矩阵的和 */#include <stdio.h>int main(void){    int i, j;    int ma[2][3] = {{1, 2, 3}, {4, 5, 6}};    int mb[2][3] = {{6, 3, 4}, {5, 1, 2}};    int mc[2][3] ={0};        for (i = 0; i < 2; i++)        for (j = 0; j < 3; j++)            mc[i][j] = ma[i][j] + mb[i][j];                 for (i = 0; i < 2; i++) {        for (j = 0; j < 3; j++)            printf("%3d", mc[i][j]);        putchar('\n');      }        return (0);}

示例代码 5-15

/*    计算出1000以内的质数(第1版) */#include <stdio.h>int main(void){    int i, no;    unsigned long counter = 0;        for (no = 2; no <= 1000; no++) {        for (i = 2; i < no; i++) {          // 能被整除的不是质数             counter++;                      // 退出上述循环             if (no % i == 0)                break;        }        if (no == i)                        // 直到最后也未被整除             printf("%d\n", no);    }            printf("乘除运算的次数:%lu\n", counter);        return (0);}

示例代码 5-16

/*    计算出1000以内的质数(第2版) */#include <stdio.h>int main(void){    int i, no;    unsigned long counter = 0;        no = 2;                                 // 2是偶数中唯一的质数     printf("%d\n", no++);         for (; no <= 1000; no += 2) {           // 只把奇数作为判断对象         for (i = 2; i < no; i++) {          // 能被整除的不是质数             counter++;                      // 退出上述循环             if (no % i == 0)                break;        }        if (no == i)                        // 直到最后也未被整除             printf("%d\n", no);    }            printf("乘除运算的次数:%lu\n", counter);        return (0);}

示例代码 5-17

/*    计算出1000以内的质数(第3版) */#include <stdio.h>int main(void){    int i, no;    unsigned long counter = 0;        no = 2;                                 // 2是偶数中唯一的质数     printf("%d\n", no++);         for (; no <= 1000; no += 2) {           // 只把奇数作为判断对象         for (i = 3; i < no; i += 2) {       // 只判断能否被奇数整除             counter++;                      // 退出上述循环             if (no % i == 0)                break;        }        if (no == i)                        // 直到最后也未被整除             printf("%d\n", no);    }            printf("乘除运算的次数:%lu\n", counter);        return (0);}

示例代码 5-18

/*    计算出1000以内的质数(第4版) */#include <stdio.h>int main(void){    int i, no;    int prime[500];                         // 用来保存质数的数组     int ptr = 0;                            // 已经的到的质数个数     unsigned long counter = 0;        prime[ptr++] = 2;    prime[ptr++] = 3;        for (no = 5; no <= 1000; no += 2) {     // 只把奇数作为判断对象         for (i = 1; i < ptr; i++) {         // 尝试能否被已经得到的质数整除             counter++;                                 if (no % prime[i] == 0)         // 能被整除的不是质数                 break;                      // 退出上述循环         }         if (ptr == i)                        // 直到最后也未被整除             prime[ptr++] = no;               // 添加到数组中        }        for (i = 0; i < ptr; i++)        printf("%d\n", prime[i]);         printf("乘除运算的次数:%lu\n", counter);    return (0);}

示例代码 5-19

/*    计算出1000以内的质数(第5版) */#include <stdio.h>int main(void){    int i, no;    int prime[500];                         // 用来保存质数的数组     int ptr = 0;                            // 已经的到的质数个数     unsigned long counter = 0;        prime[ptr++] = 2;    prime[ptr++] = 3;        for (no = 5; no <= 1000; no += 2) {     // 只把奇数作为判断对象         int flag = 0;        for (i = 1; counter++, prime[i] * prime[i] <= no; i++) {                    counter++;                                 if (no % prime[i] == 0) {        // 能被整除的不是质数                 flag = 1;                break;            }                                // 退出上述循环         }         if (!flag)                          // 直到最后也未被整除             prime[ptr++] = no;               // 添加到数组中        }        for (i = 0; i < ptr; i++)        printf("%d\n", prime[i]);         printf("乘除运算的次数:%lu\n", counter);    return (0);}


练习代码:


练习代码e5-1

/*    依次把0,1,2,3,4赋值给数组每个元素并显示 (使用for语句) */#include <stdio.h>int main(void){int i;int vc[5];                                // 包含5个元素的数组 for (i = 0; i < 5; i++)vc[i] = i;for (i = 0; i < 5; i++)printf("vc[%d] = %d\n", i, vc[i]);return (0);}

练习代码e5-2

/*    依次把5,4,3,2,1赋值给数组每个元素并显示 (使用for语句) */#include <stdio.h>int main(void){int i;int vc[5];                                // 包含5个元素的数组 for (i = 0; i < 5; i++)vc[i] = 5 - i;for (i = 0; i < 5; i++)printf("vc[%d] = %d\n", i, vc[i]);return (0);}

练习代码e5-3

/*    从头开始顺次为数组各元素进行初始化(5,4,3,2,1)并进行显示 */#include <stdio.h>int main(void){int i;int vc[5] = {5, 4, 3, 2, 1};for (i = 0; i < 5; i++)printf("vc[%d] = %d\n", i, vc[i]);  return (0);}

练习代码e5-4

/*    把数组中的全部元素倒序赋值到另一个数组中 */#include <stdio.h>int main(void){int i;int va[5] = {15, 20, 30};int vb[5];for (i = 0; i < 5; i++)vb[i] = va[4 - i];puts(" va vb");puts("------");for (i = 0; i < 5; i++)printf("%3d%3d\n", va[i], vb[i]);return (0);}

练习代码e5-5

/*    对数组中的全部元素进行倒序排列 */#include <stdio.h>int main(void){    int i;    int vx[8];        for (i = 0; i < 8; i++) {        printf("vx[%d]:", i);        scanf("%d", &vx[i]);    }        for (i = 0; i < 5; i++) {        int temp = vx[i];        vx[i] = vx[7 - i];        vx[7 - i] = temp;        }        for (i = 0; i < 8; i++)        printf("vx[%d]=%d\n", i, vx[i]);            return (0);    }

练习代码e5-6

/*    double类型赋值给int类型 */int main(void){    double a;    int b;        a = b = 1.5;        printf("a = %f\n", a);    printf("b = %d\n", b);        return (0);    }

练习代码e5-7

/*    计算矩阵x和y的积 */int main(void){    int x[2][3] = {{1, 2, 3}, {4, 5, 6},};    int y[3][2] = {{1, 5}, {5, 3}, {8, 1}};    int z[2][2] = {0};    int i, j;          for (i = 0; i < 3; i++)        z[0][0] += x[0][i] * y[i][0];        for (i = 0; i < 3; i++)        z[0][1] += x[0][i] * y[i][1];            for (i = 0; i < 3; i++)        z[1][0] += x[1][i] * y[i][0];            for (i = 0; i < 3; i++)        z[1][1] += x[1][i] * y[i][1];            for (i = 0; i < 2; i++) {        for (j = 0; j < 2; j++)            printf("%3d", z[i][j]);        putchar('\n');     }        system("pause");    return (0);}
1 0