学习《明解C语言第三版入门篇》笔记1
5-1 数组:
题目如下:
(背景:统计班级内各个分数段的人数)
要求:首先输入学生人数,然后输入每个人的分数。以10分为一个区间(满分100分)统计各个学生的分数在每个区间里的频次。如图所示,生成纵向统计图。
这是我学习这本书以来遇到的第一个偏难的题目,所以将解答代码记录于此。(仅学习一周C语言,代码非常幼稚,望谅解。)
代码如下:
#include<stdio.h>
#define NUMBER 80
int main(void)
{
int i,a,j;
int max,min;
int y[11]={0};
int x[NUMBER];
printf("请输入学生人数:");
do{
scanf("%d",&a);
if(a<1||a>NUMBER)
printf("\a请输入1~%d的整数!",NUMBER);
}while(a<1||a>NUMBER);
//人数(超过NUMBER则响铃)
printf("请输入%d人的分数。\n",a);
for(i=0;i<a;i++){
printf("%3d号:",i+1);
do{
scanf("%d",&x[i]);
if(x[i]<0||x[i]>100)
printf("\a请输入1~100之间的分数!");
}while(x[i]<0||x[i]>100);
y[x[i]/10]++;
}
//分数(小于0或大于100则响铃)
max=y[0];
min=max;
//最高频次
puts("分布图如下:");
for(i=1;i<=10;i++)
{
if (y[i]>max)
{
max=y[i];
min=max;
}
}
for(i=1;i<=max;i++){
for(j=0;j<=10;j++)
{
if(y[j]>=min)
printf(" * ");
else
printf(" ");
}
min--;
putchar('\n');
}
//每列大于等于最高频次则输出*,否则输出空格
//最高频次递减
puts("----------------------------------");
printf(" 0 10 20 30 40 50 60 70 80 90 100\n");
return 0;
}
运行结果如下:
(第一篇博客成就get!(๑╹◡╹)ノ""")