编写函数,找出一维数组中的最大值、最小值及各自所在的下标后,对数组进行排序。在main函数中验证。要求:有效数组长度在main函数中由键盘输入,最大值、最小值及各自所在的下标、排序后的数组在main函数中输出。
你可以参考一下,希望采纳
#include <stdio.h>
#include <atomic>
void findAndSort(int p[],int n) {
int i,j, max = 0, min = 9999,maxId=0,minId=0;
//找出最大值和最小值
for (i = 0; i < n; i++) {
if (p[i] > max) {
max = p[i];
maxId = i;
}
if (p[i] < min) {
min = p[i];
minId = i;
}
}
printf("最大值:%d,下标为:%d\n", max, maxId);
printf("最小值:%d,下标为:%d\n", min, minId);
//选择排序法
int temp;
for (i = 0; i < n; i++) {
for (j = i + 1; j < n; j++) {
if (p[i] > p[j]) {
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
}
int main() {
int n,*p;
printf("请输入有效数组长度:");
scanf("%d", &n);
p = (int*)malloc(n * sizeof(int)); //分配内存空间
int i;
printf("请初始化数组(数之间用空格分隔):\n");
for (i = 0; i < n; i++) {
scanf("%d", &p[i]);
}
findAndSort(p, n);
//验证结果是否正确
for (i = 0; i < n; i++) {
printf("%d ", p[i]);
}
free(p);
return 0;
}
运行结果:
代码如下:
#include<stdio.h>
#define N 500
void fun(int a[],int n,int *max,int *min,int *max_num,int *min_num)
{
for (int i = 0; i < n; i++)
{
if (a[i] > *max) //求最大值及下标
{
*max = a[i];
*max_num = i;
}
if (a[i] < *min) //求最小值及下标
{
*min = a[i];
*min_num = i;
}
}
for (int i = 0; i < n - 1; i++) //冒泡法排序,从小到大排序
for (int j = 0; j < n - i - 1; j++)
if (a[j] > a[j + 1])
{
int temp;
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
int main()
{
int a[N],n,*p,max,min,num_max,num_min,*p_max,*p_min,*p_num_max,*p_num_min;
p_max = &max;
p_min = &min;
p_num_max = &num_max;
p_num_min = &num_min;
p = a; //指针指向数组
printf("请输入数组长度:");
scanf("%d", &n);
for (int i = 0; i < n; i++) //输入数组元素
scanf("%d", &a[i]);
max = min = a[0];
num_max = num_min = 0;
fun(p, n,p_max,p_min, p_num_max, p_num_min); //调用函数
printf("这组数的最大值是%d,在数组中的下标为%d\n", max, num_max);
printf("这组数的最小值是%d,在数组中的下标为%d\n", min, num_min);
for (int i = 0; i < n; i++)
printf("%d\t", a[i]);
return 0;
}
结果如图:
#include<stdio.h>
int max,min;
int maxp,minp;
void sort(int arr[],int size)
{
int max=arr[0],min=arr[0];
int maxp=0;
minp=0;
for(int j=1; j<size; j++)
{
if(arr[j]>max)
{
max=arr[j];
maxp=j;
}
if(arr[j]<min)
{
min=arr[j];
minp=j;
}
}
for(int i=0; i<size-1; i++)
{
for(int j=0; j<size-1-i; j++)
{
if(arr[j]>arr[j+1])
{
int tem=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tem;
}
}
}
}
void output(int arr[],int size)
{
for(int i=0; i<size; i++)
printf("%d ",arr[i]);
printf("\n");
}
int main()
{
int size;
printf("输入数组长度:\n");
scanf("%d",&size);
int arr[size];
for(int j=0; j<size; j++)
scanf("%d",&arr[j]);
sort(arr,size);
printf("排序后数组:\n");
output(arr,size);
printf("最大值:%d\n最小值:%d\n",max,min);
printf("最大值下标:%d\n最小值下标:%d\n",maxp,minp);
return 0;
}
供参考:
#include <stdio.h>
#define N 50
void max_min(int* a,int n,int* max,int* min,int* max_i,int* min_i)
{
int i,j,t;
*max = *min = *a;
*max_i = *min_i = 0;
for(i=0;i<n;i++)
{
if(*max < a[i]){ *max = a[i]; *max_i = i;}
if(*min > a[i]){ *min = a[i]; *min_i = i;}
}
for(i=0;i<n-1;i++){
for(j=0;j<n-1-i;j++){
if(a[j] > a[j+1])
{
t=a[j];a[j]=a[j+1];a[j+1]=t;
}
}
}
}
int main()
{
int i,max_i,max,min_i,min,a[N],n;
printf("请输入数组的长度:");
scanf("%d", &n);
printf("请输入%d个数组元素:",n);
for(i=0;i<n;i++)
scanf("%d", &a[i]);
max_min(a,n,&max,&min,&max_i,&min_i);
printf("max=%d,max_i=%d\nmin=%d,min_i=%d\n",max,max_i,min,min_i);
printf("排序后的数组:\n");
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
最大值可以遍历数组中的所有元素,用定义一个变量进行逐个比较,如果这个元素比maxn大,就赋值给maxn再进行下一次比较,最小值同理
下标在判断的时候存储下来就行了
排序
用sort函数)
或者自己写
选择排序:
//n表示有效数组长度
//a表示数组
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (a[i] > a[j]) {//这里可以用swap(a[i],a[j])代替
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
就跑一遍冒泡排序就可以了,具体代码如下:
/*************************************************
Note:
*************************************************/
#include <queue>
#include <stack>
#include <set>
#include <stdio.h>
#include <iostream>
#include <vector>
#include <iomanip>
#include <string.h>
#include <algorithm>
#include <cmath>
#include <cstring>
#define ll long long
#define ull unsigned long long
using namespace std;
const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
inline int read()
{
int s = 0, w = 1;
char ch = getchar();
while (ch < '0' || ch > '9')
{
if (ch == '-')
w = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9')
s = s * 10 + ch - '0', ch = getchar();
return s * w;
}
void fun(int a[], int n, int *max, int *min, int *max_num, int *min_num)
{
for (int i = 0; i < n; i++)
{
if (a[i] > *max) //求最大值及下标
{
*max = a[i];
*max_num = i;
}
if (a[i] < *min) //求最小值及下标
{
*min = a[i];
*min_num = i;
}
}
for (int i = 0; i < n - 1; i++) //冒泡法排序,从小到大
for (int j = 0; j < n - i - 1; j++)
if (a[j] > a[j + 1])
{
int temp;
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
int main()
{
int a[N], n, *p, max, min, nummax, nummin, *pmax, *pmin, *pnmax, *pnmin;
pmax = &max;
pmin = &min;
pnmax = &nummax;
pnmin = &nummin;
p = a; //指针指向数组
printf("请输入数组长度:");
scanf("%d", &n);
for (int i = 0; i < n; i++) //输入数组
scanf("%d", &a[i]);
max = min = a[0];
nummax = nummin = 0;
fun(p, n, pmax, pmin, pnmax, pnmin);
printf("这组数的最大值是%d,在数组中的下标为%d\n", max, nummax);
printf("这组数的最小值是%d,在数组中的下标为%d\n", min, nummin);
for (int i = 0; i < n; i++)
printf("%d\t", a[i]);
return 0;
}
求采纳
你是属于刚学的吗?
所以大家用sort会怎么样?快还方便
#include<stdio.h>
int main(void) //主调函数
{
int b[999];
int n,i;
int max,k;
void findmax(int *a,int n);
void findmin(int *a,int n);
printf("请输入你要测试的数字个数\n");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&b[i]);
findmax(b,n);
findmin(b,n);
}
void findmax(int *a,int n) //被调函数,这里的a是数组首地址
{
int i,k=0,max;
max = *a;
for(i=0;i<n;i++){
if(*(a+i)>max){
max = *(a+i);
k=i;
}
}
printf("最大值为%d 它的下标为%d\n",max,k);
}
void findmin(int *a,int n) //被调函数
{
int i,k=0,min;
min = *a;
for(i=0;i<n;i++){
if(*(a+i)<min){
min = *(a+i);
k=i;
}
}
printf("最小值为%d 它的下标为%d",min,k);
}