| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2166 人关注过本帖
标题:C语言问题请指教
只看楼主 加入收藏
想带上你私奔
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2018-4-3
结帖率:0
收藏
已结贴  问题点数:20 回复次数:10 
C语言问题请指教
C语言编程实现:生成N个随机整数放入数组a中,挑出其中的奇数,并从大到小排序放在数组b中。
最好是这样:比如在执行画面中:数组a:0  2 1 66 21 23 90 11 22 45
                              输出b:45 23 21 11

或者:数组a: 1 3 4 7 8 9
      数组b: 9 7 3 1

[此贴子已经被作者于2018-4-3 11:03编辑过]

搜索更多相关主题的帖子: C语言 数组 排序 执行 画面 
2018-04-03 10:51
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
分步

先挑奇数,再排序~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-04-03 11:45
想带上你私奔
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2018-4-3
收藏
得分:0 
回复 2楼 九转星河
能给个程序参考一下吗
2018-04-03 11:57
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
大概弄了个,当然有兴趣的弄个简单的就可以了~

程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>

typedef int TYPE;

int comp( const void*,const void* );

void nodeMal( void**,size_t );
void nodeRea( void**,size_t );
void nodeFree( void** );

size_t fun( const TYPE [],TYPE**,size_t );

void print( const TYPE[],size_t );

int main( void )
{
    const TYPE a[]={1,3,4,7,8,9};
    
    TYPE* b=NULL;
    
    size_t len;
    
    len=fun(a,&b,sizeof (a)/sizeof (*a));
    
    print(b,len);
    
    nodeFree((void**)&b);
    
    return 0;
}

int comp( const void* _p,const void* _q )
{
    TYPE p=*( TYPE* )_p;
    TYPE q=*( TYPE* )_q;
    
    if (p>q)
        return -1;
        
    if (p<q)
        return 1;
    
    return 0;
}

void nodeMal( void** p,size_t size )
{
    assert(p);
    
    *p=malloc(size);
    
    assert(*p);

    memset(*p,0,size);
}

void nodeRea( void** p,size_t size )
{
    void* p_new=NULL;
    
    assert(p);
    
    p_new=realloc(*p,size);
    
    assert(p_new);

 
     *p=p_new;
}

void nodeFree( void** p )
{
    assert(p);
    
    free(*p);
    *p=NULL;
}

size_t fun( const TYPE a[],TYPE** _b,size_t a_len )
{
    TYPE* b=NULL;
    size_t b_len;
    
    size_t i;
    size_t j;
    
    assert(a);
    assert(_b);
    
    nodeMal((void**)_b,sizeof (*a)*a_len);
    
    b=*_b;
    
    for (i=b_len=0;i!=a_len;++i)
        if (a[i]%2)
            b[b_len++]=a[i];
     
     nodeRea((void**)_b,sizeof (*b)*b_len);
     
     qsort(b,b_len,sizeof (*b),comp);
     
     return b_len;
}

void print( const TYPE b[],size_t len )
{
    size_t i;
    
    assert(b);
    
    for (i=0;i!=len;++i)
        printf("%-4d",b[i]);
        
    puts("");
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-04-03 13:33
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:10 
int main()
{
    int n;//需要输入的随机种子个数
    int i;//计次变量
    int a=0,b=0;//取奇数的计次变量
    int temp;//用一个中间变量来得到奇数
    int j,k;//用于排序的计次变量
    int pritcount;//打印计次变量
    int num[1024];//用来存储生成的随机数数据
    int oddnum[1024];//用来存存奇数数组

    srand((int)time(0));//设置随机种子
    scanf("%d",&n);//要几个数就输入几个
    for(i=0;i<n;i++)
    {
       num[i]=rand()%100; //生成随机数
    }
    //接下来去掉偶数,取奇数
    while(a<i)
    {
        if(num[a]%2!=0)
        {
            temp=num[a];
            oddnum[b]=temp;
            b++;
        }
        a++;
    }
    //下面是进行排序
    for(j=0;j<b;j++)
    {
        for(k=0;k<b-1;k++)
        {
           if(oddnum[k]<oddnum[k+1])
            {
                temp=oddnum[k];
                oddnum[k]=oddnum[k+1];
                oddnum[k+1]=temp;
              }
        }
    }
//打印
    for(pritcount=0;pritcount<b;pritcount++)
    {
        printf("%d ",oddnum[pritcount]);
    }
    printf("\n");
    return 0;
}
代码仅供参考。生成的随机数会有两个或以上的相同数字。
需要高效率代码 等九转星河版主回贴!!

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2018-04-03 14:21
想带上你私奔
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2018-4-3
收藏
得分:0 
回复 4楼 九转星河
非常感谢
2018-04-03 14:58
想带上你私奔
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2018-4-3
收藏
得分:0 
回复 5楼 lanke711
非常感谢
2018-04-03 14:58
想带上你私奔
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2018-4-3
收藏
得分:0 
回复 5楼 lanke711
你的srand,time,rand好像还没定义啊
2018-04-03 15:03
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
以下是引用lanke711在2018-4-3 14:21:37的发言:

代码仅供参考。生成的随机数会有两个或以上的相同数字。
需要高效率代码 等九转星河版主回贴!!


这个代码小数据效率算高了,而且容易理解可以了
其实小数据高效不高效没啥区别~
我就是按照模块化整理(我知道刚刚接触的不明白也正常,就是自己已经有了这种封装模式的习惯了),当然细节虽然说优化与不优化区别不大,但从细处着手用心的习惯还是很重要的(毕竟一旦养成习惯要改就比较困难了)

以前我写的代码通常和xzlxzlxzl大神那种简洁形式的,那样看上去"高效",短代码有时的确高效,但这里有个误区就是简短的代码必然"高效",自从接触了链表后用链表写起来代码难以"高效"了,所以我发现了其实把每一个实现模块写好这个比较重要,程序除了效率问题通常还涉及到可读性可维护性以及可移植性,也就是说还要考虑对代码功能进行方便拓展与维护,今天上课才说到编程模块化思想,大意就是说模块尽量保持每个功能独立,例如这方面renkejun1942的代码就让我印象深刻了~

当然并不是写个简单的小代码都一定写得那种专业化(其实再正式一点还要实现接口分离也就是说实现文件和main分开),也就是说简单过得去就好了,例如rjsp的代码简洁就算没有注释但也容易理解,能实现相应的功能就可以了~


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-04-03 16:43
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:0 
回复 8楼 想带上你私奔
不好意思。因为时间的关系。草草写完。
头文件是
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
加上去就可以了。

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2018-04-03 19:16
快速回复:C语言问题请指教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017257 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved