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编辑过]
#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(""); }