编写函数voidfun(int*x,intn),功能是:求出长度为n的数组x中的最大数与次最大数

编写函数voidfun(int*x,intn),功能是:求出长度为n的数组x中的最大数与次最大数,并把最大数和a[0]对调,次最大数与a[1]对调,其余的数保持不变.下面程序运行时若输入:2 4 6 1 3 9 7 0 5 8,则输出:9 8 6 1 3 2 7 0 5 4。 #include

#define N 10 void fun(int *x,int n) { } int main() {int a[N],i; for(i=0;i<N;i++) scanf("%d",a+i); fun(a,N); for(i=0;i<N;i++) printf("%d ",a[i]); printf("\n"); return 0; } 求完整void fun(int *x,int n)程序。谢谢

void fun(int *x,int n)
{
int max=*x; /*定义个最大*/
int index1,index2;/*最大和次最大索引号*/
int a; /*交换时空间*/
int max2; /*次大*/
for(i=1;i<=n;i++)
if(max<(*(x+i))) /*从第一个开始往后比较,最终max存着最大值*/
max=*(x+i);
for(i=0;i<=n;i++)
while(max==*(x+i)) /*找到最大值是对应的后,把索引取出来*/
index1=i-1;
a=*x;
*x=*(x+index);
*(x+index)=a;
max2=*(x+1); //现在第一位已经是最大了,从第二位再重复一次
for(i=2;i<=n;i++)
if(max2<(*(x+i)))
max2=*(x+i);
for(i=0;i<=n;i++)
while(max2==*(x+i))
index2=i-1;
a=*(x+1);
*(x+1)=*(x+index2);
*(x+index2)=a;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-28
#include<stdio.h>

#define N 10
void fun(int *x,int n)
{
int i,j,k,temp;
for(i = 0 ; i < 2 ; i ++) //利用选择排序进行两次比较就行了,因为我们只需改变前边两个数a[0],a[1]的值
{
k = i;
for(j = i + 1 ; j < n ; j ++)
if(*(x + k) < *(x + j)) //这句代码等同于 if(a[k] < a[j])
k = j;
if(k != i)
{ temp = *(x+k);*(x+k) = *(x+i);*(x+i)=temp; }
}
}

int main()
{
int a[N],i;
for(i=0;i<N;i++)
scanf("%d",a+i);
fun(a,N);
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}

//不知道这样是否达到了你的要求本回答被提问者采纳
第2个回答  2013-12-28
下面是完整的代码,我写得时候可能会多写一些变量什么的,你可以做个简单的优化,让程序更加简洁一点。还有,下次发代码的时候记得分行,不然别人不容易看的

#include<stdio.h>

#define N 10
void fun(int *x,int n)
{
int j,temp,mark1=x[0];
for(int i=0;i<n;i++)
{
if(mark1<=x[i])
{ mark1=x[i]; j=i;}
}
temp=x[0];x[0]=x[j];x[j]=temp;
int mark2=x[1];
for(int k=1;k<n;k++)
{
if(mark2<=x[k])
{mark2=x[k];j=k;}
}
temp=x[1];x[1]=x[j];x[j]=temp;

}
int main()
{
printf("请输入10个数字,以空格隔开");
int a[N],i;
for(i=0;i<N;i++)
scanf("%d",a+i);
fun(a,N);
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}

编写函数voidfun(int*x,intn),功能是:求出长度为n的数组x中的最大数...
int max=*x; \/*定义个最大*\/ int index1,index2;\/*最大和次最大索引号*\/ int a; \/*交换时空间*\/ int max2; \/*次大*\/ for(i=1;i<=n;i++)if(max<(*(x+i))) \/*从第一个开始往后比较,最终max存着最大值*\/ max=*(x+i);for(i=0;i<=n;i++)while(max==*...

编写函数void fun(int *x,int n)
void fun(int *x, int n){ if (n <= 0)return;else if (n == 1){ cout << x[0] << endl;return;} else if (n == 2){ if (x[0] < x[1])cout << x[1] << " " << x[0] << endl;return;} int max1 = x[0], max2 = x[0];int t, j = 0, k = ...

编写函数void fun(int *x,int n)
设置两个标志位,分别用于记录最大者和次大者,然后对数组遍历,遍历结束之后根据这两个标志位分别和a[0]、a[1]交换

编写函数fun,其功能是求出形参xyz中最大值
printf("这个fun()函数的功能就是计算a+b的值。c=%d\\n",c);} C\/C++语言中,fun函数通常被主函数所调用。用fun来定义一个函数(或方法),这样在引用时可以用fun表示。比如int fun(int x,int y),void fun(char* a,char* b) 等等。有先前的定义,就可以在主函数里调用它,比如ans=fun(...

⑵ 请编写一个函数fun,它的功能是:找出一维整型数组元素中最大的值和...
void fun(int a[], int n, int *max, int *d ){ int i;for(i=0,*max=0,*d=0;i<n;i++){ if( a[i] > *max ) *max=a[i],*d=i;} }

求C++高手!!!
3.请编写函数void fun(int x,int pp[],int *n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。 例如,若x中的值为30,则有4个数符合要求,它们是1,3,5,15。***4.请编写一个函数void fun(char *tt,int pp[]),统计在tt字符串中...

求出数组中最大数和次最大数
功能:求出a所指数组中最大数和次最大数(规定最大数和次最大 数不在a[0]和a[1]中),依次和a[0]、a[1]中的数对调.例如:数组中原有的数:7、10、12、0、3、6、9、11、5、8,输出的结果为:12、11、7、0、3、6、9、10、5、8.---*\/ include include define N 20 int fun ( ...

编写函数int fun(int *x,int n,float *w)
int fun(int *x,int n,float *w){ int i,j;float sum;for(i=0;i<n\/5;i++){ sum=0;for(j=0;j<4;j++){ sum+=x[j];w=(float)sum\/5;w++;} } } 差不多就这样了

编写函数fun,函数原型为:int fun(int x)。他的功能是:求小于形参n能同 ...
include<stdio.h> include<stdlib.h> include<math.h> double fun(int n){ int sum = 0;for(int i = 1; i < n; i++){ if(i % 3 == 0 && i % 7 == 0)sum += i;} return sqrt((double)sum);}

2011年全国计算机等级考试2级C语言机试题库
给定程序MODI1.C中函数fun的功能是:在字符串的最前端加入n个*号,形成新串,差且覆盖原串。注意:字符串的长度最长允许为79.void fun(char s[ ],int n){char a[80],*p;int i;\/***found***\/p=s;for(i=0;i<n;i++)a[i]='*';do{a[i]=*p;i++;}\/***found***\/while(*p++)a[i]=0;...

相似回答