首页 > 用户发贴区 > 编程问题提问区 > 有个数组的问题,我是初学者,大大帮帮忙!
2008
10-07

有个数组的问题,我是初学者,大大帮帮忙!

由键盘输入一个整数X,将X插入到有序整型数a中,使数组a仍然有序,然后输出数组a。已知int a[11]={1,5,9,10,16,21,27,35,46,60}


下面的程序是我自己写的,程序只能做到把输入的X按顺序插入到数组a中,但是插入进去以后数组a以后,数组a就少了一个元素!麻烦高人帮忙看看!


#include “stdio.h”
#include “conio.h”


main()
{
   int i,j,t,a[11]={1,5,9,10,16,21,27,35,46,60,};
   printf(“input x numbers:\n”);
   for(i=2;i<12;i++)
   scanf(“%d”,&a[i]);
    printf(“\n”);
    for(j=0;j<11;j++)   /*进行11次循环,实现11趟比较*/
    for(i=0;i<11-j;i++) /*在每一趟中进行11-j次比较*/
    if(a[i]>a[i+1])     /*相邻两个数比较*/
    {
    t=a[i];a[i]=a[i+1];a[i+1]=t;
    }
    printf(“the sorted numbers:\n”);
    for(i=2;i<12;i++)
    printf(“%d\ “,a[i]);
}


有个数组的问题,我是初学者,大大帮帮忙!》有 4 条评论

  1. xu.java 说:

    建议你再看一下数组那边。

    下标都已经越界了。。。你这个编程风格也不是很好。花括号还是必要的。不然大家没耐心看你的代码的。

  2. renault 说:

    你的算法很繁琐,发个比较容易点的

    1.通过输入的数据找到插入点,用一个变量记录下、

    2.插入点后面的所有数组元素向后面移一位,然后往插入点的那个地方赋于输入数据的值。

  3. c赤松子 说:

    我想有两种方法,第一种是先把数插在数组最后面,然后把数组从小到大排列一下,不过这种方法好像和题目有点出入

    第二种是下面:

    #include “stdio.h”
    #include “conio.h”
    #define N 10
    main()
    {
       int i,k,t,a[N+1]={1,5,9,10,16,21,27,35,46,60,};
       clrscr();
       printf(“输入一个数:\n”);
       scanf(“%d”,&t);
     
       for(i=0;i<N;i++)
       {
          if(t<a[i])
          {
           k=i;
           break;
          }                   /*这段是找要插入的位置,用K来记来第一个比t大的数的坐标*/
       } 
      
       if(i<N)
       {
        for(i=N-1;i>k;i–)
          a[i]=a[i-1];
        a[k]=t;
       }
       else               /*如果输入的数比最大的数还大,就把输入的t放在最后/*
       a[n]=t;
       
       for(i=0;i<N+1;i++)
        printf(“%3d”,a[i])
    }

  4. lzhengp1986 说:

    楼上的做法比较好了,不过自己觉得还可以把特殊位置,

    如头和尾先做,即比最小数还小和比最大数还大两种情况

    然后也可以通过二分法来比较会使得平均运算次数更少些

留下一个回复