啊哈磊_编程从这里起步

标题: 求大神指导 一个将一个数字插入数组并保持原顺序的程序,错在哪里了 [打印本页]

作者: 大家一起喊比悠    时间: 2014-4-17 23:46
标题: 求大神指导 一个将一个数字插入数组并保持原顺序的程序,错在哪里了
{:soso_e118:}
#include <stdio.h>
void main()
{
        int a[9]={10,20,30,40,70,80,90,100}, i,n,j;
        printf("please input the num\n");
                scanf("%d",&n);
        for(i=0;i<8;i++)
        {
                if(a[i]<=n&&a[i+1]>n)
                break;
        }
        for(j=9;j>i;j--)
                a[j]=a[j-1];
        a[i+1]=n;
        for(i=0;i<9;i++)
                printf("%7d",a[i]);
}
               


作者: rosynirvana    时间: 2014-4-18 00:23
  1. #include <stdio.h>
  2. int main()
  3. {
  4.         int a[9]={10,20,30,40,70,80,90,100}, i,n,j;
  5.         printf("please input the num\n");
  6.                 scanf("%d",&n);
  7.         for(i=0;i<8;i++)
  8.         {
  9.                 if(a[i]>=n)
  10.                 break;
  11.         }
  12.         for(j=8;j>=i;j--)
  13.                 a[j]=a[j-1];
  14.         a[i]=n;
  15.         for(i=0;i<9;i++)
  16.                 printf("%7d",a[i]);
  17.         getchar();getchar();
  18. }
复制代码

作者: 981013    时间: 2014-4-18 19:34
这个程序在试图插入大于100的数据时会出问题,原因如下:
  1. if(a[i]<=n&&a[i+1]>n)
复制代码

这句,当i=7时,a[i+1],即a[8],是0(当一个数组被初始化了一部分时,其余部分自动赋值为0)
于是,若i=7时,以上条件是不可能成立的,然后
  1. for(i=0;i<8;i++)
复制代码

for循环再将i自增(i++),此时i=8,循环条件不再被满足,于是i在程序余下的部分里就是8,而
  1. a[i+1]=n;
复制代码

就把n的值赋给了一个并不存在的数组元素a[9](记住数组的索引是从0开始的,也就是说,数数要这样数:第0、第1、第2……{:soso_e113:})

同样在插入10以下的数据时也会出问题,原因:
由于插入的数字<10,
  1. if(a[i]<=n&&a[i+1]>n)
复制代码

这句永远不可能成立(a最小是10,a不可能<=一个小于10的数)
然后就和上面一样了

还有个编码习惯上的问题,
  1. void main()
复制代码

这个很多“先进”的编译器都不承认,标准的无参main是
  1. int main()
复制代码







欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/) Powered by Discuz! X3.2