C语言:程序填空:补全函数,实现返回找到4x4数组最大元素所在的行和列以及副对角元的积

题目来源:大工慕课 链接
作者:Caleb Sung

题目要求

(22)下载资料中的“22.矩阵最值1.c”程序,编写函数,给定一个4x4数组,求副对角元的积,以及最大元素所在的行和列。比如 a[4][4]={11,12,13,14,21,22,23,24,31,32,33,34,41,42,43,44},副对角元为 14,23,32,41。(本题的4x4数组,使用随机数生成数组元素,随机数的产生可参考教材P88例7-7,或上网搜索。函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAXstdlib.h中定义的一个很大的整数,它与系统有关。)

题目代码

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
    double maxarr(double a[][4],int *row,int *col);
    double a[4][4],s;
    int row,col,i,j;
    srand(time(NULL));
    printf("数组a为:\n");
    for(i=0;i<4;i++)
    {
        for(j=0;j<4;j++)
        {
            printf("%6.1f",a[i][j]=(rand()%999+1.)/10.); //为数组元素赋值一个0.1~99.9的随机数并输出到屏幕上。
        }
        putchar('\n');
    }
    s=maxarr(a,&row,&col);
    printf("最大值在第%d行,第%d列\n副对角元的积为%f\n",row+1,col+1,s);
    return 0;
}
// 根据函数的调用或函数声明在begin和end之间编写函数maxarr,完成题目中的功能。
// 注意:已写好的程序不能修改,先阅读主函数,明白题意再编写函数maxarr。 
// ***********begin***********

// ***********end*************

参考代码

根据main()函数的声明的double maxarr(double a[][4],int *row,int *col)可以确定咱们定义的函数的名称和形参。利用指针指向的rowcol返回最大值所在位置,再return副对角元的积。

double maxarr(double a[][4],int *row,int *col){
    double max = 0, sum = 1;
    int tmpr, tmpc, i, j;
    for(i=0; i<=3; i++){
        for(j=0; j<=3; j++){
            if(a[i][j]>max){
                max = a[i][j];
                tmpr = i;
                tmpc = j;
            }
        }
    }
    *row = tmpr;
    *col = tmpc;
    for(i=3; i>=0; i--){
        sum = sum * a[i][3-i];
    }
    return sum;
}

运行效果

数组a为:
  10.3  89.2  47.1  16.1
  80.7  13.4  11.4  83.7
  66.2  43.5  87.1   1.0
  13.5   9.4  15.2  54.2
最大值在第1行,第2列
副对角元的积为107783.865000

猜你喜欢

转载自blog.csdn.net/qq_41933331/article/details/80231671