nullC语言电子
教案
中职数学基础模块教案 下载北师大版¥1.2次方程的根与系数的关系的教案关于坚持的教案初中数学教案下载电子教案下载
(九)C语言电子教案(九) 第九讲 第七章 数组
主要内容:
§7.3 字符数组
字符数组的定义和元素引用
字符数组的初始化
字符串和字符串结束的标志
字符串处理函数
字符数组应用举例§7.3 字符数组§7.3 字符数组用来存放字符型数据的数组叫作字符数组,字符数组中的每个元素存放一个字符。
如:可以将每个人的姓名存放在一个字符数组中,姓名中的每个汉字由两个字符组成。一、一维字符数组的定义1一、一维字符数组的定义1格式: 类型标识符 数组名 [常量];
定义的目的:为指定的数组分配相应字节的存储单元。char c [ 20 ]; 定义c为字符数组,可独立存放 20个字符型数据,系统要为数组c分配20*1=20个字节的存储单元,且这些存储单元是连续的。 一、一维字符数组的定义2一、一维字符数组的定义2如有下面的定义:
char c [ 10 ]; 则系统则会为数组c分配10个字节的连续存储单元 一、一维字符数组元素的引用1一、一维字符数组元素的引用1格式: 数组名[下标]数组元素各维的下标都从0开始 如有定义: char c [ 10 ]; c [0]='A' ;c [1]='a' ;c [2]='*' ;c [3]=c[2]+1 ;c [4]='9' ;'A''a''*''+''9'c [5]=9 ; 9c [6]=c[4]+3 ;c [7]=c[5]+3 ; '<'12'9' (57) 00111001 9 00000000 00001001二、二维字符数组的定义1二、二维字符数组的定义1格式: 类型标识符 数组名 [常量1][常量2];
定义的目的:为指定的数组分配相应字节的存储单元。char c [ 3 ][4 ]; 定义c为二维字符数组,可独立存放 3*4=12个字符型数据,系统要为数组c分配1*12=12个字节的存储单元,且这些存储单元是连续的。 二、二维字符数组的定义2二、二维字符数组的定义2如有下面的定义:
char c [ 3 ][ 4 ]; 则系统则会为数组c分配12个字节的连续存储单元 二、二维字符数组元素的引用1二、二维字符数组元素的引用1格式: 数组名[下标1] [下标2]数组元素各维的下标都从0开始 如有定义: char c [ 3 ][ 4 ]; c [0][0]='A' ;c [0][1]='a' ;c[0][2]=c[0][0]+1 ;c[0][3]=c[0][1]+4 ;c[2][3]=c[0][0]+32 ;'A''a''B''e''a'三、字符串和字符串结束标志三、字符串和字符串结束标志字符串常量: 两个双引号之间的字符序列叫做字符串常量,如"abcdefg"。 字符串结束标志:系统自动为每一个字符串 常量加一个字符串结束标志‘\0’,在内存中也 占一个字节。 字符串常量所占的存储单元字节数:字符 串中有效字符的个数加1,因为字符串结束 的标志'\0'也占一个字节。 在TC中,系统是将一个字符串常量按一维 字符数组处理的。四、字符常量和字符串常量的区别四、字符常量和字符串常量的区别五、一维字符数组的初始化1五、一维字符数组的初始化1字符数组的初始化就是在定义数组的同时对数组元素赋以初值。格式:
static 类型说明符 数组名[ 常量 ]={ 字符常量表列 } ;例如:
static char c[12] =
{ '*' , '?' , ' ' , '1' , ' 2' , 'A' , 'B' , 'C' , 'a' , 'b' , 'c' , '\0' } ;将花括号中的常量依次赋给各个数组元素,即数组元素c[0],c[1],……,c[10],c[11]的值分别为
'*','?',…… 'c','\0'。 五、一维字符数组的初始化2五、一维字符数组的初始化2字符数组的初始化就是在定义数组的同时对数组元素赋以初值。格式:
static 类型说明符 数组名[ 常量 ]={ 字符串常量 } ; 例如: static char c[12] = {"abcd1234567" } ;
或者: static char c[12] = "abcd1234567" ; 将双能上能引号中的字符依次赋给各个数组元素,即数组元素c[0],c[1],……,c[10],c[11]的值分别为
'a','b',…… '5','6','7','\0'。 六、二维字符数组的初始化1六、二维字符数组的初始化1二维数组的初始化就是在定义数组的同时对数组元素赋以初值。格式:
static 类型说明符 数组名[ 常量1][常量2 ]={ 字符常量表列 };例如:
static char a[3][4 ] =
{ ' 1' ,' 2' ,' 3' , '4','A' ,'B ', 'C' ,'D' ,' a' ,' b','c','d '} ;将第一个花括号中的常量依次赋给第一行的各个元素,将第二个花括号中的常量依次赋给第二行的各个元素,即数组元素a[0][0],a[0][1],……,a[2][2],a[2][3]的值分别为 '1','2','3','4','A','B','C','D','a','b', 'c','d'。但要注意各行中均没有字符串结束的标志'\0' 。五、二维字符数组的初始化2五、二维字符数组的初始化2二维数组的初始化就是在定义数组的同时对数组元素赋以初值。格式:
static 类型说明符 数组名[ 常量1][常量2 ]=
{ {字符常量表1} , {字符常量表2} , ……{字符常量表n} } ;例如:
static char a[ 3 ][ 4 ] =
{ {' 1' ,' 2' ,' 3' , '4'} ,{'A' ,'B ', 'C' ,'D'} ,{' a' ,' b','c','d '}} ;将第一个花括号中的常量依次赋给第一行的各个元素,将第二个花括号中的常量依次赋给第二行的各个元素,即数组元素a[0][0],a[0][1],……,a[2][2],a[2][3]的值分别为 '1','2','3','4','A','B','C','D','a','b', 'c','d'。 同样各行中均无字符串结束的标志‘\0'。五、二维字符数组的初始化3五、二维字符数组的初始化3二维数组的初始化就是在定义数组的同时对数组元素赋以初值。格式:
static 类型说明符 数组名[ 常量1][常量2 ]=
{ {字符串1} , {字符串2} , ……{字符串n} } ;例如:
static char a[ 3 ][ 4 ] = { {" 1234"} ,{"ABCD"} ,{"abcd"} } ;将第一个花括号中的各个字符依次赋给第一行的各个元素,将第二个花括号中的各个字符依次赋给第二行的各个元素,即数组元素a[0][0],a[0][1],……,a[2][2],a[2][3]的值分别为 '1','2','3','4','A','B','C','D','a','b', 'c','d'。 但每行的最后都有字符串结束标志'\0'。a[ 3 ][ 5 ]五、二维字符数组的初始化4五、二维字符数组的初始化4二维数组的初始化就是在定义数组的同时对数组元素赋以初值。格式:
static 类型说明符 数组名[ 常量1][常量2 ]=
{ 字符串1 , 字符串2 , ……字符串n } ;例如:
static char a[ 3 ][ 5 ] = { " 1234" , "ABCD" , "abcd" } ;将第一个字符串常量中的字符依次赋给第一行的各个元素,将第二个字符串常量中的字符依次赋给第二行的各个元素,即数组元素a[0][0],a[0][1],……,a[2][2],a[2][3]的值分别为 '1','2','3','4','A','B','C','D','a','b', 'c','d'。 但每行的最后都有字符串结束标志'\0'。六、字符数组的输入1六、字符数组的输入12. 初始化时整体输入:
static char c[ 20 ]={"abcdef123?&"};1. 单个字符输入:
* 在scanf函数中使用格式字符"%c"输入单个字符: scanf("%c",&c[0]);
* 使用getchar( )函数:c[1] = getchar( ) ;
* 使用赋值语句输入单个字符:
c[1]='A'; 将各个字符按顺序赋给各个数组元素,同时将字符串结束的标志'\0'也赋给数组元素。即a[11]中的值为'\0'。六、字符数组的输入2六、字符数组的输入23. 用scanf函数整体输入:
char c[10];
scanf("%s", c); 从键盘上读入一个字符串,所读入的字符串中不能包含空格、TAB和回车。将串中的各个字符按顺序赋给各个数组元素,在最后一个字符的后面自动加上字符串结束的标志'\0'也赋给数组元素。如果从键盘上输入aabb↙,
则a数组中各元素的值分别为:如果从键盘上输入aa bb↙,
则a数组中各元素的值分别为:—字符串连接函数—字符串连接函数1. 单个字符输出:
* 在printf函数中使用格式字符"%c"输出单个字符: printf("%c%c", c[0],c[1] );
* 使用putchar( )函数:putchar( c[3] ) ; 2. 整体输出( printf 函数中使用%s格式):
char c[10]={"abcdefg"};
printf("%s\n",c );字符串处理函数字符串处理函数在C的库函数中提供了一些用来处理字符串的函数,这些函数对于字符串的处理使用非常方便,常用的字符串处理函数是:
字符串输出函数:puts( )
字符串输入函数:gets( )
字符串连接函数:strcat( )
字符串拷贝函数:strcpy( )
字符串比较函数:strcmp( )
字符串测长函数:strlen( )
字符串大小写转换函数strlwr( )和strupr( ) puts( )函数—字符串输出函数puts( )函数—字符串输出函数格式:puts(字符数组名或字符串)
功能:将指定的字符串输出到标准输出设备说明:
(1) 在输出时遇到‘\0’时结束输出并将‘\0’作为 回车换行('\n')处理;
(2) 输出的字符串中可以包含转义字符.puts( )函数使用puts( )函数使用main( )
{ char c[10]={ 'a' , 'b' , 'c' , 'd' } ;
puts( c ) ;
}main( )
{ char c[10] ; int i ;
for( i=0 ; i<4 ; i++ ) c[i]='a'+i ;
puts( c ) ;
} c[ i ]= '\0';abcdabcd随机字符abcdgets( )函数—字符串输入函数gets( )函数—字符串输入函数格式:gets(字符数组名)
功能:从键盘上输入一个字符串到指定的数组中说明:
在输入时以回车换行符号作为字符串输入结束标志,并将该符号转换为字符串结束标志'\0'存入字符数组中。
输入的字符串中不可以包含转义字符。gets( )函数的使用gets( )函数的使用main( )
{ char c[10] ;
gets( c ) ;
puts( c ) ;
}如果从键盘上输入:aabbcc<回车>aabb cc<回车>strcat( )函数—字符串连接函数strcat( )函数—字符串连接函数格式: strcat(字符数组1,字符数组2)
功能:将字符数组2中的内容连接到符数组1的后面。
操作过程:先找到字符数组1的结束位置,然后将字符数组2中的字符逐个存放到字符数组1的后面,当字符数组2结束时停止操作。strcat()函数—字符串连接函数strcat()函数—字符串连接函数main( )
{ char c1[20]="abcde", c2[10]="12345"; strcat( c1 , c2 ) ;12345\0 puts( c1 );
puts( c2 );
}abcde12345
12345c1:c2:strcpy( )函数—字符串拷贝函数strcpy( )函数—字符串拷贝函数格式: strcpy(字符数组1,字符数组2)
功能:将字符数组2中的内容拷贝到符数组1中。
操作过程:从数组的第0个元素开始,将字符数组2中的字符逐个存放到字符数组1中,当字符数组2结束时停止操作。strcpy( )函数的使用1strcpy( )函数的使用1main( )
{ char c1[20]="abcde", c2[10]="123"; strcpy( c1 , c2 ) ;123\0 puts( c1 );
puts( c2 );
}123
123c1:c2:strcpy( )函数的使用2strcpy( )函数的使用2main( )
{ char c1[20]="abcde", c2[10]="123456789"; strcpy( c1 , c2 ) ;123\0 puts( c1 );
puts( c2 );
}123456789
123456789456789c1:c2:strcmp( )函数—字符串比较函数strcmp( )函数—字符串比较函数格式:strcmp(字符串1,字符串2)
功能:比较字符串1和字符串2的大小
返回值:返回两个字符串中第一个不同字符的ASCII码值之差。
字符串的比较:逐个字符比较;按ASCII码比较;遇到第一个不同的字符或者有一个字符串结束停止。
操作过程:将字符串1中的每个字符与字符串2中的对应字符进行比较,遇到第一个不相同的字符或者有一个字符结束时停止比较。strcmp( )函数的使用1—遇到不同的字符strcmp( )函数的使用1—遇到不同的字符main( )
{ char c1[10]="abcde", c2[10]="abbde";
int n ; n = strcmp( c1 , c2 ) ; print( "n=%d\n", n );
}n=1c1:c2:strcmp( )函数的使用2—遇到不同的字符strcmp( )函数的使用2—遇到不同的字符main( )
{ char c1[10]="aaa", c2[10]="abcde";
int n ; n = strcmp( c1 , c2 ) ; print( "n=%d\n", n );
}n= -1c1:c2:strcmp( )函数的使用3—字符串2结束strcmp( )函数的使用3—字符串2结束main( )
{ char c1[10]="abcde", c2[10]="abcd";
int n ; n = strcmp( c1 , c2 ) ; print( "n=%d\n", n );
}n=101c1:c2:strcmp( )函数的使用4—两个字符串相等strcmp( )函数的使用4—两个字符串相等main( )
{ char c1[10]="abcde", c2[10]="abcde";
int n ; n = strcmp( c1 , c2 ) ; print( "n=%d\n", n );
}n=0c1:c2:strcmp( )函数的使用5—数组与字符串比较strcmp( )函数的使用5—数组与字符串比较main( )
{ char c1[10]="abcde" ;
int n ; n = strcmp( c1 , "ad" ) ; print( "n=%d\n", n );
}n= -2c1:strcmp( )函数的使用6—两个字符串比较strcmp( )函数的使用6—两个字符串比较main( )
{ int n ; n = strcmp( "abcde" , "ad" ) ; print( "n=%d\n", n );
}n= -2strlen( )函数—字符串长度测试函数strlen( )函数—字符串长度测试函数格式: strlen(字符数组名或字符串常量)
功能: 测试字符串的实际长度
返回值:返回的函数值为整型数据,其大小为 被测试的字符串中有效字符的个数。
操作过程:从指定的字符数组或字符串的第0 个字符开始,统计字符的个数,遇 到'\0'时结束。说明: 测试字符串的有效长度,不包括'\0'。strlen( )函数的使用1strlen( )函数的使用1#include "string.h"
main ( )
{ static char c1[10]="abcdefg" ;
static char c2[10]="123";
printf("%s\t%d\n",c1,strlen(c1));
printf("%s\t%d\n",c2,strlen(c2));
}abcdefg 7
123 3运行程序strlen( )函数的使用2strlen( )函数的使用2#include "string.h"
main ( )
{ char c1[80] ; int i ;
gets(c1); puts(c1) ;
for( i=0 ; i < ; i++ ) c1[i] = c1[i] - 32 ;
printf("%s\n", c1) ;
}从键盘上输入一行由小写字母组成的字符串,转换成大写字母输出,字母数量任意。注意:定义数组c1 的大小为80 80strlen(c1) ; i++ )c1[i]!='\0' ; i++ )运行程序strlen( )函数的使用3strlen( )函数的使用3#include "string.h"
main ( )
{ char c[80] ; int i , m , n , k , l ;
m=n=k=l=0 ;
gets(c);
for( i=0 ; c[i] != ; i++ )
if(c[i] >= 'a'&&c[i]<='z' || c[i] >='A'&&c[i]<='Z' ) m++ ; else if ( c[i]>='0' && c[i]<='9' ) n++; else if ( c[i]== ' ' ) k++ ; else l++ ;
printf("%s\n%d,%d,%d,%d", c,m,n,k,l) ;
}从键盘上输入一行字符,统计字母、数字、空格及其它字符的个数。'\n''\0''\0'运行程序strlwr( )函数—大写字母转换成小写字母strlwr( )函数—大写字母转换成小写字母格式: strlwr(字符数组名)
功能: 将字符数组中的大写字母转换 成小写字母,其它字符不变strupr( )函数—小写字母转换成大写字母strupr( )函数—小写字母转换成大写字母格式: strupr(字符数组名)
功能: 将字符数组中的小写字母转换 大写字母,其它字符不变比较三个字符串的大小1比较三个字符串的大小1定义三个一维字符数组并赋值
定义一个一维数组存放最大的字符串NNYYstring3>string输出string比较三个字符串大小程序1比较三个字符串大小程序1 #include "stdio.h"
#include "string.h"
main ( )
{ char string[20] ,string1[20] ,string2[20], string3[20] ;
gets ( string1 ) ; gets ( string2 ) ; gets ( string3 ) ;
if ( string1 > string2 ) string = string1 ; else string = string2 ;
if ( string3 > string ) string = string3 ;
printf("\nthe largest string is:\n%s\n",string);
} strcmp(string1,string2)>0 ) strcpy(string,string1); strcpy(string,string2); strcpy(string,string3);(strcmp(string3, string )>0)运行程序比较三个字符串的大小2比较三个字符串的大小2定义一个3×2二维字符数组并赋值
定义一个一维数组存放最大的字符串NNYYstr[2]>string输出string比较三个字符串大小程序2比较三个字符串大小程序2 #include "stdio.h"
#include "string.h"
main ( )
{ char str[3][20] , string [20] ;
int i ;
for( i=0 ; i<3 ; i++ ) gets ( str[i] ) ;
if ( str[0] > str[1] ) string = str[0] ; else string = str[1] ;
if ( str[2] > string ) string = str[2] ;
printf("\nthe largest string is: %s\n",string);
} strcmp(str[0] ,str[1] )>0 ) strcpy( string,str[0] ); strcpy( string,str[1] ); strcpy( string,str[2] );(strcmp(str[2] , string )>0)运行程序将两个字符串连接起来将两个字符串连接起来定义一维字符数组str1,str2并赋值定义2个整型变量 i , j 作循环变量i++j=0j++,i++NYNYstr1[ i ]= '\0' ;连接两个字符串程序1连接两个字符串程序1main( )
{ char str1[10],str2[10]; int i, j ;
gets ( str1 ) ; gets ( str2 ) ;
for( i=0 ; str1[i] != '\0' ; i++ ) ;
for( j=0 ; str2[j] != '\0' ; i++ , j++ ) str1[i] = str2[j] ;
str1[i] = '\0' ;
puts(str1) ; puts( str2);
}如果从键盘上输入的两行字符串分别为: 12345 和 abcd,则程序运行的过程为:i:0123456789j:01234str1:str2:\0abcd运行程序连接两个字符串程序2连接两个字符串程序2main( )
{ char str1[10],str2[10]; int i, j ;
gets ( str1 ) ; gets ( str2 ) ;
for( i=0 ; str1[ i ] != '\0' ; i++ ) ;
for( j=0 ; str2[ j ] != ‘\0’ ; i++ , j++ ) str1 [ i ] = str2 [ j ] ;
str1[i] = '\0' ;
puts(str1) ; puts( str2);
}i+j运行程序输入一行字符,统计其中单词的数量输入一行字符,统计其中单词的数量定义变量i,word=0,num=0
定义字符变量c
定义数组string并赋值NNYYYNi++循环体 c==' 'This is C language统计单词数量程序统计单词数量程序 main ( ) { int word,num,i; char c; static char string[80];
printf("\n");
gets(string); puts(string);
for ( i=0; (c=string[i])!='\0'; i++ ) if ( c==' ' ) word=0; else if (word==0) { word=1; num=num+1; }
printf("单词数num=%d\n",num);
}word=0;num=0;运行程序