第六章 数组.

Slides:



Advertisements
Similar presentations
只怕有心人只怕有心人 世上无难事世上无难事 浙江长征职业技术学院 — 计算机与信息技术系 — 相方莉制作.
Advertisements

第一章 C语言概述.
C程序设计 第6章 数 组 主讲教师: 鲁 萍 西安建筑科技大学 理学院 任务:键盘输入整数,排序.
二级指针与二维数组.
第6章 数组 公共计算机基础教研部.
第九章 字串 (String).
一维数组 乾坤以有亲可久; 君子以厚德载物。.
C语言程序设计.
4.3 使用二维数组 P 求两个矩阵的和 求方阵对角线上元素之和 显示算术题和学生答题信息
C语言实验 第一课 标题:学号+姓名.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
字符串与二维数组.
第九章 字符串.
第5讲 数组 5.1 一维数组 5.2 二维数组 5.3 字符串数组 5.4 综合案例分析.
C语言程序设计 第十二章 位运算.
第六章 数 组 主讲教师 贾月乐 联系电话:
循环结构又称为重复结构:用来处理需要重复处理的问题,它是程序中一种很重要的结构。
C语言高级编程(第四部分) 字符串 北京大学 信息科学技术学院.
第7章 构造数据类型 构造数据类型:数组、结构体、共用体、用户自定义类型 7.1 数组
Introduction to the C Programming Language
Introduction to the C Programming Language
目录 第八章 数组 1 简单学生成绩管理系统的开发 2 一维数组 3 多维数组 4 字符数组 5 数组作函数参数.
第6章 利用数组处理批量数据.
Introduction to the C Programming Language
Chap 8 指针 8.1 寻找保险箱密码 8.2 角色互换 8.3 冒泡排序 8.4 电码加密 8.5 任意个整数求和*
在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。
走进编程 程序的顺序结构(二).
主要内容: ◆ 一维数组 ◆二维数组 ◆ 字符数组
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第六单元 应用数组的程序设计 从现在开始,将详细讲述C语言的方方面面。第一章中的所有疑惑,都将一一消灭。
第二章 Java语言基础.
第6章 数 组 本章要点: 数组的定义、初始化、数组元素的引用 字符数组的输入输出 字符串处理函数 数组的应用 学习方法建议:
函 数 实验八 第24讲 C程序设计 Main() { int x,y; X=10; y=x*x+1;
第四章 数组 4.4.1一维数组的定义和初始化 一、一维数组的定义和初始化 1.一维数组定义 定义格式:类型 数组名[常量表达式];
第五章 习题课 电子信息与计算机科学系 曾庆尚.
数组 梁春燕 华电信息管理教研室.
第六章 数组 西安工程大学.
C++大学基础教程 第5章 数组 北京科技大学 信息基础科学系.
第一章 函数与极限.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第5讲 数组 5.1 一维数组 5.2 二维数组 5.3 字符串数组 5.4 综合案例分析.
数列.
第七章 数组.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C语言复习3----指针.
第4章 数组 本章导读 本章主要知识点 《 C语言程序设计》 (Visual C++ 6.0环境)
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
C语言大学实用教程 第6章 数组 西南财经大学经济信息工程学院 刘家芬
C语言的特点 1. C程序由许多函数组成 2. C程序必须有且只有一个主函数main( ) 3. 函数用“{”和“}”表示起点和终点
请编写如下程序: 输入100名学生的成绩,要求输出高于平均分的成绩。
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
第5章 数组 5.1 数组的概念 5.2 一维数组的定义和引用 5.3 二维数组的定义和引用 5.4 用数组名作函数参数 5.5 字符数组
第6章 数组.
第4章 Excel电子表格制作软件 4.4 函数(一).
5.4.1 二维数组 (一) 二维数组的定义 1. 二维数组定义的一般形式 类型说明符 数组名[常量表达式][ 常量表达式]
C程序设计.
第九节 赋值运算符和赋值表达式.
3.16 枚举算法及其程序实现 ——数组的作用.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
2.6 字符型数据 一、 字符常量 1、字符常量的定义 用一对单引号括起来的单个字符,称为字符常量。 例如,‘A’、‘1’、‘+’等。
第二章 Java基本语法 讲师:复凡.
C程序设计 实验二 数据类型、运算符和表达式 第6讲
程序设计基础A(C语言) 第一章 C语言概述 主讲教师: 许 康
Introduction to the C Programming Language
§4.5 最大公因式的矩阵求法( Ⅱ ).
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
台大資訊工程學系 資料系統訓練班 第119期 吳晉賢
C语言基础学习 从外行到入门.
Presentation transcript:

第六章 数组

? ??? 这些数据如何存放才便于排序 这便是本章所要解决的问题 问题:给一组数排序,这组 数该 如何存放呢 1 1 1 1 1 1 1 1 8 2 9 4 5 6 3 7 1 8 1 8 1 8 8 8 8 8 8 8 8 8 8 8 ??? 这些数据如何存放才便于排序 8 8 8 8 8 8 8 ? 这便是本章所要解决的问题

本章要点 掌握一维、二维数组的定义和引用方法、存储结构和初始化方法。 掌握有关一维数组的有关算法 掌握数组的运算。

6.1 数组的概念 6.2 一维数组的定义和引用 6.3 二维数组的定义和引用 6.4 字符数组 主要内容 6.1 数组的概念 6.2 一维数组的定义和引用 6.3 二维数组的定义和引用 6.4 字符数组

6.1 数组的概念 C语言为这些数据,提供了一种构造数据类型:数组。所谓数组就是一组具有相同数据类型的数据的有序集合。 一个班学生的学习成绩 一行文字 一个矩阵 这些数据的特点是: 1、具有相同的数据类型 2、使用过程中需要保留原始数据 C语言为这些数据,提供了一种构造数据类型:数组。所谓数组就是一组具有相同数据类型的数据的有序集合。

6.2 一维数组的定义和引用 6.2.1 定义一维数组 例如: int a[10]; 说明: 1.一维数组的定义格式为: 6.2 一维数组的定义和引用 6.2.1 定义一维数组 1.一维数组的定义格式为: 类型说明符 数组名[常量表达式]; 例如: int a[10]; 它表示定义了一个整形数组,数组名为a,此数组有10个元素。 说明: 1.数组名定名规则和变量名相同,遵循标识符定名规则。

2.在定义数组时,需要指定数组中元素的个数,方括弧中的常量表达式用来表示元素的个数,即数组长度。 3.常量表达式中可以包括常量和符号常量,但不能包含变量。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。

例如: int n; scanf(“%d″,&n); /*在程序中临时输入数 组的大小 */ int a[n]; 数组说明中其他常见的错误: ① float a[0]; /* 数组大小为0没有意义 */ ② int b(2)(3); /* 不能使用圆括号 */ ③ int k, a[k]; /* 不能用变量说明数组大小*/

6.2 一维数组的定义和引用6.2.2 引用一维数组元素 注意: 1.数组元素的引用方式: 数组名[下标] 下标可以是整型常量或整型表达式。 6.2 一维数组的定义和引用6.2.2 引用一维数组元素 1.数组元素的引用方式: 数组名[下标] 下标可以是整型常量或整型表达式。 例如: a[0]=a[5]+a[7]-a[2*3] 注意: 定义数组时用到的“数组名[常量表达式]” 和引用数组元素时用到的“数组名[下标]” 是有区别的。 例如∶ int a[10]; t=a[6];

2.一维数组元素引用的程序实例 例6.1 引用数组元素。利用循环给数组元素a[0]~a[9]赋值为0~9,然后按逆序输出各元素的值。 #include <stdio.h> void main() { int i,a[10]; for (i=0; i<=9;i++) a[i]=i; for(i=9;i>=0; i--) printf("%d ″,a[i]); printf("\n″); } 运行结果如下: 9 8 7 6 5 4 3 2 1 0

6.2 一维数组的定义和引用 6.2.3 一维数组的初始化 对数组元素初始化的实现方法: 6.2 一维数组的定义和引用 6.2.3 一维数组的初始化 对数组元素初始化的实现方法: 1.在定义数组时对数组元素赋以初值。 例如:int a[10]={0,1,2,3,4,5,6,7,8,9}; 将数组元素的初值依次放在一对花括弧内。经过上面的定义和初始化之后,a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4,a[5]=5,a[6]=6,a[7]=7,a[8]=8,a[9]=9。

定义a数组有10个元素,但花括弧内只提供5个初值,这表示只给前面5个元素赋初值,后5个元素值为0。 2. 可以只给一部分元素赋值。 例如: int a[10]={0,1,2,3,4}; 定义a数组有10个元素,但花括弧内只提供5个初值,这表示只给前面5个元素赋初值,后5个元素值为0。 3. 如果想使一个数组中全部元素值为0,可以写成: int a[10]={0,0,0,0,0,0,0,0,0,0}; 或 int a[10]={0};

4. 在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。 例如:int a[5]={1,2,3,4,5}; 也可以写成 int a[]={1,2,3,4,5}; int a[10]={1,2,3,4,5}; 只初始化前5个元素,后5个元素为0。

Fibonacci数列公式:已知: a1=a2=1 an=an-1+an-2 6.2 一维数组的定义和引用 6.2.4 一维数组程序举例 例6.2:用数组来处理求Fibonacci数列问题。 Fibonacci数列公式:已知: a1=a2=1 an=an-1+an-2 即:1,1,2,3,5,8,13 程序实例: #include <stdio.h> void main() { int i; int f[20]={1,1};

for(i=2;i<20;i++) f[i]=f[i-2]+f[i-1]; for(i=0;i<20;i++) { if(i%5==0) printf(″\n″); printf(″%12d″,f[i]) } /*For循环结束*/ } /*程序结束*/ if语句用来控制换行,每行输出5个数据。 运行结果如下: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765

