第六节 矩阵运算-【单招零距离】计算机专业综合(下)

2025-04-23
| 2份
| 9页
| 117人阅读
| 0人下载

内容正文:

第六节 矩阵运算 【巩固练习】  1.13 14 15 16 9 10 11 12 5 6 7 8 1 2 3 4  2.(1)y<3 (2)z==3  3.(1)i==j||i+j==2 (2)a[i][j] 【拓展练习】  1.22 43 -2 7 -10 65 20 -23 -2  2.31 21 11 32 22 12 33 23 13 34 24 14  3.(1)rand()%64+24  (2)a[j][N-1-i]  (3)printf(“ ”);  (4)s=0  (5)i==0||i==M-1||j==0||j==N-1 【技能实践】  1.(1)a[N-1][j] (2)a[i][N-1]  2.(1)r[i][j]  (2)r[j][n-1-i]=r[n-1-i][n-1-j]  (3)r[n-1-j][i] 第七节 利用数组实现图形打印 【巩固练习】  1.(1)a[5][5] (2)i+j (3)printf(" ")  2.for(k=0;k<=7/2;k++)   for(i=k;i<7-k;i++) for(j=k;j<7-k;j++) a[i][j]=65+k; for(i=0;i<7;i++)/∗打印二维数组∗/ { for(j=0;j<7;j++)   printf("%c",a[i][j]); printf(" "); } 【拓展练习】  1.1222221 3122214 3312144 3331444 3315144 3155514 1555551  2.(1)&n (2)a[i][0]=a[i][i]  (3)a[i-1][j]+a[i-1][j-1]  (4)printf(“ ”) 【技能实践】  1.(1)fib[i+2]=fib[i]+fib[i+1]  (2)c<2∗h (3)fib[i++] (4)i==N  2.n=N/2改为:n=N/2+1  for(j=0;j<m;j++)改为:for(j=i;j<m-i;j++)  a[j][m-i]=i+1;改为:a[j][m-i-1]=i+1  3.#defineN5 intmain() {  inth,l,n,i,j,a[N][N];  n=1;  for(i=1;j<=N;i++)  {h=N-i;l=0;   for(j=1;j<=i;j++)    a[h][l]=n++,h++,l++;  }  for(i=0;i<N;i++)  {for(j=0;j<=i;j++)  printf("%d\t",a[i][j]); printf(" ");  } } 第八节 字符数组及字符串 【知识梳理】 一、定义字符数组 1.字符  字符数据  5 1个字符 2.charcountry[8][16] 二、字符数组的初始化 1.happy\0\0\0\0\0 2.6 5 三、引用字符数组中的元素 1.'b' '2' 2.ac2 四、字符串和字符数组 1.'\0'4 2.20 3 五、字符数组的输入输出 􀅰62􀅰 单招零距离􀅰计算机专业综合􀅰下册 单招零距离·计算机专业综合·下册 5.程序设计题:已知一个一维数组a[10]={23,72,62,68,85,48,81,53,74,12},求出其 中的最小值,并将最小值移到第一个,并保证数组中各元素的相对位置不变。 #include <stdio.h int main() 第六节 矩阵运算 知识体系 ⊙好Y⑤ 矩阵相加 矩阵相减 矩阵数乘 矩阵运算 矩阵相乘 矩阵转置 矩阵旋转 知识梳理 ⑤ 矩阵,又称纵横阵,是一个按照长方阵列排列的数的集合。在C语言中,通常用二维数组 来存储。当矩阵的长(二维数组的行数)和宽(二维数组的行数)相同时,称为方阵。 矩阵运算在科学计算中非常重要,而矩阵的基本运算包括矩阵的加法、减法、数乘、转置、 旋转等。 1.矩阵相加:将两个矩阵对应的元素值相加(要求两个矩阵是同型矩阵,即两个矩阵的行 数和列数均相同)。 2.矩阵相减:将两个矩阵对应的元素值相减(要求两个矩阵是同型矩阵)。 3.矩阵数乘:一个常数乘以矩阵,其实质是将这个常数和矩阵中的对应元素相乘所得到 的矩阵。 ·168· 总复习方案·第六章数组 4.矩阵相乘:仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义。如A 是mXn矩阵和B是nXp矩阵,它们的乘积C是一个m×p矩阵。即:c[i门[]=:a[i门 [k]*b[k][G]。 5.矩阵转置:把矩阵的行和列互相交换所产生的矩阵称为转置矩阵。 6.矩阵旋转:矩阵顺时针或逆时针旋转90度或180度后所产生的矩阵。 下图演示了矩阵顺时针旋转90度的情况: 源矩阵a[4][3] 顺时针旋转90度后的矩阵b[3][4] a00a01a02 a30 a20 al0 a00 al0 all al2 a31a21a11a01 a20a21a22 a32 a22 al2 a02 a30a31a32 (1)将a[m][n]顺时针旋转90度后得到矩阵b[n][m],两者关系是: b[i][j]=a[m-1-j门[i];或b[j门[m-1-i门=a[i]Gj]; (2)将a[m][n]逆时针旋转90度后得到矩阵b[n][m],两者关系是: b[n-1-j][i]=a[i][j]; 或b[i门[j]=a[j][n-1-i门: (3)将a[m][n]顺时针旋转180度和逆时针旋转180度后得到的都是矩阵b[m][n],两 者关系是: b[i][Gj]=a[m-1-i][n-1-j门: 典例精析 ⊙⑤ 【例1】有如下的两个矩阵inta[3][2]和intb[2][3],两矩阵相乘后得到矩阵c[3][3], 请编程实现。 a[3][2] b[2][3] c[3][3] 12 123 9 1215 34 456 192633 56 294051 【分析】用二维数组a[3][2]、b[2][3]、c[3][3]来表示矩阵A、B、C,根据数学知识可知, c[门]=a[i门[0]*b[0]们+a[i门[1]b[1]们,所以用一个三重循环就可以求出数组c中全 部元素。 【答案】 #include "stdio.h" int main() {inta[3][2]={1,2,3,4,5,6},b[2][3]=1,2,3,4,5,6},c[3][3],i,j,k; printf("A data: "); for(i=0:i<3;i++) {for(j=0;j<2;j++) printf("%4d",ai]) printf(" "); ·169· 单招零距离·计算机专业综合·下册 printf("B data: "); for(i=0;i<2;i++) {for(Gj=0;j<3;j++) printf("%4d",b[i]): printf(" "): for(i=0:i<3;i++) for(j=0;j<3;j++) {c[i][j门=0: for(k=0:k<2;k++) cCi]]=ali]k]*b[k]]; printf("C data: "); for(i=0:i<3;i++) {for(j=0;j<3;j++) printf("%4d",ci); printf(" "); 【例2】编程实现将下图中的inta[3][3]数组顺时针旋转90度存人b数组中。 方阵inta[3][3] 1 2 3 5 6 7 8 9 【分析】顺时针旋转90度后的方阵itb[3][3]如下,不难发现两个方阵之间的对应关 系为:b[i门[]=a[2-j门[i。 7 8 5 2 9 3 【答案】 #include "stdio.h" int main() {inta[3][3],b[3][3]: int i,j; for(i=0;i<3;i++) for(G=0:j<3:j++) a[i门[j]=i*3+j+1: printf("A DATA: "); ·170· 总复习方案·第六章数组 for(i=0:i<3:i++) {for(G=0;j<3;j++) printf("%3d",ai): printf(" "): for(i=0;i<3:i++) for(j=0;j<3;j++) b[i][j]=a[2-j门[i]:; printf("B DATA: "): for(i=0:i<3:i++) {for(Gj=0;j<3:j++) printf("%3d",bi]): printf(" "): 巩州练习 ©Y⑤ 1.写出下列程序的运行结果。 #include<stdio.h int main() {inta[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},b[4][4]: int i,j; for(i=0:i<4:i++) for(j=0;j<4;j++) b0][3-i门=a[i]G]; for(i=0:i<4:i++) {for(j=0;j<4;j++) printf("%3d",b); printf(" "): } 2.下面程序的功能是把给定的字符按其矩阵格式读入数组str中,并输出行号与列号之 和为3的数组元素。请填空。 #include<stdio.h int main() char str4]3]=A','b',C','d',E','f':G',h','I',j',K','l'); int x,y,Z; for(x=0;x<4;x++) for(y=0:(1);y++) ·171· 单招零距离·计算机专业综合·下册 (z=x+y; if((2) printf("%c ",str[x]y]) 3.下面程序的功能是求出矩阵a的主副对角线上的元素之和。请填空使程序完整、正确: #include<stdio.h int main() {inta[3][3]={1,3,5,7,9,11,13,15,17}; int sum=0,i,j; for(i=0:i<3:i++) for(j=0;j<3;j++) ifc sum=sum十 printf("sum=%d",sum): 拓展练习 1.写出下列程序的运行结果。 #include<stdio.h int main() int i,j; inta[3][3]={44,66,22,31,15,91,53,11,33}: intb[3][3]=(22,23,24,24,25,26,33,34,35};intc[3][3]; for(i=0;i<3;i++) for(j=0:j<3;j++) cCi]j]=aCi]]-bCi]]; for(i=0;i<3;i++) {for(j=0:j<3:j++) printf(“%4d”,c[i][Gj]): printf(“ ”); } 2.写出下列程序的运行结果。 #include <stdio.h #define M 3 #define N4 int main() int i,j,a[M]N],bN][M]; ·172· 总复习方案·第六章数组 for(i=0;i<M;i++) for(j=0:j<N:j++) a[i]0G]=(i+1)*10+j+1: for(i=0:i<N;i++) for(j=0;j<M;j++) (b[i][j]=a[M-1-j][i]: printf("%4d",bi]); } printf(" "); } 3.以下程序的功能是随机生成一个[24,87]之间的5*6矩阵,请将该矩阵逆时针旋转 90°后求外围元素之和并打印,请将程序补充完整。 #define M 5 #define N6 #include<stdio.h #include<stdlib.h #include<time.h> int main() int a[M]N],b[N][M],i,j,s; srand((unsigned)time(NULL)); for(i=0:i<M:i++) for(j=0;j<N:j++) a[i门[]=(1); for(i=0;i<N;i++) for(j=0;j<M:j++) b[i]0j]=(2); for(i=0;i<N;i++) for(j=0;j<M;j++) printf("%3d",bCi): (3); printf(" "): (4) for(i=0:i<N;i++) for(j=0;j<M;j++) if((5)) s+=a[i][Gj门; printf("s=%d ",s); } ·173· 单招零距离·计算机专业综合·下册 技能实践 CY② 1.程序填空题:求矩阵周边元素的平均值。 #include <stdio.h #define N5 int main() {inta[N][N={1,3,5,8,9,1,3,2,8,5,2,3,4,5,7,8,9,6,1,0,3,4,58,12,11}; int i,j,k=0; double s=0.0: for(j=0;j<N;j++) s+=a[0]0j],k++: for(j=0;j<N;j++) s+= (1) ,k十十 for(i=1:i<N-1:i++) s+=a[i][0],k++; for(i=1;i<N-1:i++) s十= (2),k++: s=s./k; printf("average is %.2f ",s); 2.程序填空题:对4*4的数组作逆时针旋转90°的处理。例如: 原数组 旋转后的数组 12 34 481216 56 78 371115 9101112 261014 13141516 15913 源程序如下,请填空: #include <stdio.h> #define N 4 void rotate(int r[]N],int n) int i,j,t; for(i=0;i<n/2;i+++) for(j=i:j<n-i-1;j++) {t= r[i]C]=rCj]Cn-1-i]: r[n-1-i][n-1-j门= r[n-1-j][i]=t: ·174· 总复习方案·第六章数组 } void print(int rN],int n) int i,j: for(i=0;i<n:i+) for(j=0;j<n:j++) printf("%4d",ri]): printf(" "): } int main() int a[N]N];int i,j: for(i=0;i<N;i++) for(j=0;j<N:j++) a[i]Gj门=i*N+j+1: print(a,N): rotate(a.N); printf(" "): print(a,N); 第七节 利用数组实现图形打印 知识体系 Y⑤ 三角形、杨辉三角形 二维数组图形打印{矩形、平行四边形、菱形、梯形 圈形图形、魔方图形等 知识梳理 Y⊙ 图形从形状上来分,包括三角形、矩形、平行四边形、菱形、梯形等。二维数组的图形打印, 通常要先分析图形中文本字符随行号、列号变化的规律,结合图形的对称性来实现。 典例精析 ⊙Y⊙ 【例1】利用二维数组输出如图所示的弗洛伊德三角形。当N=4时, 23 456 78910 ·175·

资源预览图

第六节 矩阵运算-【单招零距离】计算机专业综合(下)
1
第六节 矩阵运算-【单招零距离】计算机专业综合(下)
2
第六节 矩阵运算-【单招零距离】计算机专业综合(下)
3
第六节 矩阵运算-【单招零距离】计算机专业综合(下)
4
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。