求编写一道大一大二水平的C语言程序1
发布网友
发布时间:2023-10-23 19:27
我来回答
共4个回答
热心网友
时间:2024-08-29 20:48
对于大一、大二来说恐怕还是有些难度的了吧,没怎么动过手的怕是写不出来。
热心网友
时间:2024-08-29 20:48
其实,这个程序写起来没难度,关键要自己动手去写。
不要碰到问题就直接发出来要答案。
要学会自己去思考
谢谢
热心网友
时间:2024-08-29 20:49
#include <stdio.h>
#include <stdlib.h>
void enter(double **a,int *prow_a,int *pcol_a,double **b,int *prow_b,int *pcol_b);
void add(double *a,int row_a,int col_a,double *b,int row_b,int col_b);
void sub(double *a,int row_a,int col_a,double *b,int row_b,int col_b);
void multi(double *a,int row_a,int col_a,double *b,int row_b,int col_b);
void trans(double *a,int row_a,int col_a);
void dete(double *a,int row_a,int col_a);
int main()
{
double *a=NULL,*b=NULL;
int row_a,col_a,row_b,col_b,choice,flag=1;
while(flag)
{
printf(
"1 - Enter matrices A & B\n"
"2 - Add matrices\n"
"3 - Substract matrices\n"
"4 - Multiply matrices\n"
"5 - Transpose of A\n"
"6 - Determinant of A\n"
"7 - Quit program\n"
);
printf("Option: ");
fflush(stdin);
scanf("%d",&choice);
switch(choice)
{
case 1:{enter(&a,&row_a,&col_a,&b,&row_b,&col_b);break;}
case 2:{add(a,row_a,col_a,b,row_b,col_b);break;}
case 3:{sub(a,row_a,col_a,b,row_b,col_b);break;}
case 4:{multi(a,row_a,col_a,b,row_b,col_b);break;}
case 5:{trans(a,row_a,col_a);break;}
case 6:{dete(a,row_a,col_a);break;}
case 7:{free(a);free(b);a=NULL;b=NULL;flag=0;break;}
default:break;
}
}
return 0;
}
void enter(double **a,int *prow_a,int *pcol_a,double **b,int *prow_b,int *pcol_b)
{
int i;
if(*a)
{
free(*a);
*a=NULL;
}
if(*b)
{
free(*b);
*b=NULL;
}
printf("Number of rows in A: ");
scanf("%d",prow_a);
printf("Number of columns in A: ");
scanf("%d",pcol_a);
if(*prow_a>0&&*pcol_a>0)
{
*a=(double *)malloc(sizeof(double)*(*prow_a)*(*pcol_a));
printf("Enter matrix data:\n");
for(i=0;i<(*prow_a)*(*pcol_a);++i)
{
scanf("%lf",&(*a)[i]);
}
}
printf("Number of rows in B: ");
scanf("%d",prow_b);
printf("Number of columns in B: ");
scanf("%d",pcol_b);
if(*prow_b>0&&*pcol_b>0)
{
*b=(double *)malloc(sizeof(double)*(*prow_b)*(*pcol_b));
printf("Enter matrix data:\n");
for(i=0;i<(*prow_b)*(*pcol_b);++i)
{
scanf("%lf",&(*b)[i]);
}
}
}
void add(double *a,int row_a,int col_a,double *b,int row_b,int col_b)
{
int i,j;
if(a!=NULL&&b!=NULL)
{
if(row_a==row_b&&col_a==col_b)
{
printf("A + B =\n");
for(i=0;i<row_a;++i)
{
for(j=0;j<col_a;++j)
{
printf("%5g",a[i*col_a+j]+b[i*col_b+j]);
}
printf("\n");
}
}
else
{
printf("error\n");
}
}
else
{
printf("error\n");
}
}
void sub(double *a,int row_a,int col_a,double *b,int row_b,int col_b)
{
int i,j;
if(a!=NULL&&b!=NULL)
{
if(row_a==row_b&&col_a==col_b)
{
printf("A - B =\n");
for(i=0;i<row_a;++i)
{
for(j=0;j<col_a;++j)
{
printf("%5g",a[i*col_a+j]-b[i*col_b+j]);
}
printf("\n");
}
}
else
{
printf("error\n");
}
}
else
{
printf("error\n");
}
}
void multi(double *a,int row_a,int col_a,double *b,int row_b,int col_b)
{
int i,j,k;
double t;
if(a!=NULL&&b!=NULL)
{
if(col_a==row_b)
{
printf("A * B =\n");
for(i=0;i<row_a;++i)
{
for(j=0;j<col_b;++j)
{
for(t=k=0;k<col_a;++k)
{
t+=a[i*col_a+k]*b[k*col_b+j];
}
printf("%5g",t);
}
printf("\n");
}
}
else
{
printf("error\n");
}
}
else
{
printf("error\n");
}
}
void trans(double *a,int row_a,int col_a)
{
int i,j;
if(a!=NULL)
{
if(col_a==row_a)//你的要求和图片不一致啊!!!
{
printf("Transpose of A =\n");
for(i=0;i<col_a;++i)
{
for(j=0;j<row_a;++j)
{
printf("%5g",a[j*col_a+i]);
}
printf("\n");
}
}
else
{
printf("error\n");
}
}
else
{
printf("error\n");
}
}
void dete(double *a,int row_a,int col_a)
{
if(a!=NULL)
{
if(col_a==row_a)
{
;
//好吧,线性代数什么的已经几年没碰了,行列式什么的早忘了
//现在平时都用不上4阶行列式的,求解的通法早忘了,只记得4阶以下的解法了
//等我回忆一下,有空再写给你
}
else
{
printf("Determination of A isinvalid for a %d x %d matrix\n",row_a,col_a);
}
}
else
{
printf("error\n");
}
}
热心网友
时间:2024-08-29 20:49
#include<stdio.h>
void main()
{ float ma[500][500],mb[500][500];
int rowa,cola,rowb,colb;
int i,j;
int option;
printf(" 1 - Enter matrices A & B\n");
printf(" 2 - Add matrices\n");
printf(" 3 - Subtract matrices\n");
printf(" 4 - Multiply matrices\n");
printf(" 5 - Transpose of A\n");
printf(" 6 - Deteminant of A\n");
printf(" 7 - Quit program\n");
printf("\nOption:");
scanf("%d",&option);
while(option!=7)
{
switch(option)
{
case 1:
{
//mA
printf("Number of rows in A:");
scanf("%d",&rowa);
printf("Number of colnums in A:");
scanf("%d",&cola);
printf("Enter matrix data:\n");
for(i=0;i<rowa;i++)
for(j=0;j<cola;j++)
scanf("%f",&ma[i][j]);
//mB
printf("Number of rows in B:");
scanf("%d",&rowb);
printf("Number of colnums in B:");
scanf("%d",&colb);
printf("Enter matrix data:\n");
for(i=0;i<rowb;i++)
for(j=0;j<colb;j++)
scanf("%f",&mb[i][j]);
goto again;
}
case 2:
{
if((rowa!=rowb)||(cola!=colb)) {puts("Error!");goto END;}
//ADD
printf("A + B =\n");
for(i=0;i<rowb;i++)
{ printf("\t");
for(j=0;j<colb;j++)
printf("%g ",ma[i][j]+mb[i][j]);
putchar('\n');
}
goto again;
}
case 3:
{
if((rowa!=rowb)||(cola!=colb)) {puts("Error!");goto END;}
//SUB
printf("A - B =\n");
for(i=0;i<rowb;i++)
{ printf("\t");
for(j=0;j<colb;j++)
printf("%g ",ma[i][j]-mb[i][j]);
putchar('\n');
}
goto again;
}
case 4:
{
if((rowa!=rowb)||(cola!=colb)) {puts("Error!");goto END;}
//SUB
printf("A * B =\n");
for(i=0;i<rowb;i++)
{ printf("\t");
for(j=0;j<colb;j++)
printf("%g ",ma[i][j]*mb[i][j]);
putchar('\n');
}
goto again;
}
case 5:
{ //Transpose of A
printf("Transpose of A=\n");
for(j=0;j<cola;j++)
{
printf("\t\t");
for(i=0;i<rowa;i++)
printf("%g ",ma[i][j]);
putchar('\n');
}
goto again;
}
case 6:
{
printf("Determinant of A is invalid for a %d x %d matrix\n",rowa,cola);
goto again;
}
case 7: goto END;
}
again:
printf("\nOption:");
scanf("%d",&option);
}
END:if(0);
}