例6.3:输入10个数,用起泡法对这10个数排序(由小到大)。 第 一 趟 比 较 经过第一趟(共5次比较与交换)后,最大的数9已“沉底” 。然后进行对余下的前面5个数第二趟比较,

第 二 趟 比 较 如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。

程序流程图如下:

程序实例6.3: #include <stdio.h> void main() { int a[10]; int i,j,t; printf(″input 10 numbers :\n″); for (i=0;i<10;i++) scanf("%d",&a[i]); printf("\n");

for(j=0;j<9;j++) for(i=0;i<9-j;i++) if (a[i]>a[i+1]) { t=a[i];a[i]=a[i+1]; a[i+1]=t; } printf(″the sorted numbers :\n″); for(i=0;i<10;i++) printf(″%d ″,a[i]); printf(″\n″); }/*程序结束*/ 程序运行结果如下: input 10 numbers: 1 0 4 8 12 65 -76 100 -45 123↙ the sorted numbers: -76 -45 0 1 4 8 12 65 100 123

6.3 二维数组的定义和引用 6.3.1 定义二维数组 二维数组定义的一般形式为 类型说明符 数组名[常量表达式][常量表达式]; 6.3 二维数组的定义和引用 6.3.1 定义二维数组 二维数组定义的一般形式为 类型说明符 数组名[常量表达式][常量表达式]; 例如:定义a为3×4(3行4列)的数组,b为5×10(5行10列)的数组。如下: float a[3][4],b[5][10]; 不能写成 float a[3,4],b[5,10];

