| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 635 人关注过本帖
标题:一道函数题目
只看楼主 加入收藏
童国顺
Rank: 1
等 级:新手上路
帖 子:70
专家分:6
注 册:2010-4-18
结帖率:60%
收藏
已结贴  问题点数:20 回复次数:8 
一道函数题目
编写程序,将一个MXN的矩阵A存入一个二维数组,根据A生成一个新的矩阵B存入另外一个二维数组,生成的方法是:若A的某个元素是“局部最大值”,则B的相应元素设为1;否则设为0.所谓“局部最大值”是指该值比其上,下,左,右四个邻值都大例如A
 6 9 7 5 6   B  0 1 0 0 1
2 6 3 3 4       0 0 0 0 0
2 2 4 1 7       0 0 0 0 1
2 6 4 6 8       1 0 0 0 1
要求 编写三个函数  输入  输出   转换
编写主函数调用上面的三个函数
搜索更多相关主题的帖子: 函数 
2010-05-03 11:25
颓废王子
该用户已被删除
收藏
得分:3 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-03 11:33
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:3 
0 0 0 0 0 0 0
0 6 9 7 5 6 0
0 2 6 3 3 4 0   
0 2 2 4 1 7 0     
0 2 6 4 6 8 0
0 0 0 0 0 0 0   

外围加一圈 0 补齐, 两层循环,一个一个处理就可以了
  
收到的鲜花
  • lijm19892010-05-06 20:07 送鲜花  5朵   附言:不错。

我就是真命天子,顺我者生,逆我者死!
2010-05-03 11:42
itma
Rank: 4
等 级:业余侠客
帖 子:105
专家分:266
注 册:2010-2-8
收藏
得分:3 
以下是引用BlueGuy在2010-5-3 11:42:20的发言:

0 0 0 0 0 0 0
0 6 9 7 5 6 0
0 2 6 3 3 4 0   
0 2 2 4 1 7 0     
0 2 6 4 6 8 0
0 0 0 0 0 0 0   

外围加一圈 0 补齐, 两层循环,一个一个处理就可以了
  
顶,曾经遇到过类似的。
2010-05-03 11:54
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
#include <stdio.h>
#define M 4
#define M 5
#define a[M+2][N+2]
#define b[M+2][N+2]

int main(void)
{
    int i, j;
    for (i = 1; i < M; i++)
    {
        for (j = 1; j < N; j++)
        {
            // scanf();
        }
    }


    for (i = 1; i < M; i++)
    {
        for (j = 1; j < N; j++)
        {
            if(a[i][j] > a[i-1][j] && a[i][j] > a[i+1][j] && a[i][j] > a[i][j-1] && a[i][j] > a[i][j+1])
               b[i][j] = 1;
         }
    }

    for (i = 1; i < M; i++)
    {
        for (j = 1; j < N; j++)
        {
            printf("%d", b[i][j]);
        }
    }

}

我就是真命天子,顺我者生,逆我者死!
2010-05-03 12:04
童国顺
Rank: 1
等 级:新手上路
帖 子:70
专家分:6
注 册:2010-4-18
收藏
得分:0 
回复 5楼 BlueGuy
不懂你写什么 ??你用的应该不是vc6.0吧!呵呵
2010-05-03 12:27
shangyangzi
该用户已被删除
收藏
得分:3 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-03 12:37
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:3 
我写了一个,请楼主多多指教!
程序代码:
#include<stdio.h>
#include<stdlib.h>

int main()
{
    void input(int** p,int& n,int& m);       //输入函数声明
    int** change(int** p,int& n,int& m);    //转换函数声明
    void output(int** t,int& n,int& m);       //输出函数声明


    printf("请输入要生成的二位数组的行数:");
    int n;
    scanf("%d",&n);
    printf("请输入要生成的二维数组的列数:");
    int m;
    scanf("%d",&m);

    int **p,**t;
    p=(int**)calloc(n,sizeof(int));

    for(int i=0;i<n;i++)
        p[i]=(int*)calloc(m,sizeof(int));
   
    //函数调用
    printf("请输入数组中的各个数字:\n");
    input(p,n,m);
    t=change(p,n,m);
    printf("输出转换前的数组:\n");
    output(p,n,m);
    printf("输出转换后的数组:\n");
    output(t,n,m);

    free(p);
    free(t);

    return 1;
}

