助教:c/c++——数组元素奇偶排列:由此引发对if和while语句的简单问题的思考

问题描述:

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语句也是我们在一开始学习程序语言时就会用到的基本的语句,但是在程序中千万不能混淆它们。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值