我的第一份小项目作业.....开心 (2007-12-14 18:53) (矩阵加减乘 C语言)

来源:互联网 发布:小乔丹数据 编辑:程序博客网 时间:2024/05/16 13:54
虽然作业已经交了很久了
虽然做的很乃至非常不STRONG
但这是第一份作业
做了一整天
HAPPY......留个纪念......

#include<stdio.h>
#include<malloc.h>
void main()
{
    float ** scan(int row,int column,int num);        
void print(int row,int column,float ** p);        
void add(int row,int column);                     
void minus(int row,int column);                   
void multiply(int row,int column,int column1);    
void freearray(float ** p,int row);               
    int a,b,m,n,type;
while(1)
{
        printf("请输入第一个矩阵的行数和列数(以回车分开):\n");
        scanf("%d",&a);
     scanf("%d",&b);
     printf("\n请输入第二个矩阵的行数和列数(以回车分开):\n");
        scanf("%d",&m);
     scanf("%d",&n);
     if(a<=0||b<=0||m<=0||n<=0)
  {
      printf("\n输入错误!\n请重新输入.\n");
            continue;
  }
  else
  {
 
         printf("\n请输入您想进行的计算类型的编号:\n1:+\n2:-\n3:*\n");
            scanf("%d",&type);
 
   if(type==1)
   {
          if(a!=m||b!=n)
    {
             printf("\n这两个矩阵不可相加!\n请重新输入。\n");
             continue;
    }
          else add(a,b);
          break;
   }
           if(type==2)
   {
          if(a!=m||b!=n)
    {
            printf("\n这两个矩阵不可相减!\n请重新输入。\n");
            continue;
    }
         else minus(a,b);
      break;
   }
        if(type==3)
     {
        if(b!=m)
     {
           printf("\n这两个矩阵不可相乘!\n请重新输入。\n");
           continue;
     }
        else multiply(a,n,b);
        break;
     }  
     else
     {
        printf("\n输入!\n请重新输入.\n");
            }
  }
}
}

float ** scan(int row,int column,int num)
{
    int i,j;
float ** p;
    p=(float**)malloc(row*sizeof(float*));
if(p==NULL)
  printf("\n空间不足!\n");  
else
{
  for(i=0;i<row;i++)
      p[i]=(float*)malloc(column*sizeof(float));
     printf("\n请输入第%d个矩阵:\n",num);
     for(i=0;i<row;i++)
  {
     for(j=0;j<column;j++)
     scanf("%f",&p[i][j]);
  }
     return(p);
}
}

void print(int row,int column,float ** p)
{
int i,j;
printf("\nThe end is:\n");
for(i=0;i<row;i++)
  for(j=0;j<column;j++)
  {
   printf("%-5.2f",p[i][j]);
   if(j==column-1)
    printf("\n");
  }
}

void freearray(float ** p,int row)
{
int i;
for(i=0;i<row;i++)
   free(p[i]);
         free(p);
   p=NULL;
}

void add(int row,int column)
{
int i,j;
float ** p;
float ** q;
float ** add;
add=(float**)malloc(row*sizeof(float*));
if(add==NULL)
  printf("\n空间不足!\n");
else
{
  for(i=0;i<row;i++)
      add[i]=(float*)malloc(column*sizeof(float));
  if(add[i]==NULL)  printf("\n空间不足!\n");
  else
  {
          p=scan(row,column,1);
       q=scan(row,column,2);
      for(i=0;i<row;i++)
   {
    for(j=0;j<column;j++)
         add[i][j]=p[i][j]+q[i][j];
   }
   print(row,column,add);
        freearray(add,row);
  }
}
}

void minus(int row,int column)
{
int i,j;
float **p;
    float ** q;
float ** minus;
minus=(float**)malloc(row*sizeof(float*));
if(minus==NULL)  printf("\n空间不足!\n");
else
{
     for(i=0;i<row;i++)
       minus[i]=(float*)malloc(column*sizeof(float));
     p=scan(row,column,1);
        q=scan(row,column,2);
     for(i=0;i<row;i++)
  {
      for(j=0;j<column;j++)
       minus[i][j]=p[i][j]-q[i][j];
  }
     print(row,column,minus);
    freearray(minus,row);
}
}

void multiply(int row,int column,int column1)
{
int i,j,a;
float **p;
    float ** q;
float ** multiply;
    multiply=(float**)malloc(row*sizeof(float*));
if(multiply==NULL)  printf("\n空间不足!\n");
else
{
     for(i=0;i<row;i++)
multiply[i]=(float*)malloc(column*sizeof(float));
        p=scan(row,column1,1);
     q=scan(column1,column,2);
     for(i=0;i<row;i++)
         for(j=0;j<column;j++)
       for(a=0,multiply[i][j]=0;a<column1;a++)
               multiply[i][j]=multiply[i][j]+p[i][a]*q[a][j];
        print(row,column,multiply);
    freearray(multiply,row);
}
}
  

哈哈  连题目都看不懂的大项目  我来了

原创粉丝点击