| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 902 人关注过本帖
标题:菜鸟C程入门,求大神解救
只看楼主 加入收藏
嘲风
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2016-12-22
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:8 
菜鸟C程入门,求大神解救
编写一个函数(参数用指针)将一个3×3矩阵转置,并且求该矩阵的迹(矩阵的迹是对角元素之和)。
搜索更多相关主题的帖子: 元素 
2016-12-23 17:34
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:3 
最好能举例说明下,对数学忘得差不多了。
2016-12-23 18:00
嘲风
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2016-12-22
收藏
得分:0 
回复 2楼 grmmylbs
他的迹就是a[0][0]+a[1][1]+a[2][2];
转至就是a[i][j]=a[j][i]
2016-12-23 18:03
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
收藏
得分:6 
书上照搬的,做个参考吧
#include <stdio.h>
void move(int *pointer);
int main()
{
    int a[3][3],*p,i;
    printf("输入矩阵:\n");
    for(i=0;i<3;i++)
    scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);
    p=&a[0][0];
    move(p);
    printf("输出矩阵:\n");
    for(i=0;i<3;i++){
        printf("%d %d %d",a[i][0],a[i][1],a[i][2]);
        printf("\n");
    }
    printf("矩阵的迹是%d",a[0][0]+a[1][1]+a[2][2]);
    return 0;
 }
 void move(int *p)
 {
     int i,j,temp;
     for(i=0;i<3;i++)
     for(j=i;j<3;j++)
     {
         temp=*(p+3*i+j);
         *(p+3*i+j)=*(p+3*j+i);
         *(p+3*j+i)=temp;
     }
 }

Code is my life.
2016-12-23 19:25
嘲风
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2016-12-22
收藏
得分:0 
回复 4楼 bjut_Allen
#include <stdio.h>
int main()       ///为什么这点不做move函数声明也可以?
{
    int a[3][3],*p,i;
    printf("输入矩阵:\n");
    for(i=0;i<3;i++)
    scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);
    p=&a[0][0];
    move(p);
    printf("输出矩阵:\n");
    for(i=0;i<3;i++)
    {
        printf("%d %d %d",a[i][0],a[i][1],a[i][2]);
        printf("\n");
    }
    printf("矩阵的迹是%d",a[0][0]+a[1][1]+a[2][2]);
    return 0;
 }
 void move(int *p)
 {
     int i,j,temp;
     for(i=0;i<3;i++)
     for(j=i;j<3;j++)
     {
         temp=*(p+3*i+j);
         *(p+3*i+j)=*(p+3*j+i);
         *(p+3*j+i)=temp;
     }
 }
2016-12-23 21:20
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
收藏
得分:2 
如果函数没声明直接调用,当出现函数调用时编译器默认为是函数声明并且返回值是int,这里函数恰好无返回值可以通过编译,如果换成char,double类型就会出错,总之不声明函数直接调用是会给你一个大大的warning

Code is my life.
2016-12-23 21:29
LG隐
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:67
专家分:198
注 册:2016-4-20
收藏
得分:3 
行变列,列变行
2016-12-23 21:35
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
看来问题已解决~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-24 05:51
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:6 
程序代码:
#include <stdio.h>
#define S(a) sizeof (a)
int main()
{
    int move(int (*p)[3],int m,int n);
    int a[3][3];
    int sum=0;

    int *p=*a;

    int (*pl)[S(*a)/S(int)]=a;

    for (;p<*a+S(a)/S(int);scanf("%d",p++));

    sum=move(pl,S(a)/S(*a),S(*a)/S(int));

    for (p=*a;p<*a+S(a)/S(int);printf((p-*a)%3==2?"%3d\n":"%3d",*p++));

    printf("矩阵的迹为:%d\n",sum);

    return 0;
} 
int move(int (*p)[3],int m,int n)
{
    int i=0;
    int j=0;
    int sum=0;

    for (i=0;i<m;i++)
        for (j=i;j<n;j++)
        {
            int t;
            t=*(*(p+i)+j);
            *(*(p+i)+j)=*(*(p+j)+i);
            *(*(p+j)+i)=t;
        }

    for (i=0;i<m;i++)
        sum+=*(*(p+i)+i);

    return sum;
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-24 06:48
快速回复:菜鸟C程入门,求大神解救
数据加载中...
 
   



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

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