6.3 二维数组的定义和引用 6.3.1 定义二维数组 注意:我们可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。 6.3 二维数组的定义和引用 6.3.1 定义二维数组 注意:我们可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。 例如:可以把a看作是一个一维数组,它有3个元素:a[0]、a[1]、a[2],每个元素又是一个包含4个元素的一维数组。

6.3 二维数组的定义和引用 6.3.1 定义二维数组 C语言中,二维数组中元素排列的顺序是按行存放的,即在内存中先顺序存放第一行的元素,再存放第二行的元素。下图表示对a[3][4]数组存放的顺序。 a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23

下标可以是整型表达式,如 a[2-1][2*2-1] 6.3 二维数组的定义和引用 6.3.2 引用二维数组的元素 二维数组元素的表示形式为: 数组名[下标][下标] 例如: a[2][3] 下标可以是整型表达式,如 a[2-1][2*2-1] 不要写成 a[2,3],a[2-1,2*2-1]形式 数组元素可以出现在表达式中,也可以被赋值 例如:b[1][2]=a[2][3]/2

6.3 二维数组的定义和引用 6.3.2 引用二维数组的元素 在使用数组元素时,应该注意下标值应在已定义的数组大小的范围内。 6.3 二维数组的定义和引用 6.3.2 引用二维数组的元素 在使用数组元素时,应该注意下标值应在已定义的数组大小的范围内。 常出现的错误有: int a[3][4]; /* 定义a为3×4的数组 */ ┆ a[3][4]=3;

