admin管理员组

文章数量:1794759

明解C语言 入门 课后习题练习答案 第五章

明解C语言 入门 课后习题练习答案 第五章

5-1

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>//01234 int main() { int i = 0; int arr[5] = {0}; for (i = 0; i < 5; i++) { arr[i] = i; } for (i = 0; i < 5; i++) { printf("arr[%d]=%d\\n", i, i); } return 0; }

5-2

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>//54321 int main() { int i = 0; int arr[5] = {0}; int a = 5; for (i = 0; i < 5; i++) { arr[i] = a; a--; } for (i = 0; i < 5; i++) { printf("arr[%d]=%d\\n", i, arr[i]); } return 0; }

5-3

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

5-4

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { int i = 0, m = 2; int a[] = {17,23,36}; int b[3] = { 0 }; //方法一: for (i = 0; i < 3; i++) { b[i] = a[m]; m--; if (m < 0) break; } /*方法二: for(i=0;i<3;i++) { b[i]=a[2-i]; }*/ puts(" a b"); puts("-------"); for (i = 0; i < 3; i++) { printf("%d %d \\n", a[i], b[i]); } return 0; }

5-5

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #define NUMBER 4 int main() { int i = 0; int arr[NUMBER] = {0}; for (i = 0; i < NUMBER; i++) { printf("x[%d]:", i); scanf("%d", &arr[i]); } puts("倒叙排列了。"); for (i = 0; i < (NUMBER/2); i++) { int temp = arr[i]; arr[i] = arr[NUMBER - 1 - i]; arr[NUMBER -1 - i] = temp; } for (i = 0; i < NUMBER; i++) { printf("x[%d]=%d\\n", i, arr[i]); } return 0; }

5-6

b=1; a=1.0; //因为b是int型,所以1.5传给b之后变为1,然后再将b传给a,由于a是double型,所以显示1.0; ps:程序运行之后显示的a是1.000000,也可以在打印的时候改为%.2d让其显示1.0;

5-7

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #define NUMBER 4 /*这道题我觉得题干有问题,体感说读取数组中的信,但是又说要用 对象式宏来声明数组元素的个数,既然个数是提前声明好的,读取数据 个数有什么意义呢,这里改为定义数组个数,然后依次输入数组元素, 最终显示数组中所有元素。*/ int main() { int arr[NUMBER] = {}; int i = 0; printf("数据个数:%d\\n",NUMBER); for (i = 0; i < NUMBER; i++) { printf("%d号:", i + 1); scanf("%d", &arr[i]); } printf("{"); for (i = 0; i < NUMBER; i++) { if (i < NUMBER - 1) { printf("%d,", arr[i]); } else { printf("%d", arr[i]); } } printf("}"); return 0; }

5-8

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #define NUMBER 80 int main() { int num = 0; int arr[NUMBER] = { 0 }; int i = 0; int px[11] = {0}; printf("请输入学生人数:"); do { scanf("%d", &num); if (num < 0 || num>80) { printf("请输入1~%d的数:",NUMBER); } } while (num < 0 || num>80); printf("请输入%d人的分数。\\n", num); for (i = 0; i < num; i++) { printf("%2d号:", i + 1); do { scanf("%d", &arr[i]); if (arr[i] < 0 || arr[i]>100) { printf("请输入1~100之间的整数:"); } } while (arr[i] < 0 || arr[i]>100); px[arr[i] / 10]++; } puts("---分布图---"); int j = 0; for (i = 0; i < 10; i++) { printf("%3d-%3d:", i * 10 , (i * 10 + 9)); for (j = 0; j < px[i]; j++) { putchar('*'); }putchar('\\n'); } printf(" 100:"); for (j = 0; j < px[10]; j++) { putchar('*'); } return 0; }

5-9

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #define NUMBER 80 /*现在是2022.4.12,目前还在封校,神经网络作业还没写,还没解封,快递什么的也是, 听说这道题有点难度,我从上午开始断断续续的开始看找思路,这道题大约花了我将近一 个半小时或者两个小时,虽然时间有点长,但是还是做出来了,还需要加油呀,希望我现 在学的,对我以后真的会有帮助!加油!*/ /*找到px数组中的最大值,也就是在某一分数段出现的最大次数,在此题中为3,所以看到 3就打一个星号,没看到就打空格,在第一行完成后,将最大值减一,就可以继续完成后面 的算法,从每一行的角度来看非常方便理解。*/ int main() { int num = 0; int arr[NUMBER] = { 0 }; int i = 0; int px[11] = {0}; char a = '*'; char b = ' '; printf("请输入学生人数:"); do { scanf("%d", &num); if (num < 0 || num>80) { printf("请输入1~%d的数:",NUMBER); } } while (num < 0 || num>80); printf("请输入%d人的分数。\\n", num); for (i = 0; i < num; i++) { printf("%2d号:", i + 1); do { scanf("%d", &arr[i]); if (arr[i] < 0 || arr[i]>100) { printf("请输入1~100之间的整数:"); } } while (arr[i] < 0 || arr[i]>100); px[arr[i] / 10]++; } puts("---分布图---"); /*int j = 0; for (i = 0; i < 10; i++) { printf("%3d-%3d:", i * 10 , (i * 10 + 9)); for (j = 0; j < px[i]; j++) { putchar('*'); }putchar('\\n'); } printf(" 100:"); for (j = 0; j < px[10]; j++) { putchar('*'); }*/ int max = 0; for (i = 0; i < 11; i++) { if (px[i] > max) { max = px[i]; } } do { for (i = 1; i <= 11; i++) { if (px[i-1] == max) { printf("%4c",a); px[i-1]--; } else printf("%4c", b); } putchar('\\n'); max--; } while (max > 0); puts("----------------------------------------------"); for (i = 0; i < 101; i += 10) { printf("%4d", i); } return 0; }

5-10

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> /*这道题最好列出所得四阶矩阵,再去看之间的关系,我们会发现,其实在第0行的时候,要进行 4次的循环,此4次循环行不变,列依次加1,所以引用了m变量,想明白其实挺简单的,就这个小 程序又花了一个半小时,看来还是有很长的路要走呀!*/ int main() { int arr1[4][3] = { 0 }; int arr2[3][4] = { 0 }; int b[4][4] = {0}; int i = 0, j = 0, m = 0, a = 0; printf("给四行三列的数组赋值:\\n"); for (i = 0; i < 4; i++) { for (j = 0; j < 3; j++) scanf("%4d", &arr1[i][j]); } printf("给三行四列的数组赋值:\\n"); for (i = 0; i < 3; i++) { for (j = 0; j < 4; j++) scanf("%4d", &arr2[i][j]); } for (i = 0; i < 4; i++) { while (m < 4) { for (j = 0; j < 3; j++) { b[i][m] += arr1[i][j] * arr2[j][m]; } m++; } m = 0; } for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) printf("%4d", b[i][j]); putchar('\\n'); } return 0; }

5-11

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> /*两行六列,行为成绩,列为学生,题干没说成绩怎么来的,这里为了增加难度, 成绩由键盘输入*/ int main() { int i = 0, j = 0; int arr[2][6] = { 0 }; puts(" A B C D E F"); for (i = 0; i < 2; i++) { if (i == 0) { printf("语文:"); } else { printf("数学:"); } for (j = 0; j < 6; j++) { scanf("%4d", &arr[i][j]); } } puts("-----------------------"); puts(" 总分 平均分"); int sum1 = 0, sum2 = 0, ave1 = 0, ave2 = 0; for (j = 0; j < 6; j++) { sum1 += arr[0][j]; } ave1 = sum1 / 6; printf("语文: %d %d \\n", sum1, ave1); for (j = 0; j < 6; j++) { sum2 += arr[1][j]; } ave2 = sum2 / 6; printf("数学: %d %d \\n", sum2, ave2); return 0; }

5-12

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { int i, j,k; 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 } } }; for (i = 0; i < 2; i++) { for (j = 0; j < 4; j++) { for (k = 0; k < 3; k++) { printf("%3d", tensu[i][j][k]); } putchar('\\n'); } } return 0; }

本文标签: 第五章课后习题入门答案