| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 368 人关注过本帖
标题:这程序能不能改进?
只看楼主 加入收藏
chen1204019
Rank: 1
来 自:广东
等 级:新手上路
帖 子:93
专家分:0
注 册:2012-12-3
结帖率:90.63%
收藏
已结贴  问题点数:10 回复次数:4 
这程序能不能改进?
程序代码:
/*
编写一个计算任意3行4列二维数组元素的最大值,并指出其所在的行列下坐标
*/

#include "stdio.h"
#define CLASS 3
#define STUD 4
int FindMax(int *p, int m, int n, int *pRow, int *pCol);
int main(void)
{
    int score[CLASS][STUD], i, j, maxScore, row, col;
    for(i=0; i <CLASS; i++)
    {
        printf("Please enter scores of class%d:\n", i+1);
        for(j=0; j < STUD; j++)
        {
            scanf("%d", &score[i][j]);
        }
    }
    maxScore=FindMax(*score,CLASS,STUD,&row,&col);
    printf("maxScore=%d,class=%d,number=%d\n",maxScore, row+1,col+1);
    return 0;
}

/*
函数功能:计算任意m行n列的二维数组中元素的最大值,并指出其所在的行列下坐标
函数参数:整形指针标量p,指向一个二维整型数组的第0行第0列
整型变量m,二维整型数组的行数
整型变量你,二维数组的列数
整型指针变量pRow,指向数组最大值所在的行下表
整型指针变量pCol,指向数组最大值所在的列下表
函数返回值:数组元素的最大值
*/

int FindMax(int *p, int m, int n, int *pRow, int *pCol)
{
    int i, j, max;
    max=p[0];//配初值,假设第一个元素值最大
    *pRow=0;//
    *pCol=0;//
    for(i=0; i < m; i++)
    {
        for(j=0; j < n; j++)
        {
            if(p[i*n+j] > max)//将p[i*n+j]与当前最大值max比较
            {
                max=p[i*n+j];//若p[i*n+j]大,则修改当前最大值max
                *pRow=i;//记录当前最大值所在的行下表
                *pCol=j;//记录当前最大值所在的列下表
            }
        }
    }
    return (max);//返回最大值
}
我想问下,如果出现两个或更多相同最大值,那程序明显错误,能不能把这程序改进?

[ 本帖最后由 chen1204019 于 2012-12-13 22:32 编辑 ]
搜索更多相关主题的帖子: 最大值 元素 
2012-12-13 22:28
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:10 
程序代码:
#include <stdio.h>//对于系统头文件,还是用尖括号吧
#define CLASS 3
#define STUD 4
int FindMax(int *p, int m, int n, int *pRow, int *pCol);
int main(void)
{
    int score[CLASS][STUD], i, j, max_size, row[10], col[10];
    for(i = 0;i < CLASS;i++)
    {
        printf("Please enter scores of class%d:\n", i + 1);
        for(j = 0;j < STUD;j++)
        {
            scanf("%d", &score[i][j]);
        }
    }
    max_size = FindMax(*score,CLASS,STUD,row,col);
    printf("Find %d max Scrose\n", max_size);
    for (i = 0;i < max_size;i++)
    {
        printf("%d\t%d\n", row[i], col[i]);
    }
    return 0;
}
int FindMax(int *p, int m, int n, int *pRow, int *pCol)
{
    int i, j, max, k = 0;
    max = -999;//将处置改为极小值,例如-999
    for (i = 0;i < m; i++)
    {
        for (j = 0;j < n; j++)
        {
            if(p[i*n+j] > max)//将p[i*n+j]与当前最大值max比较
            {
                max = p[i * n + j];//若p[i*n+j]大,则修改当前最大值max
                k = 0;
                pRow[k] = i;//记录当前最大值所在的行下表
                pCol[k] = j;//记录当前最大值所在的列下表
            }
            if (p[i*n+j] == max)
            {
                pRow[k] = i;pCol[k++] = j;
            }
        }
    }
    return k?k:1;
}
//思想,以数组存储n个最大坐标
//等于max时,将下标加 1,写入
//大于max时,将下标置0,然后覆盖
//需注意,当最大值唯一时,下标未加1,特殊对待


[fly]存在即是合理[/fly]
2012-12-13 23:07
chen1204019
Rank: 1
来 自:广东
等 级:新手上路
帖 子:93
专家分:0
注 册:2012-12-3
收藏
得分:0 
回复 2楼 azzbcc
谢谢

新手发言,请多指教!
2012-12-14 22:12
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
要是光求最大值 不求坐标  就十分简单了

DO IT YOURSELF !
2012-12-14 22:15
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
程序代码:
#include<stdio.h>
#define row 3
#define col 4

int main()
{
    int list[row][col]={458,45,555,458,55,6454,45,89,55,68,6969,222};
    int* tmp=list[0];
    int num=sizeof list/sizeof(int);
    int i=0,j=0;
    while (1)
    {
        if (*(tmp+i)>*tmp) {*tmp=*(tmp+i);j=i;}
        i++;
        if(i>=num) break;
    }
    printf("数组中最大值是=%d 其下标是 (%d,%d)\n",*tmp,j/col,j%col);
    return 0;
}
看看这样是不是能简化一些呢

DO IT YOURSELF !
2012-12-14 22:28
快速回复:这程序能不能改进?
数据加载中...
 
   



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

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