1. 用C语言编写:特殊矩阵的压缩存储算法的实现(对称矩阵、三角矩阵、对角矩阵)
可以用十字链表 三元组表 或者其他 都可以对特殊矩阵进行压缩存储
2. C语言程序设计方案!!二维数组应用 矩阵算法 求高人
#include <stdio.h>
void input_data(int *l,int *r,int data[100][100])
{ int i,j,k;
printf("输入矩阵行数:");
scanf("%d",l);
printf("输入矩阵列数:");
scanf("%d",r);
printf("按行输入数据,数据间用空格间隔:\n");
for(i=0;i<*l;i++)
for(j=0;j<*r;j++)
scanf("%d",&data[i][j]);
}
int add_subtra(int m1[100][100],int l1,int r1,
int m2[100][100],int l2,int r2,char m,int rm[100][100])
{ int i,j;
if(l1!=l2 || r1!=r2)
{ printf("矩阵数据错误1.\n"); return; }
if(m=='+')
for(i=0;i<l1;i++)
for(j=0;j<r1;j++)
rm[i][j]=m1[i][j]+m2[i][j];
else
for(i=0;i<l1;i++)
for(j=0;j<r1;j++)
rm[i][j]=m1[i][j]-m2[i][j];
}
int mul(int m1[100][100],int l1,int r1,
int m2[100][100],int l2,int r2,int m[100][100])
{ int i,j,k;
if(l1!=r2 )
{ printf("矩阵数据错误2.\n"); return; }
for(i=0;i<l1;i++)
for(j=0;j<r2;j++)
{ m[i][j]=0;
for(k=0;k<r1;k++)
m[i][j]+=m1[i][k]*m2[k][j];
}
}
int output(int m[100][100],int l,int r)
{ int i,j;
for(i=0;i<l;i++)
{ for(j=0;j<r;j++)
printf("%3d ",m[i][j]);
printf("\n");
}
}
int main()
{ int d1[100][100],d2[100][100],d[100][100];
int l1,r1,l2,r2;
int i,j,k;
char mark[2];
printf("输入第一个矩阵数据:\n");
input_data(&l1,&r1,d1);
printf("输入的第一个矩阵:\n");
output(d1,l1,r1);
printf("输入第二个矩阵数据:\n");
input_data(&l2,&r2,d2);
printf("输入的第二个矩阵:\n");
output(d2,l2,r2);
printf("指定运算符(+/-/*):");
scanf("%s",mark);
while(mark[0]!='+' && mark[0]!='-' && mark[0]!='*')
{ printf("符号错误请重新输入(+/-/*):");
scanf("%s",mark);
}
switch(mark[0])
{ case '+':
case '-': add_subtra(d1,l1,r1,d2,l2,r2,mark[0],d); break;
case '*': mul(d1,l1,r1,d2,l2,r2,d); break;
}
//output(d1,l1,r1);
//output(d2,l2,r2);
printf("运算:%c,计算结果为:\n",mark[0]);
output(d,l1,r2);
system("pause");
}
两个运算矩阵可以是大小不同的, 输出结果由被乘数矩阵的行和乘数矩阵的列决定,
你要求的输出格式比较烦,没时间不够啦!有时间再玩吧。
3. C语言实现DES算法中各种矩阵变换
首先说下:楼主有找到DES算法了吗?还是打算自己写?是这样的?大家一般都是使用开源的OPNSSL,这个是好东西啊,里边包含了全世界知名的加密算法,而且是免费的。里边就有你说点这些小方法。只要下载源码,自己编译,就能有自己的所有加密源码了。
4. 矩阵运算的c语言实现
算法应该没有问题,错在下面:
1、没有对矩阵pc分配内存。
2、mul( )中for(i=0;i>ai;i++)打错了,将 i>ai 改为 i<ai
5. 关于下面矩阵查找用c语言实现算法 最好加入必要注释
O(n)的算法肯定不行,最差也是O(2n),附上代码~
你题目抄对了没
#include<stdio.h>
intIsInArray(int*a,intline_count,intvalue)
{
intfirst;
intlast;
for(inti=0;i<line_count;++i)
{
first=*(a+i*line_count);
last=*(a+i*line_count+line_count-1);
printf("%d ",i);
//valueintherangeofthisline
if(value>=first&&value<=last)
{
for(intj=0;j<line_count;++j)
{
//getvalue
if(*(a+i*line_count+j)==value)
{
return0;
}
}
}
}
return-1;
}
intmain()
{
inta[4][4]={{1,2,3,4},{2,3,4,5},{5,6,7,8},{10,11,13,14}};
int*p=&a;
intres=IsInArray(p,4,10);
if(res==0)
{
printf("found. ");
}
else
{
printf("notfound. ");
}
}
6. !!!跪求C语言实现矩阵运算(加,减,乘、求逆、转置)
1、首先打开vs2015(其他版本也可以),新建一个Windows Form窗体程序或者控制台都可以。
7. c语言矩阵怎么写
方法1:直接定义10*10的数组,读取全部数据,再根据选择的行列数打印输出部分数据。
方法2:通过文件流指针的移动,跨过不需要的内容。(这里控制文件流指针可利用ftell和fseek函数来移动指定字节数)我是利用fscanf读取需要的内容,遇到需要跳行就用fgets来跳过。(注意常量参数根据自己需求修改)。
说明:边读取边打印输出,就不需要变量存储。我的代码是把读取出来的内容存放在三维数组中(文件内容你没指定,如是单纯数字,二维数组即可,我是作为字符串处理,故用三维数组。),数组是根据实际大小,动态申请,写成两个独立函数。
下面是代码:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define MAXR 10//文件中矩阵最大行
#define MAXC 10//文件中矩阵最大列
#define MS 3//矩阵中元素字符串最大字符数(包含结束符号,不可小于实际内容)
#define MBUF 100//文件中一行最大字符数,可设置大一点
char ***getMem(int r,int c,int len);//动态申请一个三维数组
void freeMem(char ***datas,int r,int c);//释放数组空间
void showDatas(char ***datas,int r,int c);//打印输出结果
int main()
{
int r=MAXR+1,c=MAXC+1,i=0,j=0;
char ***datas=NULL,str[3],buf[MBUF];
FILE *fp=NULL;
printf("请输入要获取的行数和列数: ");
while(r<0 || r>MAXR || c<0 || c>MAXC)scanf("%d%d",&r,&c);
datas=getMem(r,c,MS);
fp=fopen("C:\test.data","r");
if(!fp) return 1;
while(fscanf(fp,"%s",str)!=-1)
{
if(i<c) strcpy(datas[j][i],str),i++;
if(i==c)
{
if(!fgets(buf,sizeof(buf),fp)) break;
i=0,j++;
}
if(j==r) break;
}
showDatas(datas,r,c);
freeMem(datas,r,c);
return 0;
}
void showDatas(char ***datas,int r,int c)
{
int i,j;
for(i=0;i<r;i++,printf(" "))
for(j=0;j<c;j++)
printf("%s ",datas[i][j]);
printf(" ");
}
void freeMem(char ***datas,int r,int c)
{
int i,j;
if(!datas)
{
for(i=0;i<r;i++,free(datas[i]))
for(j=0;j<c;j++)
free(datas[i][j]);
free(datas);
}
}
char ***getMem(int r,int c,int len)
{
int i,j;
char ***datas=NULL,**dr=NULL;
datas=(char ***)malloc(sizeof(char **)*r);
if(!datas) return NULL;
for(i=0;i<r;i++)
{
dr=(char **)malloc(sizeof(char *)*c);
if(!dr) return NULL;
else
{
for(j=0;j<c;j++)
{
dr[j]=(char *)malloc(sizeof(char)*len);
if(!dr[j]) return NULL;
}
datas[i]=dr;
}
}
return datas;
}
8. C语言设计稀疏性矩阵,并进行算法操作
稀疏矩阵的实现可以使用三元组或者十字链表,n维数组如果数据量比较大会很浪费空间的.
如果使用三元组的话前两元为坐标,第三元为数据:
typedef struct Triplet
{
int i,j; // 该非零元的行和列下标
int e; // 非零元素值
}
十字链表麻烦一些,如下:
typedef struct OLNode
{
int i,j; // 该非零元的行和列下标
int e; // 非零元素值
OLNode *right,*down; // 该非零元所在行表和列表的后继链域
}OLNode,*OLink;
typedef struct
{
OLink *rhead,*chead; // 行和列链表头指针向量基址
int mu,nu,tu; // 稀疏矩阵的行数、列数和非零元个数
}CrossList;//T1
关于稀疏矩阵的运算,网上有很多解释的
9. 如何实现用c语言或c++来编写矩阵2范数的算法,矩阵为n阶的
矩阵A的2范数就是 A的转置乘以A矩阵特征根 最大值的开根号
写一个矩阵,n阶矩阵就是n是变量,等待输入,矩阵的话最简单的就是用一个固定长度的二维数组来存。
然后根据公式分别写对应的函数再调用不就行了。