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;等能够进行正常的输入,请问
各位大神,该怎么改?
以下为程序运行的截图: