我编写此代码来计算并打印10个数字数组中最高重复的数字。问题是这个程序没有counter++
,而数字与数组中的最后一个数字相同。
以下是代码:
#include <stdio.h>
#define SIZE 9
int main () {
float Student[SIZE],grade,maxValue;
int i,j,k,slot,counter=0,maxCount=-1;
printf("Enter the grade of 10 students \n");
for(i=0;i<=SIZE;i++){
printf("Enter student %d grade : ",i+1);
scanf("%f",&Student[i]);
}
for(j=0;j<=SIZE;j++){
grade = Student[j];
counter = 0;
for(k=0;k<=SIZE;k++){
if(k == j){
continue;
}
if (grade == Student[k]){
counter++;
}
if (counter > maxCount) {
maxCount = counter;
maxValue = grade;
}
}
}
if(maxCount == 0 ){
printf("There are no duplicate numbers.\n");
}else{
printf("%.2f repeated %d times.\n",maxValue,maxCount);
}
return 0;
}
答案 0 :(得分:2)
I和j从0初始化,条件将被检查直到大小为1。因此,请在两个循环中将条件从j<=SIZE
更改为j<SIZE
。
答案 1 :(得分:0)
还有一个错误,正如你的问题所说,你有10个数字,SIZE仍然设置为9.下面的代码工作正常。它几乎与您的代码类似,但您应该注意到一些差异。
#include <stdio.h>
#define SIZE 10
int main () {
float Student[SIZE],grade,maxValue;
int i,j,k,slot,counter=1,maxCount=1;
printf("Enter the grade of 10 students \n");
for(i=0;i<SIZE;i++){
printf("Enter student %d grade : ",i+1);
scanf("%f",&Student[i]);
}
for(j=0;j<SIZE;j++){
grade = Student[j];
counter = 1;
for(k=0;k<SIZE;k++){
if (grade == Student[k] && j!=k) {
counter++;
}
if (counter > maxCount) {
maxCount = counter;
maxValue = grade;
}
}
}
if(maxCount == 1 ){
printf("There are no duplicate numbers.\n");
}else{
printf("%.2f repeated %d times.\n",maxValue,maxCount);
}
return 0;
}
答案 2 :(得分:-1)
我修复了自己,我将此代码添加到if(k==j)
:
if(Student[9]){
counter++;
}
之后continue;