关于C语言的问题,主要问题已加注释,谢谢!
/*(3)函数fun的功能是:把形参a所指数组中的最大值放在a[0]中,接着求出a所指数组中的最小值放在a[1]中;再把a所指数组元素中的次大值放在a[2]中,把a数组元...
/*(3)函数fun的功能是:把形参a所指数组中的最大值放在a[0]中,接着求出a所指数组中的最小值放在a[1]
中;再把a所指数组元素中的次大值放在a[2]中,把a数组元素中的次小值放在a[3]中;其余以此类推。例如:
若所指数组中的数据最初排列为:1、4、2、3、9、6、5、8、7,则按规则移动后,数据排列为:9、1、8、2、
7、3、6、4、5。形参n中存放a所指数组中数据的个数。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
*/
#include <stdio.h>
#define N 9
void fun(int *a,int n)
{
int i,j,max,min,px,pd,t;
for(i=0;i<n-1;i+=2)
{
px=i;
pd=i;
max=min=a[i];
for(j=i+1;j<n;j++)
{
if(a[j]>max)
{max=a[j];px=j;}
if(a[j]<min)
{min=a[j];pd=j;}
}
/* t=a[i];a[i]=max;a[px]=t;
t=a[i+1];a[i+1]=min;a[pd]=t;*/
if (px != i)
{
t=a[i];
a[i]=max;
a[px]=t;
if (pd == i) pd= px; //这句话有什么用
}
if (pd != i+1)
{
t=a[i+1];
a[i+1]=min;
a[pd]=t; //这句话有什么用
}
}
第二条注释的问题我知道,加错地方了,主要是这个if (pd == i) pd= px; //这句话有什么用 展开
中;再把a所指数组元素中的次大值放在a[2]中,把a数组元素中的次小值放在a[3]中;其余以此类推。例如:
若所指数组中的数据最初排列为:1、4、2、3、9、6、5、8、7,则按规则移动后,数据排列为:9、1、8、2、
7、3、6、4、5。形参n中存放a所指数组中数据的个数。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
*/
#include <stdio.h>
#define N 9
void fun(int *a,int n)
{
int i,j,max,min,px,pd,t;
for(i=0;i<n-1;i+=2)
{
px=i;
pd=i;
max=min=a[i];
for(j=i+1;j<n;j++)
{
if(a[j]>max)
{max=a[j];px=j;}
if(a[j]<min)
{min=a[j];pd=j;}
}
/* t=a[i];a[i]=max;a[px]=t;
t=a[i+1];a[i+1]=min;a[pd]=t;*/
if (px != i)
{
t=a[i];
a[i]=max;
a[px]=t;
if (pd == i) pd= px; //这句话有什么用
}
if (pd != i+1)
{
t=a[i+1];
a[i+1]=min;
a[pd]=t; //这句话有什么用
}
}
第二条注释的问题我知道,加错地方了,主要是这个if (pd == i) pd= px; //这句话有什么用 展开
展开全部
拿第一次循环,也就是i=0时来说:程序的思路,是从数组里找出一个最大值a[px]和一个最小值[pd],然后a[0]和a[px]交互位置,a[1]再和a[pd}交换位置。
那么问题来了,如果a[0]就是最小值,即a[0]=a[pd],也即pd=0:
那么最大值和a[0]交换位置后,a[0]就成了数组的最大值,a[pd]成为了此时的a[0],已经不是最小值了;
所以如果最小值是a[0],那么在最大值与a[0]交换完毕后,将与a[1]交换最小值的下标应从0变为px,即pd=px;
我尽可能讲得详细了
那么问题来了,如果a[0]就是最小值,即a[0]=a[pd],也即pd=0:
那么最大值和a[0]交换位置后,a[0]就成了数组的最大值,a[pd]成为了此时的a[0],已经不是最小值了;
所以如果最小值是a[0],那么在最大值与a[0]交换完毕后,将与a[1]交换最小值的下标应从0变为px,即pd=px;
我尽可能讲得详细了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询