【发布时间】:2013-10-09 10:17:28
【问题描述】:
我需要添加一个名为 computeFrequencies 的函数,给定一个包含成绩的数组,它会返回一个包含成绩频率分布的小数组。 (这只是整个程序的一部分)
我做了这个,但是我对 c 完全陌生,我不确定我做错了什么: 给定错误: histogramtest2.c:16:10:错误:“等级”重新声明为不同类型的符号 histogramtest2.c:15:29: 注意:之前对“等级”的定义在这里 histogramtest2.c:20:12: 错误:下标值既不是数组也不是指针也不是向量
谁能帮助我? 非常感谢
void computeFrequencies(int grades[], int freq[10]){
int i, grades[];
int length=100;
for(i=0; i<length; i++){
grades[i]=i;
switch(i){
case 1: freq[1]++;
break;
case 2: freq[2]++;
break;
case 3: freq[3]++;
break;
case 4: freq[4]++;
break;
case 5: freq[5]++;
break;
case 6: freq[6]++;
break;
case 7: freq[7]++;
break;
case 8: freq[8]++;
break;
case 9: freq[9]++;
break;
default: freq[10]++;
}
}
}
嘿,感谢您的回答,但即使我的错误消失了,我的程序也无法运行。 我的程序需要显示某些等级频率的直方图。 谁能帮帮我?
输入文件名为 1.in,包含: 29 6 3 8 6 7 4 8 9 2 10 4 9 5 7 4 8 6 7 2 10 4 1 8 3 6 3 6 9 4
我使用 ./a.out
输出应该是:
. . . * . * . . . .
. . . * . * . * . .
. . * * . * * * * .
. * * * . * * * * *
* * * * * * * * * *
1 2 3 4 5 6 7 8 9 10
代码:
#include <stdio.h>
#include <stdlib.h>
int *readGrades() {
int x, count;
scanf("%d", &count);
int *grades = malloc(count * sizeof(int));
for (x = 0; x < count; ++x) {
scanf("%d", &grades[x]);
}
return grades;
}
void computeFrequencies(int grades[], int freq[10]){
int i;
int length=100;
for(i=0; i<length; i++){
grades[i]=i;
switch(i){
case 1: freq[1]++;
break;
case 2: freq[2]++;
break;
case 3: freq[3]++;
break;
case 4: freq[4]++;
break;
case 5: freq[5]++;
break;
case 6: freq[6]++;
break;
case 7: freq[7]++;
break;
case 8: freq[8]++;
break;
case 9: freq[9]++;
break;
default: freq[10]++;
}
}
}
int arrayMax(int length, int arr[]) {
int i, max = arr[0];
for (i=1; i < length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
void printHistogram(int freq[10]){
int highestGrade = arrayMax(10,freq);
int x;
int y;
for(x=highestGrade; x>0; x--) {
for(y=1; y<=10; y++) {
if(freq[y] < highestGrade && x > freq[y]) {
if(y==10) {
printf(".\n");
}
else {
printf(". ");
}
} else {
if(freq[y] <= highestGrade && x <= freq[y]) {
if(y==10) {
printf("*\n");
}
else {
printf("* ");
}
}
}
}
}
printf("\n");
printf("1 2 3 4 5 6 7 8 9 10\n");
}
int main(int argc, char *argv[]) {
int *grades;
int frequencies[10];
grades = readGrades();
computeFrequencies(grades, frequencies);
arrayMax(10,frequencies);
printHistogram(frequencies);
return 0;
}
【问题讨论】:
-
问题正如错误所说:你正在重新声明已经存在的东西。
-
数组从零开始...默认 == segfault case
-
你可以简单地说
foo(x),而不是switch(x) { case i: foo(i); /* ... */ }。 -
不确定是否有人看过编辑 =/
标签: c arrays pointers histogram