| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 326 人关注过本帖
标题:求建议,求指点,能不能改进?
只看楼主 加入收藏
chen1204019
Rank: 1
来 自:广东
等 级:新手上路
帖 子:93
专家分:0
注 册:2012-12-3
结帖率:90.63%
收藏
 问题点数:0 回复次数:0 
求建议,求指点,能不能改进?
看代码
程序代码:
/*
题目要求如下:
输入两个行、列数相同的矩阵(实际上是二维数组)A、B,以矩阵的方式分别输出A、B;
求矩阵的和并输出;
求出每个矩阵中的最大值及其位置;
求出每个矩阵中绝对值最大的元素及其位置。
下面的各要求通过编写函数实现:
① 输入矩阵(实际上是二维数组);
② 输出矩阵;
② 求出两个矩阵的和。设A=(aij)m×n,B=(bij)m×n,则C=A+B=(cij)m×n,cij= aij+ bij;
③ 求矩阵中的最大值及其位置;
④ 求矩阵中绝对值最大的元素及其位置。
*/
//下面是我写的代码,求改进!
#define N 9
#define M 7
#include "stdio.h"
#include "math.h"
void main()
{
    void findsum(int *p1,int a, int b, int *p2,int c, int d, int *sum);//求和函数

    int findmax1(int *p, int a, int *row1, int *col1, int n, int *max);//求第一个数组的最大值及位置
    int findmax2(int *q, int c, int *row2, int *col2, int n, int *max);//求第二个数组的最大值及位置

    int find_fabs_max1(int *p, int a, int *row1, int *col1, int n, int *fabs_max);//求第一个数组绝对值的最大值及位置
    int find_fabs_max2(int *q, int c, int *row2, int *col2, int n, int *fabs_max);//求第二个数组绝对值的最大值及位置

    int array[N][N], row1[N*N], col1[N*N];//定义第一个数组
    int arr[M][M], row2[M*M], col2[M*M];//定义第二数组
    int fabs_max, i, j, sum=0;
    int a, max;//a为最大值的个数
    for(i=0; i < N; i++)
        for(j=0; j < N; j++)
            scanf("%d", &array[i][j]);
        printf("\n");
        for(i=0; i < M; i++)
            for(j=0; j < M; j++)
                scanf("%d", &arr[i][j]);
            printf("\n");
           
           
            for(i=0; i < N; i++)
            {
                for(j=0; j < N; j++)
                {
                    printf("%4d", array[i][j]);
                }
                printf("\n");
            }
            printf("\n");
           
            for(i=0; i < M; i++)
            {
                for(j=0; j < M; j++)
                {
                    printf("%4d", arr[i][j]);
                }
                printf("\n");
            }
            printf("\n");
        //输出和   
            findsum(*array,N, N, *arr, M, M, &sum);
            printf("sum=%d\n", sum);
            printf("\n");
        //输出第一数组最大值和位置
            a=findmax1(*array, N, row1, col1, N*N, &max);
            printf("find max1=%d\n", max);
            for(i=0; i < a; i++)
            {
                printf("row1=%d\tcol1=%d\n",row1[i]+1, col1[i]+1);
            }
            printf("\n");
            //输出第二数组最大值和位置
            a=findmax2(*arr, M, row2, col2, M*M, &max);
            printf("find max2=%d\n", max);
            for(i=0; i < a; i++)
                printf("row=%d\tcol=%d\n", row2[i]+1, col2[i]+1);
            printf("\n");
            //输出第一数组绝对值最大值和位置
            a=find_fabs_max1(*array, N, row1, col1, N*N, &fabs_max);
            printf("find fabs_max1 = %d\n", fabs_max);
            for(i=0; i < a; i++)
                printf("row=%d\tcol=%d\n", row1[i]+1, col1[i]+1);
            printf("\n");
            //输出第二数组绝对值最大值和位置
            a=find_fabs_max2(*arr, M, row2, col2, M*M, &fabs_max);
            printf("find fabs_max2 = %d\n", fabs_max);
            for(i=0; i < a; i++)
                printf("row=%d\tcol=%d\n", row2[i]+1, col2[i]+1);
            printf("\n");
           
}

//计算两个数组的和
void findsum(int *p1, int a, int b, int *p2, int c, int d, int *sum)
{
    int sum1=0, sum2=0, i, j;
    for(i=0; i < N; i++)
        for(j=0; j < N; j++)
        {
            sum1 += p1[i*a+j];
        }
        for(i=0; i < M; i++)
            for(j=0; j < M; j++)
            {
                sum2 += p2[i*c+j];
            }
            *sum=sum1+sum2;
}

//寻找第一个数组的最大值和最大值得个数及其位置
int findmax1(int *p, int a, int *row1, int *col1, int n, int *max)
{
    int i, j, k;
    *max=-999;
    for(i=0; i < a; i++)
        for(j=0; j < a; j++)
        {
            if(p[i*a+j] > *max)
            {
                *max=p[i*a+j];
                k=0;
            }
            if(p[i*a+j] == *max)
            {
                row1[k]=i;
                col1[k++]=j;
            }
        }
        return k?k:1;
}

//寻找第二个数组的最大值和个数及位置
int findmax2(int *q, int c, int *row2, int *col2, int  n, int *max)
{
    int i, j, k;
    *max=-999;
    for(i=0; i < c; i++)
        for(j=0; j < c; j++)
        {
            if(q[i*c+j] > *max)
            {
                *max=q[i*c+j];
                k=0;
            }
            if(q[i*c+j] == *max)
            {
                row2[k]=i;
                col2[k++]=j;
            }
        }
        return k?k:1;
}

//寻找第一个数组的绝对值最大值和个数及位置
int find_fabs_max1(int *p, int a, int *row1, int *col1, int n, int *fabs_max)
{
    int i, j, k;
    *fabs_max=-999;
    for(i=0; i < a; i++)
        for(j=0; j < a; j++)
        {
            if(fabs(p[i*a+j]) > *fabs_max)
            {
                *fabs_max=fabs(p[i*a+j]);
                k=0;
            }
            if(fabs(p[i*a+j]) == *fabs_max)
            {
                row1[k]=i;
                col1[k++]=j;
            }
        }
        return k?k:1;
}

//寻找第二个数组绝对值的最大值和个数及位置
int find_fabs_max2(int *q, int c, int *row2, int *col2, int n, int *fabs_max)
{
    int i, j, k;
    *fabs_max=-999;
    for(i=0; i < c; i++)
        for(j=0; j < c; j++)
        {
            if(fabs(q[i*c+j]) > *fabs_max)
            {
                *fabs_max=fabs(q[i*c+j]);
                k=0;
            }
            if(fabs(q[i*c+j]) == *fabs_max)
            {
                row2[k]=i;
                col2[k++]=j;
            }
        }
        return k?k:1;
}

/*
问题:能不能把程序简化,少用参数,或用函数指针代替代替,
改进程序,指点下要注意什么问题,思想等
程序好长,麻烦各位了,万分感谢
*/
搜索更多相关主题的帖子: 元素 最大值 绝对值 最大的 矩阵 
2012-12-19 14:46
快速回复:求建议,求指点,能不能改进?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023251 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved