问题描述:
1、定义一个整型一维数组,任意输入数组的元素,其中包含奇数和偶数。
2、定义一个函数,实现将数组元素奇数排列在左,偶数在右的排列。
3、在上述定义的函数中,不允许再增加新的数组。
4、从主函数中分别调用上述函数,打印输出结果。
个人观点:
在本程序中,用到while循环,而教材上用的是if判断语句,依照教材上的程序,将不能得到正确的结果。
while和if的区别:if用于判断和分支语句,而while用于循环。
为了证明:在ArrsortW函数用while语句
在ArrsortI函数中用if语句。
源程序如下:
#include<stdio.h>
#define N 10
void ArrsortW(int a[],int n);
void ArrsortI(int a[],int n);
int main()
{
int a[N]={5,16,22,24,26,111,3,52,44,18};
int b[N]={5,18,23,24,26,111,3,50,43,17};
int i;
//for(i=0;i<N;i++)
// scanf("%d",&a[i]);
printf("输出还没有奇偶分组的a[N]:");
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n\n");
ArrsortW(a,N);//while循环一定可以得到正确结果
printf("a[N]调用ArrsortW函数:");
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n\n");
ArrsortI(a,N);//if语句,不能得到正确结果
printf("a[N]调用ArrsortI函数:");
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n\n");
printf("输出还没有奇偶分组的b[N]:");
for(i=0;i<N;i++)
printf("%d ",b[i]);
printf("\n\n");
ArrsortW(b,N);
printf("b[N]调用ArrsortW函数:");
for(i=0;i<N;i++)
printf("%d ",b[i]);
printf("\n\n");
ArrsortI(b,N);
printf("b[N]调用ArrsortI函数:");
for(i=0;i<N;i++)
printf("%d ",b[i]);
printf("\n\n");
}
void ArrsortW(int a[],int n)
{
int *p,*q,temp;
p=a;q=a+n-1;
while(p<q)//这里必须用到while循环,用if语句的话只会进行判断,而不会循环。
{
while(*q%2==0)//用while,进行循环
q--;//q向前移动,直到遇到奇数
while(*p%2!=0)//用while,进行循环
p++;//p向后移动,直到遇到偶数
if(p<q)
{
temp=*p;
*p=*q;
*q=temp;
}
p++;
q--;
}
}
void ArrsortI(int a[],int n)
{
int *p,*q,temp;
p=a;q=a+n-1;
if(p<q)//用if,只判断一次,不循环。
{
if(*q%2==0) //用if,只判断一次,不循环。
q--;
if(*p%2!=0) //用if,只判断一次,不循环。
p++;
if(p<q)
{
temp=*p;
*p=*q;
*q=temp;
}
p++;
q--;
}
}
运行结果如下:
结论:调用ArrsortW函数的两个数组都能得到我们想要的结果。
而调用ArrsortI函数,不能得到我们想要的结果。
本程序并不难,而且if和while语句也是我们在一开始学习程序语言时就会用到的基本的语句,但是在程序中千万不能混淆它们。