C语言编程,求助!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言编程,求助!相关的知识,希望对你有一定的参考价值。

编程:从标准输入读取若干个整数,排序后按从小到大顺序输出。
输入有多个用例,第一行有一个数,表示用例的个数(<=10)。以后每一行为一个用例的数据,每个用例占一行,每个数据用一个空格隔开,
其中每一行的第一个数值(<20),表示本行其后还有n个整数,要求对后面的n个整数排序(提醒:每行最后一个数后不带空格)。
你的输出应对应输入用例也占一行.

例如:
输入格式:
3
4 9 4 6 7
6 12 2 1 5 7 8
3 41 6 8
输出格式:
4 6 7 9
1 2 5 7 8 12
6 8 41

//其实根本用不上动态数组 容器什么的

题上都说了范围了

下面看我的

3
4 9 4 6 8
6 12 2 1 5 7 8
3 41 6 8
4 6 8 9
1 2 5 7 8 12
6 8 41
Press any key to continue

#include <stdio.h>
#include <stdlib.h>
int cmp ( const void *a , const void *b )

return *(int *)a - *(int *)b;

main()

int i,j,numline,row[10],a[10][20];
scanf("%d",&numline);
for (i=0;i<numline;i++)

scanf("%d",&row[i]);
for (j=0;j<row[i];j++)
scanf("%d",&a[i][j]);
qsort(a[i],row[i],sizeof(a[i][0]),cmp);

for (i=0;i<numline;i++)

for (j=0;j<row[i];j++)
printf("%d ",a[i][j]);
printf("\n");

追问

大哥,能帮我解释下这个程序吗?
我还没有学到这么高深,非常感谢!

追答

程序不长 所以很简单

#include
#include
int cmp ( const void *a , const void *b ) //这个是 qsort() 这个函数自带的函数 说白了就是排序 你可以参考一下网上qsort这个函数 也可以忽略掉 忽略掉的解决方法下面讲

return *(int *)a - *(int *)b;

main()

int i,j,numline,row[10],a[10][20]; //根据题中已知条件 声明数组最大为 10行 20个元素
scanf("%d",&numline); //先接收 数据组数
for (i=0;i<numline;i++) //接收上面输入的组数据

scanf("%d",&row[i]); //接收数据个数
for (j=0;j<row[i];j++) //按数据个数循环接收数据
scanf("%d",&a[i][j]);
qsort(a[i],row[i],sizeof(a[i][0]),cmp); //这里详细说 调用qsort 对刚输入的数据进行排序 也可以不用这个函数 因为系统函数不太容易理解 在这里可以写一个冒泡排序 对刚才接收的数据进行排序也是一样的

for (i=0;i<numline;i++) //接收完后 输出 排序好的数据

for (j=0;j<row[i];j++)
printf("%d ",a[i][j]);
printf("\n");



//如果还有不明白的请继续追问

参考技术A 这个用二维数组,一个大循环,里面一个标准的排序代码就可以了
程序很简单
参考技术B C++版本的可以吗?追问

可以的,非常感谢,给下算法就可以了,我就是不知道个数怎么控制!最好写下代码吧

追答

#include
#include
#include

using namespace std;

int main( void )

int line;
cin>>line;
vector& > lines;
for(i=0;i>number )
vector vs;
vs.push_back( number ); //排序把数放到数组里

sort(vs.begin(), vs.end()); //排序
lines.push_back( vs );


for(i=0;i::iterator it = lines[i].begin();
for(; it != lines[i].end() ; it++)

cout >> *it >> ' ';

cout >> endl;


return 0;

追问

大哥,C++有点看不懂,能换成C码?

追答

C的话,动态分配空间比较麻烦,特别是你不知道每一行的长度的情况下就要多次动态分配,所以懒得写了。
C++的话,就是用vector代替数组来用就行了,vector你就看做是一个边长数组。
vector& > lines; //这个lines就是你要的若干行啊
每次开始一行的时候,我就新建一个vector,然后把这一行的所有数都插入到vector中,上面代码有点小错误。
vector vs;
while( cin>>number )
vs.push_back( number ); //排序把数放到数组里


sort 就是调用排序函数。

输出结果那部分就是遍历vector输出就行了。

参考技术C 这个问题,结合动态存储分配和数组,用循环语句应该就可以搞定...只是我现在赶着上课...先存着吧,下午可以写代码给你(如果你还没选出最佳答案的话)追问

好的,非常感谢,等着

追答

额~~很抱歉地说,我没写出来,诶~技不如人呐,测试没能通过,我也是初学,看来我把动态存储想的太简单了!不好意思哈~~我想我得继续努力了!

以上是关于C语言编程,求助!的主要内容,如果未能解决你的问题,请参考以下文章

求助一道C语言设计题目

C语言编程,求助高手

c语言作业,求助!

跪求,C语言程序求助啊。

c语言编程求助

C语言求助。急急