标题:C语言二维动态数组怎么输入和输出
只看楼主
CUserCQ
Rank: 1
等 级:新手上路
帖 子:6
专家分:5
注 册:2016-9-17
结帖率:100%
已结贴  问题点数:20 回复次数:2 
C语言二维动态数组怎么输入和输出
大家好,我想要完成一个对称矩阵的C语言程序的编写,主要想要完成以下几项功能:

1)利用二维数组来存储对称矩阵
2)对二维数组进行压缩转化为一维数组进行存储
3)根据一维数组的下标转换为二维数组相应的下标并打印屏幕输出

但现在在对称矩阵转换为二维矩阵进行存储时出现了点小问题!
由于对称矩阵的对称的特性性,所以一个基本的行和列都是相等的,例如 4*4 式,5*5 式等,
对于二维数组的存储中行列可以使用#define来进行定义,但这样每次如果想要改动二维数组的
行列,那么就必须得在源程序中进行改动,所以我用了动态数组的方法,能让程序使用者能动态
的对对称矩阵的行列进行输入(其实就是C语言中必须先定义后使用并且必须集中放在代码的最开
始处的限制,我想如果使用C++编写会好点,但需用C语言)

我的代码是:
程序代码:
//实现二维数组的动态分配
#include<stdio.h>
#include<stdlib.h>
int N;
int input();
int main()
{
    int i;
    int j;
    double **arr_two;    
    N = input();    
    arr_two =(double **)malloc(sizeof(double *)*N);


    for(i = 0; i < N; i++)
    {
        arr_two[i] =(double*)malloc(sizeof(double *)*N); 
    }
    for(i = 0 ; i < N ; i++ )    
    {
        for(j = 0 ; j < N ; j++)
        {
            printf("请输入第%d行第%d列的数:",i+1,j+1);
            scanf("%f",&arr_two[i][j]);
            getchar();
        }
    }
    for(i = 0 ; i < N ; i++)
    {
        for(j = 0 ; j < N ; j++)
        {
            if(j + 1 == N)
            {
                printf("%3.2f\t\n",arr_two[i][j]);
            }
            else
            {
                printf("%3.2f\t",arr_two[i][j]);
            }
        }
    }

    return 0;
}

int input()
{
    int N;
    printf("请输入一个数字:");
    scanf("%d",&N);
    getchar();
    return N;
}


我是在Linux下编写的C语言源码,不知道在Windows的编译器中会出现什么结果
程序能进行输入和是输出,但是会有一些问题:就是输出全部为0.00等,在Linux
下尝试过注释scanf("%f",&arr_two[i][j]);  getchar();两句
并将注释的第一句改成:arr_two[i][j]= i+j;等能够进行正常的输入,请问
各位大神,该怎么改?

以下为程序运行的截图:

搜索更多相关主题的帖子: C语言 源程序 动态 
2016-09-17 20:23
张子木
Rank: 2
等 级:论坛游民
帖 子:2
专家分:20
注 册:2016-9-14
得分:20 
/*
  double类型的要用lf而不是f
                  */
#include<stdio.h>
#include<stdlib.h>
int N;
int input();
int main()
{
    int i;
    int j;
    double **arr_two;   
    N = input();   
    arr_two =(double **)malloc(sizeof(double *)*N);


    for(i = 0; i < N; i++)
    {
        arr_two[i] =(double*)malloc(sizeof(double *)*N);
    }
    for(i = 0 ; i < N ; i++ )   
    {
        for(j = 0 ; j < N ; j++)
        {
            printf("请输入第%d行第%d列的数:",i+1,j+1);
            scanf("%lf",&arr_two[i][j]);
            getchar();
        }
    }
    for(i = 0 ; i < N ; i++)
    {
        for(j = 0 ; j < N ; j++)
        {
            if(j + 1 == N)
            {
                printf("%3.2lf\t\n",arr_two[i][j]);
            }
            else
            {
                printf("%3.2lf\t",arr_two[i][j]);
            }
        }
    }

    return 0;
}

int input()
{
    int N;
    printf("请输入一个数字:");
    scanf("%d",&N);
    getchar();
    return N;
}
2016-09-17 20:57
CUserCQ
Rank: 1
等 级:新手上路
帖 子:6
专家分:5
注 册:2016-9-17
得分:0 
回复 2楼 张子木
谢谢 额 想了很久 又是查指针又是查什么的 终于可以了 真心感谢
2016-09-17 21:28



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




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

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