C语言问题 急!!!!

有一数组(maxsize=100)将数组中元素重新排列,要求奇数在前,偶数在后并且奇数递增,偶数递减... 有一数组(maxsize=100)将数组中元素重新排列,要求奇数在前,偶数在后
并且奇数递增,偶数递减
展开
 我来答
qicaiwuya
2011-11-18 · TA获得超过4211个赞
知道小有建树答主
回答量:1462
采纳率:100%
帮助的人:1203万
展开全部
#include "time.h"
#include "stdlib.h"
#include "stdio.h"
#define MAXSIZE 100

int k=0,j=0;/*丁两个全局变量,分别表示qishu数组的大小和oushu数组的大小,这两个值只在在fenli函数中被改变,改变后的值只被主函数使用*/

/*函数声明部分*/
void fenli(int arr1[],int arr2[],int arr3[],int n);
int isoushu(int i);
int isjishu(int i);
void ascsort(int arr[],int n);
void dessort(int arr[],int n);

void main()
{
int jishu[MAXSIZE],oushu[MAXSIZE],yuanshu[MAXSIZE];/*定义三个数组存放奇数,偶数和原来的数*/
int i;
srand(time(NULL)); /*置随机数种子*/
for(i=0;i<MAXSIZE;i++)
yuanshu[i]=rand()%100+1;/*使用随机数函数,将数组中的一百个元素填满,每个元素的值在1~100之间*/
fenli(jishu,oushu,yuanshu,MAXSIZE);/*调用自定义的feni函数,将原数组按照奇偶数分离*/
ascsort(jishu,k);/*调用ascsort函数对奇数数组进行递增排序*/
dessort(oushu,j);/*调用dessort函数对偶数数组进行递减排序*/
printf("\n原数组为:\n");
for(i=0;i<MAXSIZE;i++)/*打印原数组*/
printf("%3d ",yuanshu[i]);
printf("\n排序后的数组为:");
printf("\n奇数:\n");
for(i=0;i<k;i++)/*打印原数组*/
printf("%3d ",jishu[i]);
printf("\n偶数:\n");
for(i=0;i<j;i++)/*打印原数组*/
printf("%3d ",oushu[i]);
}

void fenli(int arr1[],int arr2[],int arr3[],int n)
{
/*定义fenli函数,用语将数组arr3中的奇数和偶数分开,分别放在arr1和arr2中*/
/*参数:int n表示原数组arr1中元素个数*/
int i;
for(i=0;i<n;i++)
if(isjishu(arr3[i]))arr1[k++]=arr3[i];
else if(isoushu(arr3[i]))arr2[j++]=arr3[i];
}

int isoushu(int i)
{
/*定义isoushu函数用来判断数值是否为偶数*/
if(i%2==0)return 1;/*如果是偶数,返回1,即真*/
else return 0;/*如果是奇数,返回0,即假*/
}

int isjishu(int i)
{
/*定义isjishu函数用来判断数值是否为奇数*/
if(i%2!=0)return 1;/*如果是奇数,返回1,即真*/
else return 0;/*如果是偶数,返回0,即假*/
}

void ascsort(int arr[],int n)
{
/*定义ascsort函数对数组递增排序;使用选择法排序*/
/*参数:第一个参数传递待排序首元素地址,第二个参数传递数组的大小*/
int temp;
int i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(arr[i]>arr[j])
{
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}

}

