第14讲 维数组 二维数组做函数参数
第14讲 二维数组 二维数组做函数参数
练习 为什么? 删除字符串中的某一字符x。 因为当前的字 void Delete(char a. char x)符已经是后边 int i. 挪过来的,所 for(i=0:@q[i]=o;i++) 以要再判断 下a[是不是x [if(a[i]==x) 氐for(j=:[]=”小+ la[j] alj
2 练习 ▪ 删除字符串中的某一字符x。 void Delete(char a[], char x) { 判断a串中每一个字符是不是x, 是的话删除。 } int i; for(i=0;a[i]!=‘\0’;i++) {if(a[i]==x) 删除a[i](从a[i]开始的每一个字符 向前挪动一个位置); } {for(j=i; a[j]!=‘\0’;j++) {a[j]= a[j+1]; } i--; } •为什么? •因为当前的字 符已经是后边 挪过来的,所 以要再判断一 下a[i]是不是x
练习答案 include 为什么? void maino 吸收掉前一次 int i, I 输入后的结束符 char a[20],ch 回车 printf("Input a strin J. gets(a: getchar o r printf Input a character to delete: ) ch=getchar: Delete(a, ch: printf after deleting: %s\n,a)
3 练习答案 #include void main() { int i,l; char a[20],ch; printf("Input a string: "); gets(a); getchar(); printf("Input a character to delete: "); ch=getchar(); Delete(a,ch); printf(“after deleting:%s\n”,a); } •为什么? •吸收掉前一次 输入后的结束符 “回车”
/函数功能:删除从地址a开始的字符 串中的某一字符x*/ void Delete( char a, char x) 或者 int i for(i=0; *(a+i) #include [if((a+i== void maino (for(j=: tint j char a[20],ch, *p=a; printf("Input a string: ) gets(a) getchar(; printf("Input a character to delete: ch=getchar(; Delete(p, ch): o printfcafter deleting%s\n"a);
4 或者 /*函数功能:删除从地址a开始的字符 串中的某一字符x */ void Delete(char *a, char x) { int i; for(i=0;*(a+i)!=‘\0’;i++) {if(*(a+i)==x) /*找到x,删除*/ {for(j=i; *(a+j)!=‘\0’;j++) {*(a+j) = *(a+j+1); } i--; } } } #include void main() { int i,l; char a[20],ch, *p=a; printf("Input a string: "); gets(a); getchar(); printf("Input a character to delete: "); ch=getchar(); Delete(p,ch); printf(“after deleting:%s\n”,a); }
/函数功能:将从地址a开始的字符串中除了字 符x以外,全部写到b数组中* void Delete(char a, char x, char b) int I,J 再或者 for(i=0,j=0 * #include ⌒只要不是 void maind0 if((a+i)l=X I int i, char a[20], b[20], ch, *p=a printf("Input a string: ) 1 gets(a) j++:/复 getchar printf("Input a character to delete: ch=getchar(; b+j)=0:/ Delete(p, ch, b) o printf"after deleting%s\n"b);
5 再或者 /*函数功能:将从地址a开始的字符串中除了字 符x以外,全部写到b数组中 */ void Delete(char *a, char x,char *b) { int i,j; for(i=0,j=0;*(a+i)!=‘\0’;i++) { /*只要不是x,就复制过去*/ if(*(a+i)!=x) { *(b+j)=*(a+i); j++;/*复制一个字符,下标加一次*/ } } *(b+j)=‘\0’; /*末尾加上\0*/ } #include void main() { int i,l; char a[20],b[20],ch,*p=a; printf("Input a string: "); gets(a); getchar(); printf("Input a character to delete: "); ch=getchar(); Delete(p,ch,b); printf(“after deleting:%s\n”,b); }
读程序:函数功能? void SQUEEZE( char *s, char x) t int i for(i=0j=0:*(s+)!="\o:i++) 盱f((s+l)=x) (+)=(s+) 答:在指针s指向的字符串中 删除某一字符ch。 (+)=\o:分析:将删除ch后的数组仍 然写在原数组中
6 读程序:函数功能? void SQUEEZE(char *s, char x) { int i,j; for(i=0,j=0; *(s+i)!='\0'; i++) { if(*(s+i)!=x) { *(s+j) = *(s+i); j++; } } *(s+j) =‘\0’; } 答:在指针s指向的字符串中 删除某一字符ch。 分析:将删除ch后的数组仍 然写在原数组中
例6-29:求矩阵a的转置a a=123 a'=(14 456 25 36 算法: 定义变量存储矩阵的元素 输入矩阵a中所有元素 求矩阵a的转置a 输出矩阵a
7 例6-29:求矩阵a的转置a’ a= 1 2 3 a’= 1 4 4 5 6 2 5 3 6 ▪ 算法: ▪ 定义变量存储矩阵的元素 ▪ 输入矩阵a中所有元素 ▪ 求矩阵a的转置a’ ▪ 输出矩阵a’
1、定义变量 定义一个数组用于存储2行3列的矩阵 inta[2][3] 语法:数据类型数组名行数列数 a为2×3(2行3列)的数组,注意下标范围 a【0]-a[01[o1a[o][11a[o1[2 a[1]-a[1][o]a[1][1]a[1][2 列
8 1、定义变量 ▪ /*定义一个数组用于存储2行3列的矩阵*/ ▪ int a[2][3]; ▪ 语法:数据类型 数组名[行数][列数] a为2×3(2行3列)的数组,注意下标范围 a[0]---- a[1]---- a a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] 行 列
维数组的内存分配: 按行存放(先行后列) 合法的初始化形式: na[23]={123}567 [O]o] nta[2]3]123567a[o]|ao1 nta[2]3]={1}{5 na]3]={123,5,6乃 a[o[2] inta[j[3]={1}{5 a[1][o] /列长度是必须指定出来的,a[1] 为什么?* a[1][1] a[1][2]
9 二维数组的内存分配: 按行存放(先行后列) a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] a[0] a[1] a 合法的初始化形式: int a[2][3]={{1,2,3},{5,6,7}} int a[2][3]={1,2,3,5,6,7} int a[2][3]={{1},{5}} int a[ ][3]={1,2,3,5,6,7} int a[ ][3]={{1},{5}} /*列长度是必须指定出来的, 为什么?*/
输入数组元素 要输入每一个a[[/ for(i=0:i<2:i++)/行下标从0到1* for(=j3:j*+)/列下标从0到2 scanfC %d", &a[i]iD: 10
10 输入数组元素 /*要输入每一个a[i][j]*/ for (i=0;i<2;i++) /*行下标从0到1*/ for(j=0;j<3;j++) /*列下标从0到2 */ scanf(“%d”,&a[i][j]);