void input(int** p,int& n,int& m) //输入函数
{
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            scanf("%d",&p[i][j]);
   
}

int** change(int** p,int& n,int& m)    //转换函数
{
    int** t;

    t=(int**)calloc(n,sizeof(int));

    for(int i=0;i<n;i++)
        t[i]=(int*)calloc(m,sizeof(int));

    for(i=0;i<n;i++)
        for(int j=0;j<m;j++)
        {
            t[i][j]=0;
            if(i>0&&i<n-1&&j>0&&j<m-1)
            {
                if(p[i][j]>p[i-1][j] && p[i][j]>p[i+1][j] && p[i][j]>p[i][j+1] && p[i][j]>p[i][j-1])
                    t[i][j]=1;
            }
            else if(i==0&&j>0&&j<m-1)
            {
                if(p[i][j]>p[i][j-1] && p[i][j]>p[i][j+1] && p[i][j]>p[i][j+1])
                    t[i][j]=1;
            }
            else if(i==n-1&&j>0&&j<m-1)
            {
                if(p[i][j]>p[i][j-1] && p[i][j]>p[i][j+1] && p[i][j]>p[i][j-1])
                    t[i][j]=1;
            }
            else if(j==0 && i>0 && i<n-1)
            {
                if(p[i][j]>p[i-1][j] && p[i][j]>p[i+1][j] && p[i][j]>p[i][j+1])
                    t[i][j]=1;
            }
            else if(j==m-1 && i>0 && i<n-1)
            {
                if(p[i][j]>p[i-1][j] && p[i][j]>p[i+1][j] && p[i][j]>p[i][j-1])
                    t[i][j]=1;
            }
            else if(i==0&&j==0)
            {
                if(p[i][j]>p[i+1][j] && p[i][j]>p[i][j+1])
                    t[i][j]=1;
            }
            else if(i==0&&j==m-1)
            {
                if(p[i][j]>p[i+1][j] && p[i][j]>p[i][j-1])
                    t[i][j]=1;
            }
            else if(i==n-1&&j==0)
            {
                if(p[i][j]>p[i-1][j] && p[i][j]>p[i][j+1])
                    t[i][j]=1;
            }
            else
            {
                if(p[i][j]>p[i-1][j] && p[i][j]>p[i][j-1])
                    t[i][j]=1;
            }
        }
    return t;

}

void output(int** t,int& n,int& m)    //输出函数
{
    for(int i=0;i<n;i++)
    {
        putchar('\n');
        for(int j=0;j<m;j++)
            printf("%-4d ",t[i][j]);
    }

    putchar('\n');
     return ;
}

 

南国利剑
2010-05-03 13:13
xueyuhanhai
Rank: 4
等 级:业余侠客
帖 子:90
专家分:238
注 册:2010-4-5
收藏
得分:3 
// sdf.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdio.h"
#define M 4
#define N 5


int a[M+2][N+2]={0};
int b[M+2][N+2]={0};

//输入函数
void shuru()
{       int i,j;
        for(i=1;i<M;i++)
        {
            for (j=1;j<N;j++)
            {
                scanf("%d",a[i][j]);
            }
        }
}

//转换函数
void zhuanhuan()
{
    for (int i=1;i<M;i++)
        {
            for (int j=1;j<N;j++)
            {
                if(a[i][j]>a[i-1][j]&&a[i][j]>a[i+1][j]&&a[i][j]>a[i][j-1]&&a[i][j]>a[i][j+1])
                   b[i][j]=1;
                else
                   b[i][j]=0;

            }
        }
}


//输出函数
void shuchu()
{

        for (int i=1;i<M;i++)
        {
            for (int j=1;j<N;j++)
            {
                printf("%d", b[i][j]);
                printf("\n");
            }
        }
}


int main(int argc, char* argv[])
{
        shuru();
        zhuanhuan();
        shuchu();
        printf("\n");
        printf("Hello World!\n");
        return 0;
}
楼主:思想和5楼的一样,就是把他的代码改了一下。就是外圈补零而已。南国利剑的都用二级指针了。牛。。。继续学习了。

[ 本帖最后由 xueyuhanhai 于 2010-5-6 20:05 编辑 ]
2010-05-06 20:02
快速回复:一道函数题目
数据加载中...
 
   



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

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