首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

有些不明白

2012-12-29 
有点不明白在论坛看到别人的贴,自己运行改了下,但是不明白原因主要问题是,为什么数组不是从下标为0开始输

有点不明白
在论坛看到别人的贴,自己运行改了下,但是不明白原因
主要问题是,为什么数组不是从下标为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);
}


原来的冒泡排序错误,越界1,把一个无效数据排到第0个上去了,改正好,下标是从0开始到n-1止

热点排行