(pta)6-5 将二维数组指定行对调后求不靠边元素的和

本题需按要求输入矩阵元素,将指定的行列值对调后输出矩阵并求不靠边元素之和。矩阵行的值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;
    }
}


 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值