在网上找了一下,这三个题大多是待做或者是被跳过了。 分享一下自己的答案。
刚学习C不久,细节可能处理不得当,如有问题请在评论区指出。
编译环境 VScode
练习5-8
#include <stdio.h>
#define NUM 80
int main(void)
{
int a,b;
int num;
int people[NUM];
int chart[11]= {0};
printf("请输入学生人数:");
do
{
scanf("%d",&num);
if (num < 1 || num > NUM)
{
printf("请重新输入1~%d的数\n",NUM);
}
} while (num < 1 || num > NUM);
printf("请输入%d人的分数\n",num);
for (a = 0; a < num; a++)
{
printf("%2d位:",a+1);
do
{
scanf("%d",&people[a]);
if (people[a]<=0 || people[a]>100)
{
printf("请重新输入0~100的数");
}
} while (people[a]<=0 || people[a]>100);
chart[people[a] / 10]++;
}
puts("———————————————————");
for ( a = 0; a < 10; a++)
{
printf("%2d ~ %2d分 :",a*10,a*10+9);
for (b = 0; b < chart[a]; b++)
putchar('*');
printf("\n");
}
printf(" 100分 :");
for (a = 0; a < chart[10]; a++)
{
putchar('*');
}
putchar('\n');
return 0;
}
练习5-9
#include <stdio.h>
#define NUM 80
int main (void)
{
int a,b,number,max;
int people[NUM];
int chart[11];
printf("请输入学生人数: ");
do{
scanf("%d",&number);
if (number <= 0 || number > NUM)
printf("请重新输入1 ~ %d",NUM);
} while (number <= 0 || number > NUM);
printf("请输入%d个数\n",number);
for (a = 0; a < number; a++)
{
printf("%2d:",a+1);
do
{
scanf("%d",&people[a]);
if (people[a]<0 || people[a]>100)
printf("请输入0~100的分数:");
} while (people[a]<0 || people[a]>100);
chart[people[a]/10]++;
}
puts("————————————————————————————————————————————");
/* 确定chart数组各项中最大的数,作为空间的高 */
max = chart[0];
for (a = 0; a < 11; a++)
{
if(chart[a]>max)
max = chart[a];
}
for (; max>0; max--) /* 限定空间的高,确定有从上到下有几行 */
{
for (b = 0; b <= 10; b++) /* 从0到10遍历一行中的每一列 */
{
if(chart[b] >= max) /* 判定数组chart[b]>大于该层空间最大值 */
{
printf(" *"); /* chart数组某个数大于空间最大值时,输出两个空格加*号 */
}
else
printf(" "); /* chart数组不大于空间最大值时,输出三个空格 */
}
putchar('\n'); /* 一行结束,换行 */
}
puts("————————————————————————————————————————————");
for (a = 0; a <= 10; a++)
{
printf("%4d",a*10);
}
return 0;
}
练习5-10
#include <stdio.h>
int main(void)
{
int a,b,c,d = 0;
int array1[4][3]; //矩阵1
int array2[3][4]; //矩阵2
int origion[4][12] = {0}; //原始矩阵乘积数据的数组初始化
int product[4][4] = {0}; //最终矩阵乘积的数组初始化
puts("请依次输入矩阵1的各值");
for (a = 0; a < 4; a++) //遍历矩阵1来赋值
{
for (b = 0; b < 3; b++)
{
printf("矩阵1[%d][%d]:",a,b);
scanf("%d",&array1[a][b]);
}
}
for (a = 0; a < 3; a++) //遍历矩阵2来赋值
{
for (b = 0; b < 4; b++)
{
printf("矩阵2[%d][%d]:",a,b);
scanf("%d",&array2[a][b]);
}
}
//遍历各个乘积赋值到原始数据矩阵中
for ( a = 0; a < 4; a++) //矩阵1的每一行
{
d = 0;
for (b = 0; b < 4; b++) //矩阵2的每一列
{
for (c = 0; c < 3; c++) //矩阵2每一列的各行
{
origion[a][d] = array1[a][c] * array2[c][b]; //将矩阵的原始乘积(未合并)赋值到原始数据数组origion
d += 1;
}
}
putchar('\n');
}
puts("{");
//将原始乘积合并,赋值到product二维数组,即矩阵的乘积
for ( a = 0; a < 4; a++)
{
b = 0;
for (d = 0; d < 12; d++ )
{
product[a][b] += origion[a][d];
if ((d+1)%3 == 0) //变量从0开始,原始数据矩阵每3个相乘数为一组相加
{ printf("%4d",product[a][b]);
b++; //每一组加完后,更换到product数组元素的第二个元素
}
}
putchar('\n');
}
puts("}");
return 0;
}