c語言輸入一個矩陣
❶ 用c語言怎麼編寫輸入一個矩陣求其逆矩陣的程序
這是我編的一個簡易矩陣計算器,C++語言,非常容易理解的,你可以參考求行列式和逆部分
#include <iostream>
#include <iomanip>
#include <conio.h>
#include "windows.h"
#include <string>
using namespace std;
void gotoxy(int x,int y) // 列x: 0~79 行y: 0~24
{ HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
COORD coordScreen={x,y};
SetConsoleCursorPosition(hConsole,coordScreen);
return;
}
void setcolor(unsigned short ForeColor,unsigned short BackColor)
// 0--黑 1--暗藍 2--暗綠 3--暗青 4--暗紅 5--暗紫 6--蟹黃 7--暗白
// 8--灰 9--亮藍 10-亮綠 11-亮青 12-亮紅 13-亮紫 14-黃 15-亮白
{ HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hCon,(ForeColor % 16)|(BackColor % 16 * 16));
};
int main()
{
void plu();
void sub();
void amo();
void mul();
void ran();
void ord();
char sel='1';
while(sel != '0')
{ int i;
system("cls"); // 清屏
setcolor(15,0); // 下面顯示黑底亮青字
gotoxy(8,1); cout<<"┌───────────────────────────┐";
for(i=2;i<20;i++)
{gotoxy(8,i);cout<<"│";gotoxy(64,i);cout<<"│";}
setcolor(15,6); // 下面顯示紅底白字
gotoxy(10,3); cout<<" ";
gotoxy(10,4); cout<<" 簡 易 矩 陣 計 算 器 ";
gotoxy(10,5); cout<<" ";
setcolor(15,0); // 下面顯示黑底亮青字
gotoxy(10,7); cout<<" 1 ---- 矩陣加法 2 ---- 矩陣減法 ";
gotoxy(10,9); cout<<" 3 ---- 矩陣數乘 4 ---- 矩陣乘法 ";
gotoxy(10,11); cout<<" 5 ---- 矩陣行列式 6 ---- 矩陣的逆 ";
gotoxy(10,13); cout<<" 0 ---- 退出 ";
gotoxy(10,15); cout<<" 請選擇(0--6):";
gotoxy(8,20); cout<<"└───────────────────────────┘";
do
{ gotoxy(28,15); sel=getche( );}
while ( sel!='1' && sel!='2' && sel!='3' && sel!='4' && sel!='5' && sel!='6'&& sel!='0');
switch(sel)
{
case '1':plu(); break;
case '2':sub(); break;
case '3':amo(); break;
case '4':mul(); break;
case '5':ran(); break;
case '6':ord(); break;
case '0': break;
}
}
system("cls");
gotoxy(25,10);
cout<<"謝 謝 使 用 系 統 !"<<endl;
return 0;
}
void plu()//加法
{ char l;
system("cls"); // 清屏
setcolor(14,0); // 下面用黑底黃字
int a,b,i,j;
gotoxy(0,0);cout<<">>>>>> 矩陣加法 ";
gotoxy(0,2);cout<<"請輸入矩陣的行數:";
cin>>a;
cout<<endl;
cout<<"請輸入矩陣的列數:";
cin>>b;
cout<<endl;
double m[10][10],n[10][10];
cout<<"請輸入第一個矩陣:"<<endl;
for(i=0;i<a;i++)
for(j=0;j<b;j++)
{gotoxy(6*j+20,2*i+6); cin>>m[i][j];}
cout<<endl<<endl<<"請輸入第二個矩陣:"<<endl;
for(i=0;i<a;i++)
for(j=0;j<b;j++)
{gotoxy(6*j+20,2*a+2*i+7);cin>>n[i][j];}
cout<<endl<<">>>>>>>"<<endl<<"矩陣加法結果為:";
for(i=0;i<a;i++)
for(j=0;j<b;j++)
{gotoxy(6*j+20,4*a+2*i+8);cout<<m[i][j]+n[i][j];}
gotoxy(0,6*a+9);
cout<<">>>>>>>>按任意鍵退出:";
l=getche();
}
void sub()//減法
{ char l;
system("cls"); // 清屏
setcolor(14,0); // 下面用黑底黃字
int a,b,i,j;
gotoxy(0,0);cout<<">>>>>矩陣減法";
gotoxy(0,2);cout<<"請輸入矩陣的行數:";
cin>>a;
cout<<endl;
cout<<"請輸入矩陣的列數:";
cin>>b;
cout<<endl;
double m[10][10],n[10][10];
cout<<"請輸入第一個矩陣:"<<endl;
for(i=0;i<a;i++)
for(j=0;j<b;j++)
{gotoxy(6*j+20,2*i+6); cin>>m[i][j];}
cout<<endl<<endl<<"請輸入第二個矩陣:"<<endl;
for(i=0;i<a;i++)
for(j=0;j<b;j++)
{gotoxy(6*j+20,2*a+2*i+7);cin>>n[i][j];}
cout<<endl<<">>>>>>>"<<endl<<"矩陣減法結果為:";
for(i=0;i<a;i++)
for(j=0;j<b;j++)
{gotoxy(6*j+20,4*a+2*i+8);cout<<m[i][j]-n[i][j];}
gotoxy(0,6*a+9);
cout<<">>>>>>>>按任意鍵退出:";
l=getche();
}
void amo()//數乘
{ char h;
system("cls"); // 清屏
setcolor(14,0); // 下面用黑底黃字
int a,b,i,j;
gotoxy(0,0);cout<<">>>>>>矩陣數乘";
gotoxy(0,2);cout<<"請輸入矩陣的行數:";
cin>>a;
cout<<endl;
cout<<"請輸入矩陣的列數:";
cin>>b;
cout<<endl;
double m[10][10],c;
cout<<"請輸入矩陣:"<<endl;
for(i=0;i<a;i++)
for(j=0;j<b;j++)
{gotoxy(6*j+20,2*i+6);cin>>m[i][j];}
cout<<endl<<"請輸入與矩陣相乘的實數:";
cin>>c;
cout<<endl<<endl<<"矩陣數乘結果為:";
for(i=0;i<a;i++)
for(j=0;j<b;j++)
{gotoxy(8*j+20,2*a+2*i+9);cout<<m[i][j]*c;}
gotoxy(0,4*a+12);
cout<<">>>>>>>按任意鍵退出:";h=getche();
}
void mul()//乘法
{
char k;
system("cls"); // 清屏
setcolor(14,0); // 下面用黑底黃字
int a,b,c,i,j,q;
gotoxy(0,0);cout<<">>>>>>矩陣乘法";
gotoxy(0,2);cout<<"請輸入第一個矩陣的行數:";
cin>>a;
cout<<endl<<"請輸入第一個矩陣的列數:";
cin>>b;
cout<<endl<<"則第二個矩陣的行數也為:"<<b;
cout<<endl<<endl<<"請輸入第二個矩陣的列數:";
cin>>c;
cout<<endl;
double m[10][10],n[10][10],p[10][10]={0};
cout<<"請輸入第一個矩陣:"<<endl;
for(i=0;i<a;i++)
for(j=0;j<b;j++)
{gotoxy(6*j+18,2*i+10); cin>>m[i][j];}
cout<<endl<<endl<<"請輸入第二個矩陣:";
for(i=0;i<b;i++)
for(j=0;j<c;j++)
{gotoxy(6*j+18,2*a+2*i+11);cin>>n[i][j];}
cout<<endl<<">>>>>>>"<<endl<<"矩陣相乘結果為: ";
for(i=0;i<a;i++)
for(j=0;j<c;j++)
for(q=0;q<b;q++) p[i][j]=p[i][j]+m[i][q]*n[q][j];
for(i=0;i<a;i++)
for(j=0;j<c;j++)
{gotoxy(10*j+18,2*a+2*b+2*i+12);cout<<p[i][j];}
gotoxy(16,2*a+2*b+2*i+15);
cout<<">>>>>>>按任意鍵退出:";k=getche();
}
//===================================================行列式
float Fun(int n1,float a1[10][10]);
void ran()
{
system("cls"); // 清屏
setcolor(15,0); // 下面用黑底黃字
char k;
int n,i,j;
cout<<">>>>>矩陣行列式"<<endl<<endl<<"請輸入矩陣階數: ";
cin>>n;
cout<<endl<<"請輸入矩陣:"<<endl;
float a[10][10];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{gotoxy(6*j+12,2*i+4);cin>>a[i][j];}
cout<<endl<<"行列式為: "<<Fun(n,a)<<endl<<endl;
cout<<">>>>>>按任意鍵退出:";
k=getche();
}
float Fun(int n1,float a1[10][10])//求行列式的遞歸函數
{
int i_1,j_1,c;//c為數組b的行
float b[10][10];
int p=0,q=0;
float sum=0;
if(n1==1) return a1[0][0];
for(i_1=0;i_1<n1;i_1++)
{
for(c=0;c<n1-1;c++)
{if(c<i_1) p=0;
else p=1;
for(j_1=0;j_1<n1-1;j_1++)
{b[c][j_1]=a1[c+p][j_1+1];}
}
if(i_1%2==0)
q=1;
else q=(-1);
sum=sum+a1[i_1][0]*q*Fun(n1-1,b);
}return sum;
}
//================================================================
void ord()
{
char g;
system("cls"); // 清屏
setcolor(15,0); // 下面用黑底黃字
int i,j,n;
gotoxy(0,0);cout<<">>>>>矩陣的逆";
gotoxy(0,2);cout<<"請輸入矩陣的階數:";
cin>>n;
cout<<endl;
cout<<"請輸入矩陣:";
float l[10][10],m[10][10],p;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{gotoxy(4*j+12,2*i+4); cin>>l[i][j];}
if(Fun(n,l)==0) cout<<endl<<"該矩陣無逆!!!"<<endl;
else
{p=Fun(n,l);
cout<<endl<<"矩陣的逆為: ";
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{{float f[10][10];
int r,w,e,d;//e為數組f的行數
for(int j_1=0,e=0;j_1<n-1,e<n-1;j_1++,e++)
for(int i_1=0,d=0;i_1<n-1,d<n-1;i_1++,d++)
{if(e<i) r=0;else r=1;
if(d<j) w=0;else w=1;
f[i_1][j_1]=l[i_1+w][j_1+r];};
if((i+j)%2==0) m[i][j]=Fun(n-1,f)/p;
else m[i][j]=-Fun(n-1,f)/p;
};
gotoxy(9*j+12,2*n+2*i+4);cout<<m[i][j];};};
cout<<endl<<endl<<">>>>>>按任意鍵退出:";g=getche();
}
❷ c語言編程 輸入一個3*3的矩陣,列印該矩陣,並輸出該矩陣的對角元素
#include<stdio.h>
#defineM3
#defineN3
voidCreate_matrix(intmatrix[M][N],intm,intn){
inti,j;
printf("開始輸入矩陣內容(%d行%d列) ",m,n);
for(i=0;i<m;i++){
printf("輸入第%d行的%d個元素:",i+1,n);
for(j=0;j<n;j++)
scanf("%d",&matrix[i][j]);
}
}
voidPrint_matrix(intmatrix[M][N],intm,intn){
inti,j;
for(i=0;i<m;i++){
for(j=0;j<n;j++)
printf("%d ",matrix[i][j]);
printf(" ");
}
}
voidPrint_matrix_diagonal(intmatrix[M][N],intm,intn){
inti,j;
for(i=0;i<m;i++){
for(j=0;j<n;j++)
if(i==j||i+j==M-1)
printf("%d ",matrix[i][j]);
else
printf(" ");
printf(" ");
}
}
intmain(void){
intmatrix[M][N];
Create_matrix(matrix,M,N);
printf("====================================================== ");
printf("您輸入的矩陣為: ");
Print_matrix(matrix,M,N);
printf("對角線元素為: ");
Print_matrix_diagonal(matrix,M,N);
return0;
}
執行結果

