成都网站建设设计

将想法与焦点和您一起共享

c语言零矩阵函数 含有0的矩阵是零矩阵

C语言:0-1矩阵

#includestdio.h

公司主营业务:成都网站设计、成都做网站、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出秦都免费做网站回馈大家。

main()

{   int a[100][100],n,m,i,j,b[6];

scanf("%d,%d",n,m);

for(i=0;in;i++)

for(j=0;jm;j++)

   scanf("%d",a[i][j]);

for(i=0;in;i++){

b[1]=0;b[2]=0;b[3]=0;b[4]=0;b[5]=0;

if(a[i][0]=1){b[0]=1;b[1]=0;}

else b[0]=0;

for(j=1;jm;j++){

if(a[i][j]==1)

b[0]++;

else

b[0]=0;

if(a[i][j-1]==0a[i][j]==1) b[1]=j;

if(a[i][j]==1a[i][j+1]==0) b[2]=j;

if(b[0]b[3]){b[3]=b[0];b[4]=b[1];b[5]=b[2];}

if(b[3]==0){b[4]=-1;b[5]=-1;}

}

printf("%d %d\n",b[4],b[5]);

}            

}

如图所示,望采纳。。。。。。

C语言函数

#include stdio.h

#include stdlib.h

#include time.h

void Fill ( char *F, int n )

{

srand(time(NULL));

while ( n-- 0 )

*F++ = rand() % 2;

}

void Calc ( char *F, char *D, int rF, int c )

{

int i, j, k;

char *pF, *pD, *pT, *pB;

size_t lineSize = c * sizeof(char);

pT = F; pD = D;

memcpy ( pD, pT, lineSize );

pD += c;

for ( i = 1; i rF; i++ )

{

pF = pT += c;

memcpy ( pD, pF, lineSize );

pD += c; pB = D;

for ( j = (1i)-1; j 0; j-- )

{

for ( k = 0; k c; k++ )

*pD++ = pF[k] | *pB++;

}

}

}

int Show ( char *m, int r, int c )

{

char *s;

char *ps;

int i, j;

s = (char*)malloc ( sizeof(char) * (1+c) );

s[c] = 0;

for ( i = 0; i r; i++ )

{

ps = s;

for ( j = 0; j c; j++ )

*ps++ = *m+++'0';

puts ( s );

}

putchar ( '\n' );

free ( s );

}

int main ( void )

{

int rF, c, rD;

char *hF, *hD;

FILE *fp;

scanf ( "%d%d", rF, c );

rD = 1 rF; rD--;

hF = (char*)malloc ( rF * c );

hD = (char*)malloc ( rD * c );

Fill ( hF, rF*c );

Show ( hF, rF, c );

Calc ( hF, hD, rF, c );

Show ( hD, rD, c );

free ( hD );

free ( hF );

system ( "pause nul" );

}

c语言基础问题 求解怎么输入m和n然后输出一个m*n的零矩阵呢?就是数组 求大神给代码

#includestdio.h

int main(){

int i,j,m,n;

printf("请输入0矩阵的行数m、列数n:");

scanf("%d %d",m,n);

for(i=0;im;i++){

for(j=0;jn;j++){

printf("0");

}

printf("\n");

}

return 0;

}

C语言关于矩阵乘法的函数,,

童鞋,不知道你是用的什么测试数据,在我的机器上测试了几组数据,结果都是正确的。

重复下我的测试代码。

#include "stdio.h"

#include "stdlib.h"

#include "malloc.h"

void multiplication(int a,int b,int c,int *p,int *q);

void main()

{

int m,n,l,h;

int i,j,g,k;

int *p,*q;

char x;

printf("请输入a矩阵行数和列数,以空格分开,,,");

scanf("%d %d",m,n);

p=(int *)malloc(sizeof(int)*m*n);

for(i=0;im;i++)

for(j=0;jn;j++)

{

printf("请输入a矩阵%d行%d列的数,,",(i+1),(j+1));

scanf("%d",(p+m*i+j));

}

printf("请输入b矩阵行数和列数,以空格分开,,,");

scanf("%d %d",l,h);

q=(int *)malloc(sizeof(int)*l*h);

for(g=0;gl;g++)

for(k=0;kh;k++)

{

printf("请输入b矩阵%d行%d列的数,,",(g+1),(k+1));

scanf("%d",(q+l*g+k));

}

multiplication( m, n, h, p, q);

}

