题目来源:大工慕课 链接
作者: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_MAX
是stdlib.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)
可以确定咱们定义的函数的名称和形参。利用指针指向的row
和col
返回最大值所在位置,再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