把循环次数改成你想要的数就可以了。
比如上面你的程序,for语句中的i<=9,这个9改成你想要的次数。另一种方法,这个次数也作为一个变量从键盘输入,这样适应性相对来说好一些,不用每次都编译程序。
提醒,如果是大批量的输入数据,用键盘逐个输入数据是比较低效和低准确率的方法,通常采用数据文件(比如一个文本文件)的方式。
你能问出这个问题来,说明你对上面的代码还没有理解透彻,好好学习吧。
----------------------------------------------------
对于lz的补充的回答:
我前面说的:另一种方法,这个次数也作为一个变量从键盘输入,这样适应性相对来说好一些,不用每次都编译程序。
但是有一个问题,就是C不支持动态定义数组。解决方法两种:一、定义一个足够大的数组(但有越界的可能,程序里要做判断和控制)。二、使用动态内存分配,可以从根本上解决此问题。
还有一种折中的办法,就是对排序数定义一个宏,程序中的循环都使用这个宏来控制循环,如果排序数量更改了,虽然需要重新编译程序,但是也很好修改,只要改这个宏的数值就可以了。
关于排序的方法有很多种,例如:冒泡排序、选择排序、插入排序、归并排序等等。
下面以冒牌排序来实现任意几个数的排序:
#include
//冒泡排序,由低到高
int main()
{
int a[10] = {2,5,9,15,1,6,4,8,26,33};
int temp;
int i, j;
for (i = 1; i < 10; i++)
{
for (j = 0; j < i; j++)
{
if (a[j] > a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for (i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
运行结果为:1 2 4 5 6 8 9 15 26 33
冒泡排序法是相邻之间的数据进行比较,每经过一次j循环,就将符合条件的待排数据进行一次移动互换,直到第n-1次移动互换,将整个数据排列完成。以下为j循环后的结果:
初始:2,5,9,15,1,6,4,8,26,33
第1次: 2,5,9,1,6,4,8,15,26,33
第2次: 2,5,1,6,4,8,9,15,26,33
第3次: 2,1,5,4,6,8,9,15,26,33
第4次: 1,2,4,5,6,8,9,15,26,33
第5次: 1,2,4,5,6,8,9,15,26,33
第6次: 1,2,4,5,6,8,9,15,26,33
第7次: 1,2,4,5,6,8,9,15,26,33
第8次: 1,2,4,5,6,8,9,15,26,33
第9次: 1,2,4,5,6,8,9,15,26,33
注意最小的数据的移动。
如果你会用指针的话,你可以创建一个动态链表,每次输入时做排序,这样就建成了一个有序的链表,你输出时就会是顺序的了。如果你想从小到大和从大到小都能输出,就建两个指针域,一个存前一地址,一个存下一地址。
楼主的思路是对的。不能直接对数组用动态定义,但是可以对指针使用。所以动态定义一个指针,把它当成数组用。我把你的程序做了些简单的修改,运行成功。
源程序如下:
#include
#include
main()
{
float *a;
int i,j,length;
printf("请输入要排序数字的个数:\n");
scanf("%d",&length);
a=(float *)malloc(length*sizeof(float));
printf("请输入%d个数(数字之间用空格或回车隔开):\n",length);
for(i=0;i
scanf("%f",&a[i]);
}
for(i=0;i
{a[j]=a[j]+a[j+1];a[j+1]=a[j]-a[j+1];a[j]=a[j]-a[j+1];}
printf("这%d个数从小到大排列的顺序是:\n",length);
for(i=0;i
}
这就涉及到函数的调用,你把第一个函数的作用为实现多个数据的输入,第二个函数实现冒泡排序,这样就可以了.
主要是参数不同而已,