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编辑过]
[此贴子已经被作者于2018-4-3 11:03编辑过]
2018-04-03 10:51
2018-04-03 11:45

2018-04-03 11:57
~
程序代码:
#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("");
}

2018-04-03 13:33


2018-04-03 14:21
2018-04-03 14:58
2018-04-03 14:58
2018-04-03 15:03



~
),当然细节虽然说优化与不优化区别不大,但从细处着手用心的习惯还是很重要的(毕竟一旦养成习惯要改就比较困难了
)
~
2018-04-03 16:43

2018-04-03 19:16