6.3 二维数组的定义和引用 6.3.3 二维数组的初始化 可以用下面4种方法对二维数组初始化: 1.分行给二维数组赋初值。 例如: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 2.可以将所有数据写在一个花括弧内,按数组排列的顺序对各元素赋初值。 例如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

3.可以对部分元素赋初值。 例如: int a[3][4]={{1},{5},{9}}; 也可以对各行中的某一元素赋初值,如 int a[3][4]={{1},{0,6},{0,0,11}}; 1 0 0 0 5 6 0 0 0 0 0 0 1 0 0 0 5 0 0 0 9 0 0 0 1 0 0 0 0 6 0 0 0 0 0 11 也可以只对某几行元素赋初值。如: int a[3][4]={{1},{5,6}};

4.如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。 例如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};它等价于:int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 0 0 3 0 0 0 0 0 0 10 0 0 在定义时也可以只对部分元素赋初值而省略第一维的长度,但应分行赋初值。 例如:int a[][4]={{0,0,3},{},{0,10}};

6.3 二维数组的定义和引用 6.3.4 二维数组程序举例 例6.4 将一个二维数组行和列元素互换,存到另一个 二维数组b中。 6.3 二维数组的定义和引用 6.3.4 二维数组程序举例 例6.4 将一个二维数组行和列元素互换,存到另一个 二维数组b中。 例如:a= 1 2 3 1 4 4 5 6 b= 2 5 3 6 #include <stdio.h> void main() { int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2],i,j; printf(″array a:\n″); for (i=0;i<=1;i++) for (j=0;j<=2;j++)

