| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1899 人关注过本帖
标题:指针和二维数组的问题,求数组中奇数之和与偶数之和
只看楼主 加入收藏
fengyinxqy
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2020-5-2
结帖率:92.31%
收藏
已结贴  问题点数:5 回复次数:3 
指针和二维数组的问题,求数组中奇数之和与偶数之和
首先这是题目
编写函数 void fun(int a[ ][ ],int n,int m, int *odd, int *even),其功能是计算二维数组a[n][m]元素中的所有奇数之和与所有偶数之和。利用指针odd返回奇数之和,利用指针even返回偶数之和。编写程序,在主函数中初始化二维数组a[5]6],调用函数fun后输出数组a及计算结果。


因为我不会拿a[][]作为参数写,在函数那里会搞错,所以我改成了这样,求如何改符合题意使用a[][]作为函数参数。
程序代码:
#include <stdio.h>
#include <stdlib.h>
#define N 5
#define M 6
void fun(int (*a)[6],int n,int m,int *odd,int *even);//函数声明。其中odd返回奇数的和,even返回偶数。
int main()
{
    int a[N][M]={{1,2,3,4,5,6},{7,8,9,10,11,12},{13,14,15,16,17,18},{19,20,21,22,23,24},{25,26,27,28,29,30}};
    int (*p)[M]=a;
    int qishu,oushu;
    fun(p,5,6,&qishu,&oushu);
    printf("qishu_sum=:%d\noushu_sum=:%d",qishu,oushu);
    return 0;
}
void fun(int (*a)[6],int n,int m,int *odd,int *even)
{
    *odd=0;
    *even=0;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            if (*(*(a + i) + j)%2==0)
            {
                *odd=*odd+*(*(a + i) + j);
            }
            else if (*(*(a + i) + j)%2==1)
            {
                *even=*even+*(*(a + i) + j);
            }
        }
    }
    return *odd,*even;
    
}
搜索更多相关主题的帖子: 之和 奇数 even int 偶数 
2020-05-08 18:44
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:3 
按题目要求是没办法的。
若使用 Variable-length arrays 的话,那函数原型应当是 void fun( size_t n, size_t m, int a[n][m], int* odd, int* even ),最起码 m 得出现在 a 之前;
若使用 _Generic 的话,太复杂,而且 n、m 多余了。
2020-05-08 20:49
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
一点儿办法都没有,只能用“”骗骗人

程序代码:
#include <stdio.h>

void fun_v( size_t n, size_t m, int a[n][m], int* odd, int* even )
{
    *odd=0, *even=0;
    for( size_t r=0; r!=n; ++r )
        for( size_t c=0; c!=m; ++c )
            *(a[r][c]%2==0?even:odd) += a[r][c];
}

#define fun_m(a,n,m,odd,even) fun_v(n,m,a,odd,even)

int main( void )
{
    int a[5][6] = {{1,2,3,4,5,6},{7,8,9,10,11,12},{13,14,15,16,17,18},{19,20,21,22,23,24},{25,26,27,28,29,30}};

    int odd, even;
    fun_v( 5, 6, a, &odd, &even );
    printf( "odd=%d, even=%d\n", odd, even );

    fun_m( a, 5, 6, &odd, &even );
    printf( "odd=%d, even=%d\n", odd, even );
}

2020-05-08 21:19
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10540
专家分:42927
注 册:2014-5-20
收藏
得分:3 
#include <stdio.h>

void fun(int a[5][6], int n, int m, int *odd, int *even)
{
    *odd = 0;
    *even = 0;
    int* p = (int*)a;
    int i;
    for (i=0;i<n*m; ++i)
    {
        if (p[i]&1)
            *odd += p[i];
        else
            *even += p[i];
    }
}

int main(void)
{
    int a[5][6] = {{1,2,3,4,5,6},{7,8,9,10,11,12},{13,14,15,16,17,18},{19,20,21,22,23,24},{25,26,27,28,29,30}};
    int odd, even;
    fun(a, 5, 6, &odd, &even);
    printf( "odd=%d, even=%d\n", odd, even);
}
2020-05-08 22:04
快速回复:指针和二维数组的问题,求数组中奇数之和与偶数之和
数据加载中...
 
   



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

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