第一篇:C課程設計矩陣的加減乘混合運算
矩陣混合運算
指導教師:
浙江理工大學
班級:
學號:
姓名:
矩陣混合運算 目 錄
一、程序要求
二、輸入輸出范例
三、程序結構分析及關鍵函數說明
四、程序代碼與說明
五、運行結果與分析
六、設計日志及心得體會
一、程序要求及范例
·定義矩陣(維數小于5×5)的加減法和乘法 ·計算輸入的若干矩陣的加減法運算和乘法混合運算
·矩陣數目不定,混合運算順序不定,矩陣數值不定,均有鍵盤輸入控制
·若輸入有錯,可以隨時更改任一矩陣數值
·當輸入矩陣不能滿足矩陣運算時,提示矩陣維數錯誤
二、輸入輸出范例
·輸入:
-首先輸入每個矩陣的數值,輸入矩陣格式如[1 1 1;2 2 2]-輸入幾個矩陣的混合運算 ·輸出:
-輸出計算結果
·輸入范例: A=[1 1 1;2 2 2] B=[1 0;0 1;1 1] C=[1 0;0 1] D=C+A*B或者D=A*B+C ·輸出b->data[i][j];
}
}
return 1;
} }
3.乘運算函數
該程序設計的核心問題是矩陣的乘法運算的邏輯性的編寫,在進行矩陣相乘前要判斷兩矩陣是否能夠相乘,即判斷內積是否相等,如果能就按照矩陣的相乘方式進行運算,若不能則提示錯誤并返回,具體的程序段如下:
int multiplyMatrix(Matrix *c, Matrix *a, Matrix *b){
int i, j, k;
if(a->cols!= b->rows){ printf(“矩陣維數輸入錯誤!”);
return 0;
}
else
{
c->rows = a->rows;
c->cols = b->cols;
for(i = 0;i < c->rows;i++)
{
for(j = 0;j < c->cols;j++)
{
c->data[i][j] = 0;
for(k = 0;k < a->cols;k++)
{
c->data[i][j] += a->data[i][k]*b->data[k][j];
}
}
}
return 1;
} }
四、程序代碼與說明
#include
typedef struct { ListNode *head;//定義一個指向頭結點的指針 } MList;enum TYPE {OP, MAT};//枚舉類型
typedef struct _Token //定義Token標識符 判斷表達式 { union //聯合體 取值為 op 和 mat中結構最大的值 { char op;Matrix *mat;};enum TYPE type;//聯合體的類型 } Token;typedef struct _Stack //定義棧 { Token **arr;//用數組存儲標識符 int n;//數組里標識符的個數 int cap;//數組的大小 } Stack;
Stack* initStack(int cap);//初始化,定義一個空棧 void freeStack(Stack *pStack);//釋放棧的空間
void reszieStack(Stack *pStack, int newCap);//重定義棧的大小 void push(Stack *pStack, Token *pToken);//入棧操作 Token* pop(Stack *pStack);//出棧 Token* top(Stack *pStack);//棧頂
int getIndex(char ch);//不同標識符對應不同的操作 char priorMap[9][9] = { {'>', '>', '<', '<', '<', '<', '<', '>', '>'}, {'>', '>', '<', '<', '<', '<', '<', '>', '>'}, {'>', '>', '>', '>', '<', '<', '<', '>', '>'}, {'>', '>', '>', '>', '<', '<', '<', '>', '>'}, {'>', '>', '>', '>', '>', '>', '<', '>', '>'}, {'>', '>', '>', '>', '>', '>', '<', '>', '>'}, {'<', '<', '<', '<', '<', '<', '<', '=', '$'}, {'>', '>', '>', '>', '>', '>', '&', '>', '>'}, {'<', '<', '<', '<', '<', '<', '<', '&', '='} };Matrix *newMatrix(int rows, int cols);//函數原型,創建新矩陣 void freeMatrix(Matrix *mat);//銷毀矩陣,釋放內存
int addMatrix(Matrix *c, Matrix *a, Matrix *b);//矩陣的加法
int subtractMatrix(Matrix *c, Matrix *a, Matrix *b);//矩陣的減法 int multiplyMatrix(Matrix *c, Matrix *a, Matrix *b);//矩陣的乘法 void printMatrix(Matrix *mat);//輸出結果 ListNode *newNode(char name[], Matrix *mat);MList *newMList();void freeNode(ListNode *node);void freeMList(MList *ml);void addNode(MList *ml, ListNode *node);ListNode *parseMat(char line[]);void printLNode(ListNode *node);Matrix *findByName(MList *ml, char name[]);int main(){ printf(“矩陣的混合運算n”);
2]n“);
char line[MAX_CHAR];char name[MAX_CHAR];char *pch;MList *ml = newMList();Matrix *newMat = NULL;
printf(”矩陣范例A=[1 1 1;2 2 printf(“請按范例格式輸入n”);
while(1){ fgets(line, MAX_CHAR, stdin);//輸入一串字符 if(strlen(line)== 1 && line[0] == 'n'){ continue;} pch = strchr(line, '[');if(pch!= NULL){ ListNode *node = parseMat(line);addNode(ml, node);} else { pch = strchr(line, '=');*pch = ' 主站蜘蛛池模板: 亚洲无码在线播放| 国产一区二区不卡在线看| 国产99久久亚洲综合精品西瓜tv| 中文字幕人成无码人妻综合社区| av无码久久久久不卡免费网站| 男人的天堂无码动漫av| 欧美精品一区二区性色a+v| 18禁网站在线| 日韩精品一区二区av在线| 欧美中文字幕无线码视频| 97超碰人人爱香蕉精品| 国产三级在线观看完整版| av永久免费网站在线观看| 天堂网www在线资源中文| 亚欧乱色熟女一区二区| 四虎一区二区成人免费影院网址| 亚洲人成在线影院| 中文字幕一精品亚洲无线一区| 女人被做到高潮免费视频| 国产精品久久久久久久影院| 国产精品成人va在线观看| 精品国产迷系列在线观看| 欧美xxxxx精品| 狠狠综合久久综合88亚洲| 国产精品毛片va一区二区三区| 中国凸偷窥xxxx自由视频妇科| 一本大道熟女人妻中文字幕在线| 欧美日韩在线视频一区| 精品国产福利在线视频| 国产精品天堂avav在线| av无码东京热亚洲男人的天堂| 久久精品卫校国产小美女| 无码中文字幕人妻在线一区| 伊人色综合视频一区二区三区| 韩国无码无遮挡在线观看| 亚洲国产精品sss在线观看av| 国产精品午夜福利麻豆| 国产精品久久久久电影网| 亚洲日韩av无码中文字幕美国| 精选国产av精选一区二区三区| 国产又黄又爽又色的免费视频|