c语言程序设计二维数组ppt,第14讲 二维数组_重庆邮电大学:C语言程序设计(谢竞博)_ppt_大学课件预览_高等教育资讯网...

第 14讲二维数组二维数组做函数参数

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

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);

}

为什么?

吸收掉前一次输入后的结束符

,回车,。

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);

}

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);

}

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后的数组仍然写在原数组中。

7

例 6-29:求矩阵 a的转置 a?

a= 1 2 3 a?= 1 4

4 5 6 2 5

3 6

算法:

定义变量存储矩阵的元素

输入矩阵 a中所有元素

求矩阵 a的转置 a?

输出矩阵 a?

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]

行列

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}}

/*列长度是必须指定出来的,

为什么? */

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]);

11

求 a?

1,/*在求 a?之间,也同样要定义一个二维数组用于存储 a?,如何定义? */

int trans_a[3][2]; /*3行 2列 */

2,/*求 a?,即 trans_a[i][j] = a[j][i]*/

for (i=0; i<3; i++) /*行下标从 0到 2*/

{ for(j=0; j<2; j++) /*列下标从 0到 1 */

{ trans_a[i][j] = a[j][i];

}

}

12

输出 a?

/*要输出每一个 trans_a[i][j]*/

for (i=0;i<3;i++) /*行下标从 0到 2*/

for(j=0;j<2;j++) /*列下标从 0到 1 */

printf(“%3d”,&trans_a[i][j]);

输出结果? /*按矩阵格式输出 */

for (i=0;i<3;i++)

{ for(j=0;j<2;j++)

printf(“%d”,&trans_a[i][j]);

putchar(?\n?);

}

13

#include

#define M 2

#define N 3

void main()

{int a[M][N],trans_a[N][M],i,j; /*数组定义 */

for (i=0;i

for(j=0;j

scanf(“%d”,&a[i][j]);

for (i=0; i

{ for(j=0; j

{ trans_a[i][j] = a[j][i];

}

}

for (i=0;i

{ for(j=0;j

printf(“%d”,trans_a[i][j]);

putchar(?\n?);

}

完整程序

14

将求 a?写成函数

void Trans_matrix(int a[M][N],int

trans_a[N][M])

{int i,j;

for (i=0; i

{ for(j=0; j

{ trans_a[i][j] = a[j][i];

}

}

}

为什么给参数

trans_a[M][N]?

不仅需要矩阵 a,

还需要一个空矩阵用于存储转置结果。

#include

#define M 2

#define N 3

void Trans_matrix(int a[M][N],int trans_a[N][M])

void main()

{int a[M][N],trans_a[N][M],i,j; /*数组定义 */

for (i=0;i

for(j=0;j

scanf(“%d”,&a[i][j]);

Trans_matrix(a,trans_a);

/*调用函数计算转置,结果就保存在 trans_a里 */

for (i=0;i

{ for(j=0;j

printf(“%d”,trans_a[i][j]);

putchar(?\n?);

}

15

例 6- 31求最小字符串

s t u d e n t \0 …

T e a c h e r \0 …

b l a c k b o a r d \0 …

c l a s s r o o m \0 …

16

#include

#include

#define ARRA_SIZE 80

main()

{ int i,num;

char str[ARRA_SIZE],min[ARRA_SIZE];

printf("Please enter five names:\n");

gets(str);

strcpy(min,str);

for (i=1; i<5; i++)

{ gets(str);

if (strcmp(str,min) < 0)

{ strcpy(min,str);

}

}

printf("The min is:");

puts(min);

}

用一维数组

17

#include

#include

#define ARRA_SIZE 80

main()

{ int i;

char str [5][ARRA_SIZE],min[ARRA_SIZE];

for (i=0;i<5;i++)

{ printf("Please enter next name:\n");

gets(str[i]);

}

strcpy(min,str[0]);

for (n=1; n<5; n++)

{ if (strcmp(str[i],min) < 0)

{ strcpy(min,str[i]);

}

}

printf("The min is:");

puts(min);

}

用二维数组

18

1,编程实现 n行杨辉三角的计算

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

1...2]][1[]1][1[]][[

1...01]0][[

1...01]][[

nijiajiajia

niia

niiia

19

计算 n行的杨辉三角

/*函数功能,计算 n行的 杨辉三角形,并存入数组 a中 */

void YHTriangle(int a[][ARR_SIZE],int n)

{ int i,j ;

/*置第一列和对角线为 1*/

for (i=0; i

{ a[i][1] = 1;

a[i][i] = 1;

}

/*计算其它矩阵元素 */

for (i=2; i

{ for (j=1; j<=i-1; j++)

{ a[i][j] = a[i-1][j-1] + a[i-1][j];

}

}

}

注意 2,要分情况求解,因为下标的变化范围不同。

注意 1,二维数组做参数时,列长度必须指定

20

输出 n行的杨辉三角

/* 函数功能,输出 n行的杨辉三角形 */

void PrintYHTriangle(int a[][ARR_SIZE],int n)

{ int i,j ;

for (i=1; i

{ for (j=1; j<=i; j++) /*只输出左下部分 */

{

printf("%4d",a[i][j]);

}

printf("\n");

}

}

注意 3,输出下三角矩阵

21

主函数

#include

#define ARR_SIZE 11

void YHTriangle(int a[][ARR_SIZE],int n);

void PrintYHTriangle(int a[][ARR_SIZE],int n);

main()

{ int a[ARR_SIZE][ARR_SIZE],n;

printf("input n (n<=10):");

scanf("%d",&n); /*根据要求输入杨辉三角形的行数 */

YHTriangle(a,n); /*调用函数求 n行的杨辉三角,存入 a*/

PrintYHTriangle(a,n); /*调用函数输出 n行的杨辉三角 a*/

}

注意 4,调用时只给数组名注意 5,定义时必须指明行、

列长度,而且必须是常量

22

小结

复习指针

二维数组

二维数组的定义、内存分配

二维数组元素的引用

二维数组做函数参数

下节课继续讲二维数组与指针

(第八章),请提前预习

23

作业 1

自学 P204页例 6.5.4问题的实现,学习

,插入一个数到有序数组,。

24

作业 2:班级成绩管理高数英语

C

语言

001 78 87 95

002 98 69 98

030 86 73 96

编写函数统计 每门课 的总分和平均分编写函数排名 第一 的同学的 总分 是多少?

i

j

学号课程 编写函数统计 每个学生的总分和平均分

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值