解题思路以及注意事项:
主要得注意传参的问题,不要在自定义函数里面定义数组然后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 人评分
#include <stdio.h> int i,t,y; int a[10] = { 0 }; void shuru() { for (i = 0; i < 10; i++) { scanf("%d", &a[i]); } } void chuli() { t = a[0]; y = a[0]; for (i = 0; i < 10; i++) { if (t < a[i + 1]) { t=a[i + 1] ; } } for (i = 0; i < 10; i++) { if (t == a[i]) { int e = a[9]; a[9] = a[i]; a[i] = e; } } for (i = 0; i < 10; i++) { if (y > a[i + 1]) { y = a[i + 1]; } } for (i = 0; i < 10; i++) { if (y == a[i]) { int e = a[0]; a[0] = a[i]; a[i] = e; } } } void shuchu() { for (i = 0; i < 10; i
我定义了两个数组,一个是原始数组,一个是操作数组,对操作数组赋予原始数组一样的值,然后将操作数组进行冒泡排序,即知首尾为最小最大值,再用遍历找寻原始数组关于最大最小值的下标(我的代码通过即证明该操作是对我们遇到的第一个最大最小值进行处理),通过值互换完成整个过程,代码略长,懒得上了。
#include<stdio.h> void input(int a[10]); void output(int a[10]); void change(int a[10]); int main() { int a[10]; input(a); change(a); output(a); return 0; } void input(int a[10]) { int i=0; for (i; i < 10; i++) { scanf("%d", &a[i]); } } void change(int a[10]) { int t,s; for (int i = 1; i < 10; i++) { if (a[i] < a[0]) { t = a[i]; a[i] = a[0]; a[0] = t; } if (a[i] > a[9]) { s = a[i]; a[i] = a[0]; a[0] = s; } } } void output(int a[10]) { for (int i = 0; i < 10; i++) { printf("%d ", a[i]); } } 能告诉我哪里错了吗?谢谢
编程院梁博士 2020-03-29 12:22:34 |
你没交换吧,看题目要求
#include<stdio.h> #include<string.h> void f(int a[]){int i,j,t; for(i=0;i<9;i++){ for(j=0;j<9-i;j++){ if (a[j]>a[j+1]){ t=a[j];a[j]=a[j+1];a[j+1]=t; } } } } int main() {int a[10],i,j,t; for (i=0;i<10;i++) scanf ("%d",&a[i]); f(a); for (i=0;i<10;i++){ printf("%d ",a[i]); } } 能帮我看看哪里出错了吗,我用的是冒泡算法
#include <stdio.h> void shuru(int a[]); void chuli(int a[]); void shuchu(int a[]); int main() { int a[10]; shuru(a); chuli(a); shuchu(a); return 0; } void shuru(int a[]){ int i; for(i=0;i<10;i++){ scanf("%d",&a[i]); } } void chuli(int a[]){ int i,j,temp,min,max; min=0,max=0; for(i=1;i<10;i++){ if(a[i]<a[min]){ min=i; }else if(a[i]>a[max]){ max=i; } } temp=a[0]; a[0]=a[min]; a[min]=temp; temp=a[9]; a[9]=a[max]; a[max]=temp; } void shuchu(int a[]){ int i; for(i=0;i<10;i++){ printf("%d ",a[i]); } } 为什么答案错误50%
桐猿亮司 2020-02-18 13:11:01 |
知道了!当第一个是最大值的时候,换完最小值会把最大值换走,应该用两个循环,分别交换!
q671383789 2020-02-27 22:10:08 |
谢谢老哥 我也想了好久。。。。发现确实会这样
楼主的代码错了::: 楼主的只适用于题目的要求, 若将输入改为:22 1 3 4 5 6 7 8 10 9即可发现输出结果不符合要求
zhaisihan 2020-06-24 16:16:16 |
最大的是第一位的时候都不行吧
台球碰撞 (C++代码)浏览:1163 |
人民币问题 (C语言代码)浏览:720 |
简洁的代码浏览:1474 |
C语言程序设计教程(第三版)课后习题12.6 (C语言代码)浏览:816 |
C语言训练-求1+2!+3!+...+N!的和 (C语言代码)浏览:2498 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:1019 |
C语言训练-计算一个整数N的阶乘 (C语言代码)浏览:982 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:641 |
C语言训练-大、小写问题 (C语言代码)浏览:792 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:660 |