内容正文:
第六节 矩阵运算
【巩固练习】
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·