有点不明白
在论坛看到别人的贴,自己运行改了下,但是不明白原因
主要问题是,为什么数组不是从下标为0开始输出,而是从1开始
#include<stdio.h>
#include<stdlib.h>
void Bouble(int n,int a[]){
int i,j,temp;
for(j=0;j<n;j++){
for(i=0;i<n-j;i++){
if (a[i]>a[i+1]) {
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
printf("the result is:\n");
for(i=1;i<n+1;i++){ //i为什么不能从0开始算
printf("%3d",a[i]);
}
printf("\n");
}
void Find(int n,int a[]){
int x,top=1,bot=n; //为什么不是n-1,为什么不行?
int mid;
printf("输入要查找的数:\n");
scanf("%d",&x);
while(top<=bot){
mid=(top+bot)/2;
if(x==a[mid]){
printf("找到元素,位置为:%d\n",mid);
exit(0);
}
else if (x>a[mid]) top=mid+1;
else if (x<a[mid])bot=mid-1;
}
printf("没有找到该元素!\n");
}
void main(){
int a[10],n,i=0;
printf("输入数组长度n:\n");
scanf("%d",&n);
printf("输入数组元素:\n");
for(i=0;i<n;i++){ //从这里看应该是从数组下标为0开始赋值的
scanf("%d",&a[i]);
}
printf("输入的数组为:\n");
for(i=0;i<n;i++){
printf("%d\n",a[i]);
}
Bouble(n,a);
Find(n,a);
}
[解决办法]
#include<stdio.h>
#include<stdlib.h>
void Bouble(int n,int a[]){
int i,j,temp;
for(j=0;j<n-1;j++){//**** j<n ==> j<n-1
for(i=0;i<n-j-1;i++){//**** i<n-j ==> i<n-j-1
if (a[i]>a[i+1]){
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
printf("the result is:\n");
for(i=0;i<n;i++){
printf("%3d",a[i]);
}
printf("\n");
}
void Find(int n,int a[]){
int x,top=0,bot=n-1;
int mid;
printf("输入要查找的数:\n");
scanf("%d",&x);
while(top<=bot){
mid=(top+bot)/2;
if(x==a[mid]){
printf("找到元素,位置为:%d\n",mid+1);//不习惯于说第0个 找成非0自然数序号
return;
}
else if (x>a[mid]) top=mid+1;
else if (x<a[mid]) bot=mid-1;
}
printf("没有找到该元素!\n");
}
void main(){
int a[10],n,i=0;
printf("输入数组长度n:\n");
scanf("%d",&n);
printf("输入数组元素:\n");
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
printf("输入的数组为:\n");
for(i=0;i<n;i++){
printf("%d\n",a[i]);
}
Bouble(n,a);
Find(n,a);
}