c语言输入n个数 ,然后奇数按照升序排列,偶数按降序排列

作者&投稿:系竹 (若有异议请与网页底部的电邮联系)
C语言问题,输入n及n个整数,然后按基数升序,偶数降幂排列输出,我的运行不出来,帮我找错或者给我一~

//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
#include "stdlib.h"
int main(void){
int n,x[20],i,j,k;
while(1){
printf("Input n(int n<=20)...
");
if(scanf("%d",&n),n==0)
break;
for(i=0;i<n;scanf("%d",x+i++));
printf("
After sorting as follows:
");
for(i=0;i<n;i++){
for(k=i,j=k+1;j<n;j++)
if(x[k]>x[j]) k=j;
if(k!=i){
j=x[k];
x[k]=x[i];
x[i]=j;
}
printf(i<n-1 ? "%d " : "%d
",x[i]);
}
}
return 0;
}

#include
#include


int main(void)
{
int n,j=0,k=0,t,m,i;
printf("请输入你要处理的数据的个数:");
scanf("%d",&n);

int *a,*js,*os;
a = (int*)malloc(sizeof(int)*n);//动态分配数组a的空间
js = (int*)malloc(sizeof(int)*n);
os = (int*)malloc(sizeof(int)*n);

for (i=0;i<n;i++) //从键盘输入N个数字,分为奇数和偶数
{
scanf("%d",&a[i]);
if (a[i]%2 == 0)
{
os[j]=a[i];
j++;
}
else
{
js[k]=a[i];
k++;
}
}
for (m=1;m<j;m++)//对偶数降序排列
{
for (i=0;i<j-1;i++)
if (os[i]<os[i+1])
{
t=os[i];
os[i]=os[i+1];
os[i+1]=t;
}
}
for (m=1;m<k;m++)//对奇数升序排列
{
for (i=0;i<k-1;i++)
if (js[i]>js[i+1])
{
t=js[i];
js[i]=js[i+1];
js[i+1]=t;
}

}
printf("输出奇数:");
for (i=0;i<k;i++)
printf("%d",js[i]);

printf("
");

printf("输出偶数:");
for (i=0;i<j;i++)
printf("%d",os[i]);

free(a);//释放刚分配a的内存
free(os);;
free(js);;
system("pause");
return 0;

}

由于n不确定,故选择链表存储输入数据,这里选用一个无头结点的链表。编写创建链表、释放链表、排序三个函数,在主函数中调用这些函数来完成。代码如下:

//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#include "stdlib.h"
typedef struct node{
    int n;
    struct node *next;
}*NODE,node;
void freenode(NODE p){//释放链表
    if(p->next) freenode(p->next);
    free(p);
}
NODE CreateLink(void){//创建链表
    int x;
    NODE head,p;
    if((p=head=(NODE)malloc(sizeof(node)))==NULL){//创建头结点
        printf("Establish a head node failure...");
        return NULL;
    }
    printf("Input some data(non-numeric end)...
");
    while(scanf("%d",&x)==1){
        if((p->next=(NODE)malloc(sizeof(node)))==NULL){
            printf("Failed to create node...");
            freenode(head);
            return NULL;
        }
        p->next->n=x;
        p=p->next;
    }
    p->next=NULL;
    p=head;//删除头结点
    head=head->next;
    free(p);
    return head;
}
void mysort(NODE p){//奇数升排偶数降排
    NODE p1,p2;
    for(;p;p=p->next){
        for(p1=p,p2=p1->next;p2;p2=p2->next)
            if(p->n&1 && p2->n&1 && p1->n>p2->n)
                p1=p2;
            else if(!(p->n&1) && !(p2->n&1) && p1->n<p2->n)
                p1=p2;
        if(p1!=p){
            p1->n^=p->n;
            p->n^=p1->n;
            p1->n^=p->n;
        }
    }
}
int main(void){
    NODE head=CreateLink(),p;
    mysort(head);//按要求排序
    for(p=head;p;p=p->next)//打出来看看
        printf("%d ",p->n);
    freenode(head);
    printf("
");
    return 0;
}


用链表进行在线式排序的方法——最快、最有效率的排序方法,比楼上的冒泡排序快好几个数量级,楼上限100个数据,我的程序不限数据量(理论上可达2G个数据进行排序)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct LINK {
int n;
struct LINK * next;
};
typedef struct LINK LNK;
typedef struct LINK * PLNK;
#define szLNK sizeof(struct LINK)

void print(PLNK x)
{
PLNK y = x;
while(y) {
printf("%d ", y->n );
y = y->next;
}
printf("\n");
}

int existed(PLNK root, int m)
{
PLNK y = root;
while(y) {
if (y->n == m) return 1;
y = y->next;
}
return 0;
}

PLNK insert(PLNK root, int m, int (*cmp)(int, int))
{
if(existed(root, m)) return root;

PLNK x = (PLNK)malloc(szLNK);
memset(x, 0, szLNK);
x->n = m;
if (!root) return x;
PLNK y = root;
if (cmp(m, y->n)) {
x->next = y;
return x;
}
while(y) {
if (cmp(m, y->n)) {
x->next = y->next;
y->next = x;
return root;
}
if (!y->next) break;
y = y->next;
}
y->next = x;
return root;
}

int greater(int a, int b) { return a>b; }
int smaller(int a, int b) { return a<b; }

int main(void)
{
PLNK odd = 0; PLNK even = 0; int m = 0;
do {
printf("请输入数据,输入0结束.\n");
scanf("%d", &m);
if (m % 2)
odd = insert(odd, m, &smaller);
else
even =insert(even, m, &greater);
}while(m);
printf("奇数序列:"); print(odd);
printf("偶数序列:"); print(even);
return 0;
}

#include<stdio.h>
#define MAX 100

void swap(int*a,int*b)
{
int t=*a;
*a=*b;
*b=t;
}

int main()
{
int i,j;
int a[MAX];
int n;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
for(j=i;j<n;j++){
if(a[i]%2==0&&a[j]%2==0)
if(a[i]<a[j])swap(&a[i],&a[j]);
if(a[i]%2!=0&&a[j]%2!=0)
if(a[i]>a[j])swap(&a[i],&a[j]);
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}

写个if条件句然后用冒泡排序
希望能帮到你


平罗县18648001407: c语言输入n个数 ,然后奇数按照升序排列,偶数按降序排列 -
歹种香丹: 由于n不确定,故选择链表存储输入数据,这里选用一个无头结点的链表.编写创建链表、释放链表、排序三个函数,在主函数中调用这些函数来完成.代码如下: //#include "stdafx.h"//If the vc++6.0, with this line. #include "stdio.h" #include ...

平罗县18648001407: c语言从键盘上输入N个整数保存在数组中,用选择法排序将其按升序排列并将结果显示 -
歹种香丹: #include <stdio.h> #include<stdlib.h> #define N 10 void main() { int i,j,temp; int *a=(int *)malloc(sizeof(int)*N);//因为你的N我不知道好大,所以就是这样定义数组. for(i=0;i<N;i++) { scanf("%d",&a[i]); } for(i=0; i<N-1; i++) {for(j=i+1; j<N; j++){if(...

平罗县18648001407: 汇编语言,找出数组中所有奇数,并按升序排序 -
歹种香丹: C语言回答版 #include<stdio.h> int main(void) { int array[2000]; int number[2000]; int i, j, k, n, count, index; count = 0; k = 0;//k为数组number下标 printf( "input n:\n" );//你要输入数的个数 scanf( "%d", &n ); printf( "输入n个数:\n" ); for( i =...

平罗县18648001407: 在C语言中,按升序输入10个数字,然后任意插入一个数字,按照升序排列,急求、、、最简单的、、
歹种香丹: #include <stdio.h> void main() { int a[11],i,x; printf("升序输入10个数:"); for(i=0;i<10;i++) scanf("%d",&a[i]); printf("输入一个数:"); scanf("%d",&x); for(i=9;i>=0&&a[i]>x;i--) a[i+1]=a[i]; a[i+1]=x; for(i=0;i<11;i++) printf("%d ",a[i]); printf("\n"); }

平罗县18648001407: 帮我看个c语言编程:输入10个整数,将这10个整数按升序排列输出,并且奇数在前,偶数在后. -
歹种香丹: #include "stdafx.h" void main() {int t[10],i,n,a=0,b=9,k,m,j,o,p,q;for(i=0;i<10;i++) {printf("请输入一个数");scanf("%d",&n);if(n%2!=0){t[a]=n;a++;}else{t[b]=n;b--;}}for (i=0;i<a;i++){k=i;for(j=i+1;j<a;j++)if(t[k]>t[j])k=j;if(k!=i)...

平罗县18648001407: C语言 输入n并输入n个数,输出这n个数中的所有奇数的乘积 -
歹种香丹: #include void main() { int i,n,arr[100],mul=1; printf("请输入n值:"); scanf("%d",&n); for(i=0;i{ scanf("%d",arr[i]); if(arr[i]%2!=0) { mul*=arr[i]; } } printf("%d",mul); }

平罗县18648001407: 十个数奇数升序排列偶数降序排列,用C语言程序表示 -
歹种香丹: #include <stdio.h>void change(int num[],int a,int b,int n) { int *num1=new int[a]; int *num2=new int[b]; int i; int j; int temp; a=b=0; for(i=0;i<n;i++) { if(num[i]%2==0) { num2[b]=num[i];//把偶数装进num2中 b++; } else { num1[a]=num[i];//把奇数装进...

平罗县18648001407: 用C语言编程1.任意输入10个整数,并按升序分别输出其中的偶数序列与奇数序列. 自己编译了一个.但有错误.麻烦帮忙重新编译一个吧.谢谢了 -
歹种香丹: printf("%d%c",a[i],((i+1)%5==0||i==N-1)?'\n':' ' );//错误地方 最后那个符号 '' 空一格 ' '

平罗县18648001407: C语言,输入一个整数n,然后输入n个数,计算并输出n个数中奇数之和 -
歹种香丹: 1.编译不通过 数组定义时,不能使用变量,即使变量已赋值,所以int a[n];是错的 解决方法,你可以直接定义一个大的数组,比如 int a[100],然后再用n限制输入的个数 2.数组下标是从0~n-1,所以你的for(i=1;i<=n;i++)是错的 应该是for(i=0;...

平罗县18648001407: C语言输入n个数如何按从大到小输出 -
歹种香丹: # include <stdio.h> # define N 10 /*N为输入的数字个数*/ main() {int i,m,j;int a[N];printf("please input the numbles:\n");for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=0;i<N;i++)for(j=i+1;j<N;j++)if(a[i]<a[j]){ m=a[i]; a[i]=a[j];a[j]=m;}for(i=0;i<N;i++)printf("%d ",a[i]);getch(); }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网