1、C C语言程序设计语言程序设计、语言中控制结构有几种?、循环结构有几种?、for循环语句的格式?for循环语句的执行顺序?6.1用冒泡法对10个数排序6.2 一维数组6.3 二维数组6.4 字符数组6.16.1 用冒泡法对用冒泡法对1010个数排序个数排序 任务描述任务描述 数据查找与排序是编写程序时经常数据查找与排序是编写程序时经常遇到的问题。现在假设一个班有遇到的问题。现在假设一个班有1010名名同学,要求编写程序对他们在一次考同学,要求编写程序对他们在一次考试中的数学成绩由高到低进行排序。试中的数学成绩由高到低进行排序。6.16.1 用冒泡法对用冒泡法对1010个数排序个数排序 任务描述
2、任务描述 数据查找与排序是编写程序时经常数据查找与排序是编写程序时经常遇到的问题。现在假设一个班有遇到的问题。现在假设一个班有1010名名同学,要求编写程序对他们在一次考同学,要求编写程序对他们在一次考试中的数学成绩由高到低进行排序。试中的数学成绩由高到低进行排序。问题分析:问题分析:第第1 1步,将待排序的数据按照随机顺序排列,将第一个数与第二个步,将待排序的数据按照随机顺序排列,将第一个数与第二个数进行比较,若第一个较大,则将两数交换位置;反之,保持两数数进行比较,若第一个较大,则将两数交换位置;反之,保持两数原来的位置不变。这样,经过第原来的位置不变。这样,经过第1 1步处理后就能保证第
3、二个位置是步处理后就能保证第二个位置是大数。大数。第第2 2步,将新顺序数据中的第二个数与第三个数进行比较,采用第步,将新顺序数据中的第二个数与第三个数进行比较,采用第1 1步介绍的方法进行数据的再次排序步介绍的方法进行数据的再次排序经过经过n-1n-1步的处理,可以将步的处理,可以将最大的数排到第最大的数排到第n n个位置。将除去最大数后剩下的个位置。将除去最大数后剩下的n-1n-1个数按照前述个数按照前述的方法进行排序,经过的方法进行排序,经过n-2n-2步处理后,可以将第二大的数据排到第步处理后,可以将第二大的数据排到第n-1n-1个位置个位置如此,经过如此,经过n-1n-1轮的排序,便
4、可将所有轮的排序,便可将所有n n个数据按由个数据按由小到大的顺序排好。小到大的顺序排好。6.16.1 用冒泡法对用冒泡法对1010个数排序个数排序 数据需求数据需求 1 1、问题输入、问题输入 an;/an;/*存放成绩数据存放成绩数据*/2 2、问题输出、问题输出 an;/an;/*存放排列好的数据存放排列好的数据*/6.16.1 用冒泡法对用冒泡法对1010个数排序个数排序 流程图流程图 6.1 6.1 用冒泡法对用冒泡法对1010个数排序个数排序6.16.1 用冒泡法对用冒泡法对1010个数排序个数排序#include#includemain()main()int a10;int a1
5、0;int i,j,temp;int i,j,temp;printf(put 10 numbers:n);printf(put 10 numbers:n);for(i=0;i10;i+)for(i=0;i10;i+)scanf(%d,&ai);scanf(%d,&ai);printf(n);printf(n);for(j=0;j9;j+)for(j=0;j9;j+)for(i=0;i9-j;i+)for(i=0;iai+1)if(aiai+1)temp=ai;ai=ai+1;ai+1=temp;temp=ai;ai=ai+1;ai+1=temp;printf(The sorted number
6、s is:n);printf(The sorted numbers is:n);for(i=0;i10;i+)for(i=0;i10;i+)printf(%d,ai);printf(%d,ai);printf(n);printf(n);思考从键盘输入名同学的语言程序设计的月考成绩,请编程输出这名同学的成绩。、如果输出全班同学的成绩呢?、如果输出全学院语言程序设计课程的成绩呢?学习目标熟悉一维数组的定义、引用和初始化方法引用和初始化方法能够用一维数组解决一些实际问题:冒泡算法冒泡算法重点难点 数组就是一组具有相同数据类型的数据的有序集合。是一种构造数据类型。定义格式类型说明符 数组名数组长度举例
7、int a;数据元素:a0,a1,a2,a3说明1.数组名的命名规则应遵循标识符的命名规则。2.数组名后是方括号,而非圆括号。整型表达式,表达式中可以使用符号常量。.常量表达式或数据长度可以包含常量和符号常量,不能包含变量。标识符只能由字母、数字、下划线组成。且第一个字符 必须为字母或下划线。#define N 10main()int aN,bN+10,C2+3;总字节数=每个数据元素占用的字节数*数组长度一维数组:float mark100;mark0mark1mark2mark3.mark9986.592.077.552.0.94.0低地址 高地址总字节数=sizeof(float)*数组
8、长度注意事项注意事项数组名遵循标识符的命名规则。一个数组中的元素下标必须从0开始。所以定义数组时,数组长度为n时,数组元素下标范围只能是0n-1。“数组长度”可能包含常量,但不能包含变量。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。格式数组名下标说明1.数组必须先定义,后使用。2.数组元素只能逐个引用,而不能一次引用整个数组。void main()int i,a;for(i=0;i=0;i-)printf(“%d”,ai);getch();3.当逐个使用数组中的每一个元素时,通常借助for循环语句。此程序的功能是什么?如果输入是,和,程序运行结果?
9、基本形式在C语言中,对数组的访问(存、取)通常是通过对数组元素的引用来实现的。61,67,74,86从键盘输入10个数,分别按正序和逆序将其输出。实例分析#include#include int main()int main()int i,a10;int i,a10;printf(Input 10 numbers:n);printf(Input 10 numbers:n);for(i=0;i=9;i+)for(i=0;i=9;i+)scanf(%d,&a i);scanf(%d,&a i);for(i=0;i=9;i+)for(i=0;i=0;i-)for(i=9;i=0;i-)printf(
10、%2d,a i);printf(%2d,a i);printf(n);printf(n);return 0;return 0;运行结果如下:运行结果如下:Input 10 numbers:Input 10 numbers:0 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 99 8 7 6 5 4 3 2 1 09 8 7 6 5 4 3 2 1 0思考?编写程序实现从键盘任意输入10个整数,找出其中的最大值?例6-2 用数组来求10以内阶乘。#include main()int i,n,a10;
11、long temp=1;printf(Input the number:n);scanf(%d,&n);/*输入待求阶乘的整数*/for(i=0;in;i+)ai=i+1;for(i=0;in;i+)temp=temp*ai;printf(%d!=%ldn,n,temp);举例举例1.定义数组时,对数组元素赋初值。2.可以只给一部分数组元素赋初值。3.要想使数组中全部元素数据为0,则采用如下形式。int a10=1,2,3,4,5,6,7,8,9,10;int a10=0,1,2,3,4;int a10=0,0,0,0,0,0,0,0,0,0;或int a10=0;4.在对全部数组元素赋初值时
12、,可以不指定数组长度。int a=0,1,2,3,4;类型说明符 数组名数组长度=常量表达式0,常量表达式n-1;格式格式注意事项对数组中的所有元素赋初值,数组长度与数组中元素的个数相同。对数组中的部分元素赋初值,未指定值的数组元素自动为“零值”,即数值类型的元素为0,字符型的元素为0字符。除了在定义数组时可用初值列表为数组整体赋值外,不能对数组作整体赋值。不能同时定义两个相同的数组。冒泡排序排序的方法有多种,冒泡排序法是其中之一,一般分为“上浮法”和“下沉法”两种。本题采用“下沉法”完成数据的排序。基本思想是:基本思想是:从第一个数开始,对相邻的两个数进行比较,通过交换使较大的数在后,直到最
13、后两个数比较完毕。完成一遍这样的比较过程(称为一趟排序称为一趟排序),就找到了这组数据中的最大值最大值并且下沉到最后一个位置最后一个位置。对余下的数据重复这个比较过程,当只有一个剩余数据时就完成了排序工作。a0a1a2a390768565初使数据76908565一趟排序7685906576856590a0a1a2a3初使数据768565二趟排序76856590766585657685三趟排序#include#includeint main()int main()int i,a4,temp,j;int i,a4,temp,j;for(i=0;i=3;i+)for(i=0;i=3;i+)scanf
14、(%d,&ai);scanf(%d,&ai);for(i=0;i3;i+)for(i=0;i3;i+)for(j=0;j3-i;j+)for(j=0;jaj+1)if(ajaj+1)temp=aj;temp=aj;aj=aj+1;aj=aj+1;aj+1=temp;aj+1=temp;for(i=0;i=3;i+)for(i=0;i=3;i+)printf(%d ,ai);printf(%d ,ai);return 0;return 0;编写一个程序,对给定的整数数组编写一个程序,对给定的整数数组a a采用冒泡采用冒泡排序法进行从小到大排序。(给定的数据初值为排序法进行从小到大排序。(给定的数
15、据初值为:6,3,9,8,1,5,4,10,2,76,3,9,8,1,5,4,10,2,7)#include#include int main()int main()int a10=6,3,9,8,1,5,4,10,2,7;int a10=6,3,9,8,1,5,4,10,2,7;int i,j,t;int i,j,t;printf(The array before sort:);printf(The array before sort:);for(i=0;i10;i+)for(i=0;i10;i+)printf(%d ,ai);printf(%d ,ai);printf(n);printf(
16、n);for(i=0;i9;i+)for(i=0;i9;i+)for(j=0;j9-i;j+)for(j=0;jaj+1)if(ajaj+1)t=aj;aj=aj+1;t=aj;aj=aj+1;aj+1=t;aj+1=t;printf(The array after sort:);printf(The array after sort:);for(i=0;i 10;i+)for(i=0;i 10;i+)printf(%d ,ai);printf(%d ,ai);return 0;return 0;运行结果如下:The array before sort:6 3 9 8 1 5 4 10 2 7
17、The array after sort:1 2 3 4 5 6 7 8 9 10课程课程小结小结v 数组中的每一个元素都属于数组中的每一个元素都属于同一数据类型同一数据类型。v 用一个统一的用一个统一的数组名数组名和和下标下标唯一地确定数组中的元素。唯一地确定数组中的元素。v 一维数组的定义:一维数组的定义:类型说明符类型说明符 数组名数组名 常量表达式常量表达式。如:如:int a10;int a10;v 一维数组元素的引用:类型说明符一维数组元素的引用:类型说明符 数组名数组名 下标下标。v 一维数组的初始化:一维数组的初始化:int a10=0,1,2,3,4,5,6,7,8,9;in
18、t a10=0,1,2,3,4,5,6,7,8,9;int a10=0,1,2,3,4;int a10=0,1,2,3,4;int a=0,1,2,3,4;int a=0,1,2,3,4;作业作业1.1.将一个数组中的值按逆序重新存放。例如原来顺序为:将一个数组中的值按逆序重新存放。例如原来顺序为:8 8,6 6,5 5,4 4,1 1,要求改为:,要求改为:1 1,4 4,5 5,6 6,8 8。2.2.有一组数有一组数12,56,45,78,90,80,23,16,8,6312,56,45,78,90,80,23,16,8,63,保存在一个数组中,保存在一个数组中,从键盘任意接收一个数,并
19、在数组中查找该数,给出是否,从键盘任意接收一个数,并在数组中查找该数,给出是否找到的信息。如果找到了,要求输出该数在数组中所处的位找到的信息。如果找到了,要求输出该数在数组中所处的位置;如果找不到,输出置;如果找不到,输出“没有找到!没有找到!”3 3创建一创建一C C程序,从键盘上输入程序,从键盘上输入1010个学生的考试成绩存入一个学生的考试成绩存入一维数组中,求该数组中成绩的最高分、最低分及平均分。维数组中,求该数组中成绩的最高分、最低分及平均分。4 4从键盘上任意接收从键盘上任意接收1010个整数存入一维数组中(无序),个整数存入一维数组中(无序),利用冒泡排序将该数组元素由小到大进行
20、排序,并输出排序利用冒泡排序将该数组元素由小到大进行排序,并输出排序后数组。后数组。5.5.有一组数有一组数23,3423,34,45,60,67,88,96,45,60,67,88,96,保存在一个数组中,向这保存在一个数组中,向这个数组中插入一个数,使得插入后的数组元素依然保持有序个数组中插入一个数,使得插入后的数组元素依然保持有序。6.1用冒泡法对10个数排序6.2 一维数组6.3 二维数组6.4 字符数组课程回顾课程回顾、数组的定义?格式是什么?、数组的定义?格式是什么?、数组如何引用?格式是什么?、数组如何引用?格式是什么?4 4、下列程序的运行结果是(、下列程序的运行结果是()#i
21、nclude#include void main()void main()int a6,i;int a6,i;for(i=1;i6;i+)for(i=1;i3)%5;(i3)%5;printf(“%2d”,ai);printf(“%2d”,ai);A A-4 0 4 0 4 B-4 0 4 0 4 B-4 0 4 0 3-4 0 4 0 3C C-4 0 4 4 3 D-4 0 4 4 3 D-4 0 4 4 0-4 0 4 4 0 3 3、下列对一维数组、下列对一维数组a a的说明正确的是(的说明正确的是()A Aint a(10);Bint a(10);Bint n=10,an;int n
22、=10,an;C Cint n;Dint n;D#define SIZE 10#define SIZE 10scanf(“%d”,&n);scanf(“%d”,&n);int aSIZE;int aSIZE;int an;int an;5 5、下列程序的运行结果是(、下列程序的运行结果是()#include#include void main()void main()char str=”SSSWLIA”,c;char str=”SSSWLIA”,c;int k;int k;for(k=2;(c=strk)!=0;k+)for(k=2;(c=strk)!=0;k+)switch(c)switch
23、(c)case I:+k;break;case I:+k;break;case L:continue;case L:continue;default:putchar(c);continue;default:putchar(c);continue;putchar(putchar(*););A ASSWSSW*B BSWSW*C CSWSW*A DA DSW SW 学习目标熟悉二维数组的定义、引用和初始化方法能够用二维数组解决一些实际问题:矩阵应用重点难点格式类型说明符 数组名常量表达式 常量表达式举例float a23,b45;说明1.二维数组中元素的排列顺序是:先行后列。因此,可以把二维数组看
24、成是一个矩阵。2.二维数组元素仍然是从a00开始。a00,a01,a02 a10,a11,a12 二维数组的定义:表示行数表示列数float a23;?每个数据元素占用的字节数,就是基类型的字节数一个元素占4个字节二维数组:float a23;a0 0a0 1a0 2a1 0a1 1a1 286.592.077.552.065.094.0低地址低地址高地址高地址元素个数是多少呢?元素个数是多少呢?总字节数是多少呢?总字节数是多少呢?a00a00,a01a01,a02a02a10a10,a11a11,a12a12二维数组中的数组元素的个数=行数列数,存储一个二维数组所需要的内存字节数可以用下列方
25、式来计算:总字节数总字节数 =sizeof(=sizeof(类型类型)行数行数 列数列数几点说明举例float a23;定义了一个行列的float型数组a,=个数组元素,存储数组a所需的内存空间为sizeof(float)2 3=24个字节。int b45;?格式数组名下标1 下标2说明1.数组必须先定义,后使用。2.数组元素只能逐个引用,而不能一次引用整个数组。数组元素的引用与同类型的一般变量使用方式一样。int a23;a01=10;a02=a01*5;printf(“%d,%d”,a01,a02;int i,j;int i,j;float a45;float a45;for(i=0;i=
26、3;i+)for(i=0;i=3;i+)for(j=0;j=4;j+)for(j=0;j=4;j+)scanf(scanf(“%f%f”,&aij);,&aij);3.二维数组输入/输出的一般格式。int i,j;int i,j;float a45;float a45;for(i=0;i=3;i+)for(i=0;i=3;i+)for(j=0;j=4;j+for(j=0;j=4;j+)printf(printf(“%f%f”,aij);,aij);整型常量、整型变量或整型表达式a00a00,a01a01,a02a02a10a10,a11a11,a12a12分析以下程序的运算结果。实例分析#in
27、clude int main()int a34,i,j;for(i=0;i3;i+)for(j=0;j4;j+)aij=i*4+j;for(i=0;i3;i+)for(j=0;j4;j+)printf(%4d,aij);printf(n);return 0;程序运行结果如下:0 1 2 34 5 6 78 9 10 11a00 a01 a02 a03a10 a11 a12 a13 a20 a21 a22 a23说明1.分行给二维数组赋初值。2.按数组的排列顺序对各数组元素赋初值。3.可以对部分元素赋初值。int a23=1,2,3,4,5,6;int b23=1,2,3,4,5,6;int c
28、34=1,5,9;4.在对全部数组元素赋初值时,数组第一维的长度可以不指定。int e 3=1,2,3,4,5,6;int d34=1,5,6,0,9,7;int f 4=0,0,3,0,0,10;1 2 34 5 6 1 2 34 5 6 1 0 0 0 5 0 0 0 9 0 0 0 1 0 0 0 5 6 0 0 0 9 7 0 1 2 34 5 6 0 0 3 0 0 0 0 0 0 10 0 0 基本形式使用二维数组求如下矩阵的转置矩阵。141232545636ab#includemain()int a23=1,2,3,4,5,6;int b32,i,j;printf(array a
29、:n);for(i=0;i=1;i+)for(j=0;j=2;j+)printf(%5d,aij);bji=aij;printf(n);printf(array b:n);printf(array b:n);for(i=0;i=2;i+)for(i=0;i=2;i+)for(j=0;j=1;j+)for(j=0;j=1;j+)printf(%5d,bij);printf(%5d,bij);printf(n);printf(n);矩阵问题编程计算一个给定33的矩阵的两条对角线所有元素之和。分析:主对角线上的元素为a00、a11、a22,通过观察可以发现它们的行下标与列下标的值是相同的,即各个元素
30、可以表示为aii;次对角线上的元素为a02、a11、a20,通过观察可以发现它们的行下标与列下标的和为2,即各个元素可表示为ai2-i;所以利用循环就能方便地求出两条对角线上所有元素之和。#includeint main()int a33=2,5,7,6,9,8,3,1,4,sum=0,i;for(i=0;i3;i+)sum+=aii;/主对角线上的元素求和for(i=0;i3;i+)sum+=ai2-i;/次对角线上的元素求和printf(“sum=%dn,sum);return 0;程序运行结果如下:Sum=34有一个有一个3 3*4 4矩阵,输出最大元素的值,及其所在的行号矩阵,输出最大
31、元素的值,及其所在的行号和列号。和列号。main()int i,j,max,row=0,colum=0;int a34=1,2,3,4,9,8,7,6,-10,10,-5,2;max=a00;for(i=0;i=2;i+)for(j=0;jmax)max=aij;row=i+1;colum=j+1;printf(“max=%d,row=%d,colum=%dn”,max,row,colum);程序运行结果:max=10,row=2,colum=1课程小结1.二维数组的定义格式2.二维数组的引用格式3.二维数组的初使化 学习目标熟悉字符数组存放字符串的方法掌握字符串的输入输出方法熟悉常用的字符串
32、处理函数基本形式字符数组的定义和引用符合前面所学过的数组的定义和引用方法。例如:char a5;/定义一个一维字符数组 char b23;/定义一个二维字符数组char c234;/定义一个三维字符数组a3=a;/一维字符数组元素赋值b12=b;/二维字符数组元素赋值 用来存放字符数据的数组是字符数组。字符数组中的一个元素存放一个字符。定义方法与前面介绍的类似。例如:char c10;c 0=I;c1=;c2=a;c3=m;c4=;c 5=h;c 6=a;c7=p;c8=p;c9=y;字符数组初始化用来存放字符数据的数组是字符数组。字符数组中的一个元素存放一个字符。定义方法与前面介绍的类似。例
33、如:char c8;c 0=H;c1=e;c2=l;c3=l;c4=o;c 5=;c 6=c;字符数组初始化如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即0)。例如:char c10=c,p,r,o,g,r,a,m;字符数组初始化:可以通过引用字符数组中的元素,来得到其中的一个字符。#includemain()char c12=H,e,l,l,o,w,o,r,l,d,!;int i;for(i=0;i12;i+)printf(%c,ci);printf(n);运行结果:Hello Word!字符串常量就是用双引号双引号括起来的若干个字符。例如,“C
34、hina”。但实际上,在内存中存储这个字符串常量时,除了要存储我们看到的字符外,还要在这些字符后存存储一个00作为字符串的结束标志。可以用字符串常量来使字符数组初始化。例如 char c=I am happy;等价 char c=I am happy;等价char c=I,a,m,h,a,p,p,y,0;再比如 char c10=China;字符串和字符串结束标志几点说明 由于有了字符串结束标志0的存在,字符串常量“China”的字符串长度虽然只有5,但在内存中却要占6个存储单元。我们可以利用字符数组存放字符串,C语言允许用户在定义字符数组时,将字符串常量作为初值赋给字符数组。例如:char
35、str=”China”;等价于 char str=“China”;也等价于 char str=C,h,i,n,a,0;字符数组的输入输出 字符数组的输入输出可以有两种方法:逐个字符输入输出。用格式符“%c”输入或输出一个字符。将整个字符串一次输入或输出。用“%s”格式符,意思是对字符串的输入输出。几点说明几点说明1)单元素处理例如:char str6;for(i=0;i6;i+)scanf(“%c”,&stri);for(i=0;i6;i+)printf(“%c”,stri);2)以格式符%s通过数组名引用例如:char str6;scanf(“%s”,str);printf(“%s”,str
36、);打印输出一个字符串。打印输出一个字符串。#include#includemain()main()char c12=H,e,l,l,o,w,o,r,l,d,!;char c12=H,e,l,l,o,w,o,r,l,d,!;int i;int i;for(i=0;i12;i+)for(i=0;i12;i+)printf(%c,ci);printf(%c,ci);printf(n);printf(n);打印输出一个钻石图形。打印输出一个钻石图形。main()main()char diamond5=,char diamond5=,*,*,*,*,*,*,*,*,;,;int i,j;int i,j
37、;for(i=0;i5;i+)for(i=0;i5;i+)for (j=0;j5;j+)for (j=0;j5;j+)printf(%c,diamondij);printf(%c,diamondij);printf(n);printf(n);运行结果为:运行结果为:*实例分析 输入一行字符,统计其中大写字母的个数,并将所有的大写字母转换成小写字母后输出这个字符串。#include#includevoid main()void main()int i,n=0;int i,n=0;char s20;char s20;for(i=0;(si=getchar()!=n;i+)for(i=0;(si=g
38、etchar()!=n;i+)if(si=A&si=A&si=A&si=A&si=Z)printf(%c,si+32);printf(%c,si+32);elseelse printf(%c,si);printf(%c,si);程序运行结果如下:程序运行结果如下:abCdeFGhabCdeFGhn=3n=3abcdefghabcdefgh语言提供了丰富的字符串处理函数,可以实现字符串的输入、输出、连接、比较、转换、复制和搜索等功能,使用这些函数可以大大提高编程的效率。在使用字符串处理函数时,要用编译预处理命令#include#include将头文件将头文件“string.h”string.h”
39、包含进来包含进来,函数puts()和gets()除外(需要包含头文件“stdio.h”)。puts()一般形式:int puts(字符数组名)或 int puts(字符串常量)功能:把字符数组中的字符串输出到终端,并在输出时将字符串结束标志0转换成n。char str=“china”;puts(str);输出结果:china由于可以用printf函数输出字符串,因此puts函数用的不多。举例:char str=ChinanBeijing;puts(str);输出结果:ChinaBeijing gets()一般形式:char*gets(字符数组名)功能:接收从终端输入的字符串,并将该字符串存放到
40、字符数组名所指定的字符数组中。char str10;gets(str)puts(str);运行结果:从键盘输入:Computer Computer实例分析利用gets()和puts()函数处理字符数组。#include#include int main()char s20;gets(s);puts(s);return 0;程序运行结果如下:This a string.This a string.strcat()一般形式:char*strcat(字符数组名1,字符数组名2)功能:连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中。需要引入头文件:#include#in
41、clude char str130=Peoples Republic of ;char str2=China;printf(%s,strcat(str1,str2);输出:Peoples Republic of China strcpy()一般形式:char*strcpy(字符数组名1,字符数组名2)功能:把字符数组2中的字符串复制到字符数组1中,串结束标志0也一同复制。需要引入头文件:#include 例如:char str110,str2=China;strcpy(str1,str2);1.字符数组1必须定义得足够大,以便容纳被复制的字符串。字符数组1的长度应不小于字符串2的长度 2.“字
42、符数组1”必须写成数组名形式(如str1),“字符数组”可以是字符数组名,也可以是一个字符串常量。如strcpy(str1,China);3.复制时连同字符串后面的0一起复制到字符数组1中。strcpy函数 4.不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。如下面两行都是不合法的:str1=China;str1=str2;而只能用strcpy函数将一个字符串复制到另一个字符数组中去。用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。如下面是合法的:char a5,c1,c2;c1=A;c2=B;a0=C;a1=h;a2=i;a3=n;a4=a;strcpy函数 strle
43、n()一般形式:int strlen(字符串)功能:计算出字符串的长度(不含字符串结束标志0),并将该长度作为函数返回值。需要引入头文件:#include 如:char str10=China;printf(%d,strlen(str);输出结果不是10,也不是6,而是5。也可以直接测试字符串常量的长度,如strlen(China);#include#include main()char string20;char str520;int i;for(i=0;i5;i+)gets(stri);strcpy(string,str0);for(i=1;istrlen(string)strcpy(st
44、ring,stri);printf(the largest string is:%sn,string);RussaFranceAmericaKreaChinaThe largest string is:America例:输入5个字符串,输出其中长度最大者。其一般形式为:strcmp(字符串1,字符串2)strcmp的作用是比较字符串1和字符串2。需要引入头文件:#include 例如:strcmp(str1,str2);strcmp(China,Korea);strcmp(str1,Beijing);strcmp函数 AA,computercompare,CHINACANADA,DOG字符串2
45、,函数值为一正整数。(3)如果字符串1str2)printf(yes);而只能用if(strcmp(str1,str2)0)printf(yes);strcmp函数 比较字符串比较字符串str1str1、str2str2的大小。的大小。#include#include#include#include main(void)main(void)int result;int result;char str1=compare;char str1=compare;char str2=computer;char str2=computer;result=strcmp(str1,str2);result=s
46、trcmp(str1,str2);if(result=0)if(result=0)printf(string1 is equal to string2n);printf(string1 is equal to string2n);elseelse if(result 0)if(result 0)printf(string1 is greater than string2n);printf(string1 is greater than string2n);elseelseprintf(string1 is less than string2n);printf(string1 is less t
47、han string2n);strlwr()一般形式:char*strlwr(字符串)功能:将字符串中的大写字母转换成小写字母,小写字符与其它字符不变。strupr()一般形式:char*strupr(字符串)功能:将字符串中的小写字母转换成大写字母,大写字符与其它字符不变。实例分析 输入一个字符串,判断其是否是回文回文。所谓回文是指这个字符串顺读和反读是一样的,如“level”是回文。分析:可以设置两个下标变量i i和和j j,分别表示字符串的第0 0个字符和最后一个字符个字符和最后一个字符,将字符串中下标为i和j上对应的字符进行比较,若不相等,则可断定该字符串不是回文;否则,将将i i加加
48、1 1,将,将j j减减1 1,继续将对应的字符进行比较,直到i=ji=j为止,即将所有对应的字符比较完都未找到不相等的字符,这时可断定该字符串是回文。实例分析实例分析例:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。#include#include#include#include voidmain()voidmain()char s10;char s10;int i,j,n,flag=1;int i,j,n,flag=1;gets(s);gets(s);n=strlen(s);n=strlen(s);for(i=0,j=n-1;ij&flag=1;i+,j-)for(i=0,j=
49、n-1;ij&flag=1;i+,j-)if(si!=sj)if(si!=sj)flag=0;flag=0;if(ij)if(ij)printf(No);printf(No);elseelseprintf(Yes);printf(Yes);程序运行结果如下:程序运行结果如下:abcdcbaabcdcbaYesYes实例分析输入一字符串,长度小于50,统计其中包含多少个单词,单词之间用空格分隔开。例如,输入“I am a student”,输出4。实例分析输入一字符串,长度小于50,统计其中包含多少个单词,单词之间用空格分隔开。例如,输入“I am a student”,输出4。分析:首先将字符
50、串存入数组,然后比较数组中各元素与其相邻数组元素的关系,如果该数组元素为字符,而其相邻元素为空格或0,则认为存在一个单词,计数加1,最后输出统计结果。实例分析#include#includeint main()char s 50;int i,m,n;gets(s);m=strlen(s);n=0;if(m0)for(i=0;im;i+)if(si!=&si+1=)n+;n+;printf(%dn,n);return 0;运行结果如下:input a string:I am a student4实例分析通过键盘输入一个英文句子存入电脑,再输入一个英文单词,判断英文单词是句子中的第几个单词。数据需