为何会出现error C2198: 'create' : too few actual parameters呢?

已知稀疏矩阵用三元组表示,编写C=A*B的算法。
#include<stdio.h> 
#include<stdlib.h>    
#define smax 30 

typedef int datatype;
typedef struct {   
    int i,j;                 //行标、列标     
    datatype e;              //非零元素 
}node;  

typedef struct
{  
    int r,c,n;               //行数r、列数c、非零元素个数n  
    node data[smax];         //非零三元组表   
    int numr[smax];          //每行非零元素的个数
}spmatrix;

//创建三元组
spmatrix *create(spmatrix *T)        
{   
    int i,j,element; 
    printf("请输入矩阵的行数:\n");  
    scanf("%d",&T->r);  
    printf("请输入矩阵的列数:\n");  
    scanf("%d",&T->c);  
    printf("请输入矩阵元素,按行输入:\n"); 
    T->n=0;  
    for(i=0;i<T->r;i++)  
    {  
        T->numr[i]=T->n;        
        for(j=0;j<T->c;j++)    
        {  
            scanf("%d",&element);    
            if(element)    
            {  
                T->data[T->n].i=i;    
                T->data[T->n].j=j;    
                T->data[T->n].e=element;  
                T->n++;    
            }     
        } 
    }
}

//输出结果矩阵
void print(spmatrix *T)         
{  
    int i,j,k,e;  
    for(i=0;i<T->r;i++)
    { 
        for(j=0;j<T->c;j++)  
        {   
            e=0;   
            for(k=0;k<T->n;k++)   
            {
                if(i==T->data[k].i&&j==T->data[k].j)   
                {     
                    e=T->data[k].e;break;    
                }     
                printf("%4d",e);  
            }
        } 
        printf("\n");  
    }
} 

//两个矩阵相乘
void mul(spmatrix *T1,spmatrix *T2,spmatrix *T)
{ 
    int p,arow,brow,ccol,ctemp[smax],q,tp,t,k;
    T->r=T1->r; T->c=T2->c; T->n=0;   //初始化   
    if((T1->n)*(T2->n)!=0)  
    {
        for(arow=0;arow<T1->r;++arow)  //处理T1的每一行  
        {
            for(k=0;k<T->c;k++)  //当前各行累加器清零   
                ctemp[k]=0;   
            T->numr[arow]=T->n;  
            if(arow<T1->r-1)   
                tp=T1->numr[arow+1];  
            else tp=T1->n;   
            for(p=T1->numr[arow]; p<tp;++p)  //对当前行中每个非零元素  
            {    
                brow=T1->data[p].j;   //找到对应元在T1中的行号   
                if(brow<T2->r-1)    
                    t=T2->numr[brow+1];  
                else  t=T2->n;   
                for(q=T2->numr[brow];q<t;++q)   
                {     
                    ccol=T2->data[q].j;    //乘积在T中的列号  
                    ctemp[ccol]+=T1->data[p].e*T2->data[q].e;   
                }   
            }    
            for (ccol=0;ccol<T->c;++ccol)   //压缩存储该行非零元素 
            {
                if(ctemp[ccol]!=0)   
                {     
                    T->data[T->n].i=arow;    
                    T->data[T->n].j=ccol;      
                    T->data[T->n].e=ctemp[ccol]; 
                    T->n++;
                }
            }
        }
    }
}

void main()
{
    spmatrix *A,*B,*C;
    A=create();
    print(A);
        B=create();
    print(B);
    mul(A,B,C);
    print(C);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值