二维动态数组空间分配 c语言,科学网—C语言中动态二维数组的使用和分配 - 王一哲的博文...

好多年不用C语言了,最后一次使用还是读研的时候写矩量法的时候了,看见VS的界面总能想起当年读书的时候的各种错误,往事随风。本程序应人之约,首先得到一个随机的矩阵,之后通过将矩阵分解为几个小矩阵统计小矩阵的所有元素的和,最终得到一个新的矩阵,其中涉及动态二维数组的分配,多维数组的使用按照这个方式类推。一维数组相当于矢量,二维数组相当于矩阵,高维数组可以用张量来理解。在数值计算中应该会遇到

#include

#include

#include

#include

//作者Waightman H Wang

#define Ohang 14     //初始矩阵大小

#define Olie 14

#define RATE 5     //压缩率

int main()

{

//根据压缩率判断压缩后的矩阵大小

double input[Ohang][Olie];

int Lhang,hangyu,Llie,lieyu,ii;

Lhang=Ohang/RATE;

hangyu=Ohang%RATE;

Llie=Olie/RATE;

lieyu=Olie%RATE;

if(hangyu>3)

Lhang=Lhang+1;

if(lieyu>3)

Llie=Llie+1;

double **output;

output = (double **)malloc(sizeof(double*)*Lhang);//申请一组一维指针空间。

for(ii = 0; ii < Llie; ii ++)

output[ii] = (double *)malloc(sizeof(double) * Llie); //对于每个一维指针,申请一行数据的空间。

if (output == 0)             // 内存申请失败,提示退出

{

printf("out of memory,press any key to quit...n");

exit(0);             // 终止程序运行,返回操作系统

}

int i = 0, j = 0, oi = 0, oj = 0;

srand(1);

for (i = 0; i < Ohang; i++)

for (j = 0; j < Olie; j++)

input[i][j] = rand()%10;

//计算新矩阵的元素

double sum = 0.0;//小矩阵求和存储

int sum_count = 0;//非零元个数

int hangtemp,lietemp;//分块矩阵的临时角标

for(oi=0;oi

{

for(oj=0;oj

{

sum = 0.0;//小矩阵求和存储

sum_count = 0;//非零元个数

hangtemp=oi*RATE;

lietemp=oj*RATE;

for(i=0;i

for(j=0;j

{

sum=sum+input[hangtemp+i][lietemp+j];

}

//输出矩阵的填充

output[oi][oj]=sum;

}

}

//最后一行可能填不满,单独处理

int RATEH,RATEL;

if(hangyu>3)

RATEH=hangyu;

else

RATEH=RATE;

hangtemp=RATE*(Lhang-1);

for(oj=0;oj

{

sum = 0.0;//小矩阵求和存储

sum_count = 0;//非零元个数

lietemp=oj*RATE;

for(i=0;i

for(j=0;j

{

sum=sum+input[hangtemp+i][lietemp+j];

}

//输出矩阵的填充

output[Lhang-1][oj]=sum;

}

//最后一列的处理

if(lieyu>3)

RATEL=lieyu;

else

RATEL=Olie-lieyu;

lietemp=RATE*(Llie-1);

for(oi=0;oi

{

sum = 0.0;//小矩阵求和存储

sum_count = 0;//非零元个数

hangtemp=oi*RATE;

for(i=0;i

for(j=0;j

{

sum=sum+input[hangtemp+i][lietemp+j];

}

//输出矩阵的填充

output[oi][Llie-1]=sum;

}

//最后右下角元素

hangtemp=oi*RATE;

lietemp=oi*RATE;

sum=0;

for(i=0;i

for(j=0;j

{

sum=sum+input[hangtemp+i][lietemp+j];

}

//输出矩阵的填充

output[Lhang-1][Llie-1]=sum;

for (i = 0; i < Ohang; i++)

{

for (j = 0; j

printf("%f ", input[i][j]);

printf("n");

}

for (i = 0; i < Lhang; i++)

{

for (j = 0; j < Llie; j++)

printf("%f ", output[i][j]);

printf("n");

}

system("pause");

return 0;

}

转载本文请联系原作者获取授权,同时请注明本文来自王一哲科学网博客。

链接地址:http://wap.sciencenet.cn/blog-1218015-916857.html

下一篇:基于CST海面背景耦合下目标电磁散射特性仿真分析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值