您的位置:首页 > 其它

带状矩阵,对称矩阵,三角矩阵

2015-11-01 16:03 288 查看
对称矩阵:

#include <stdio.h> //重要公式*(p+((k*(k+1)/2)+p1)*sizeof(int))= *(p+((p1*(p1+1)/2)+k)*sizeof(int))

#include <stdlib.h>

int main()

{

int n,len,k,m,p1,i;

scanf("%d",&n);

printf("请输入询问次数:\n");

scanf("%d",&m);

len=n*(n+1)/2; //计算需要输入的个数

int *p=(int *)malloc(sizeof(int)*len); //分配空间

int *f;

f=p;

printf("请输入%d个数:\n",len);

for(; f<=p+(n*(n+1)/2-1)*sizeof(int); f+=sizeof(int))

{

scanf("%d",f); //读入该空间所分配的元素

}

printf("请输入要询问的数:\n");

//printf("%d\n",*p);

for(i=1; i<=m; i++)

{

scanf("%d%d",&k,&p1); //读入要查询的数的行,列数

if(k>=p1) //在对角线上或对角线以下

{

printf("%d\n",*(p+((k*(k+1)/2)+p1)*sizeof(int)));

}

else // 在对角线以上可以通过对角线以下查询 因为aij=aji

printf("%d\n",*(p+((p1*(p1+1)/2)+k)*sizeof(int)));

}

return 0;

}

三角矩阵:

#include <stdio.h>

#include <stdlib.h>

int main()

{

int n,len,k,m,p1,i;

scanf("%d",&n);

printf("请输入询问次数:\n");

scanf("%d",&m);

len=n*(n+1)/2; //计算出三角矩阵所需输入元素个数

int *p=(int *)malloc(sizeof(int)*len); //申请动态内存

int *f;

f=p;

printf("请输入%d个数:\n",len);

for(; f<=p+(n*(n+1)/2-1)*sizeof(int); f+=sizeof(int))//读入数据

{

scanf("%d",f);

}

printf("请输入要询问的数:\n");

for(i=1; i<=m; i++)

{

scanf("%d%d",&k,&p1); //读入要查询的数在第几排,第几列

if(k<=p1) //上三角矩阵只有当k<=p1时有非0值

{

printf("%d\n",*(p+((n-k+1)*k+k*(k-1)/2+p1-k)*sizeof(int)));//根据地址查询

}

else //k>p1一定只有0值

printf("0\n");

}

return 0;

}

带状矩阵:

#include <stdio.h> //查询元素的值的公式为*(p+((2*b+1)*k-b+p1-k+b)*sizeof(int))

#include <math.h> //p为首地址,k为行数,p1为列数,b为带状矩阵半宽

#include <stdlib.h>

int main()

{

int n,len,k,m,p1,i,b;

scanf("%d %d",&n,&b);

printf("请输入询问次数:\n");

scanf("%d",&m);

len=(2*b+1)*n-2*b; //带状矩阵元素的计算公式

int *p=(int *)malloc(sizeof(int)*len);

int *f;

f=p;

printf("请输入%d个数:\n",len);

for(; f<=p+(len-1)*sizeof(int); f+=sizeof(int))

{

scanf("%d",f); //读入元素

}

printf("请输入要询问的数:\n");

//printf("%d\n",*p);

for(i=1; i<=m; i++)

{

scanf("%d%d",&k,&p1); // 询问的数在第几行,第几列

if(abs(k-p1)>=0) //当abs(k-p1)>=0时才有不为零的元素

{

printf("%d\n",*(p+((2*b+1)*k-b+p1-k+b)*sizeof(int)));//根据地址查询

}

else

printf("0\n");

}

return 0;

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: