好多年不用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;
}
转载本文请联系原作者获取授权,同时请注明本文来自王一哲科学网博客。
链接地址:/blog-1218015-916857.html
下一篇:基于CST海面背景耦合下目标电磁散射特性仿真分析
二维动态数组空间分配 c语言 科学网—C语言中动态二维数组的使用和分配 - 王一哲的博文...
如果觉得《二维动态数组空间分配 c语言 科学网—C语言中动态二维数组的使用和分配 - 王一哲》对你有帮助,请点赞、收藏,并留下你的观点哦!