當前位置:首頁 » 編程語言 » c語言矩陣的關鍵函數的設計思路
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言矩陣的關鍵函數的設計思路

發布時間: 2022-07-15 19:02:44

Ⅰ 用c語言設計一個函數,使其可以輸出4*4的矩陣。設計完這個函數以後在main函數里怎麼調用,該怎麼寫啊

int f(int a[]){
int i;
int j;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
printf("%d ",a[i*4+j]);
}
printf("\n");
}
}
int shuzhu[16];
int main(){
int i,j;
for(i=0;i<4;i++) for(j=0;j<4;j++) scanf("%d",&shuzhu[i*4+j]);
f(shuzhu);
return 0;
}

Ⅱ C語言 關於矩陣

方法1:直接定義10*10的數組,讀取全部數據,再根據選擇的行列數列印輸出部分數據。

方法2:通過文件流指針的移動,跨過不需要的內容。(這里控制文件流指針可利用ftell和fseek函數來移動指定位元組數)我是利用fscanf讀取需要的內容,遇到需要跳行就用fgets來跳過。(注意常量參數根據自己需求修改)。

說明:邊讀取邊列印輸出,就不需要變數存儲。我的代碼是把讀取出來的內容存放在三維數組中(文件內容你沒指定,如是單純數字,二維數組即可,我是作為字元串處理,故用三維數組。),數組是根據實際大小,動態申請,寫成兩個獨立函數。

下面是代碼:

#include <stdio.h>

#include <string.h>

#include <malloc.h>

#define MAXR 10//文件中矩陣最大行

#define MAXC 10//文件中矩陣最大列

#define MS 3//矩陣中元素字元串最大字元數(包含結束符號,不可小於實際內容)

#define MBUF 100//文件中一行最大字元數,可設置大一點

char ***getMem(int r,int c,int len);//動態申請一個三維數組

void freeMem(char ***datas,int r,int c);//釋放數組空間

void showDatas(char ***datas,int r,int c);//列印輸出結果

int main()

{

int r=MAXR+1,c=MAXC+1,i=0,j=0;

char ***datas=NULL,str[3],buf[MBUF];

FILE *fp=NULL;

printf("請輸入要獲取的行數和列數: ");

while(r<0 || r>MAXR || c<0 || c>MAXC)scanf("%d%d",&r,&c);

datas=getMem(r,c,MS);

fp=fopen("C:\test.data","r");

if(!fp) return 1;

while(fscanf(fp,"%s",str)!=-1)

{

if(i<c) strcpy(datas[j][i],str),i++;

if(i==c)

{

if(!fgets(buf,sizeof(buf),fp)) break;

i=0,j++;

}

if(j==r) break;

}

showDatas(datas,r,c);

freeMem(datas,r,c);

return 0;

}

void showDatas(char ***datas,int r,int c)

{

int i,j;

for(i=0;i<r;i++,printf(" "))

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

printf("%s ",datas[i][j]);

printf(" ");

}

void freeMem(char ***datas,int r,int c)

{

int i,j;

if(!datas)

{

for(i=0;i<r;i++,free(datas[i]))

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

free(datas[i][j]);

free(datas);

}


}

char ***getMem(int r,int c,int len)

{

int i,j;

char ***datas=NULL,**dr=NULL;

datas=(char ***)malloc(sizeof(char **)*r);

if(!datas) return NULL;

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

{

dr=(char **)malloc(sizeof(char *)*c);

if(!dr) return NULL;

else

{

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

{

dr[j]=(char *)malloc(sizeof(char)*len);

if(!dr[j]) return NULL;

}

datas[i]=dr;

}

}

return datas;

}

Ⅲ 用C++中面向對象的程序設計方法實現矩陣的常用演算法

#include<iostream>
usingnamespacestd;

classMatrix{
private:
introw;
intcol;
int**p;
public:
//矩陣的行列
Matrix(int*pm,intr,intc){
row=r;
col=c;
//創建二維數組
p=newint*[row];
for(inti=0;i!=row;++i){
p[i]=newint[col];
}
//矩陣元素賦值
if(pm!=NULL)
for(inti=0;i!=row;i++){
for(intj=0;j!=col;++j){
p[i][j]=pm[i*col+j];
}
}

}
//矩陣加法,結果存放在調用該函數的矩陣
voidadd_mm(Matrix&M){
for(inti=0;i<row;++i){
for(intj=0;j<col;++j){
this->p[i][j]+=M.p[i][j];
}
}
}
//矩陣減法,結果存放在調用該函數的矩陣
voidsub_mm(Matrix&M){
for(inti=0;i<row;++i){
for(intj=0;j<col;++j){
this->p[i][j]-=M.p[i][j];
}
}
}
//數與矩陣的乘法,結果存放在調用該函數的矩陣
voidmulti_num(intnum){
for(inti=0;i<row;++i){
for(intj=0;j<col;++j){
p[i][j]*=num;
}
}
}
//矩陣與矩陣的乘法,結果存放在新產生的矩陣中
Matrixmulti_mm(Matrix&M){
if(col!=M.row)//若不滿足矩陣相乘的條件,返回一個0行0列的矩陣。
returnMatrix(NULL,0,0);

MatrixnewM(NULL,row,M.col);
//初始化新矩陣
for(size_ti=0;i!=newM.row;++i){
for(size_tj=0;j!=newM.col;++j){
newM.p[i][j]=0;
}
}
for(inti=0;i!=row;++i){
for(intj=0;j!=M.col;++j){
for(intk=0;k!=col;++k){
newM.p[i][j]+=this->p[i][k]*M.p[k][j];
}
}
}

returnnewM;
}
//矩陣的轉置,返回一個新的轉置矩陣
Matrixtranspose(){
MatrixnewM(NULL,col,row);

for(inti=0;i<row;++i){
for(intj=0;j<col;++j){
newM.p[j][i]=p[i][j];
}
}
returnnewM;
}
voidmyDisplay(){
for(inti=0;i!=row;++i){
for(intj=0;j!=col;++j){
cout<<p[i][j]<<"";
}
cout<<endl;
}
}

};

