标题:看看这个函数题,想不出头绪.
只看楼主
厉害
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-11-18
 问题点数:0 回复次数:9 
看看这个函数题,想不出头绪.
 有二维数组A所示(在程序中可通过赋初值的方式给定),请通过一个C程序把该二维数组的每一行的非零元素集中到前边,把所有的零元素放到后边
  (提示:写一个函数,可以将一个一维数组的所有非零元素集中到前半部分,在调用函数对二维数组的某一行处理时,只要将该行的首地址作为实际参数传递给函数,作为函数中一维数组的首地址即可。函数中对一维数组的处理算法如附图3所示)
附图:
A={2 0 3 4 0 0 0 5
   9 8 0 0 7 2 2 1
   4 0 0 0 2 0 0 8
   0 0 8 0 0 0 3 0
   0 0 2 6 0 0 0 9}
搜索更多相关主题的帖子: 函数 头绪 
2008-11-18 07:44
jdh99
Rank: 2
来 自:南师大
等 级:论坛游民
威 望:1
帖 子:59
专家分:15
注 册:2008-11-7
得分:0 
你没说非0位需要什么顺序,那就随便排
#include <stdio.h>
main()//思路:将第一个0与第一位换,第二个与第二位换,类推
{
    int A[5][8]={{2,0,3,4,0,0,0,5},{9,8,0,0,7,2,2,1},{4,0,0,0,2,0,0,8},{0,0,8,0,0,0,3,0},{0,0,2,6,0,0,0,9}},(*p1)[8],(*p2)[8],i,j,temp;
    for(p1=A;p1<A+5;p1++)
    {
        p2=p1;j=0;
        for(i=0;i<8;i++)
        {
            if(*((*p1)+i)==0) //遇到0
            {
                temp=*((*p1)+j);
                *((*p1)+j)=*((*p1)+i);
                *((*p1)+i)=temp;
                j++;
            }
        }
    }
    for(p1=A;p1<A+5;p1++)
    {
        for(i=0;i<8;i++) printf("%d\t",*((*p1)+i));
        printf("\n");
    }
}

作鲲鹏,遨游于天地沧海
2008-11-18 10:00
jdh99
Rank: 2
来 自:南师大
等 级:论坛游民
威 望:1
帖 子:59
专家分:15
注 册:2008-11-7
得分:0 
输出:
0       0       0       0       2       3       4       5
0       0       9       8       7       2       2       1
0       0       0       0       0       4       2       8
0       0       0       0       0       0       3       8
0       0       0       0       0       6       2       9
Press any key to continue

作鲲鹏,遨游于天地沧海
2008-11-18 10:04
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 
正好反了
倒过来就对了

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-11-18 10:32
厉害
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-11-18
得分:0 
谢谢你的答案!但不知道能不能用函数的解法呢?就是利用函数的调用.......
2008-11-18 13:04
jdh99
Rank: 2
来 自:南师大
等 级:论坛游民
威 望:1
帖 子:59
专家分:15
注 册:2008-11-7
得分:0 
#include <stdio.h>
void change(int (*p)[8])
{
    int i,j,temp,(*p1)[8];
    for(p1=p;p1<p+5;p1++)
    {
        j=0;
        for(i=0;i<8;i++)
        {
            if(*((*p1)+i)==0) //遇到0
            {
                temp=*((*p1)+j);
                *((*p1)+j)=*((*p1)+i);
                *((*p1)+i)=temp;
                j++;
            }
        }
    }    
}
main()//思路:将第一个0与第一位换,第二个与第二位换,类推
{
    int A[5][8]={{2,0,3,4,0,0,0,5},{9,8,0,0,7,2,2,1},{4,0,0,0,2,0,0,8},{0,0,8,0,0,0,3,0},{0,0,2,6,0,0,0,9}},(*p)[8],i;
    p=A;
    change(p);
    for(p=A;p<A+5;p++)
    {
        for(i=0;i<8;i++) printf("%d\t",*((*p)+i));
        printf("\n");
    }
}

作鲲鹏,遨游于天地沧海
2008-11-18 23:15
yuxiang8200
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-11-25
得分:0 
#include <stdio.h>
void sort(int *a)
{
    int i = 0;
    int j = 0;
    int temp;
    for( i = 0 ; i < 8 ; i++ )
    {
        if(a[i] == 0)
        {
            temp = a[j];
            a[j] = 0;
            a[i] = temp;
            j++;
        }
    }
}
int main()
{
    int i = 0 ;
    int j = 0;
    int array[5][8] = { 2 ,0 ,3 ,4 ,0 ,0 ,0 ,5,
                  9 ,8 ,0 ,0 ,7 ,2 ,2 ,1,
                  4 ,0 ,0 ,0 ,2 ,0 ,0 ,8,
                  0 ,0 ,8 ,0 ,0 ,0 ,3 ,0,
                  0 ,0 ,2 ,6 ,0 ,0 ,0 ,9 };    
    printf("原序列:\n");
    for( i = 0 ; i < 5 ; i ++ )
    {
        for( j = 0 ; j < 8 ; j ++ )
            printf("%d\t",array[i][j]);    
        printf("\n");
    }
    printf("变换后序列:\n");
    for( i = 0 ; i < 5 ; i ++ )
    {        
        sort(array[i]);
        for( j = 0 ; j < 8 ; j ++ )
            printf("%d\t",array[i][j]);    
        printf("\n");
    }
    return 0;
}
2008-11-19 00:04
yixianliu
Rank: 1
等 级:新手上路
帖 子:29
专家分:9
注 册:2008-10-13
得分:0 
感觉好强大...牛!
2008-11-19 00:42
anqi0594
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2008-11-18
得分:0 
矩阵最好应用MATLAB去做
2008-11-19 12:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-244900-1-1.html




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

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