小弟刚接触c语言,是个小鸟,请大虾帮帮忙.题目是这样的
使用简单选择法对100以内任意多个整数进行排序并输出排序结果。
设计要求:要求用循环结构设计。
设计要求:要求用数组来存放排序数据。
问题出在任意多整数,而数组在设的时候必须给定长度,在线请教,请大虾帮忙,小弟感谢万分
>> 本文固定链接: http://www.vcgood.com/archives/1702
小弟刚接触c语言,是个小鸟,请大虾帮帮忙.题目是这样的
使用简单选择法对100以内任意多个整数进行排序并输出排序结果。
设计要求:要求用循环结构设计。
设计要求:要求用数组来存放排序数据。
问题出在任意多整数,而数组在设的时候必须给定长度,在线请教,请大虾帮忙,小弟感谢万分
>> 本文固定链接: http://www.vcgood.com/archives/1702
你必须先 登录才能发表评论。
定义所需的最大的数组,这里是100,
然后是定义一个参数保存数组实际元素个数。
int arr[ 100 ];
int num = 0;
谢谢版主回复,小弟还有不明,”定义一个参数保存数组实际元素个数。”保存了实际元素个数又如何用到数组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,这个问题如何解决呢?请大虾帮忙
数组初始的数是0,假如说数组定义是a[100]我需要输入的数字是10个数字,10个以外的数字都是0,这个问题如何解决呢?
c语言自动定义在没有赋值的地方会自动赋值为0,不用自己赋值
[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后不要清空以前的数据!
太感谢了.我去实践一下.
main()函数中,for循环不能用break跳出,郁闷了一下,版主有什么办法?再次谢谢~~~
#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,没反映,能否告诉我问题出现在哪,谢谢~~~~