intmain(){
intarr1[][3]={
{1,1,1},
{2,2,2}
};
intarr2[][3]={
{10,10,10},
{20,20,20}
};
cout<<"矩陣1:"<<endl;
Matrixm1(&arr1[0][0],2,3);
m1.myDisplay();
cout<<"矩陣2:"<<endl;
Matrixm2(&arr2[0][0],2,3);
m2.myDisplay();

cout<<"矩陣1加矩陣2:"<<endl;
m1.add_mm(m2);
m1.myDisplay();
cout<<"矩陣1減矩陣2:"<<endl;
m1.sub_mm(m2);
m1.myDisplay();
intnum=100;
cout<<"矩陣1與數"<<num<<"的乘法:"<<endl;
m1.multi_num(num);
m1.myDisplay();

intarr3[][2]={
{10,10},
{20,20},
{30,30}
};
Matrixm3(&arr3[0][0],3,2);
cout<<"矩陣3:"<<endl;
m3.myDisplay();
cout<<"矩陣1與矩陣3的乘法:"<<endl;
m1.multi_mm(m3).myDisplay();
cout<<"xxxxx"<<endl;//

cout<<"矩陣1的轉置:"<<endl;
m1.transpose().myDisplay();


system("pause");//按任意鍵繼續
return0;
}

執行結果:

Ⅳ C語言設計一個函數,使其任意輸入一個二維數組都可以輸出一個4*4的矩陣; 然後函數調用,這個怎麼編

#include "stdio.h"
void d(int a[4][4])
{
for(int y=0;y<4;y++)
{

for(int x=0;x<4;x++)
{
printf("%d ",a[y][x]);
}
printf("\n");
}
}
void main()
{

int a[4][4]={1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4};
d(a); //調用
}

Ⅳ C語言中如何定義矩陣

兩種方式可以參考:
1、最簡單的就是二維數組,比如存儲全是整形的一個m*n的矩陣。然後可以定義int a[m][n]。
輸入或者輸出可以用兩層循環來完成,外層控制行m比如for(i=0;i<m;++i),內層控制列n比如for(j=0;j<n;++j);
2、第二種方式就是壓縮矩陣進行存儲,如果學了數據結構應該比較好理解。
結構體進行封裝,比如:
第一步:先定義一個有效數據的位置
typedef struct node
{
int hang;int lie;int data;//用來存儲一個有效數據位的行列和值
}node;
typedef struct matrix
{
node *m;//一個數組,用來存儲所有的node數據
int sum;//記錄一共有多少個有效數據位
}matrix;

Ⅵ 利用C語言完成課程設計:矩陣的基本運算,如何完成

匿名2010-04-27 矩陣是線性代數和矩陣論研究的主要對象,失求解微分方程組的重要工具,也是計算機圖形學和計算機游戲開發的重要數學基礎。矩陣的主要運算有數乘矩陣、兩矩陣相加、相減、相乘和相除以及矩陣的轉置,由於矩陣的除法涉及奇異值分解的問題,比較復雜,本課程設計暫不要求,緊要求完成矩陣最大維數不大於五維的矩陣數乘、加法、減法、乘法以及轉置運算。 數學模型或問題分析: MA={ a00 a01 a02 ….. a0n a10 a11 a12 …... a1n . . . . . . . . am0 am1 am2 …… amn }= [ aij]i=1,2,3...m,j=1,2,3....n. MB= { b00 b01 b02 ….. b0q b10 b11 b12 …... b1q . . . . . . . . bp0 bp1 bp2 …… apq }=[brc]r=0,1,2...p,c=0,1,2...n。 利用實數k 相乘 。 我來回答匿名

Ⅶ 如何用C語言定義矩陣

矩陣其實就是二維數組,在進行編碼的時候,矩陣就會被定義成為二維數組

Ⅷ c語言矩陣,不用庫函數怎麼做

提示你一下,二維數組