void multiplication(int a,int b,int c,int *p,int *q)

{

int i,j;

int k;

int sum;

for(i=0;ia;i++)

{

for(j=0;jc;j++)

{

sum=0;

for(k=0;kb;k++)

{

sum=sum+(*(p+a*i+k))*(*(q+b*k+j));

}

printf("%d ",sum);

}

printf("\n");

}

}

附带一组测试数据

A 3 4

2 1

B 3

4

Result

25

10

结果正确。

用C语言编写一个矩阵运算的程序,高分!

//矩阵三元组之矩阵相加 相乘

#include iostream

using namespace std;

typedef int Elemtype;

#define MAXSIZE 12500 //最大非零元素

typedef struct Triple

{

Elemtype value;

int row,col;

}Triple;

typedef struct TSMatrix

{

Triple data[MAXSIZE+1];

int mu,nu,tu;

}TSMatrix;

TSMatrix T;

void InputMatrix(TSMatrix T) //输入t个非零元素

{

cout"请输入稀疏矩阵的信息,(行,列,非零元素个数)"endl;

cinT.muT.nuT.tu;

int i;

cout"请输入非零元素的信息(行,列,值),提醒(下标从1开始)"endl;

for(i=1;i=T.tu;++i)

{

cinT.data[i].rowT.data[i].colT.data[i].value;

}

}

void Output(TSMatrix T)

{

cout"矩阵的三元组表示(ROW=)"T.mu" COL="T.nu"非零个数="T.tuendl;

int i;

for(i=1;i=T.tu;++i)

{

cout"ROW(行):"T.data[i].row" COL(列):"T.data[i].col" Value(值)"T.data[i].valueendl;

}

}

void TransposeSMatrix(TSMatrix M,TSMatrix T) //矩阵的转置

{

T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;

int i,j,k=1;

for(i=1;i=M.nu;++i)

{

for(j=1;j=M.tu;++j)

if(M.data[j].col==i)

{

T.data[k].row=i;

T.data[k].col=M.data[j].row;

T.data[k].value=M.data[j].value;

++k;

}

}

}

void AddMastrix(TSMatrix M,TSMatrix T,TSMatrix Q) //矩阵相加

{

int index_a,index_b,i=1,j=1,k=1;

Q.mu=M.mu; Q.nu=M.nu;

while (i=M.tuj=T.tu)

{

index_a=(M.data[i].row)*(M.data[i].col)+M.data[i].col;

index_b=(T.data[j].row)*(T.data[j].col)+T.data[j].col;

if(index_aindex_b)

{

Q.data[k]=M.data[i];

i++;

k++;

}

else if(index_aindex_b)

{

Q.data[k]=T.data[j];

j++;

k++;

}

else if(index_a==index_b)

{

if((M.data[i].value+T.data[j].value)!=0)

{

Q.data[k]=M.data[i];

Q.data[k].value=M.data[i].value+T.data[j].value;

k++;

}

++i;

++j;

}

}

//复制剩余元素

for(;i=M.tu;++i)

{

Q.data[k]=M.data[i];

k++;

}

for(;j=T.tu;++j)

Q.data[k++]=T.data[j];

Q.tu=k-1;

}

void Multiply(TSMatrix M,TSMatrix T,TSMatrix Q) //相乘

