要用函数写,有没有学长指导一下一把
在vc++2010里用c语言编写一个函数,在一维数组中找到最大值和最小值及其下标并且顺序输出数组,一维数组由用户输入
2条回答 默认 最新
- Dummer25 2023-04-06 15:33关注
测试运行没问题
#include <stdio.h> void find_max_min(double* numbers, int length, double* max_value, int* max_index, double* min_value, int* min_index); int main() { double numbers[10]; int i; // 提示用户输入浮点数 printf("请输入10个浮点数:\n"); for (i = 0; i < 10; i++) { printf("请输入第%d个数:", i+1); scanf("%lf", &numbers[i]); } double max_value, min_value; int max_index, min_index; // 查找最大值和最小值及其下标 find_max_min(numbers, 10, &max_value, &max_index, &min_value, &min_index); // 输出结果 printf("排序后的数组为:"); for (i = 0; i < 10; i++) { printf("%.3lf ", numbers[i]); } printf("\n最大值为:%.3lf,下标为:%d\n", max_value, max_index); printf("最小值为:%.3lf,下标为:%d\n", min_value, min_index); return 0; } void find_max_min(double* numbers, int length, double* max_value, int* max_index, double* min_value, int* min_index) { int i; *max_index = 0; *min_index = 0; *max_value = numbers[0]; *min_value = numbers[0]; for (i = 1; i < length; i++) { if (numbers[i] > *max_value) { *max_index = i; *max_value = numbers[i]; } if (numbers[i] < *min_value) { *min_index = i; *min_value = numbers[i]; } } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用2301_77350355 2023-04-06 15:37#include <stdio.h> int max,min,x,y,n; void fun(int a[100]) { int i,j,t; for(i=0;i<n;i++) { max=a[0]; min=a[0]; if(max<a[i]) { max=a[i]; x=i; } if(min>a[i]) { min=a[i]; y=i; } else { i++; } } for(i=0;i<n-1;i++) { for(j=0;j<n-1;j++) { if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } } void main() { int b[100],k; scanf("%d",&n); for(k=0;k<n;k++) { scanf("%d",&b[k]); } fun(b); printf("max=%d 下标为:%d\nmin=%d 下标为:%d\n",max,x,min,y); for(k=0;k<n;k++) { printf("%d ",b[k]); } }
赞回复你的代码中存在几个问题:
max 和 min 变量在每次循环中被初始化为 a[0],这样就无法正确地找到最大值和最小值。
在找到最小值时,应该是 if(min>a[i]) 而不是 if(min>a[i]) else { i++; }。因为这样会导致当前位置的数值被跳过,从而无法正确寻找最小值和对应下标。
在排序时,应该是 for(i=0;i<n-1;i++) 而不是 for(i=0;i<n;i++)。因为排序需要比较相邻两个元素的大小,所以排序的外层循环只需要循环 n-1 次即可。
下面是修改后的代码:
#include <stdio.h> int max, min, x, y, n; void fun(int a[100]) { int i, j, t; max = a[0]; min = a[0]; for(i = 0; i < n; i++) { if(max < a[i]) { max = a[i]; x = i; } if(min > a[i]) { min = a[i]; y = i; } } for(i = 0; i < n - 1; i++) { for(j = 0; j < n - 1; j++) { if(a[j] > a[j+1]) { t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } } } int main() { int b[100], k; scanf("%d", &n); for(k = 0; k < n; k++) { scanf("%d", &b[k]); } fun(b); printf("max=%d 下标为:%d\nmin=%d 下标为:%d\n", max, x, min, y); for(k = 0; k < n; k++) { printf("%d ", b[k]); } return 0; }
1回复展开全部8条评论