2007
07-06

小弟刚接触c语言,是个小鸟,请大虾帮帮忙.题目是这样的


使用简单选择法对100以内任意多个整数进行排序并输出排序结果。
设计要求:要求用循环结构设计。
设计要求:要求用数组来存放排序数据。


问题出在任意多整数,而数组在设的时候必须给定长度,在线请教,请大虾帮忙,小弟感谢万分


问题[选择法]》有 7 条评论

  1. xstar 说:

    定义所需的最大的数组,这里是100,
    然后是定义一个参数保存数组实际元素个数。

    int arr[ 100 ];
    int num = 0;

  2. JinR1987 说:

    谢谢版主回复,小弟还有不明,”定义一个参数保存数组实际元素个数。”保存了实际元素个数又如何用到数组arr[]上呢?我假设我所需输入整数为10个,那又如何中断呢?因为数组长度很大.我的想法是输入”b”时停止输入数字,并将输入的数字排列.一下是小弟编的,但不完全.请看看,能否再提示一下

    #include “stdio.h”
    #include “math.h”
    main()
    {
     int arr[100],i,k,t,j,num;
    printf(“Please putin numbers.The numbers must be <100.when you putin ‘b’ it will break.”);
    for(i=1;i<100;i++)
       scanf(“%d”,&arr[i]);
     printf(“\n”);
    for(i=1;i<100;i++)
    printf(“%d “,arr[i]);
      for(i=1;i<99;i++)/*选择法*/
      {k=i;
         for(j=i+1;j<=99;j++)
         if(a[j]<arr[k]) k=j;
         if(i!=k)
        { t=arr[i];arr[i]=arr[k];arr[k]=t;}
         }
         for(i=1;i<99;i++)
        printf(“%d “,arr[i]);
        }

    最后谢谢,最后碰到一个问题就是,数组初始的数是0,假如说数组定义是a[100]我需要输入的数字是10个数字,10个以外的数字都是0,这个问题如何解决呢?请大虾帮忙

  3. jerney 说:

    数组初始的数是0,假如说数组定义是a[100]我需要输入的数字是10个数字,10个以外的数字都是0,这个问题如何解决呢?

    c语言自动定义在没有赋值的地方会自动赋值为0,不用自己赋值

  4. xstar 说:

    [code]
    // 首先变量使用前最好显示初始化,这个是个良好的习惯!
    // 原因是不要太相信你的编译器,并期望它出所有的错误!
    #include "stdio.h"
    #include "math.h"
    int main()
    {
     int arr[ 100 ];
     int num = 0;
     char tmp[ 16 ]; // 辅助输入变量,用于判断是否是 'b',即结束

     int i;

     // 下面两种初始化方法自己选一种吧。
     for( i = 0; i < 100; i++ ) {
      arr[ i ] = 0;
     }

     memset( arr, 0, sizeof( arr ) );

     printf( "Please input numbers, 'b' for end\n" );

     for( i = 0; i < 100; i++ ) {
      printf( "arr[%d] ", i );
      scanf( "%s", tmp );
      if ( strcmp( tmp, "b" ) == 0 ) { //判断是否是 b,是则退出
       break;
      }
      arr[ i ] = atoi( tmp );
      num++;
     }

     printf( "\nYou Input The Numbers\n" );
     for( i = 0; i < num; i++ ) {
      printf( "%d ", arr[ i ] );
     }

     // 排序的算法自己实现!
     // m_sort( arr, num );

     printf( "\nSort\n" );
     for( i = 0; i < num; i++)
      printf( "%d ", arr[i] );
    }
    [/code]
    以上是一种实现方法,该方法还是有点问题,就是不能超过100个元素,
    另外还有动态分配的方法,就是用malloc来分配内存,然后在输入的同时判断是否要超出范围了,如果超出了,就重新分配这块内存,分配的递增量可以设置为10个元素的大小。这个中间需要处理好的是内存的释放和数据的保存,remalloc后不要清空以前的数据!

  5. JinR1987 说:

    太感谢了.我去实践一下.

  6. JinR1987 说:

    main()函数中,for循环不能用break跳出,郁闷了一下,版主有什么办法?再次谢谢~~~

  7. JinR1987 说:

    #include “stdio.h”
    #include “math.h”
    main()
    {
     int arr[100],i,k,t,j,num=0;
     char c[100];
    printf(“Please putin numbers.The numbers must be <100.when you input ‘b’ it will end.”);
       printf(“\n”);
    for(i=1;i<100;i++)
      {scanf(“%2d”,&arr[i]);
       c[i]=arr[i];
       i=num;
       if(c[i]==’b')
       break;}
     printf(“\n”);
    for(i=1;i<num;i++)
    printf(“%d \n”,arr[i]);

      for(i=1;i<num-1;i++) /*选择法*/
      {k=i;
         for(j=i+1;j<=num-1;j++)
         if(arr[j]<arr[k]) k=j;
         if(i!=k)
        { t=arr[i];arr[i]=arr[k];arr[k]=t;}
         }
        

    for(i=1;i<num-1;i++)
        printf(“%d “,arr[i]);
        }

    通过你的提示,按照我的理解我重新编了一下,可是,还是出现问题,我输入好数字,输入b,没反映,能否告诉我问题出现在哪,谢谢~~~~

留下一个回复