{

if(M.nu!=T.mu)

{

cerr"两矩阵相乘不合法"endl;

return ;

}

int *rowSize=new int[T.mu+1]; //存放每行非零元素的个数

int *rowStart=new int[T.mu+2]; //矩阵每行在三元组开始位置

int *temp=new int[T.nu+1]; //存放结果矩阵中每行的计算结果

int i,Current,k,ROWM,COLM,COLB;

for(i=1;i=T.mu;i++) rowSize[i]=0;

for(i=1;i=T.tu;++i) rowSize[T.data[i].row]++;

rowStart[1]=1;

for(i=2;i=T.mu+1;i++)

rowStart[i]=rowStart[i-1]+rowSize[i-1];

Current=1; k=1;

while (Current=M.tu)

{

ROWM=M.data[Current].row; //当前三元组数据中元素的行号

for(i=1;i=T.nu;++i) temp[i]=0;

while (Current=M.tuROWM==M.data[Current].row)

{

COLM=M.data[Current].col; //当前元素的列号,方便与T矩阵的行号相乘

for(i=rowStart[COLM];irowStart[COLM+1];i++) //对应T矩阵中每行的个数

{

COLB=T.data[i].col;

temp[COLB]+=(M.data[Current].value)*(T.data[i].value);

}

Current++;

}

for(i=1;i=T.nu;i++)

{

if(temp[i]!=0)

{

Q.data[k].row=ROWM;

Q.data[k].col=i;

Q.data[k].value=temp[i];

}

k++;

}

}

Q.mu=M.mu;Q.nu=T.nu;

Q.tu=k-1;

}

int main()

{

TSMatrix T,M,Q,S;

InputMatrix(M);

InputMatrix(T);

cout"两矩阵相乘"endl;

Multiply(M,T,Q);

Output(Q);

cout"两矩阵相加"endl;

AddMastrix(M,M,S);

Output(S);

system("pause");

return 0;

}

C语言矩阵键盘函数疑问

看程序中P1.0-P1.3是行扫描输出,P1.4-P1.7是扫描输入。所以原理是P1.0-P1.3中每次只有一个引脚输出0,其余输出1,然后读取P1.4-P1.7是否有引脚为0;如果有0说明有按键按下,如果全1说明没有按键按下。

scancode这个变量就是用于控制P1.0-P1.3(P1 = scancode;由这句输出)中每次只有一个引脚输出0的。

scancode = 0xfe;这句中bit0值为0,其余bit为1,所以开始时,P1 = scancode;由这句输出后,P1.0为0,其余引脚为1。

scancode = (scancode  1) | 0x01;这句使为0的bit左移一位(依次值为0xFE, 0xFD, 0xFB, 0xF7, 0xEF)。0xFE, 0xFD, 0xFB, 0xF7都满足while ((scancode 0x10) != 0)这个条件,而0xEF则不满足了,所以说此语句只检查第五位是否为1,如果最低列按下后不就等于零了,就跳过此函数了,到这就所有按键都扫描过了,没有按键按下(如果有按键按下,中途就返回了)。

if ((P1 0xf0) != 0xf0)这句中P1 0xf0表示只判断P1.4-P1.7,只有当前按下的按键所在行扫描输出为0时,这个表达式才成立(这时(P1 0xf0) != 0xf0);否则这个表达式肯定不成立(这时(P1 0xf0) == 0xf0),所以说当前行。

return ((~scancode) + (~tmpcode));这句就是如果有按键按下,那么直接返回键值,并不再进行循环退出程序。

程序格式要注意,下面这样更清楚:

uchar keyscan(void)

{

uchar scancode, tmpcode;

P1 = 0xf0; // 发全0行扫描码

if ((P1 0xf0) != 0xf0)

// 若有键按下

{

delay(); // 延时去抖动

if ((P1 0xf0) != 0xf0)

// 延时后再判断一次,去除抖动影响

{

scancode = 0xfe;

while ((scancode 0x10) != 0)

// 逐行扫描此语句只检查第五位是否为1,如果最低列按下后不就等于零了,就跳过此函数了

{

P1 = scancode; // 输出行扫描码

if ((P1 0xf0) != 0xf0)

// 本行有键按下为什么是行?哪一列按下此句都成立啊

{

tmpcode = (P1 0xf0) | 0x0f;

/* 返回特征字节码,为1的位即对应于行和列 */

return ((~scancode) + (~tmpcode));

}

else

scancode = (scancode  1) | 0x01;

// 行扫描码左移一位

}

}

}

return (0); // 无键按下,返回值为0

}


网站题目:c语言零矩阵函数 含有0的矩阵是零矩阵
文章位置:http://chengdu.cdxwcx.cn/article/dooohph.html