C语言从入门到精通(吐血分享)5

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.二维数组
<1>定义
类型名 数组名[常量表达式 1][常量表达式 2]
1>类型名: int float double char
2>数组名:遵循用户标识符
3>常量表达式 1:行数(二维数组的行数)
常量表达式 2:列数(二维数组的列数) int xx[5][6]; 4>在内存中,系统为二维数组开辟一串连续的存储空间(按 行存放)
2>每行(列)的和值(平均值) #include "stdio.h" #define N 4 void add(int xx[][N],int bb[]) {
int i,j,s; for(j=0;j<N;j++)
{ s=0; for(i=0;i<N;i++) s+=xx[i][j]; bb[i]=s;
void fun(int xx[][4]) void fun(int xx[3][4]) 注:对于后两种形式,它的写法只是与数组的定义”形似“, 系统在处理的过程中,处理成第一种形式. 2>在二维数组中,实参是指针数组的数组名,对应的形参是同 类型的指向指针的指针。 int *p[3]; 调用函数: fun(p); 被调用函数:void fun(int **p)
#inclΒιβλιοθήκη Baidude "stdio.h"
#define N 4 void zuizhi(int xx[][N],int bb[]) {
int i,j,min; for(i=0;i<N;i++)
{ min=xx[i][0];
for(j=0;j<N;j++) if(min>xx[i][j]) min=xx[i][j];
<3>在二维数组中,二维数组与一位数组之间的关系
1>二维数组是由多个一维数组组合而成的
2>在二维数组中,一维数组的写法代表的是每行的首地址 (每行的第一个元素的地址),并且也是地址常量
xx[1]=>&xx[1][0]=>*(xx+1)=>xx+1 <4>取二维数组的元素和地址(int xx[3][4])
取元素: p[i][j] *(p[i]+j) *(*(p+i)+j) (*(p+i))[j]
<7>二维数组在函数中的使用
1>在二维数组中,实参是二维数组的数组名,对应的形参是同 类型的行指针
int xx[3][4];
调用函数: fun(xx) 被调用函数:void fun(int (*xx)[4])
主对角线: for(i=0;i<N;i++) for(j=0;j<N;j++) if(i==j)
副对角线: for(i=0;i<N;i++) for(j=0;j<N;j++) if(i+j==N-1)
5>上三角/下三角 上三角: for(i=0;i<N;i++) for(j=0;j<N;j++) if(i<j) 下三角: for(i=0;i<N;i++) for(j=0;j<N;j++) if(i>j)
int (*q)[4];(行指针) q=xx;
q++:指针 q 移动一行
取元素: q[i][j] *(q[i]+j) *(*(q+i)+j) (*(q+i))[j]
<6>指针数组(存放每行的首地址) int xx[3][4]; int *p[3];(存放了每行的首地址) for(i=0;i<3;i++) p[i]=xx[i];
元素
地址
xx[i][j] &xx[i][j] *(xx[i]+j) xx[i]+j *(*(xx+i)+j) *(xx+i)+j (*(xx+i))[j] xx[0]+4*i+j *(xx[0]+4*i+j) &xx[0][0]+4*i+j
<5>行指针(存放二维数组的数组名)
int xx[3][4];
} } main() { int xx[N][N],i,j,bb[N];
for(i=0;i<N;i++) for(j=0;j<N;j++) scanf("%d",&xx[i][j]); add(xx,bb);
for(i=0;i<N;i++) printf("%4d",bb[i]);
} 3>每行(列)最值(最小值)
bb[i]=min; } } main() { int xx[N][N],i,j,m[N]; for(i=0;i<N;i++)
for(j=0;j<N;j++) scanf("%d",&xx[i][j]);
zuizhi(xx,m); for(i=0;i<N;i++)
printf("%4d",m[i]); } 4>主/副对角线
4>int xx[][3]={{1,2,4},{5,6,7}}; 5>int xx[][3]={1,2,4,5,6,7,8};
6>scanf 进行赋值
输入: int i,j; for(i=0;i<N;i++) for(j=0;j<N;j++) scanf("%d",&xx[i][j]);
输出: int i,j; for(i=0;i<N;i++) for(j=0;j<N;j++) printf("%d",xx[i][j]);
6>周边元素 for(i=0;i<N;i++) for(j=0;j<N;j++) if(i==0||j==0||i==N-1||j==N-1)
7>转置(逆阵)
for(i=0;i<N;i++) for(j=0;j<N;j++) if(i<j) { t=xx[i][j]; xx[i][j]=xx[j][i]; xx[j][i]=t; }
void fun(int *p[]) void fun(int *p[3]) <8>算法(利用下标寻找规律,利用多层循环进行实现) 1>按行遍历、按列遍历 按行遍历: for(i=0;i<3;i++) 行 for(j=0;j<4;j++) 列 按列遍历: for(j=0;j<4;j++)列 for(i=0;i<3;i++)行
5>数组名:首地址(二维数组中第一个元素的地址);地址 常量
6>不同的下标(下标从 0 开始)
<2>赋值
行括号
1>int xx[3][3]={{1,2,4},{8,7,5},{4,2,3}}; 1 2 4
2>int xx[3][3]={{1,2},{8},{2,3}};(用零补齐) 8 7 5
3>int xx[3][3]={1,2,4,5}; (按行进行存放)
相关文档
最新文档