网课不会做,求解题思路和答案

编写函数,找出一维数组中的最大值、最小值及各自所在的下标后,对数组进行排序。在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;
}

运行结果:

img

img

代码如下:

#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;
}

结果如图:

img

img

#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);
}