【发布时间】:2015-09-28 05:06:37
【问题描述】:
此程序用于在数组中查找 3 个最高的数字。
当我运行代码时,我得到了第一高和第二高。第二高的是第三个数字重复
我在逻辑中遗漏了什么?
#include<stdio.h>
#include<conio.h>
int main()
{
int i,k,n,m[20],h[3];
printf("\n enter the total number of students");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("enter the marks scored by student %d",i+1);
scanf("%d",&m[i]);
}//end for loop
k=0;
h[k]=m[0];
for(i=0;i<n;i++)
{
if(m[i]>h[k])
{
h[k]=m[i];
}
}//end for loop
do
{
//Probably messed my code here
k++;
h[k]=m[0];
for(i=0;i<n;i++)
{
if(m[i]>=h[k-1])
{
if(m[i]>h[k])
{
h[k]=m[i];
}//end if
break;
}//end if
}//end for loop
}//end do loop
while(k<3);
printf("the first 3 highest marks are:\n");
for(i=0;i<k;i++)
printf("%d:%d\n",i+1,h[i]);
getch();
}//end of main
【问题讨论】:
-
有两种方法可以解决这样的问题: 1) 在调试器中运行您的代码,一次单步执行一行,观察变量值,直到您发现它在哪里没有做您想做的事情想; 2) 在代码中的关键点插入输出语句 (
printf) 以查看发生了什么。 SO 的工作方式不是:“这是我的代码,请为我调试”。你调试它,然后在解释你做了什么之后问你是否仍然不明白。 -
是您想要的前 3 个数字还是可以更多(将来)?
-
列表总是唯一数字的集合吗?
-
额外问题:为什么 m[] 的一个成员在 do-while 循环的最后一步发生了变化?