解题思路以及注意事项:

  1. 主要得注意传参的问题,不要在自定义函数里面定义数组然后return到主函数,这是行不通的,因为自定义函数调用结束后,其中的数据会发生意想不到的结果。

  2. 交换值得用到第三者。

  3. 代码比较长,但还是挺简单的,一定要静下心来写代码。

实例代码:

#include"stdio.h"
void putin(int a[],int n);
void list(int a[],int n);
void putout(int a[],int n);
int main()
{
    int a[10];
    putin(a,10);
    list(a,10);
    putout(a,10);
    return 0;
}
void putin(int a[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
}
 
void list(int a[],int n)
{
    int i,max,min,maxi=0,maxj=0,trans1,trans2;
    max=a[0];
    min=a[0];
    for(i=1;i<n;i++)
    {
        if(a[i]<min)
        {
            min=a[i];
            maxi=i;
        }
        if(a[i]>max)
        {
            max=a[i];
            maxj=i;
        }    
    }    
    trans2=a[0];
    a[0]=min;
    a[maxi]=trans2;
    for(i=1;i<n;i++)
    {
        
        if(a[i]>max)
        {
            max=a[i];
            maxj=i;
        }  
    }
    trans1=a[9];
    a[9]=max;
    a[maxj]=trans1;

}
 
void putout(int a[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
           printf("%d ",a[i]);    
    }
}

看看大家还有什么问题,请在下方评论区留言,小方会在看到的第一时间为您解疑


点赞(16)
 

0.0分

34 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 70 条评论

迟迟 3年前 回复TA
@迟迟 错误50
迟迟 3年前 回复TA
希望大佬们看看我这个为什么错

#include<stdio.h> 
int putin(int a[]);
int list(int a[]);
int putout(int a[]);
int main()
{
    int a[10];
    putin(a);
    list(a);
    putout(a);
    return 0;
}
int putin(int a[])
{
    int i;
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    return 0;
}
  
int list(int a[])
{
	int i,j,t,min,max;
	min=a[0];
	max=a[0];
	for(i=1;i<10;i++)
	{
		if(min>a[i])
		{
			min=a[i];
		}
		if(max<a[i])
		{
			max=a[i];
		}
	}
	for(i=0;i<10;i++)
	{
		if(min==a[i])
			break;
	}
	for(j=0;j<10;j++)
	{
		if(max==a[j])
			break;
	}
	if(min!=a[0])
	{
		t=a[i];
		a[i]=a[0];
		a[0
花开回落 3年前 回复TA
#include<stdio.h>
void sum_1(int a[9])
{
    for(int b=0;b<10;b++){
        scanf("%d",&a[b]);
    }
}
void sum_2(int a[9])
{
    int max=a[0],min=a[0];
    int o,p;
    for(int b=0;b<10;b++){
       if(a[b]>max)
       {
           max=a[b];
           o=b;
       }
       if(a[b]<min)
       {
           min=a[b];
           p=b;
       }
    }
    a[o]=a[9];
    a[9]=max;
    a[p]=a[0];
    a[0]=min;
}
void sum_3(int a[9])
{
    for(int b=0;b<10;b++){
        printf("%d ",a[b]);
    }
}
int main()
{
    int a[9];
    sum_1(a);
    sum_2(a);
    sum_3(a);
    return 0;
}
极左与极右 3年前 回复TA
其实就是不要想着先挑出来最大值和最小值,一次交换成功
应该先找出来一个最大值或者最小值,交换一下位置,再遍历数组,找出另一个值,再交换位置,呼呼
可以测试下这组数据
10 9 8 7 6 5 1 2 3 4
如果没问题基本就可以了
Struggle 3年前 回复TA
各位大佬,不知道什么原因,报运行错误
#include<stdio.h>
void sr(int a[],int n);
void cl(int a[],int n);
void sc(int a[],int n);

int main()
{
	int a[10];
	sr(a,10);
	cl(a,10);
	sc(a,10);
	return 0;	
}
void sr(int a[],int n)
{
	int i;
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
}
void cl(int a[],int n)
{
	int min,max,i,k1,k2,t1,t2;
	min=a[0];
	max=a[0];
	for(i=0;i<n;i++){
		if(min>a[i]){
			min=a[i];
			k1=i;
		}
		if(max<a[i]){
			max=a[i];
			k2=i;
		}
	}
	if(a[0]!=min){
		t1=a[0];
	    a[0]=min;
	    a[k1]=t1;
	}
	if(a[n-1]!=max){
		t2=a[n-1];
		a[n-1]=max;
		a[k2]=t2;
	}
}
void sc(int a[],int n)
{
	int i;
	for
渐入佳境. 3年前 回复TA
max=a[0]; min=a[0];是从第一个数开始遍历的意思吗
4年前 回复TA
@风 修改后的
4年前 回复TA
@风 #include<stdio.h>    fun3(int a[])  {  	int i;  	  	for(i=0;i<10;i++)  	{ 	 	printf("%d ",a[i]); 	} 	  }    void fun2(int a[])  {  	int i,max=0,min=0,temp;  	  	for(i=1;i<10;i++)  	{ 		if(a[min]>a[i]) 		{ 			min=i;	 		} 	} 	 	temp=a[0]; 	a[0]=a[min]; 	a[min]=temp; 	 	for(i=1;i<10;i++) 	{ 		if(a[max]<a[i]) 		{ 			max=i; 		} 	} 	 	temp=a[9]; 	a[9]=a[max]; 	a[max]=temp; 	  }   void fun1(int a[]) { 	int i; 	 	for(i=0;i<10;i++) 	{ 		scanf("%d",&a[i]); 	} 	 }   int main(void) { 	int a[10]; 	 	fun1(a); 	 	fun2(a); 	 	fun3(a); 		     return 0; }
4年前 回复TA
@风 我知道了,没考虑特殊情况
4年前 回复TA
@风 这个有问题吗