解题思路以及注意事项:
主要得注意传参的问题,不要在自定义函数里面定义数组然后return到主函数,这是行不通的,因为自定义函数调用结束后,其中的数据会发生意想不到的结果。
交换值得用到第三者。
代码比较长,但还是挺简单的,一定要静下心来写代码。
实例代码:
#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]); } }
看看大家还有什么问题,请在下方评论区留言,小方会在看到的第一时间为您解疑
0.0分
40 人评分
其实就是不要想着先挑出来最大值和最小值,一次交换成功 应该先找出来一个最大值或者最小值,交换一下位置,再遍历数组,找出另一个值,再交换位置,呼呼 可以测试下这组数据 10 9 8 7 6 5 1 2 3 4 如果没问题基本就可以了
各位大佬,不知道什么原因,报运行错误 #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
#include<stdio.h> fun3(int *pa) { int i; for(i=0;i<10;i++) { printf("%d ",pa[i]); } } void fun2(int *pa) { int i,max=0,min=0,temp; for(i=1;i<10;i++) { if(pa[max]<pa[i]) { max=i; } if(pa[min]>pa[i]) { min=i; } } temp=pa[0]; pa[0]=pa[min]; pa[min]=temp; temp=pa[9]; pa[9]=pa[max]; pa[max]=temp; } void fun1(int *pa) { int i; for(i=0;i<10;i++) { scanf("%d",&pa[i]); } } int main(void) { int a[10]; fun1(a); fun2(a); fun3(a); return 0; }
风 2021-01-31 16:17:29 |
这个有问题吗
风 2021-01-31 16:24:58 |
我知道了,没考虑特殊情况
风 2021-01-31 16:43:04 |
#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; }
风 2021-01-31 16:43:15 |
修改后的
#include<stdio.h> void Input(int a[10]); void Dw(int a[10]); void Output(int a[10]); int main() { int a[10]; Input(a); Dw(a); Output(a); } void Input(int a[]) { int i; for(i=0;i<10;i++) scanf("%d",&a[i]); } void Dw(int a[]) { int i,tem; int max=a[0],min=a[0],maxidx=0,minidx=0; for(i=0;i<10;i++) { if(a[i]>max) { max=a[i]; maxidx=i; } if(a[i]<min) { min=a[i]; minidx=i; } } tem=a[0]; a[0]=a[minidx]; a[minidx]=tem; tem=a[9]; a[9]=a[maxidx]; a[maxidx]=tem; } void Output(int a[]) { int i; for(i=0;i<10;i++) { printf("%d ",a[i]); } } 看不出哪里有问题
#include<stdio.h> #define N 10 void input_num(int a[],int n) { int i; for(i=0;i<n;i++) { scanf("%d",&a[i]); } } void process_data(int a[],int n) { int i,t,flag; t=a[0]; for(i=0;i<n;i++) { if(t>=a[i]) { t=a[i]; flag=i; } } a[flag]=a[0]; a[0]=t; t=a[0]; for(i=0;i<n;i++) { if(t<a[i]) { t=a[i]; flag=i; } } a[flag]=a[9]; a[9]=t; } void output_num(int a[],int n) { int i; for(i=0;i<n;i++) printf("%d ",a[i]); printf("\n"); } int main() { int a[N]; input_num(a,N); process_data(a,N); output_num(a,N); return 0; } 各位可以参考一下
C语言程序设计教程(第三版)课后习题6.6 (C++代码)浏览:649 |
C语言训练-自由落体问题 (C语言代码)浏览:650 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:268 |
杨辉三角 (C语言代码)浏览:505 |
妹子杀手的故事 (C语言代码)浏览:1154 |
大神老白 (C语言代码)浏览:637 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:585 |
小O的乘积 (C语言代码)浏览:1062 |
1392题解(大数相加)浏览:640 |
C语言程序设计教程(第三版)课后习题9.1 (C语言代码)浏览:653 |
加油啊 2022-02-21 12:56:44 |
感谢