• 《明解C语言》第三版 (入门篇) 第五章练习答案


    题目就不放出来了,对着练习题号就行 

    练习5-1 

    1. #include<stdio.h>
    2. int main()
    3. {
    4. int i = 0;
    5. int arr[5] = {0};
    6. for (i = 0; i < 5; i++)
    7. {
    8. arr[i] = i;
    9. }
    10. for (i = 0; i < 5; i++)
    11. {
    12. printf("arr[%d]=%d\n", i, i);
    13. }
    14. return 0;
    15. }

    练习5-2

    1. #include<stdio.h>//54321
    2. int main()
    3. {
    4. int i = 0;
    5. int arr[5] = {0};
    6. int a = 5;
    7. for (i = 0; i < 5; i++)
    8. {
    9. arr[i] = a;
    10. a--;
    11. }
    12. for (i = 0; i < 5; i++)
    13. {
    14. printf("arr[%d]=%d\n", i, arr[i]);
    15. }
    16. return 0;
    17. }

    练习5-3

    1. #include<stdio.h>//5-3
    2. int main()
    3. {
    4. int i = 0;
    5. int v[] = { 5,4,3,2,1 };
    6. for (i = 0; i < 5; i++)
    7. {
    8. printf("v[%d]=%d\n", i, v[i]);
    9. }
    10. return 0;

    练习5-4

    1. #include <stdio.h>//5-4
    2. int main()
    3. {
    4. int i;
    5. int a[5] = { 17, 23, 36 }; // 使用{17233600} 进行初始化
    6. int b[5];
    7. for (i = 0; i < 5; i++) {
    8. b[4 - i] = a[i];
    9. }
    10. puts(" a b");
    11. puts("---------");
    12. for (i = 0; i < 5; i++)
    13. printf("%4d%4d\n", a[i], b[i]);
    14. return 0;
    15. }

    练习5-4

    1. #include <stdio.h>
    2. #define number 7
    3. int main(void)
    4. {
    5. int i;
    6. int x[number];
    7. for (i = 0; i < number; i++) {
    8. printf("x[%d] : ", i);
    9. scanf("%d", &x[i]);
    10. }
    11. for (i = 0; i < 3; i++) {
    12. int temp = x[i];
    13. x[i] = x[6 - i];
    14. x[6 - i] = temp;
    15. }
    16. puts("倒序排列了。");
    17. for (i = 0; i < number; i++)
    18. printf("x[%d] = %d\n", i, x[i]);
    19. return 0;
    20. }

    练习5-6

     结果都是1

    练习5-7

    1. #include <stdio.h>
    2. #define number 80
    3. int main(void)
    4. {
    5. int v[number];
    6. int num;
    7. int i;
    8. printf("数据个数:");
    9. scanf("%d", &num);
    10. for (i = 0; i < num; i++) {//数组创建
    11. printf("%d号:",i+1);
    12. scanf("%d", &v[i]);
    13. }
    14. printf("{");
    15. for (i = 0; i < num-1; i++) {
    16. printf("%d, ", v[i]);
    17. }
    18. printf("%d", v[num-1]);
    19. printf("}");
    20. return 0;
    21. }

    练习5-8

    1. #include <stdio.h>
    2. #define NUMBER 80 /* 人数上限 */
    3. int main(void)
    4. {
    5. int i, j;
    6. int num; /* 实际的人数 */
    7. int tensu[NUMBER]; /* 学生的分数 */
    8. int bunpu[11] = { 0 }; /* 分布图 */
    9. printf("请输入学生人数:");
    10. scanf("%d", &num);
    11. printf("请输入%d 人的分数。\n", num);
    12. for (i = 0; i < num; i++) {
    13. printf("%2d号:", i + 1);
    14. scanf("%d", &tensu[i]);
    15. bunpu[tensu[i] / 10]++;
    16. }
    17. puts("\n---分布图---");
    18. for (i = 0; i <= 9; i++) { /* 不到100*/
    19. printf("%3d - %3d:", i * 10, i * 10 + 9);
    20. for (j = 0; j < bunpu[i]; j++)
    21. putchar('*');
    22. putchar('\n');
    23. }
    24. printf(" 100:");
    25. for (j = 0; j < bunpu[10]; j++) /* 100*/
    26. putchar('*');
    27. putchar('\n');
    28. return 0;
    29. }

    练习5-9

    1. #include <stdio.h>
    2. #define NUMBER 80
    3. int main(void)
    4. {
    5. int i, j;
    6. int num, higt;
    7. int tensu[NUMBER];
    8. int bunpu[11] = { 0 };
    9. printf("请输入学生人数:");
    10. scanf("%d", &num);
    11. printf("请输入%d 人的分数。\n", num);
    12. for (i = 0; i < num; i++) {
    13. printf("%2d号:", i + 1);
    14. scanf("%d", &tensu[i]);
    15. bunpu[tensu[i] / 10]++;
    16. }
    17. puts("-------------------------------------------");//以下是空间高度
    18. higt = bunpu[0];
    19. for(i = 0;i < 11;i++)
    20. {
    21. if(bunpu[i] > higt){
    22. higt = bunpu[i];
    23. }
    24. }
    25. for( ;higt > 0;higt--)//限定空间的高,确定有从上到下有几行
    26. {
    27. for(j = 1;j <= 11;j++)//111遍历一行中的每一列
    28. {
    29. if(bunpu[j] >= higt){//判定数组bunpu[j]>大于该层空间最大值
    30. printf(" *");//bunpu数组某个数大于空间最大值时,输出两个空格加*
    31. }
    32. else{
    33. printf(" ");//bunpu数组不大于空间最大值时,输出三个空格
    34. }
    35. }
    36. putchar('\n');
    37. }
    38. puts("————————————————————————————————————————————");
    39. for (i = 0; i <= 10; i++)
    40. {
    41. printf("%4d",i*10);
    42. }
    43. return 0;
    44. }

    练习5-10

    1. int main()
    2. {
    3. int arr1[4][3];//43
    4. int arr2[3][4];//34
    5. int c[4][4];//乘积变成44
    6. int i,j,k,a,b;
    7. puts("4行3列");
    8. for(i = 0;i < 4;i++){//43
    9. for(j = 0;j < 3;j++){
    10. scanf("%2d ",&arr1[i][j]);
    11. }
    12. }
    13. puts("3行4列");
    14. for(i = 0;i < 3;i++){//34
    15. for(j = 0;j < 4;j++){
    16. scanf("%2d ",&arr1[i][j]);
    17. }
    18. }
    19. for (i = 0; i < 4; i++) { //计算矩阵c的值
    20. for (j = 0; j < 4; j++) {
    21. c[i][j] = 0;
    22. for (k = 0; k < 3; k++) {
    23. c[i][j] += arr1[i][k] * arr2[k][j];
    24. }
    25. }
    26. }
    27. for (a = 0; a < 4; a++)
    28. {
    29. for (b = 0; b < 4; b++){
    30. printf("%d\t", c[a][b]);
    31. }
    32. printf("\n");
    33. }
    34. return 0;
    35. }
    36. //别人的
    37. int main(void)
    38. {
    39. int a,b,c,d = 0;
    40. int array1[4][3]; //矩阵1
    41. int array2[3][4]; //矩阵2
    42. int origion[4][12] = {0}; //原始矩阵乘积数据的数组初始化
    43. int product[4][4] = {0}; //最终矩阵乘积的数组初始化
    44. puts("请依次输入矩阵1的各值");
    45. for (a = 0; a < 4; a++) //遍历矩阵1来赋值
    46. {
    47. for (b = 0; b < 3; b++)
    48. {
    49. printf("矩阵1[%d][%d]:",a,b);
    50. scanf("%d",&array1[a][b]);
    51. }
    52. }
    53. for (a = 0; a < 3; a++) //遍历矩阵2来赋值
    54. {
    55. for (b = 0; b < 4; b++)
    56. {
    57. printf("矩阵2[%d][%d]:",a,b);
    58. scanf("%d",&array2[a][b]);
    59. }
    60. }
    61. //遍历各个乘积赋值到原始数据矩阵中
    62. for ( a = 0; a < 4; a++) //矩阵1的每一行
    63. {
    64. d = 0;
    65. for (b = 0; b < 4; b++) //矩阵2的每一列
    66. {
    67. for (c = 0; c < 3; c++) //矩阵2每一列的各行
    68. {
    69. origion[a][d] = array1[a][c] * array2[c][b]; //将矩阵的原始乘积(未合并)赋值到原始数据数组origion
    70. d += 1;
    71. }
    72. }
    73. putchar('\n');
    74. }
    75. puts("{");
    76. //将原始乘积合并,赋值到product二维数组,即矩阵的乘积
    77. for ( a = 0; a < 4; a++)
    78. {
    79. b = 0;
    80. for (d = 0; d < 12; d++ )
    81. {
    82. product[a][b] += origion[a][d];
    83. if ((d+1)%3 == 0) //变量从0开始,原始数据矩阵每3个相乘数为一组相加
    84. { printf("%4d",product[a][b]);
    85. b++; //每一组加完后,更换到product数组元素的第二个元素
    86. }
    87. }
    88. putchar('\n');
    89. }
    90. puts("}");
    91. return 0;
    92. }

    练习5-11

    1. #include <stdio.h>
    2. int main(void)
    3. {
    4. int s = 6; /*学生数量*/
    5. int c = 2; /*科目数量*/
    6. double tensu[s][c];
    7. int i, j;
    8. double sum0 = 0, sum1 = 0; /*科目1、科目2的总分*/
    9. double tmp = 0;
    10. for(i = 0; i < s; i++)
    11. {
    12. printf("学生%d\n", i + 1);
    13. for(j = 0; j < c; j++)
    14. {
    15. printf(" 科目%d:", j + 1);
    16. scanf("%lf", &tensu[i][j]);
    17. /*验证 显示每次输入的分数
    18. printf(" %.1f", tensu[i][j]);*/
    19. /*通过判断j的值,为0时,或为1时,分别计入到不同的统计结果中*/
    20. switch(j)
    21. {
    22. case 0 : sum0 += tensu[i][j]; break;
    23. case 1 : sum1 += tensu[i][j]; break;
    24. }
    25. putchar('\n');
    26. }
    27. }
    28. /*验证 显示输入后所有的科目以及对应分数
    29. for(i = 0; i < s; i++)
    30. {
    31. printf("学生%d\n", i + 1);
    32. for(j = 0; j < c; j++)
    33. {
    34. printf(" 科目%d:%.1f", j + 1, tensu[i][j]);
    35. putchar('\n');
    36. }
    37. }*/
    38. for(i = 0; i < c; i++) /*有c个科目*/
    39. {
    40. for(j = 0; j < s; j++) /*将s个学生的成绩加在一起*/
    41. {
    42. tmp += tensu[j][i]; /*临时储存每个科目的总分*/
    43. }
    44. printf("科目%d 总分:%.1f 平均分:%.1f", i + 1, tmp, tmp / s);
    45. tmp = 0;
    46. printf("\n");
    47. }
    48. printf("\n\n");
    49. for(i = 0; i < s; i++) /*有s个学生*/
    50. {
    51. for(j = 0; j < c; j++) /*将c个科目的成绩加在一起*/
    52. {
    53. tmp += tensu[i][j]; /*临时储存每个学生的总分*/
    54. }
    55. printf("学生%d 总分:%.1f 平均分:%.1f", i + 1, tmp, tmp / c);
    56. tmp = 0; /*计算出每个学生的平均分后,将临时储存清空*/
    57. printf("\n");
    58. }
    59. return 0;
    60. }
    61. 方法2,理解成6名学生在两次考试的成绩
    62. int main()
    63. {
    64. int a,b,c,d = 0;
    65. int array1[6][1];
    66. int array2[6][1];
    67. int sum[6][1];
    68. puts("请依次输入成绩的各值");
    69. for (a = 0; a < 6; a++) //遍历矩阵1来赋值
    70. {
    71. for (b = 0; b < 1; b++)
    72. {
    73. printf("成绩[%d][%d]:",a,b);
    74. scanf("%3d",&array1[a][b]);
    75. }
    76. printf("\n");
    77. }
    78. for (a = 0; a < 6; a++) //遍历矩阵2来赋值
    79. {
    80. for (b = 0; b < 1; b++)
    81. {
    82. printf("成绩[%d][%d]:",a,b);
    83. scanf("%3d",&array2[a][b]);
    84. }
    85. printf("\n");
    86. }
    87. for (a = 0; a < 6; a++) //两次分数
    88. {
    89. for (b = 0; b < 1; b++)
    90. {
    91. sum[a][b] = array1[a][b] + array2[a][b];
    92. }
    93. }
    94. puts("总分");
    95. for (a = 0; a < 6; a++) //总分
    96. {
    97. for (b = 0; b < 1; b++)
    98. {
    99. printf("%3d",sum[a][b]);
    100. }
    101. putchar('\n');
    102. }
    103. puts("平均分");
    104. for (a = 0; a < 6; a++) //平均分
    105. {
    106. for (b = 0; b < 1; b++)
    107. {
    108. printf("%3d",sum[a][b]/2);
    109. }
    110. putchar('\n');
    111. }
    112. return 0;
    113. }

    练习5-12

    1. #include <stdio.h>
    2. int main(void)
    3. {
    4. int x, y, z;
    5. int tensu[2][4][3] = { { {91, 63, 78}, {67, 72, 46},{89, 34, 53}, {32, 54, 34} } ,{ {97, 67, 82}, { 73, 43, 46 }, { 97, 56, 21 }, { 85, 46, 35 } } };
    6. for (x = 0; x < 2; x++) {
    7. for (y = 0; y < 4; y++) {
    8. for (z = 0; z < 3; z++) {
    9. printf("%4d", tensu[x][y][z]);
    10. }
    11. putchar('\n');
    12. }
    13. }
    14. return 0;
    15. }

     

  • 相关阅读:
    【核心动画-转场动画-CATransition Objective-C语言】
    Selenium+Pytest自动化测试框架详解
    Vite Vue3+Element Plus框架布局
    96. 不同的二叉搜索树
    【Proteus仿真】【Arduino单片机】DS18B20温度计
    JQuery+webpack+echarts构建可视化开发环境
    英特尔® NUC迷你电脑设置带电自启
    如何在面试中展示跨领域的能力
    Flink内存调优篇-广告实时统计的优化
    后台管理---用户页搜索框的封装
  • 原文地址:https://blog.csdn.net/Good_go/article/details/134387936