第6章 二维数组和字符数组
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
——进阶篇
4.字符串拷贝函数strcpy()
格式:strcpy (字符数组名1,字符数组名2) 功能:把字符数组2中的字符串拷贝到字符数组1中。串 结束标志‘\0’也一同拷贝。字符数名2也可以是 一个字符串常量。这时相当于把一个字符串赋予 一个字符数组。 例如: #include"string.h" void main() { char st1[15],st2[]="C Language"; strcpy(st1,st2); puts(st1); printf("\n"); } C语言程序设计
C语言程序设计
——进阶篇
【例6.1】编程求一个4行4列矩阵的转置。
矩阵的转置是指矩阵的a[i][j]与a[j][i]元素进行交换, 即以对角线为轴的翻转: 1 5 9 2 6 3 7 4 8 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
10 11 12 原始数据
13 14 15 16
——进阶篇 printf("\narray a:\n"); for(i=0;i<3;i++) { for(j=0;j<4;j++) printf("%5d",a[i][j]); printf("\n"); } printf("\narray b:\n"); for(i=0;i<3;i++) printf("%5d",b[i]); printf("\n"); } C语言程序设计
——进阶篇
6.2.1 字符数组的定义及初始化 1.字符数组的定义
一维字符数组: char 数组名[整型常量表达式]; 例如: char c[10]; 二维字符数组: char数组名[整型常量表达式1][整型常量表达式2]; 例如: char c[5][20]; C语言程序设计
——进阶篇
2. 字符数组的初始化
C语言程序设计
——进阶篇
6.1 二维数组
6.1.1 二维数组的定义
一般形式: 类型说明符 数组名[常量表达式1][常量表达式2] 其中常量表达式 1 表示第一维下标的长度,常量表达式 2 表示第二维下标的长度。 例如: int a[3][4]; 说明了一个三行四列的数组,数组名为a,其下标变量的 类型为整型。 C语言程序设计
——进阶篇
对字符数组输入/输出的几点说明:
输出字符不包含'\0'。 用‚%s”格式符时,输出项是数组名,而不是数组 元素,下面写法是错误的: printf("%s",c[]); printf("%s",&c); 当数组长度大于字符串实际长度,也只输出到'\0'结 束。例如, char c[10]={"well"}; printf("%s",c); 当用scanf函数输入字符串时,字符串中不能含有空 格,否则将以空格作为串的结束符。 C语言程序设计
——进阶篇 #include “stdio.h” #define M 3 #define N 4 void main() { int i,j,sum=0,l, a[M+1][N+1]; printf("please input students' score\n"); for(i=0;i<3;i++) /*给数组a赋初值*/ { for(j=0;j<4;j++) scanf("%4d",&a[i][j]); printf("\n"); }
——进阶篇 a[M][N]=0; /*给末知值的数组元素a[M][N]赋0*/ for(i=0;i<=3;i++) { for(j=0;j<=4;j++) printf("%4d",a[i][j]); printf("\n"); } }
C语言程序设计
——进阶篇
6.2 字符数组
在C语言里没有字符串变量(数据类型),是用 字符数组来表示字符串的。字符串总是以'\0'作为 串的结束符,因此当把一个字符串存入一个数组时, 也把结束符'\0'存入数组,并以此作为该字符串是 否结束的标志。实际上,字符串就是一种以'\0'结 尾的字符数组。 例如 char c[15]=“c program”; c p r o g r a m \0 C语言程序设计
——进阶篇
在一维线性内存空间中,如何在一维存 储器中存放二维数组?一种是按行排列, 即 放完一行之后顺次放入第二行。另一种是按列 排列, 即放完一列之后再顺次放入第二列。 在C语言中,二维数组是按行排列的。 上例中先存放 a[0] 行,再存放 a[1] 行,最 后存放a[2]行。
C语言程序设计
——进阶篇
——进阶篇
【例6.3】设某班有M个学生,每个学生有N门 课程的成绩,求每门课程的平均成绩和每个
学生的平均成绩。
程序分析: 数组每行的各个元素是每个学生的N门课程的成 绩,每列的各个元素是同一门课程里不同学生的成绩。 所以,计算每门课程的平均成绩,即计算每列里各行 元素的平均值,即第j列课程的平均成绩是 (a[0][j]+a[1][j]+…+a[i1][j])/i;同理,计算每 个学生的平均成绩,即计算每行里各列元素的平均值, 即第i行学生的平均成绩是 a[i][0]+a[i][1]+…+a[i][j1])/j;可设一个二维数 组a[M+1][N+1]存放M个学生、N门课程的成绩。 C语言程序设计
转置后数据 C语言程序设计
——进阶篇 #include “stdio.h” void main() { int i,j,t,a[4][4]; printf("please enter 16 numbers:\n"); for(i=0;i<4;i++) for(j=0;j<4;j++) scanf("%d",&a[i][j]); printf("Before change:\n"); for(i=0;i<4;i++) { for(j=0;j<4;j++) printf("%3d",a[i][j]); printf("\n"); } C语言程序设计
3.字符串连接函数strcat()
——进阶篇
格式:strcat(字符数组名1,字符数组名2) 功能:把字符数组2中的字符串连接到字符数组1中字符 串的后面 , 并删去字符串 1 后的串标志’ \0’ 。本 函 数返回值是字符数组1的首地址。 例如: #include"string.h" void main() { char st1[30]="Your name is "; int st2[10]; printf("input your name:\n"); gets(st2); strcat(st1,st2); puts(st1); } C语言程序设计
for(i=0;i<4;i++)
/*
转置
*/ ——进阶篇
for(j=i;j<4;j++)
{ t=a[i][j]; a[i][j]=a[j][i]; a[j][i]=t; } printf(“After change:\n”); /* 输出转置后矩阵 */ for(i=0;i<4;i++) { for(j=0;j<4;j++) printf("%3d",a[i][j]); printf("\n"); }
——进阶篇
2. 字符串输入函数gets()
格式:gets(字符数组名) 功能:从标准输入设备键盘上输入一个字符串。本函数得 到一个函数值,即为该字符数组的首地址。 例如: #include"stdio.h" void main() { char st[15]; printf("input string:\n"); gets(st); puts(st); } C语言程序设计
字符数组允许在类型说明时初始化赋值. 直接赋值字符
例如
char c[10]={'c',' ','p','r','o','g','r','a','m'};
用字符串常量直接初始化.
例如
char c[]=“c program”;
C语言程序设计
——进阶篇
6.2.2
字符串的输入与输出
可使用循环语句逐个地输入输出字符数组中的每个 字符,但通常使用printf()函数和scanf()函数一次性输 出输入一个字符数组中的字符串 。 main() { char st[15]; printf("input string:\n"); scanf(“%s”,st); /*字符数组名是字符数组首地址*/ printf("%s\n",st); } C语言程序设计
6.1.2 二维数组元素的引用
二维数组的元素也称为双下标变量,其表
示的形式为:
数组名[下标][下标] 其中下标应为整型常量或整型表达式。其值是 某一维的长度,即可取下标的最大值。
C语言程序设计
——进阶篇
例如有定义:int a[3][4];
输入数组的12个元素
…… for(i=0;i<3;i++) for(j=0;j<4;j++) scanf("%d",&a[i][j]); …… } C语言程序设计
}
C语言程序设计
——进阶篇
【例6.2】在二维数组a的各行中选出最大的元素 组成一个一维数组b。
该程序算法可描述为: for(i=0;i<3;i++) { } 找第i行的最大值max; b[i]=max;
而第i行是一个一维数组,该问题即演化为求一维数组最 大值的问题。
C语言程序设计
——进阶篇 #include “stdio.h” void main() { int a[3][4]={{3,16,87,65},{4,32,11,108},{10,25, 12,27}}; int b[3],i,j,max; for(i=0;i<3;i++) /* 求每行的最大元素 */ { max=a[i][0]; // for(j=1;j<4;j++) // if(a[i][j]>max) max=a[i][j]; b[i]=max; } C语言程序设计
输出数组的12个元素
for(i=0;i<3;i++)
for(j=0;j<4;j++)
{ printf("%5d",a[i][j]);
printf("\n");
——进阶篇
6.1.3 二维数组的初始化
按行分段赋值可写为:
int a[5][3]={ {80,75,92},{61,65,71}, {59,63,70},{85,87,90},{76,77,85} };
× ×
——进阶篇
6.2.3 常用字符串处理函数 1.字符串输出函数 puts()
格式:puts (字符数组名) 功能:把字符数组中的字符串输出到显示器。即在屏幕 上显示该字符串。 例如: #include"stdio.h" void main() { char c[]="BASIC\ndBASE"; puts(c); } C语言程序设计
按行连续赋值可写为:
int a[5][3]={ 80,75,92,61,65,71, 59,63,70,85,87,90,76,77,85};
这两种赋初值的结果是完全相同的。
C语言程序设计
——进阶篇
对于二维数组初始化赋值还有以下说明: 可以只对部分元素赋初值,未赋初值的元素自动 取0值。 例如: int a[3][3]={{1},{2},{3}}; 如对全部元素赋初值,则第一维的长度可以不给 出, 但第二维的长度不能省略。 例如: int a[3][3]={1,2,3,4,5,6,7,8,9}; 可以写为: int a[][3]={1,2,3,4,5,6,7,8,9};
C 语言程序设计 —进阶篇
第 6章 二维数组和字符数组
——进阶篇
内容概述
1.二维数组的定义、引用、初始化、在 计算机中的存储及其使用方法。 2.字符串的输入输出操作及常用的字符 串操作函数。
C语言程序设计
——进阶篇
教学目标
Βιβλιοθήκη Baidu
1.掌握二维数组的定义、初始化及其使用方法。 2.了解二维数组在计算机中的存储结构并对数据 进行存储和管理。 3.掌握字符串的输入输出方法,熟悉常用的字符 串操作函数。 4.学会使用数组解决实际问题的基本方法,能用 一维数组和二维数组解决简单的实际问题。
C语言程序设计
——进阶篇 for(i=0;i<3;i++) { for(j=0;j<4;j++) sum=sum+a[i][j]; a[i][N]=sum/N; /*求每个学生的平均成绩*/ sum=0; } for(j=0;j<4;j++) { for(i=0;i<3;i++) sum=sum+a[i][j]; a[M][j]=sum/M; /*求每门课程的平均成绩*/ sum=0; } C语言程序设计