武汉市发改委副主任熊:请大家帮忙检查一下这个程序错在哪里! (能通过编译,但结果不对)

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 02:53:42
/* 编写一个程序,包括主函数和如下子函数。
(1) 输入10个无序的整数;(2) 用起泡方法从大到小排序;
(3) 要求输入一个整数,用折半查找法找出该数,若存在,
在主函数中输出其所处的位置,否则,插入适当位置。*/
#include "stdio.h"
void srzs(int a[11])
{ int i,j;
for(i=0;i<10;i++)
scanf("%d",a[i]);
}
void ps(int b[11])
{ int i,j,temp;
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(b[j]<b[j+1])
{temp=b[j];
b[j]=b[j+1];
b[j+1]=temp;
}
}
void zbf(int c[11],int *low,int *flag,int *mid,int *n)
{ int high=9,i;
*flag=0,*low=0;
printf("Enter a integers;\n");/*输入要查找的数*/
scanf("%d",&*n);
while(*low<=high)
{ *mid=(*low+high)/2;
if(c[*mid]==*n)
{*flag=1;break;}
if(c[*mid]>*n)
high=*mid-1;
else *low=*mid+1;
}
}
void main()
{ int d[11],x,yn,z,i,m;
printf("Enter 10 integers;\n");
srzs(d); /*输入十个整数*/
ps(d); /*排序*/
zbf(d,&x,&yn,&z,&m);/*折半法查找一个数*/
if(yn==1)
printf("zai di %d ge",z);
else
{for(i=9;i>=x;i--)
{ d[i+1]=d[i];
d[x]=m;
}
for(i=0;i<11;i++)
printf("%d ",d[i]);
}
getch();
}

(1) 输入10个无序的整数

scanf("%d",a[i]);
应改成
scanf("%d",&a[i]);
-----------------------------------

(2) 用起泡方法从大到小排序;

此功能的函数完全正确
------------------------------------
(3) 要求输入一个整数,用折半查找法找出该数,若存在,在主函数中输出其所处的位置,否则,插入适当位置。

折半查找函数不正确

以下是正确的程序:
#include "stdio.h"
void srzs(int a[11])
{ int i,j;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
}
void ps(int b[11])
{ int i,j,temp;
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(b[j]<b[j+1])
{temp=b[j];
b[j]=b[j+1];
b[j+1]=temp;
}
}
void zbf(int c[11],int *low,int *flag,int *mid,int *n)
{ int high=9,i;
*flag=0,*low=0;
printf("Enter a integers;\n");/*输入要查找的数*/
scanf("%d",&*n);
while(*low<=high)
{ *mid=(*low+high)/2;
if(c[*mid]==*n)
{*flag=1;break;}
if(c[*mid]>*n)
*low=*mid+1;
else high=*mid-1;
}
}
void main()
{ int d[11],x,yn,z,i,m;
printf("Enter 10 integers;\n");
srzs(d); /*输入十个整数*/
ps(d); /*排序*/
zbf(d,&x,&yn,&z,&m);/*折半法查找一个数*/
if(yn==1)
printf("zai di %d ge",z+1);
else
{for(i=9;i>=x;i--)
{ d[i+1]=d[i];
}
d[x]=m;
for(i=0;i<11;i++)
printf("%d ",d[i]);
}
getch();
}