void dessort(int arr[],int n)
{
/*定义dessort函数对数组递减排序;使用选择法排序*/
/*参数:第一个参数传递待排序首元素地址,第二个参数传递数组的大小*/
/*返回值: 无 */
int temp;
int i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(arr[i]<arr[j])
{
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
zero_fn
2011-11-18 · TA获得超过2258个赞
知道小有建树答主
回答量:1173
采纳率:80%
帮助的人:444万
展开全部
都是高手哦,我不用中间数组行不 ?
#include <stdio.h>
#define MAX 19 //数组最大长度

#define ASC 0 //升序
#define DES 1 //降序

int arr[MAX];
int IS_ODD(int x)
{
if(x%2 == 0) return 0;
return 1;
}
int sort(int start ,int end, int mode)
{
int i ,j,tmp;
for(i =start;i<= end;i++)
for(j =i+1;j<= end;j++)
{
if(mode == ASC)
{
if(arr[j] < arr[i])
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
else
{
if(arr[j] > arr[i])
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}

int main(int argc, char *argv[])
{
int odd ,even,tmp;
for(tmp = 0; tmp < MAX; tmp++) //生成演示数组
arr[tmp] = tmp+2;

for(tmp = 0; tmp < MAX; tmp++) //显示演示数组
printf("%d ",arr[tmp]);
printf("\n 以上是初始数组 \n\n");
odd = 0; //奇数下标,分类后指向第一个偶数
even = MAX -1; //偶数下标,分类后指向最后一个奇数
while(odd <= even)
{
if(!IS_ODD(arr[odd])) //arr[i] 是偶数
{
tmp = arr[odd];
if(!IS_ODD(arr[even])) //arr[j] 是偶数
even--;
else
{
arr[odd] = arr[even];
arr[even] = tmp;
even--;
odd++;
}
}
else
odd++;
}

for(tmp = 0; tmp < MAX; tmp++)
printf("%d ",arr[tmp]);
printf("\n 以上是分完奇偶后的数组 \n\n");

sort(0,even,ASC);
for(tmp = 0; tmp < MAX; tmp++)
printf("%d ",arr[tmp]);
printf("\n 以上是排完奇数的数组 \n\n");

sort(odd,MAX-1,DES);
for(tmp = 0; tmp < MAX; tmp++)
printf("%d ",arr[tmp]);
printf("\n 以上是排完偶数的最终数组 \n\n");
system("PAUSE");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沧海雄风2009
2011-11-18 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8525
采纳率:79%
帮助的人:2754万
展开全部
排后:
1 1 3 5 5 7 7 9 11 11 15 15 17 17 19 23 31 31 31 35 43 45 45 49 49 51 5
1 53 57 59 63 65 69 71 75 75 77 79 81 81 83 85 87 87 93 97 98 98 94 92 90 86 84
84 84 76 74 72 72 72 70 68 62 60 60 58 58 54 52 48 44 44 42 42 40 40 40 38 38 38
36 34 34 30 30 30 28 28 26 22 16 14 10 10 10 6 6 4 4 0Press any key to con
tinue
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define maxsize 100
main()
{
int i,j,k,tmp,ous=0,jis=0,arr[100],ou[100],ji[100];
srand((unsigned)time(NULL));
///生成一组0-99的随机数根据奇偶存入两个数组
for (i=0,j=0,k=0;i<maxsize;i++)
{
arr[i] = rand()%100;
if (arr[i]%2==0)
{
ou[j++] = arr[i];
ous++;
}
if (arr[i]%2!=0)
{
ji[k++] = arr[i];
jis++;
}
}
//奇数升序排序
for (i=0;i<jis-1;i++)
{
for (j=0;j<jis-i-1;j++)
{
if (ji[j]>ji[j+1])
{
tmp = ji[j];
ji[j] = ji[j+1];
ji[j+1] = tmp;
}
}
}
//偶数降序排序
for (i=0;i<ous-1;i++)
{
for (j=0;j<ous-i-1;j++)
{
if (ou[j]<ou[j+1])
{
tmp = ou[j];
ou[j] = ou[j+1];
ou[j+1] = tmp;
}
}
}
//将排序后的两个数组存入一个数组内并输出
printf("排后:\n");
for (i=0,j=0;i<jis;i++)
{
arr[j] = ji[i];
printf("arr[%d]=%2d ",j,arr[j++]);
}
for (i=0;i<ous;i++)
{
arr[j] = ou[i];
printf("arr[%d]=%2d ",j,arr[j++]);
}
}
有问题请追问 满意记得采纳
我的思路
首先 将输入(我的是用随机函数生成的)的100个数字按照奇偶分别存入两个数组
然后两个数组分别排序
最后把排序过后的存入同一个数组就好了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
biosorry
2011-11-18 · TA获得超过7074个赞
知道大有可为答主
回答量:2546
采纳率:78%
帮助的人:790万
展开全部
#include "stdio.h"
#define N 100
void smalltobig(int n,int a[])
{
int i,j,t;
for(i=0;i<n-1; i++)
{
for(j=0;j<n-i-1; j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}

}
void bigtosmall(int n,int a[])
{
int i,j,t;
for(i=0;i<n-1; i++)
{
for(j=0;j<n-i-1; j++)
{
if(a[j]<a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}

}
void disp(int n,int a[])
{
for(int i=0;i<n;i++)
printf("%d\t",a[i]);
printf("\n");
}
void main()
{
int a[N],b[N],c[N],n,i;
int x=0,y=0;
printf("How many numbers you want to input?");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Please input number %d:",i+1);
scanf("%d",&a[i]);
if(a[i]%2==1)
b[x++]=a[i];
else
c[y++]=a[i];
}
printf("Before treatment:");
disp(n,a);
smalltobig(x,b);
bigtosmall(y,c);
for(i=0;i<x;i++)
a[i]=b[i];
for(i=0;i<y;i++)
a[x+i]=c[i];
printf("After treatment:");
disp(n,a);
}
追问
我是初学   能不能简化下
追答
已经很简化了,思路如下:
1、输入要处理的数组元素a[]
2、把数组中的计数与偶数分别存储到不同数组里b[],c[]
3、两个数组分别排序
4、排序后的数组再存到原先数组a[]中
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式