❸ C語言:從鍵盤輸入一個4*4的矩陣,求行下標為2或者列下標為3的元素之和。怎麼寫

代碼文本:
#include "stdio.h"
int main(int argc,char *argv[]){
int a[4][4],i,j,k;
printf("Please enter data(int 0~99)... ");
for(k=i=0;i<4;i++)//輸入矩陣
for(j=0;j<4;scanf("%2d",a[i]+j++));
putchar(' ');
for(k=i=0;i<4;i++){//輸出矩陣並按要求求和
for(j=0;j<4;printf("%3d",a[i][j++]))
if(i==2 || j==3)
k+=a[i][j];
putchar(' ');
}
printf(" The SUM is %d ",k);
return 0;
}
❹ c語言輸入矩陣
scanf("%d,%d",&i,&j); //你輸入時要帶","比如 5,6 ,是"%d,%d"要求的,你可以去掉這個逗號然後輸入 5 6 也行
❺ c語言怎麼輸入矩陣
c語言矩陣分為兩種:
第一種方法是動態的申請矩陣存儲空間,該方法的好處有以下兩點:
1.能夠動態的申請和釋放存儲空間;
2.對於將矩陣作為函數返回值的情況,該方法具有獨特的優勢。

❻ 怎樣在c語言中編譯一個輸入任意大小的矩陣的程序
#include <stdio.h>
int main()
{
int Height = 0, Width = 0;
printf("請輸入高度:");
scanf("%d", &Height);
printf("請輸入寬度:");
scanf("%d", &Width);
int x, y;
for(y = 0; y < Height; y++)
{
for(x = 0; x < Width; x++)
{
printf("口"); //這個地方改成輸入就實現了矩形輸入
}
printf("\n");
}
main();
}
❼ C語言編程:輸入一個M*N的整數矩陣,求其最大值及其所在的行號、列號。(M、N由鍵盤輸入)
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,m,n,*array;
printf("請輸入矩陣行數:");
scanf("%d",&m);
printf("請輸入矩陣列數:");
scanf("%d",&n);
array=(int*)malloc(m*n*sizeof(int));
printf("請輸入該%d*%d矩陣:\n",m,n);
for(i=0;i<m*n;i++)
scanf("%d",&array[i]);
int max=array[0];
int index=0;
for(i=1;i<m*n;i++)
{
if(max<array[i])
{
max=array[i];
index=i;
}
}
printf("您輸入的矩陣中的最大值為:%d\n",max);
printf("它所在的行號和列號分別是:%d,%d\n",(index/n)+1,(index%n)+1);
return 0;
}
❽ c語言 從鍵盤輸入一個4*4整數矩陣
#define N 4
void main()
{
int a[N][N];
int i,j,max,p,q;
printf("輸入4*4矩陣:\n");
for(i=0;i<N;i++)
for (j=0;j<N;j++)
scanf("%d",&a[i][j]);
printf("輸入的矩陣為:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++) printf("%4d",a[i][j]);
printf("\n");
}
max=a[1][0];
p=1;q=0;
for(i=1;i<N;i++)
for(j=0;j<i;j++)
if(a[i][j]>max)
{
max=a[i][j];
p=i;q=j;
}
a[q][p]=max;
printf("處理以後的矩陣為:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++) printf("%4d",a[i][j]);
printf("\n");
}
}
❾ 用c語言怎麼編寫輸入一個矩陣求其逆矩陣的程序
下面是實現Gauss-Jordan法實矩陣求逆。
#include
<stdlib.h>
#include
<math.h>
#include
<stdio.h>
int
brinv(double
a[],
int
n)
{
int
*is,*js,i,j,k,l,u,v;
double
d,p;
is=malloc(n*sizeof(int));
js=malloc(n*sizeof(int));
for
(k=0;
k<=n-1;
k++)
{
d=0.0;
for
(i=k;
i<=n-1;
i++)
for
(j=k;
j<=n-1;
j++)
{
l=i*n+j;
p=fabs(a[l]);
if
(p>d)
{
d=p;
is[k]=i;
js[k]=j;}
}
if
(d+1.0==1.0)
{
free(is);
free(js);
printf("err**not
inv
");
return(0);
}
if
(is[k]!=k)
for
(j=0;
j<=n-1;
j++)
{
u=k*n+j;
v=is[k]*n+j;
p=a[u];
a[u]=a[v];
a[v]=p;
}
if
(js[k]!=k)
for
(i=0;
i<=n-1;
i++)
{
u=i*n+k;
v=i*n+js[k];
p=a[u];
a[u]=a[v];
a[v]=p;
}
l=k*n+k;
a[l]=1.0/a[l];
for
(j=0;
j<=n-1;
j++)
if
(j!=k)
{
u=k*n+j;
a[u]=a[u]*a[l];}
for
(i=0;
i<=n-1;
i++)
if
(i!=k)
for
(j=0;
j<=n-1;
j++)
if
(j!=k)
{
u=i*n+j;
a[u]=a[u]-a[i*n+k]*a[k*n+j];
}
for
(i=0;
i<=n-1;
i++)
if
(i!=k)
{
u=i*n+k;
a[u]=-a[u]*a[l];}
}
for
(k=n-1;
k>=0;
k--)
{
if
(js[k]!=k)
for
(j=0;
j<=n-1;
j++)
{
u=k*n+j;
v=js[k]*n+j;
p=a[u];
a[u]=a[v];
a[v]=p;
}
if
(is[k]!=k)
for
(i=0;
i<=n-1;
i++)
{
u=i*n+k;
v=i*n+is[k];
p=a[u];
a[u]=a[v];
a[v]=p;
}
}
free(is);
free(js);
return(1);
}
void
brmul(double
a[],
double
b[],int
m,int
n,int
k,double
c[])
{
int
i,j,l,u;
for
(i=0;
i<=m-1;
i++)
for
(j=0;
j<=k-1;
j++)
{
u=i*k+j;
c[u]=0.0;
for
(l=0;
l<=n-1;
l++)
c[u]=c[u]+a[i*n+l]*b[l*k+j];
}
return;
}
int
main()
{
int
i,j;
static
double
a[4][4]={
{0.2368,0.2471,0.2568,1.2671},
{1.1161,0.1254,0.1397,0.1490},
{0.1582,1.1675,0.1768,0.1871},
{0.1968,0.2071,1.2168,0.2271}};
static
double
b[4][4],c[4][4];
for
(i=0;
i<=3;
i++)
for
(j=0;
j<=3;
j++)
b[i][j]=a[i][j];
i=brinv(a,4);
if
(i!=0)
{
printf("MAT
A
IS:
");
for
(i=0;
i<=3;
i++)
{
for
(j=0;
j<=3;
j++)
printf("%13.7e
",b[i][j]);
printf("
");
}
printf("
");
printf("MAT
A-
IS:
");
for
(i=0;
i<=3;
i++)
{
for
(j=0;
j<=3;
j++)
printf("%13.7e
",a[i][j]);
printf("
");
}
printf("
");
printf("MAT
AA-
IS:
");
brmul(b,a,4,4,4,c);
for
(i=0;
i<=3;
i++)
{
for
(j=0;
j<=3;
j++)
printf("%13.7e
",c[i][j]);
printf("
");
}
}
}參考資料:C常用演算法程序集-徐士良
❿ C語言,輸入一個矩陣,找出所在行上最大,列上最小的數。(可能沒有) 可能定義出錯,求大蝦指教!!!!
以下是求每一行上最大、每一列上最小的程序:
#include<stdio.h>
main()
{
inti,j,k,l,min,max;
printf("請輸入矩陣的規格: ");
scanf("%d,%d",&i,&j);
printf("這是一個%d乘%d的矩陣 ",i,j);
inta[i][j];
printf("請輸入該矩陣: ");
for(k=0;k<i;k++)
for(l=0;l<j;l++)
scanf("%d",&a[k][l]);
for(k=0;k<i;k++)
{
max=a[k][0];
for(l=0;l<j;l++)
{
if(a[k][l]>max)
max=a[k][l];
}
printf("第%d行的最大值%d ",k+1,max);
}
for(l=0;l<j;l++)
{
min=a[0][l];
for(k=0;k<i;k++)
{
if(a[k][l]<min)
min=a[k][l];
}
printf("第%d列的最小值%d ",l+1,min);
}
}
不過題目的意思應該不是這樣的。應該是「找出所在行上最大,同時又是列上最小的數」。
#include<stdio.h>
main()
{
inti,j,k,l,min,max,t1,t;
printf("請輸入矩陣的規格: ");
scanf("%d,%d",&i,&j);
printf("這是一個%d乘%d的矩陣 ",i,j);
inta[i][j];
printf("請輸入該矩陣: ");
for(k=0;k<i;k++)
for(l=0;l<j;l++)
scanf("%d",&a[k][l]);
for(k=0;k<i;k++)
{
max=a[k][0];
for(l=0;l<j;l++)
{
if(a[k][l]>max)
{
max=a[k][l];
t1=l;
}
}
t=1;
for(l=0;l<i;l++)
{
if(a[l][t1]<max)
{
t=0;
}
}
if(t)
printf("第%d行%d列的值%d為行上最大、列上最小 ",k+1,t1+1,max);
}
}