printf(″%5d″,a[i][j]); b[j][i]=a[i][j]; } printf(″\n″); printf(″array b:\n″); for (i=0;i<=2;i++) { for(j=0;j<=1;j++) printf("%5d″,b[i][j]); } /*程序结束*/ 运行结果如下: array a: 1 2 3 4 5 6 array b: 1 4 2 5     3  6

例6.5: 有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。 先用N-S流程图表示算法 ,如下:

程序如下: #include <stdio.h> void main() { int i,j,row=0,colum=0,max; int a[3][4]={{1,2,3,4},{9,8,7,6}, {-10,10,-5,2}}; max=a[0][0];

for (i=0;i<=2;i++) for (j=0;j<=3;j++) if (a[i][j]>max) { max=a[i][j]; row=i; colum=j; } printf(″max=%d,row=%d,colum=%d\n″, max,row,colum); } /*程序结束*/ 运行结果如下: max=10,row=2,colum=1

6.4 字符数组 6.4.1 定义字符数组 定义方法与前面介绍的类似。例如: char c[10]; 6.4 字符数组 6.4.1 定义字符数组 定义方法与前面介绍的类似。例如: char c[10]; c[0]=′I′;c[1]=′ ′;c[2]=′a′; c[3]=′m′;c[4]=′ ′;c[5]=′h′;c[6]=′a′; c[7]=′p′;c[8]=′p′;c[9]=′y′;

6.4 字符数组 6.4.2 字符数组的初始化 对字符数组初始化,可逐个字符赋给数组中各元素。 例如: 6.4 字符数组 6.4.2 字符数组的初始化 对字符数组初始化,可逐个字符赋给数组中各元素。 例如: char c[10]={‘I’,’a’,’m’,’h’,’a’,’p’,’p’,’y’}

如果初值个数小于数组长度,则只将这些字符赋给数 组中前面那些元素,其余的元素自动定为空字符。 char c[10]={′c′,′ ′,′p′,′r′,′o′, ′g′,′r′,′a′,′m′};

如果提供的初值个数与预定的数组长度相同,在定义 时可以省略数组长度,系统会自动根据初值个数确定 数组长度。 char c[]={′I′,′ ′,′a′,′m′,′ ′,′h′, ′a′,′p′,′p′,′y′};数组c的长度自动定为10。

定义和初始化一个二维字符数组 char diamond[5][5]={{′ ′,′ ′,*′},{′ ′,′*′,′ ′,′*′},{′*′,′ ′,′ ′,′ ′,′*′},{′ ′,′*′,′ ′,′*′},{′ ′,′ ′,′*′}}

6.4 字符数组 6.4.3 引用字符数组的元素 例6.6 输出一个字符串。 程序如下: #include <stdio.h> 6.4 字符数组 6.4.3 引用字符数组的元素 例6.6 输出一个字符串。 程序如下: #include <stdio.h> void main() { char c[11]={’I’,’ ’,’a’,’m’,’ ’,’a’,’ ’, ’b’,’o’,’y’,’.’};/*字符数组初始化*/ int i; for(i=0;i<10;i++) printf(″%c″,c[i]); printf(″\n″); } 运行结果:I am a boy.

#include <stdio.h> void main() 例6.7 输出一个菱形图 #include <stdio.h> void main() { char diamond[][5]={{′ ′,′ ′,′*′},{′′,′*′,′ ′,′*′},{′*′,′ ′,′ ′,′ ′,′*′},{′ ′,′*′,′ ′,′*′},{′ ′,′ ′,′*′}}; int i,j; for (i=0;i<5;i++) { for (j=0;j<5;j++) printf(″%c″,diamond[i][j]); printf(″\n″); } } 运行结果 * * * * *

6.4 字符数组 6.4.4字符串和字符串结束标志 为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”——‘\0’。 6.4 字符数组 6.4.4字符串和字符串结束标志 为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”——‘\0’。 字符数组并不要求它的最后一个字符为′\0′,甚至可以不包含′\0′。 例如:char c[5]={′C′,′h′,′i′,′n′,′a′};

6.4 字符数组 6.4.4字符串和字符串结束标志 但是由于系统对字符串常量自动加一个′\0′。因此,为了使处理方法一致,在字符数组中也常人为地加上一个′\0′。 例如:char c[6]={′C′,′h′,′i′,′n′,′a′,′\0′};

char c[]={“Pascal program”}; 6.4 字符数组 6.4.4字符串和字符串结束标志 例如: 定义了如下的字符数组∶ char c[]={“Pascal program”}; 现在,想用一个新的字符串代替原有的字符串”Pascal program” ,从键盘向字符数组输入∶Hello 如果不加′\0′的话,字符数组中的字符如下∶ Hellol program

6.4 字符数组 6.4.5 字符数组的输入输出 字符数组的输入输出可以有两种方法: 逐个字符输入输出。用格式符“%c”输入或输出一个字符。 6.4 字符数组 6.4.5 字符数组的输入输出 字符数组的输入输出可以有两种方法: 逐个字符输入输出。用格式符“%c”输入或输出一个字符。 将整个字符串一次输入或输出。用“%s”格式符,意思是对字符串的输入输出。

char c[]={″China″}; printf(″%s″,c); 例如 在内存中数组c的状态

说明: 1. 输出字符不包括结束符′\0′。 2.用“%s”格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名。 3.如果数组长度大于字符串实际长度,也只输出到遇′\0′结束。 4.如果一个字符数组中包含一个以上′\0′,则遇第一个′\0′时输出就结束。 5.可以用scanf函数输入一个字符串。

如果利用一个scanf函数输入多个字符串,则在输入时以空格分隔。 例如: char strl[5],str2[5],str3[5]; scanf(″%s %s %s″,str1,str2,str3); 输入数据: How are you?  数组中未被赋值的元素的值自动置′\0′。

6. scanf函数中的输入项如果字符数组名。不要再加地址符&,因为在C语言中数组名代表该数组的起始地址。下面写法不对: scanf(″%s″,&str); 分析图中所示的字符数组 用8进制形式输出数组c的起始地址 printf(″%o″,c); printf(″%s″,c);

6.4 字符数组 6.4.6字符串处理函数 1. puts函数 其一般形式为: puts (字符数组) 其作用是将一个字符串(以′\0′结束的字符序列)输出到终端。假如已定义str是一个字符数组名,且该数组已被初始化为"China"。则执行puts(str);其结果是在终端上输出China。

用puts函数输出的字符串中可以包含转义字符。例如: char str[]={″China\nBeijing″}; puts(str); 输出结果: China Beijing 在输出时,将字符串 结束标志′\0′ 转换成′\n′, 即输出完字符串后换行。

2. gets函数 其一般形式为:gets(字符数组) 其作用是从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符数组的起始地址。如执行下面的函数: gets(str) 从键盘输入: Computer↙

将输入的字符串"Computer"送给字符数组str(请注意送给数组的共有9个字符,而不是8个字符),函数值为字符数组str的起始地址。一般利用gets函数的目的是向字符数组输入一个字符串,而不大关心其函数值。 注意:用puts和gets函数只能输入或输出一个字符串,不能写成 puts(str1,str2) 或 gets(str1,str2)

3. strcat函数 其一般形式为:strcat(字符数组1,字符数组2) Strcat的作用是连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。

例如: char str1[30]={″People′s Republic of ″}; char str2[]={″China″}; print(″%s″,strcat(str1,str2)); 输出: People′s Republic of China

4. strcpy函数 其一般形式为:strcpy(字符数组1,字符串2) strcpy是“字符串复制函数”。作用是将字符串2复制到字符数组1中去。例如: char str1[10],str2[]={″China″}; strcpy(str1,str2);

关于strcpy函数的几点说明 1.字符数组1必须定义得足够大,以便容纳被复制的字符串。字符数组1的长度不应小于字符串2的长度。 2.“字符数组1”必须写成数组名形式(如str1),“字符串2”可以是字符数组名,也可以是一个字符串常量。如strcpy(str1,″China″);

3.复制时连同字符串后面的′\0′一起复制到字符数组1中。 4.可以用strcpy函数将字符串2中前面若干个字符复制到字符数组1中去。例如:strcpy(str1,str2,2); 作用是将str2中前面2个字符复制到str1中去,然后再加一个‘\0’。

5.不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。如下面两行都是不合法的: str1=″China″; str1=str2; 而只能用strcpy函数将一个字符串复制到另一个字符数组中去。用赋值语句只能将一个字符赋给一 个字符型变量或字符数组元素。如下面是合法的: char a[5],c1,c2; c1=′A′; c2=′B′; a[0]=′C′; a[1]=′h′; a[2]=′i′; a[3]=′n′; a[4]=′a′;

5. strcmp函数 其一般形式为:strcmp(字符串1,字符串2) strcmp的作用是比较字符串1和字符串2。 例如:strcmp(str1,str2); strcmp(″China″,″Korea″); strcmp(str1,″Beijing″);

比较的结果由函数值带回 (1) 如果字符串1=字符串2,函数值为0。 (2) 如果字符串1>字符串2,函数值为一正整数。 (3) 如果字符串1<字符串2,函数值为一负整数。 注意:对两个字符串比较,不能用以下形式: if(str1>str2) printf(″yes″); 而只能用 if(strcmp(str1,str2)>0) printf(″yes″);

6. strlen函数 其一般形式为:strlen (字符数组) strlen是测试字符串长度的函数。函数的值为字符串中的实际长度(不包括′\0′在内)。 例如:char str[10]={″China″}; printf(″%d″,strlen(str)); 输出结果不是10,也不是6,而是5。也可以直接测试字符串常量的长度,如strlen(″China″);

7. strlwr函数 其一般形式为:strlwr (字符串) strlwr函数的作用是将字符串中大写字母换成小写字母。 8. strupr函数 其一般形式为:strupr (字符串) strupr函数的作用是将字符串中小写字母换成大写字母。

6.4 字符数组 6.4.7 字符数组应用举例 例6 .8 输入一行字符,统计其中有多少个单词,单 词之间用空格分隔开。

程序如下: #include <stdio.h> void main() { char string[81]; int i,num=0,word=0; char c; gets(string); for (i=0;(c=string[i])!=′\ 0′;i++)

printf(″There are %d words in the line.\n″,num); if(c==′ ′) word=0; else if(word==0) { word=1; num++; } printf(″There are %d words in the line.\n″,num); 运行情况如下: I am a boy.↙ There are 4 words in the line.

#include<stdio.h> #include<string.h> void main ( ) { 例6.9 有3个字符串,要求找出其中最大者 程序如下: #include<stdio.h> #include<string.h> void main ( ) { char string[20]; char str[3][20]; int i; for (i=0;i<3;i++) gets (str[i]);

if (strcmp(str[0],str[1])>0) strcpy(string,str[0]) else strcpy(string,str[1]); if (strcmp(str[2],string)>0) strcpy(string,str[2]); printf(″\nthe largest string is∶ \n%s\n″,string); }

运行结果如下: CHINA↙ HOLLAND↙ AMERICA↙   the largest string is∶ HOLLAND