关于#c语言#的问题,请各位专家解答!

img


求有关二维数组的最大最小值以及平均数的问题,有没有人会编写这个程序的

可以定义一个二维数组用于存储10年12个月份的径流量,然后从输入获取径流量数据,或使用随机数来产生数据,然后遍历二维数组,依次计算各小问所求即可。

代码如下:

参考链接:


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void){
    
    int runoffs [10][12];
    
    srand((unsigned )time(NULL));

    int max=0,min=301;
    int yearRunoffs[10]={0};
    
    int maxYear,maxMonth;
    int minYear,minMonth;
    

    
    // 产生10年的径流量数据 
    for(int i=0;i<10;i++){
        
        
        for(int j=0;j<12;j++){
            // http://c.biancheng.net/view/2043.html
            // 产生1到300之间的一个数值,以作为当前年份当前月份的径流量 
            //runoffs[i][j] = rand()%300+1;    
            // 如果需要手动输入,使用下面这行代码    
            scanf("%d",&runoffs[i][j]);
        
        } 
        
        
    
    }
    
    printf("\t"); 
    for(int i=0;i<12;i++){
        printf("%d月份\t",i+1);
    }
    printf("\n"); 
    
    // 打印10年每月的径流量数据,并计算最大径流量,最小径流量及所在年份和月份 
    for(int i=0;i<10;i++){
        
        
        for(int j=0;j<12;j++){
        
            if(j==0){
                printf("第%d年\t",i+1);
            }
            // 打印径流量数据 
            printf("%d\t", runoffs[i][j]);
            
            // 计算最大径流量及其所在年份和月份 
            if(runoffs[i][j]>max){
                max=runoffs[i][j];
                maxYear=i+1;
                maxMonth=j+1;
            }
            
            // 计算最小径流量及其所在年份和月份 
            if(runoffs[i][j]<min){
                min=runoffs[i][j];
                minYear=i+1;
                minMonth=j+1;
            }
            
            // 计算每年的总径流量 
            yearRunoffs[i]+=runoffs[i][j];
        } 
        
        
        printf("\n\n"); 
    }
    
    
    double avgRunoffs[12]={0};
    // 计算10年每个月份的平均径流量 
    for(int i=0;i<12;i++){
        
        for(int j=0;j<10;j++){
            avgRunoffs[i]+=runoffs[j][i];
        }
        avgRunoffs[i]/=10.0;
    }
    
    // 打印结果
    // 第一小问 
    printf("\n10年最大径流量的数值为:%d, 所在年份为第%d年,所在月份为%d月份。\n",max,maxYear,maxMonth);
    printf("\n10年最小径流量的数值为:%d, 所在年份为第%d年,所在月份为%d月份。\n",min,minYear,minMonth);
    
    // 第二小问 
    printf("\n近10年每月平均径流量为:\n");
    for(int i=0;i<12;i++){
        printf("%d月份\t",i+1);        
    }
    printf("\n");
    
    for(int i=0;i<12;i++){
        printf("%.2f\t",avgRunoffs[i]);
    }
    
    // 第三小问 
    printf("\n\n每年总径流量为:\n");
    for(int i=0;i<10;i++){
        printf("第%d年\t",i+1);
    }
    printf("\n");
    
    for(int i=0;i<10;i++){
        printf("%d\t",yearRunoffs[i]);
    }
    printf("\n");
    
    return 0; 
    
    
    
    
} 

img

#include <stdio.h>

int main() {
    int data[10][12];  
    
     for (int i = 0; i < 10; i++) {
        printf("输入第%d年的各个月份数据:\n", i + 1);
        for (int j = 0; j < 12; j++) {
            printf("%d年%d月:", i + 1, j + 1);
            scanf("%d", &data[i][j]);
        }
    }

     int max = data[0][0];
    int min = data[0][0];
    int maxYear = 1;
    int maxMonth = 1;
    int minYear = 1;
    int minMonth = 1;

    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 12; j++) {
            if (data[i][j] > max) {
                max = data[i][j];
                maxYear = i + 1;
                maxMonth = j + 1;
            }
            if (data[i][j] < min) {
                min = data[i][j];
                minYear = i + 1;
                minMonth = j + 1;
            }
        }
    }
    
    printf("十年来的最大值:%d,所在年月:%d年%d月\n", max, maxYear, maxMonth);
    printf("十年来的最小值:%d,所在年月:%d年%d月\n", min, minYear, minMonth);

     int sum[12] = {0};
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 12; j++) {
            sum[j] += data[i][j];
        }
    }
    
 printf("近十年各个月份的平均值:\n");
for (int j = 0; j < 12; j++) {
    double average = (double)sum[j] / 10;
    printf("第%d月的平均值为:%lf\n", j+1, average);
}
int sum1[10];   

for (int i = 0; i < 10; i++) {
    int yearSum = 0;   

    for (int j = 0; j < 12; j++) {
        yearSum += data[i][j];   
    }
 printf("第%d年的和为:%lf\n", i+1, yearSum);
    sum1[i] = yearSum;   
}
 } 


供参考:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define Y 10     // 年
#define M 12     // 月
int main()
{
    int  i, j, ymax, mmax, ymin, mmin;
    int  arr[Y][M]={0}, ytotal[Y] = {0}, mtotal[M] = {0};

    srand((unsigned int)time(NULL));

    for (i = 0,ymax = 0,mmax = 0,ymin = 0,mmin = 0; i < Y; i++){
        for (j = 0; j < M; j++){
            arr[i][j] = rand() % 300 + 1;
            ytotal[i] += arr[i][j]; //总径流量/年,12个月之和
            mtotal[j] += arr[i][j]; //每月/10年之和
            if (arr[ymax][mmax] < arr[i][j]) ymax = i, mmax = j; //找到最大径流量的年月坐标
            if (arr[ymin][mmin] > arr[i][j]) ymin = i, mmin = j; //找到最小径流量的年月坐标
        }
    }
    // 以下输出
    printf("\t\t");
    for(i = 0; i < M; i++)
        printf("%d月份\t",i + 1);
    printf("总径流量/年\n");
    for (i = 0; i < Y; i++){
        for (j = 0; j < M; j++){
            if(!j) printf("第%d年\t\t", i+1);
            printf("%d\t", arr[i][j]);
        }
        printf("%d\n\n", ytotal[i]);
    }

    printf("月均/10年\t");
    for (i = 0; i < M; i++)
        printf("%.2f\t", mtotal[i] / 10.0);
    printf("\n");

    printf("\n10年里最大径流量为:%-2d,在:第%-2d年%-2d月份。\n", arr[ymax][mmax], ymax + 1, mmax + 1);
    printf("\n10年里最小径流量为:%-2d,在:第%-2d年%-2d月份。\n", arr[ymin][mmin], ymin + 1, mmin + 1);
    return 0;
}