只有输入0的时候有问题,很奇怪
printf("请输入您的成绩:\n");
scanf("%d",&mark);
if(mark<=100&&0<=mark)
{
rank=dichotomy(marks,0,100,mark)+1;
printf("您的排名为:%d\n",rank);
}
else
{
printf("您的成绩输入有误,请退出程序重新输入");
}
return 0;
}
int dichotomy(int num[],int zuo,int you,int fen)
{
int mid;
while(zuo<=you)
{
mid=(zuo+you)/2;
if(fen>num[mid])
{
you=mid-1;
}
else if(fen
{
zuo=mid+1;
}
else if(fen=num[mid])
{
return mid;
}
}
return -1;
}
1.else if(fen=num[mid])
这里判断写成赋值了,但是不是很严重的问题。因为前面已经判断了小于和大于,如果既不小于又不大于,那只能是等于了,所以这里直接写else即可,不需要再写条件,写成赋值其实也不影响逻辑。
2.n<=100,i>=0这是个逗号表达式,只有i>=0在起作用,n<=100不起作用,你想都起作用,应该写n<=100&&i>=0
3.你都已经知道输入0会有问题,那断点跟,看代码到底走哪里去了呀
else if(fen==num[mid])