void main()
{
int a[20]
int b[20]
int i,j,k
printf("输入二十个数:\n")
for(i=0,j=0i<=19i++)
{
scanf("%d",&a[i])
if(0!=a[i]%2)
{
b[j]=a[i]
j++
}
}
for(i=0,k=ji<=19i++)
{
if(0==a[i]%2)
{
b[k]=a[i]
k++
}
}
for(i=0i<=19i++)
printf("%d ",b[i])
printf("\n")
} 有疑问提出。
c语言判断一个数是奇数还是偶数的方法有两种具体如下。
1、一般是直接将输入的数字用2取余,如果为零则为偶数,反之则是奇数。
详细代码如下:
#include<stdio.h>int main(){
int mun
printf("请输入一个数:\n")
scanf("%d",&num)
if(num%2==0){
printf("%d是偶数!\n")
}else{
printf("%d是奇数!\n")
}
return 0
}
2、通过位运算来判断一个数是不是奇数或者偶数。
详细代码如下:
#include<stdio.h>int main(){
int mun
printf("请输入一个数:\n")
scanf("%d",&num)
if((num&1)==0){
printf("%d是偶数!\n")
}else{
printf("%d是奇数!\n")
}
return 0
}
你那个程序逻辑太混乱, 所以嵌套判断的时候,把自己也给绕进去了,其实就应该是a数组,两个变量i, j,i 对应奇数,j对应偶数,i从头,j从尾相向而行, 一偶一奇时,互换位置;否则偶数i++,奇数j--(继续相向而行),代码修改如下:void assort(int a[], const unsigned int n)
{
int i, j, t
i = 0
j = n-1
while (i<j)
{
if (a[i]%2 == 0 &&a[j]%2 != 0)
{
t = a[i]
a[i] = a[j]
a[j] = t
j--
i++
}
else if (a[j]%2 == 0)
j--
else if (a[i]%2 !=0)
i++
}
}
把接口稍微修改了一下,用了const unsigned int, 以表示n是不能变的;
其实你完全可以用C的标准库函数qsort, 自己写的compare函数调整一下即可。 如下:
int compare (const void * a, const void * b)
{
if ( (*(int*)a % 2 == 0) &&(*(int*)b % 2 != 0) )
return 1
if ( (*(int*)a % 2 != 0) &&(*(int*)b % 2 == 0) )
return -1
else
return ( *(int*)a - *(int*)b )
}
测试例子:
int main(int argc, char *argv[])
{
int data[] = {10, 8, 7, 6, 5, 2, 4, 3, 1, 9}
size_t data_len
int i
data_len = sizeof(data)/sizeof(data[0])
qsort (data, data_len, sizeof(int), compare)
for (i=0i<data_leni++)
printf ("%d ",data[i])
return 0
}
输出:完全奇偶分开并且升序排序的结果:
1 3 5 7 9 2 4 6 8 10