题目来源:大工慕课 链接
作者:Caleb Sung
题目要求
(23)下载资料中的“23.矩阵最值2.c”程序,编写函数,给定一个4x4数组,求上半三角元素(包括主对角元)之和,以及最小元素所在的行和列。比如 a[4][4]={11,12,13,14,21,22,23,24,31,32,33,34,41,42,43,44},上半三角元素位11,12,13,14,22,23,24,33,34,44。(本题的4x4数组,使用随机数生成数组元素,随机数的产生可参考教材P88例7-7,或上网搜索。函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX
是stdlib.h
中定义的一个很大的整数,它与系统有关。)
题目代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int row, col;
int main()
{
double minarr(double a[][4]);
double a[4][4],s=0;
int 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()%99+1); //为数组元素赋值一个1~99的随机数并输出到屏幕上。
}
putchar('\n');
}
s=minarr(a);
printf("最小值在第%d行,第%d列\n上半三角元素之和为%.1f\n",row+1,col+1,s);
return 0;
}
// 根据函数的调用或函数声明在begin和end之间编写函数maxarr,完成题目中的功能。
// 注意:已写好的程序不能修改,先阅读主函数,明白题意再编写函数maxarr。
// ***********begin***********
// ***********end*************
参考解答
double minarr(double a[][4]){
int i, j, sum=0, min=999, tmpr, tmpc;
for(i=0; i<=3; i++){
for(j=0; j<=3; j++){
if(a[i][j] < min){
min = a[i][j];
tmpr = i;
tmpc = j;
}
}
}
row = tmpr;
col = tmpc;
for(i=0; i<=3; i++){
for(j=3-j; j>=0; j--){
sum += a[i][j];
}
}
return sum;
}
运行效果
数组a为:
58.0 63.0 28.0 9.0
67.0 82.0 40.0 76.0
3.0 57.0 31.0 53.0
43.0 6.0 70.0 20.0
最小值在第3行,第1列
上半三角元素之和为594.0