搜索
查看: 672|回复: 2
打印 上一主题 下一主题

求大神指导 一个将一个数字插入数组并保持原顺序的程序,错在哪里了

[复制链接]
跳转到指定楼层
楼主
发表于 2014-4-17 23:46:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
{: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]);
}
               

沙发
发表于 2014-4-18 00:23:46 | 只看该作者
  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. }
复制代码
板凳
发表于 2014-4-18 19:34:10 | 只看该作者
这个程序在试图插入大于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()
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表