本题需按要求输入矩阵元素,将指定的行列值对调后输出矩阵并求不靠边元素之和。矩阵行的值m从键盘读入(2<=m<=10)。
函数接口定义:
int Input (float (*arr)[N] ); void Output( float (*arr)[N], int m ); float Sum ( float (*arr)[N], int m ); void Fun(float (*arr)[N],int m,int x,int y);
其中Input()函数从键盘读入矩阵的行数,然后输入矩阵元素,并返回矩阵的行数;Output()函数按行输出矩阵,保留小数点后1位,每个元素占5列、右对齐;Sum()函数实现求矩阵的所有不靠边元素之和,并将结果返回;Fun()函数实现指定两行元素的对调。arr m、x、 y都是用户传入的参数。 m表示二维数组实际行数,x和 y`表示需要对调元素的两行。
裁判测试程序样例:
#include<stdio.h>
#define M 10
#define N 4
int Input (float (*arr)[N] );
void Output( float (*arr)[N], int m );
float Sum ( float (*arr)[N], int m );
void Fun(float (*arr)[N],int m,int x,int y);
int main(void)
{
float data[M][N],sum;
int m,x,y;
m = Input(data);
scanf("%d%d", &x,&y);
Fun(data,m,x,y);
Output( data, m );
sum = Sum(data,m);
printf("sum = %.2f\n", sum);
return 0;
}
/* 请在这里填写答案 */
输入样例:
4
18 29.5 45 33
66 3.4 11.5 57
70 100 2 16.9
15 25.8 4.5 36
2 3
输出样例:
在这里给出相应的输出。例如:
18.0 29.5 45.0 33.0
70.0100.0 2.0 16.9
66.0 3.4 11.5 57.0
15.0 25.8 4.5 36.0
sum = 116.90
代码如下:
int Input (float (*arr)[N] )
{
int m;//读入矩阵行数
scanf("%d",&m);
for(int i=0;i<m;i++)
{
for(int j=0;j<N;j++)
scanf("%f",&arr[i][j]);//输入矩阵中元素
}
return m;//返回矩阵的行数
}
void Output( float (*arr)[N], int m )
{
int j=0;
for(int i=0;i<m;i++)
{
for(j=0;j<N;j++)
{
printf("%5.1f",*(arr[i]+j));
}
printf("\n");
}
}
float Sum ( float (*arr)[N], int m )
{
float Sum=0;
for(int i=1;i<m-1;i++)
{
for(int j=1;j<N-1;j++)
{
Sum=Sum+*(arr[i]+j);
}
}
return Sum;
}
void Fun(float (*arr)[N],int m,int x,int y)
{
float t=0;//用于交换需要互换的两行的数
for(int j=0;j<N;j++)
{
t=*(arr[x-1]+j);
*(arr[x-1]+j)=*(arr[y-1]+j);
*(arr[y-1]+j)=t;
}
}