版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言chap多维数组2一维数组元素的引用一维数组元素的引用 C不允许对数组进行动态定义。以下作法是错误的。不允许对数组进行动态定义。以下作法是错误的。 int n; scanf(“%d”,&n); int an; 数组必须先定义,然后再使用。数组必须先定义,然后再使用。C的数组元素只能逐个引用的数组元素只能逐个引用而不能一次引用整个数组。而不能一次引用整个数组。 一维数组元素的表示形式为:一维数组元素的表示形式为: 数组名数组名下标下标下标可以是整型常量或整型表达式。下标可以是整型常量或整型表达式。例例7.1 main( ) int i,a10; for (i=0; i=0; i-)
2、 printf(“%2d”,a i); 输出结果:输出结果:10 9 8 7 6 5 4 3 2 13一维数组的初始化一维数组的初始化赋值语句和输入语句均可使数组中的元素赋初值,但占用运赋值语句和输入语句均可使数组中的元素赋初值,但占用运行时间。简捷的方法是在程序运行之前使数组初始化。行时间。简捷的方法是在程序运行之前使数组初始化。对数组元素初始化的方法有:对数组元素初始化的方法有:1) 在定义数组时对数组元素赋以初值。如:在定义数组时对数组元素赋以初值。如: static int a10=0,1,2,3,4,5,6,7,8,9;说明:说明: 依次赋予数组元素的初值必须用依次赋予数组元素的初值
3、必须用 括起来。括起来。 “static”是是C的一个关键字,意为的一个关键字,意为“静态存储静态存储”。C规定只有静态存规定只有静态存储储(static)数组和外部存储数组和外部存储(extern)数组才能初始化。数组才能初始化。2) 可以只给一部分元素赋值。如:可以只给一部分元素赋值。如: static int a10=0,1,2,3,4;3) 在在C中系统会自动对所定义的静态数组的每个元素赋初值中系统会自动对所定义的静态数组的每个元素赋初值0。4) 对全部数组元素赋初值时,可以不指定数组长度。如:对全部数组元素赋初值时,可以不指定数组长度。如: static int a5=1,2,3,4
4、,5;可以写成:可以写成: static int a =1,2,3,4,5;例例7.2 将一个十进制正整数转换成二进制数。将一个十进制正整数转换成二进制数。main( ) int i, k, r, x, b16; printf(“Enter an integer x :”); scanf(“%d”,&x); printf(“%6d binary number is :n”,x); k = -1; do r =x%2; b+k= r ; x/=2; while (x != 0); for ( i=k; i=0; i-) printf(“%d”,bi); printf(“n”);例7.3
5、用冒泡法将用冒泡法将10个数按从小到大排序。个数按从小到大排序。当有当有n个数时需要作个数时需要作n1趟趟这样的搜索,每趟搜索要这样的搜索,每趟搜索要作作n1次比较。次比较。main( ) int i, j,t,a11; printf(“input 10 numbers :n”); for (i=1; i11; i+) scanf(“%d”,&ai); printf(“n”); for ( j=1; j=9; j+) for ( i=1; iai+1) t=ai; ai=ai+1; ai+1= t; printf(“the sorted numbers :n”); for (i=1;
6、i11; i+) printf(“%d ”,ai);7.2. 二维数组二维数组语句形式语句形式: 类型说明符类型说明符 数组名数组名常量表达式常量表达式1 常量表达式常量表达式2如:如:float a34;定义定义a是一个是一个3x4 (3行行4列列)的数组,即的数组,即a数组有数组有12个元素。个元素。但不得写成:但不得写成:float a3,4;注意:注意: 二维数组中元素的排列顺序为按行按列。即存放完第二维数组中元素的排列顺序为按行按列。即存放完第1 行的行的元素后再接着存放第元素后再接着存放第 2 行的元素,依次类推。行的元素,依次类推。 C允许定义多维数组。如:允许定义多维数组。如:
7、 float a345;static int a34=1,5,9;static int a34=1,0,6,0,0,11;static int a34=1,5,6;static int a34=1, ,9;注意:所赋给的值是按行按列对号入座的。注意:所赋给的值是按行按列对号入座的。 对二维数组的全部元素赋初值时,可以不指定第一维的长度,对二维数组的全部元素赋初值时,可以不指定第一维的长度,但不得省去第二维的长度。如:但不得省去第二维的长度。如:static int a34=1,2,3,4,5,6,7,8,9,10,11,12;可以写成:可以写成:static int a 4=1,2,3,4,5
8、,6,7,8,9,10,11,12;同样,同样,static int a 4=0,0,3, ,0,10; 也是正确的。也是正确的。 可以对部分元素赋初值。如:可以对部分元素赋初值。如:例例7.4 将一个二维数组行和列的元素互换后存到另一个数组中。如:将一个二维数组行和列的元素互换后存到另一个数组中。如:main( ) static int a23=1,2,3,4,5,6; static int b32, i, j; printf(“array a:n”); for (i=0; i=1; i+) for ( j=0; j=2; j+) printf(“%5d”,ai j); b ji=ai j;
9、 / 元素互换元素互换 / printf(“n”); printf(“array b:n”); for (i=0; i=2; i+) for ( j=0; j=1; j+) printf(“%5d”,bi j); printf(“n”); 例例7.5 输出一个输出一个3 4数组中每行中的最大元素之值及其位置。数组中每行中的最大元素之值及其位置。main( ) int i, j, c, max ; static int a34=6,-5,11,3,8,9,4,7,2,13,1,-10; for (i=0; i=2; i+) max=a i0; c=0; for ( j=0; jmax) max=
10、ai j; c=j; printf(“max=%2d,row=%d,colum=%dn”,max,i+1,c+1); 输出结果:输出结果:max=11, row=1, colum=3max= 9, row=2, colum=2max=13, row=3, colum=27.3 多维数组多维数组与二维数组的定义类似与二维数组的定义类似例如例如: int a345, b2453;分别为定义的三维、四维数组。分别为定义的三维、四维数组。其中,其中,a有有60个元素,个元素,b有有120个元素。个元素。7.4字符数组与字符串字符数组与字符串7.4.1 字符数组的逐个字符操作例例7.6 从键盘输入一个字
11、符串,回车键结束,并将字符串在屏幕上输出。从键盘输入一个字符串,回车键结束,并将字符串在屏幕上输出。 main( ) int i; static char str80; clrscr(); for(i=0;i80;i+) stri=getch(); /*逐次给数组元素逐次给数组元素stri赋值,但不回显在屏赋值,但不回显在屏幕上幕上*/ printf(*); /*以星号代替输入字符的个数以星号代替输入字符的个数*/ if(stri=x0d) break;/*若输入回车则终止循环若输入回车则终止循环*/ i=0; while(stri!=x0d) printf(%c,stri+);/*逐次输出字
12、符数组的各个元素逐次输出字符数组的各个元素*/ printf(n); getch();/*程序暂停程序暂停*/ 1字符数组的定义字符数组的定义1维字符数组,用于存储和处理维字符数组,用于存储和处理1个字符串,其定义格个字符串,其定义格式与式与1维数值数组一样。维数值数组一样。2维字符数组,用于同时存储和处理多个字符串,其维字符数组,用于同时存储和处理多个字符串,其定义格式与定义格式与2维数值数组一样。维数值数组一样。2字符数组的初始化字符数组的初始化字符数组的初始化,可以通过为每个数组元素指定初值字字符数组的初始化,可以通过为每个数组元素指定初值字符来实现。符来实现。3字符数组的引用字符数组的
13、引用 字符数组的逐个字符引用,与引用数值数组元素字符数组的逐个字符引用,与引用数值数组元素类似。类似。 (1)字符数组的输入)字符数组的输入 除了可以通过初始化使字符数组各元素得到初除了可以通过初始化使字符数组各元素得到初值外,也可以使用值外,也可以使用getchar()或或scanf()函数输入字符。函数输入字符。 例如:例如: char str10;for(i=0; i10; i+) scanf(%c, &stri); fflush(stdin);/*清除键盘输入缓冲区清除键盘输入缓冲区*/ (2)字符数组的输出)字符数组的输出 字符数组的输出,可以用字符数组的输出,可以用putc
14、har()或或printf()函数。函数。 例如:例如: char str10=c language;for(i=0; i10; i+) printf(%c, stri);printf(n); 注意注意:逐个字符输入、输出时,要指出元素的下标,:逐个字符输入、输出时,要指出元素的下标,而且使用而且使用“%c”格式符。另外,从键盘上输入字符格式符。另外,从键盘上输入字符时,无需输入字符的定界符时,无需输入字符的定界符单引号;输出时,系单引号;输出时,系统也不输出字符的定界符。统也不输出字符的定界符。Scanf(“%s”)方式输入字符串时:方式输入字符串时:从第一个非空白字符开始,遇到第一个空白从
15、第一个非空白字符开始,遇到第一个空白字符结束;并在末尾自动补上一个字符字符结束;并在末尾自动补上一个字符0#include main( ) char name13; int i; for (i =0; i =12; i +)scanf(“ %c”,&namei); for (i =0; i =12; i +)printf(“ %c”,namei); scanf(“ %s”,name); printf(“ %s”,name);例例7e_1:采用不同的方式输入输出字符串:采用不同的方式输入输出字符串运行结果运行结果:Pear & Apple Pear & ApplePear
16、 & Apple Pear#include #include main( )int i; char name74=sun,mon,tue,wed, thu,wen,sat; printf(Result is:n); name03=& name23=& name53=& for (i=0;i7;i+) printf(%sn,namei); getch();例例: 7e_2字符串数组值的改变。字符串数组值的改变。程序运行结果程序运行结果:sun&monmontue&wedwedthuwen&satsatNAME0SUN0NAME1MON0NA
17、ME2TUE0NAME3WED0NAME4THU0NAME5FRI0NAME6SAT0NAME0SUN&NAME1MON0NAME2TUE&NAME3WED0NAME4THU0NAME5FRI&NAME6SAT0赋初值:改变后:7.4.2 字符数组的整体操作例例7.7 字符数组的整体输入与输出。字符数组的整体输入与输出。 将将2维字符数组进行初始化,并在屏幕上输出维字符数组进行初始化,并在屏幕上输出*/main() int i; char name510=“zhangshan, “lisi, “wangwu, “zhaolui, “luiqi; for(i=0;i5;i
18、+) printf(n%st,namei); /*namei代表该行数组元素的首地址代表该行数组元素的首地址*/ getch(); 1字符串及其结束标志字符串及其结束标志 所谓字符串,是指若干有效字符的序列。所谓字符串,是指若干有效字符的序列。C语言中的字符串,可语言中的字符串,可以包括字母、数字、专用字符、转义字符等。以包括字母、数字、专用字符、转义字符等。C语言规定:以语言规定:以0作为字符串结束标志(作为字符串结束标志(0代表代表ASCII码为码为0的字的字符,表示一个符,表示一个“空操作空操作”,只起一个标志作用)。因此可以对字符数组,只起一个标志作用)。因此可以对字符数组采用另一种方
19、式进行操作了采用另一种方式进行操作了字符数组的整体操作。字符数组的整体操作。 注意注意:由于系统在存储字符串常量时,会在串尾自动加上:由于系统在存储字符串常量时,会在串尾自动加上1个结束标志,所以无需人为地再加个结束标志,所以无需人为地再加1个。个。另外,由于结束标志也要在字符数组中占用一个元素的存另外,由于结束标志也要在字符数组中占用一个元素的存储空间,因此在说明字符数组长度时,至少为字符串所需长度储空间,因此在说明字符数组长度时,至少为字符串所需长度加加1。2字符数组的整体初始化字符数组的整体初始化字符串设置了结束标志以后,对字符数组的初始化,就可字符串设置了结束标志以后,对字符数组的初始
20、化,就可以用字符串常量来初始化字符数组。以用字符串常量来初始化字符数组。3字符数组的整体引用字符数组的整体引用(1)字符串的输入)字符串的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使除了可以通过初始化使字符数组各元素得到初值外,也可以使用用scanf()函数输入字符串。函数输入字符串。(2)字符串的输出)字符串的输出printf()函数,不仅可以逐个输出字符数组元素,还可以整体输函数,不仅可以逐个输出字符数组元素,还可以整体输出存放在字符数组中的字符串。出存放在字符数组中的字符串。7.4.3 常用的字符串处理函数字符串标准函数的原型在头文件字符串标准函数的原型在头文件string
21、.h中。中。1输入字符串输入字符串gets()函数函数(1)调用方式:)调用方式:gets(字符数组字符数组)(2)函数功能:从标准输入设备)函数功能:从标准输入设备(stdin)键盘上,读键盘上,读取取1个字符串(可以包含空格),并将其存储到字符数组中个字符串(可以包含空格),并将其存储到字符数组中去。去。(3)使用说明)使用说明 1)gets()读取的字符串,其长度没有限制,编程者要保读取的字符串,其长度没有限制,编程者要保证字符数组有足够大的空间,存放输入的字符串。证字符数组有足够大的空间,存放输入的字符串。 2)该函数输入的字符串中允许包含空格,而)该函数输入的字符串中允许包含空格,而
22、scanf()函函数不允许。遇到回车输入结束!数不允许。遇到回车输入结束!2输出字符串输出字符串puts()函数函数(1)调用方式:)调用方式:puts(字符数组字符数组)(2)函数功能:把字符数组中所存放的字符串,输出)函数功能:把字符数组中所存放的字符串,输出到标准输出设备中去,并用到标准输出设备中去,并用n取代字符串的结束标志取代字符串的结束标志0。所以用所以用puts()函数输出字符串时,不要求另加换行符。函数输出字符串时,不要求另加换行符。( 3)使用说明)使用说明1)字符串中允许包含转义字符,输出时产生一个控字符串中允许包含转义字符,输出时产生一个控制操作。制操作。2)该函数一次只
23、能输出一个字符串,而该函数一次只能输出一个字符串,而printf()函函数也能用来输出字符串,且一次能输出多个。数也能用来输出字符串,且一次能输出多个。1. 输入输入(用用scanf(“%s”)(2) 输入多个字符串输入多个字符串,可用空格隔开。可用空格隔开。 static char str15, str25, str35; scanf(%s%s%s, str1, str2,str3);(1) 输入字符串时输入字符串时,系统自动加上系统自动加上0输入输入 How are you str1得到得到: H o w0 str2得到得到: a r e0 str3得到得到: y o u 02. 2.输入
24、输入( (用用gets()gets() static char str 15, gets(str); 输入:how are you 则则str得到得到: how are you0 例例7e_3(演示演示) #include #include main() static char str15,str25,str35,str15; scanf(%s%s%s, str1, str2,str3); / /* *输入输入 how are youhow are you回车回车* */ / printf(%s%s%s%sn, str1, str2,str3); puts(str1);puts(str2);p
25、uts(str3); / /* *puts()puts()将将00转换为转换为nn* */ / fflush(stdin); / /* *清除键盘缓冲区清除键盘缓冲区, ,內部位置指针置首位內部位置指针置首位* */ / gets(str); / /* *输入输入 how are youhow are you回车回车* */ / puts(str); 运行屏幕显示运行屏幕显示:how are youhowareyouhowareyouhow are youhow are you例例7e_4(演示演示)从键盘按下面次序输入从键盘按下面次序输入,分析程序结果分析程序结果: aa bb回车回车cc
26、dd回车回车#include #include main()char a15,a25,a35,a45; scanf(“%s%s”,a1,a2); gets(a3);gets(a4); puts(a1); puts(a2); puts(a3); puts(a4);程序运行结果程序运行结果: :aabbcc dd说明说明: :输入流为一队列输入流为一队列 aaaabbccbbccddddscanf(scanf(“%s%s”,);,);从队列中一个一个地读字符从队列中一个一个地读字符, ,每每读一个读一个, ,标准输入设备文件标准输入设备文件stdinstdin内部指针向右移内部指针向右移动一个字符
27、位置动一个字符位置; ;以非空白字符开始以非空白字符开始, ,以第一个空以第一个空白字符结束白字符结束. .gets();gets();从队列中一个一个地读字符从队列中一个一个地读字符, ,每读一个每读一个, ,标准输入设备文件内部指针向右移动一个字符位标准输入设备文件内部指针向右移动一个字符位置置; ;以以为串输入结束标志为串输入结束标志. .则则: :a15:aa0 a25:bb0a15:aa0 a25:bb0a35:0 a45:cca35:0 a45:ccdd0dd03字符串比较字符串比较strcmp()函数函数(1)调用方式:)调用方式:strcmp(字符串字符串1 ,字符串字符串2)
28、其中其中“字符串字符串”可以是串常量,也可以是可以是串常量,也可以是1维字符数组。维字符数组。(2)函数功能:比较两个字符串的大小。)函数功能:比较两个字符串的大小。如果:字符串如果:字符串1=字符串字符串2,函数返回值等于,函数返回值等于0; 字符串字符串1字符串字符串2,函数返回值正整数。,函数返回值正整数。(3)使用说明)使用说明1)如果一个字符串是另一个字符串从头开始的子串,则母串为大。)如果一个字符串是另一个字符串从头开始的子串,则母串为大。2)不能使用关系运算符)不能使用关系运算符“”来比较两个字符串,只能用来比较两个字符串,只能用strcmp() 函数来处理。函数来处理。例7.8
29、 gets函数和函数和strcmp函数的应用。函数的应用。 /*功能:简单密码检测程序功能:简单密码检测程序*/#include stdio.hmain() char pass_str80; /*定义字符数组定义字符数组pass_str*/ int i=0; /*检验密码检验密码*/ while(1) clrscr(); printf(请输入密码请输入密码n); gets(pass_str); /*输入密码输入密码*/*假定正确口令为假定正确口令为password*/ if(strcmp(pass_str,“password”)!=0) printf(口令错误,按任意键继续口令错误,按任意键继
30、续); else break; /*输入正确的密码,中止循环输入正确的密码,中止循环*/ getch(); i+; if(i=3) exit(0);/*输入三次错误的密码,退出程序输入三次错误的密码,退出程序*/ /*以下为输入正确密码所进入的程序段以下为输入正确密码所进入的程序段*/ printf(密码正确密码正确!欢迎你进入欢迎你进入!); 4拷贝字符串拷贝字符串strcpy()函数函数(1)调用方式:)调用方式:strcpy(字符数组字符数组, 字符串字符串)其中其中“字符串字符串”可以是串常量,也可以是字符数组。可以是串常量,也可以是字符数组。(2)函数功能:将)函数功能:将“字符串字
31、符串”完整地复制到完整地复制到“字符数组字符数组”中,字符数组中原有内容被覆盖。中,字符数组中原有内容被覆盖。(3)使用说明)使用说明1)字符数组必须定义得足够大,以便容纳复制过来的字符串。)字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志复制时,连同结束标志0一起复制。一起复制。2)不能用赋值运算符)不能用赋值运算符“”将一个字符串直接赋值给一个字符数将一个字符串直接赋值给一个字符数组,只能用组,只能用strcpy()函数来处理。函数来处理。 5连接字符串连接字符串strcat()函数函数(1)调用方式:)调用方式:strcat(字符数组字符数组, 字符串字符串)(2
32、)函数功能:把)函数功能:把“字符串字符串”连接到连接到“字符数组字符数组”中的字中的字符串尾端,并存储于符串尾端,并存储于“字符数组字符数组”中。中。“字符数组字符数组”中原来的中原来的结束标志,被结束标志,被“字符串字符串”的第一个字符覆盖,而的第一个字符覆盖,而“字符串字符串”在在操作中未被修改。操作中未被修改。(3)使用说明)使用说明 1)由于没有边界检查,编程者要注意保证)由于没有边界检查,编程者要注意保证“字符数组字符数组”定义得定义得足够大,以便容纳连接后的目标字符串;否则,会因长度不够而产生足够大,以便容纳连接后的目标字符串;否则,会因长度不够而产生问题。问题。 2)连接前两个
33、字符串都有结束标志)连接前两个字符串都有结束标志0,连接后,连接后“字符数字符数组组”中存储的字符串的结束标志中存储的字符串的结束标志0被舍弃,只在目标串的最被舍弃,只在目标串的最后保留一个后保留一个0。6求字符串长度求字符串长度strlen()函数(函数(len是是length的缩写)的缩写)(1)调用方式:)调用方式:strlen(字符串字符串)(2)函数功能:求字符串(常量或字符数组)的实际)函数功能:求字符串(常量或字符数组)的实际长度(不包含结束标志)。长度(不包含结束标志)。7将字符串中大写字母转换成小写将字符串中大写字母转换成小写strlwr()函数函数(1)调用方式:)调用方式
34、:strlwr(字符串字符串)(2)函数功能:将字符串中的大写字母转换成小写,)函数功能:将字符串中的大写字母转换成小写,其它字符(包括小写字母和非字母字符)不转换。其它字符(包括小写字母和非字母字符)不转换。8将字符串中小写字母转换成大写将字符串中小写字母转换成大写strupr()函数函数(1)调用方式:)调用方式:strupr(字符串字符串)(2)函数功能:将字符串中小写字母转换成大写,其它字)函数功能:将字符串中小写字母转换成大写,其它字符(包括大写字母和非字母字符)不转换。符(包括大写字母和非字母字符)不转换。7.5 数组作为函数参数数组作为函数参数数组用作函数参数有两种形式:一种是把
35、数组元数组用作函数参数有两种形式:一种是把数组元素(又称下标变量)作为实参使用;另一种是把数素(又称下标变量)作为实参使用;另一种是把数组名作为函数的形参和实参使用。组名作为函数的形参和实参使用。 7.5.1 数组元素作为函数参数 7.5.2 数组名作为函数的形参和实参 7.5.1 数组元素作为函数参数 数组元素就是下标变量,它与普通变量并无区别。数组元素就是下标变量,它与普通变量并无区别。数组元素只能用作函数实参,其用法与普通变量完全数组元素只能用作函数实参,其用法与普通变量完全相同:在发生函数调用时,把数组元素的值传送给形相同:在发生函数调用时,把数组元素的值传送给形参,实现单向值传送。参,实现单向值传送。例例7.9 写一函数,统计字符串中字母的个数。写一函数,统计字符串中字母的个数。/*功能:数组元素作为函数实参功能:数组元素作为函数实参*/int isalp(char c) if (c=a&c=A&c=Z) return(1); else r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年医务室服务合同
- 2025年智能温控家居设备项目可行性研究报告
- 2025年绿色建筑设计与实施可行性研究报告
- 2025年产业园区综合服务平台项目可行性研究报告
- 2025年电商供应链优化系统可行性研究报告
- 消费券发放协议书
- 纯电车保价协议书
- 交房结算协议书
- 中韩萨德协议书
- 医疗器械注册专员面试题及答案解析
- 吉利NPDS流程和PPAP介绍
- 南水北调工程环境影响评估报告
- 化工有限公司年产4000吨-N-N-二甲基苯胺项目安全预评价报告
- 临时便道施工方案(同名16485)
- 功能高分子材料课件-第三章导电高分子材料
- 非电性质保安措施
- 马工程区域经济学全套课件
- tm114航空硬软管基本知识
- 工业以太网交换机行业应用案例ppt课件
- 基于霍尔式传感器的电子秤-课程设计
- 【精品模板】兰州交通大学毕业论文答辩演示PPT模板_
评论
0/150
提交评论