谁想来试一试?数组真的好复杂啊

img

#include<stdio.h>
int a[100];
int main(){
 int i=0,sum=0,m=0,j;
 double avg;
 while(1){
  scanf("%d",&m);
  if(m==-1) break;
  a[i++]=m;
 }
 for(j=0;j<i;j++){
  sum+=a[j];
 }
 avg=sum*1.0/i;
 printf("和:%d,平均数:%f",sum,avg);
 return 0;
}

1、平均数、选择排序代码如下:

int main()
{
    int i = 0;
    double m = 0,sum = 0,avg = 0;
    while(1) {
        scanf("%lf", &m);
        if(-1 == m)
            break;
        sum = sum + m;
        ++ i; //记录求平均数的个数
    }
    avg = sum/i;
    printf("avg = %lf\n", avg);
    return 0; 
}

/*
选择排序的思路:以升序为例子
每次遍历,找到当前最大元素的下标,放在参与循环的几个元素的最右边
例如一个有5个元素的数组:
第一次循环,找到a[0],a[1],a[2],a[3],a[4]这5个元素中最大的那个元素的下标,将他和a[4]交换位置,
此时最大的元素就放在了a[4],
第二次循环,找到a[0],a[1],a[2],a[3]这四个元素中最大的那个元素的下标,将他和a[3]交换位置,
此时整个数组第二大的元素就放在了a[3],
以此类推......
函数参数介绍:
@ arr 数组名字
@ amount 数组元素的个数
*/
int SelectSort(int arr[], int amount)
{
    int subscript = 0; //记录最终交换元素的下标
    for(int i=0; i<amount-1; i++) {
        subscript = 0;
        for(int j=0; j<amount-i-1; j++) {
            //升序
                if(arr[subscript] < arr[j+1])
                    subscript = j + 1; //更新下标
        }
        int temp = arr[subscript];
        arr[subscript] = arr[amount-i-1];
        arr[amount-i-1] = temp;
    }
    return 0;
}

如果n个数也是重点的话,应该通过链表来实现,但是按照你提问的问题,你们应该还没学过链表