




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、例题:输入一个任意位数整数,求出每位上的数字,例题:输入一个任意位数整数,求出每位上的数字,从高位向低位输出。从高位向低位输出。/*若由低位向高位输出:若由低位向高位输出:*/#include stdio.h#include conio.hvoid main()long x;textmode(c40);clrscr();printf(input an interger:);scanf(%ld,&x);do printf(%d,x%10); x=x/10;while(x!=0);printf(b );getch();将求出的每一将求出的每一位数字位数字输出输出 变量?变量?多个多个数组数组保存?
2、保存?本章重点:本章重点:1、一维数组、二维数组的定义、初始化、一维数组、二维数组的定义、初始化以及数组元素的引用。以及数组元素的引用。2、字符串以及字符串数组、字符串以及字符串数组3、字符串处理函数、字符串处理函数本章难点:本章难点: 1、数组名是整个数组的首地址。、数组名是整个数组的首地址。2、直接引用和间接引用、直接引用和间接引用第一节第一节 一维数组的定义和引用一维数组的定义和引用第二节第二节 字符数组字符数组第三节第三节 二维数组的定义和引用二维数组的定义和引用构造类型:由基本类型的数据按照一定的规则组合而成。构造类型:由基本类型的数据按照一定的规则组合而成。c语言中的构造类型语言中
3、的构造类型数组数组结构体结构体共用体共用体(本章内容)(本章内容)(第十章内容)(第十章内容)数组:数组:一组变量。一组变量。 具有相同的数据类型具有相同的数据类型在内存中占有连续的内存单元在内存中占有连续的内存单元具有相同的名称(数组名),但具有相同的名称(数组名),但有不同的下标有不同的下标每一个称为一个每一个称为一个数组元素。数组元素。用统一的数组名称和不同的下标来唯一的标识数组中的每一用统一的数组名称和不同的下标来唯一的标识数组中的每一个元素。个元素。唯一确定数组元素在数唯一确定数组元素在数组中的顺序的整数值组中的顺序的整数值一维数组:数组中的每个元素只带有一个下标,即仅一维数组:数组
4、中的每个元素只带有一个下标,即仅 由一个下标值就能确定数组元素位置和顺由一个下标值就能确定数组元素位置和顺 序的数组。序的数组。因此,在逻辑上,可以把一维数组中的所有因此,在逻辑上,可以把一维数组中的所有元素看作是排成一行的,所以也把一维数组元素看作是排成一行的,所以也把一维数组称为称为“行数组行数组”。一、定义:一、定义:形式:形式: 类型名类型名 数组名数组名 常量表达式常量表达式注:注:1)类型名:数组中的元素的类型()类型名:数组中的元素的类型(如如 int char 等等)2)数组名的命名规则同前面的变量的命名规则。)数组名的命名规则同前面的变量的命名规则。3)常量表达式:表示数组中
5、数组元素的个数,即数组的)常量表达式:表示数组中数组元素的个数,即数组的 长度。长度。 不允许为变量,既不允许对数组做动态定义。数不允许为变量,既不允许对数组做动态定义。数组的大小一旦定义即已固定。组的大小一旦定义即已固定。例如:定义一个包含例如:定义一个包含3个元素的整型数组个元素的整型数组a:int例如:定义一个包含例如:定义一个包含20个元素的字符型数组个元素的字符型数组c:char c20;3;a例:例:int a3,b5,c10;一个定义中,可以同时说明一个定义中,可以同时说明多个相同类型的数组。多个相同类型的数组。例:例:char c,s30;普通变量和数组可以出现普通变量和数组可
6、以出现在同一个定义中。在同一个定义中。注:注: 4)数组名:)数组名: 是一个地址常量,代表整个数组的首地址。是一个地址常量,代表整个数组的首地址。变量的地址:一个变量所占内存中第一个字节的地址。变量的地址:一个变量所占内存中第一个字节的地址。2000h2001h2002h2003h2004hint x;xprintf(“%x”,&x);输出结果为:输出结果为:2000一个变量名与一个地址值所标明的存储区域相对应。一个变量名与一个地址值所标明的存储区域相对应。注:注: 4)数组名:是一个地址常量,代表整个数组的首地址。)数组名:是一个地址常量,代表整个数组的首地址。例如:例如:int a3;3
7、000h3001h3002h3003h3004h3005h3006h数组数组a所占的所占的内存内存printf(“%x”,a);输出结果为:输出结果为:3000a的值的值 a+1的值是多少?的值是多少?3002注:对地址进行增减运算,移动注:对地址进行增减运算,移动的最小单位是一个存储单元而不的最小单位是一个存储单元而不一定是一个字节,具体由数组元一定是一个字节,具体由数组元素的类型决定。素的类型决定。 ?例如:例如:main()int a10; printf(“%x”,a); printf(“%x”,a+9);如果第一个输出语句的结果为如果第一个输出语句的结果为194,则第二个输出语句的结果
8、为(则第二个输出语句的结果为( )1 9 4+ 1 82 1 2(十六进制)(十六进制)(十进制)(十进制)xx1 9 4+1 22 0 6x1 a 61 a 6补充内容:直接引用和间接引用补充内容:直接引用和间接引用直接引用:通过变量名来对内存单元进行存取操作的。直接引用:通过变量名来对内存单元进行存取操作的。此前我们对变量的操作都是直接引用。此前我们对变量的操作都是直接引用。2000h2001h2002h2003h2004hint x; xx=3;3printf(“%d”,x);输出输出3间接引用:间接引用:将变量(假设为将变量(假设为i)的地址存放在另一个变量(假设为)的地址存放在另一个
9、变量(假设为p)中,要存取变量中,要存取变量i的值,可以先找到存放的值,可以先找到存放i地址的变量地址的变量p,从从p中取出中取出i的地址,然后根据这个地址进行存放。这种的地址,然后根据这个地址进行存放。这种由一个变量得到另一个变量的地址,再通过得到的这个由一个变量得到另一个变量的地址,再通过得到的这个地址完成对存储单元访问的方法,成为对内存的地址完成对存储单元访问的方法,成为对内存的“间接间接访问访问”,或者,或者“间接引用间接引用”。int i=3;2000h2001h3变量变量p的空间的空间2000h与间接引用相关的运算符:与间接引用相关的运算符:&:取某个变量的地址。:取某个变量的地址
10、。例如取变量例如取变量x的地址:的地址: &x*:间接引用运算符。:间接引用运算符。单目运算符。出现在运算对象的左边,单目运算符。出现在运算对象的左边,其运算对象是地址或者存放地址的指针变量。其运算对象是地址或者存放地址的指针变量。功能:引用相应的存储单元。功能:引用相应的存储单元。int i=3;2000h2001h32000h变量变量p的空间的空间对变量对变量x的引用:的引用:直接引用:直接引用:x间接引用:间接引用:*p*(&x)第九章第九章内容内容下标的范围:下标的范围: 下标下标数组元素的引用:把数组中的每个元素当成普通的变量数组元素的引用:把数组中的每个元素当成普通的变量来使用,就
11、是所谓的来使用,就是所谓的“数组元素的引用数组元素的引用”。两种方法:两种方法:1、直接引用:、直接引用:形式:数组名称形式:数组名称下标表达式下标表达式表达式的值必表达式的值必须为整数须为整数例如:例如:int a3;该数组中包含该数组中包含3个元素,分别为:个元素,分别为:2)数组元素默认的下标值从)数组元素默认的下标值从0开始。开始。a0、a1、a2注:注: 1)下标表达式必须为整型常量或者整型的表达式。)下标表达式必须为整型常量或者整型的表达式。0长度长度-13)数组不能整体引用。)数组不能整体引用。 如如 不能用不能用a表示表示a0到到a23个元素。个元素。( +0)2、间接引用:、
12、间接引用:形式:形式:*数组元素的地址数组元素的地址例如:例如:int a3;表示数组中的第一个元素:表示数组中的第一个元素:直接引用:直接引用: a0间接引用:间接引用:* a表示数组中的第二个元素:表示数组中的第二个元素:直接引用:直接引用:a1间接引用:间接引用:*(a+1)表示数组中的第三个元素:表示数组中的第三个元素:直接引用:直接引用:a2间接引用:间接引用:*(a+2)课程回顾课程回顾1、定义一个具有、定义一个具有10个元素的浮点型的数组个元素的浮点型的数组f,应使用的语句为:,应使用的语句为: 。float f10;2、若已有定义、若已有定义int a10;则该数组中则该数组中
13、 首元素表示为:首元素表示为: 。 未元素表示为:未元素表示为: 。a0a93、若有一个数组、若有一个数组a,则对其下标为,则对其下标为i的元素的元素地址表示为:地址表示为: 或或 .数组元素的引用表示为:数组元素的引用表示为: 或或 .&aia+iai*(a+i)main()int a10; 例题:例题:/给给10个元素分别赋值为个元素分别赋值为0 1 2 3 49 a0=0;a1=1;a2=2;a9=9;iiai=i;for(i=0;i10;i+) ai=i;/输出数组的输出数组的10个元素个元素 printf(“% 3d”,a0);1 2 9 ifor(i=0;i=0;i-) print
14、f(“% 3d”,ai);*(a+i)三、一维数组的初始化三、一维数组的初始化1、定义时赋初值、定义时赋初值)例:)例:int a3=1,2,3;注:注:初值列表用大括号括起来,各数值间用逗号隔开。初值列表用大括号括起来,各数值间用逗号隔开。从第一个元素开始依次赋值。从第一个元素开始依次赋值。)例:)例:int a=1,2,3;注注:只给部分元素赋值,且为从第个元素开始的连续的只给部分元素赋值,且为从第个元素开始的连续的数组元素,没有赋值的元素自动取值为。数组元素,没有赋值的元素自动取值为。上例中,赋值后元素上例中,赋值后元素a0、a1、a2的值分别为、;的值分别为、;a3、a4的值均为的值均
15、为0。3)例:)例:int a=1,2,3;注:注:对全部数组元素赋初值时,长度可以省略。系统根对全部数组元素赋初值时,长度可以省略。系统根据初值的个数自动决定数组的长度。据初值的个数自动决定数组的长度。4)初值的个数与数组的长度不同时,长度不可以省略)初值的个数与数组的长度不同时,长度不可以省略初值个数(初值个数(n)长度(长度(l):编译时出错编译时出错int a3=1,2,3,4 x2、运行时赋值、运行时赋值(一般使用循环结构一般使用循环结构)1)用赋值符号)用赋值符号=例如:例如:int a10;例如:例如:int a10;/给给10个元素赋值个元素赋值0到到100之间的随机数之间的随
16、机数for(i=0;i10;i+)ai= random(101);2)用输入函数)用输入函数/输入输入10个数分别给个数分别给10个个元素赋值元素赋值for(i=0;i=0; i-chp6interger.c如果分别用如果分别用max,min,aver表示表示3个成绩,则该个成绩,则该如果定义?如果定义?如何存储?如何存储?如何存储?如何存储?如何存储?如何存储?答:普通变量答:普通变量例题例题1:输入:输入10名同学的成绩,统计其中的最高分、最名同学的成绩,统计其中的最高分、最低分和平均分。低分和平均分。#include void main() 如何存储?如何存储?答:数组答:数组如果成绩为
17、浮点型数据,如果成绩为浮点型数据,该数组如果定义?该数组如果定义?float score10 ;float max,min,aver;max=score0;for(i=1;imax) max=scorei;void main()float score10;float max,min,aver ;如何输入如何输入10个成绩?个成绩?for(i=0;i10;i+)scanf(“%f”, ) ;&scoreiint i;如何求最如何求最高分高分,将将其保存在其保存在max中?中?如何求最如何求最高分高分,将将其保存在其保存在min中?中?min=score0;for(i=1;i10;i+) if(s
18、coreimin) min=scorei;如何求平如何求平均分,并均分,并保存在保存在aver中?中?,sum;sum=score0;for(i=1;imax)max=score1;if(score2max)max=score2;if(score3max)max=score3;if(score9max)max=score9;if(scorei max)max=scorei;for(i=1;i10;i+)minminminmin低低如何求总如何求总分分,将其将其保存在保存在sum中?中?sum=score0;sum=sum+score1;sum=sum+score2;sum=sum+score3
19、;sum=sum+score9;for(i=1;i10;i+)sum=sum+scorei;练习:找出数组练习:找出数组a5中的最大值并输出。中的最大值并输出。#include “stdio.h”void main()定义一个具定义一个具有有5个元素的个元素的整型数组整型数组a?int a5 ;,max ,i输入输入5个整数个整数分别给数组分别给数组的的5个元素赋个元素赋值值?for(i=0;i5;i+) scanf(“%d”,&ai);求求5个元素个元素中的最大中的最大值值?max=a0;if(maxa i)max=ai ;for(i=1;i5;i+) 输出最大输出最大元素的值元素的值?pr
20、intf(“max is%dn”,max);求求5个元素个元素中的最大中的最大值值?#include “stdio.h”void main()int a5,i,max ; for(i=0;i5;i+) scanf(“%d”,&ai); max= a0 ; for(i=1;i5;i+) if( max ai ) max = ai ; printf(“最大数的下标是最大数的下标是%dn”, max);练习:找出数组练习:找出数组a5中的中的最大元素的下标最大元素的下标并输出。并输出。0amaxi如何将最大如何将最大的元素放在的元素放在最后位置最后位置?将下标为将下标为max的元素的元素和最后元素和
21、最后元素交换!交换!,t;t=amax;amax =a4;a4= t; 引申作业:引申作业:用用选择法选择法对对10个整数进个整数进行升序排序。行升序排序。/*max1.c*/#include stdio.hvoid main()int a5,max,i;for(i=0;i5;i+) scanf(%d,&ai);max=a0;for(i=1;i5;i+) if(maxai) max=ai;printf(max is %d:n, max );输出最大元输出最大元素的值素的值!将最大的元将最大的元素放在数组素放在数组的的最后最后?a4将数组中将数组中的元素按的元素按由小到大由小到大排序排序?下一页
22、下一页/*max1.c*/#include stdio.hvoid main()int a5,max,i;for(i=0;i5;i+) scanf(%d,&ai);max=a0;for(i=1;i5;i+) if(maxai) max=ai;printf(max is %d:n, max );输出最大元输出最大元素的值素的值!将最大的元将最大的元素放在数组素放在数组的的最后最后?for(i=0;iai+1) t=ai; ai=ai+1; ai+1=t; a4将数组中将数组中的元素按的元素按由小到大由小到大排序排序?下一页下一页84950假设数组元素的值分别赋值为:假设数组元素的值分别赋值为:a
23、5=9,8,4,5,0,2;98450第一次第一次89450第二次第二次第三次第三次84590第四次第四次84509结果:把最大的数放结果:把最大的数放到最后一个元素。到最后一个元素。if( )aiai+1t=ai;ai=ai+1;ai+1=ai;/*交换交换ai和和ai+1的值的值*/for(i=0;i4;i+) 上一页上一页/*将将5个元素中的最大值放在最后个元素中的最大值放在最后*/for(i=0;iai+1) t=ai; ai=ai+1; ai+1=t; /*将将4个元素中的最大值放在最后个元素中的最大值放在最后*/for(i=0;iai+1) t=ai; ai=ai+1; ai+1=
24、t; 3/*将将3个元素中的最大值放在最后个元素中的最大值放在最后*/for(i=0;iai+1) t=ai; ai=ai+1; ai+1=t; /*将将2个元素中的最大值放在最后个元素中的最大值放在最后*/for(i=0;iai+1) t=ai; ai=ai+1; ai+1=t; /*将将n个元素中的最大值放在最后个元素中的最大值放在最后*/for(i=0;iai+1) t=ai; ai=ai+1; ai+1=t; /*将将5个元素个元素按降序排序按降序排序*/for( )j=1;ja1,则将两个数进行交换,否则保持原顺序不变。则将两个数进行交换,否则保持原顺序不变。然后比较然后比较a1和和
25、a2,依此类推,直到第依此类推,直到第n-1个元素与第个元素与第n个个元素比较,这称为一趟起泡。这一趟最明显的效果是将最大的元素比较,这称为一趟起泡。这一趟最明显的效果是将最大的数据排到了最后。然后对前数据排到了最后。然后对前n-1个数据进行同样的操作,则具个数据进行同样的操作,则具有次大值的数被排在第有次大值的数被排在第n-1的位置上,重复以上操作直到所有的位置上,重复以上操作直到所有元素按顺序排列。元素按顺序排列。/*起泡法排序起泡法排序 chp6sort.c*/main()int i,j,a5=9,8,4,5,0,2,t;clrscr();for(i=0;i5;i+) printf(%d
26、 ,ai);printf(n);for(i=1;i5 ;i+)for(j=0;jaj+1) t=aj; aj=aj+1; aj+1=t; for(i=0;i5;i+) printf(%d ,ai);练习:编程模拟练习:编程模拟23选选5的抽奖系统。(的抽奖系统。(select.c)849502假设已有定义:假设已有定义:a6=9,8,4,5,0,2;第一趟:第一趟:984502第一次第一次894502第二次第二次第三次第三次845902第四次第四次845092第五次第五次845029for(j=0;jaj+1) t=aj; aj=aj+1; aj+1=aj;结果:把最大结果:把最大的数放到最后
27、的数放到最后一个元素。一个元素。第二趟:第二趟: 84502第一次第一次48502第二次第二次45802第三次第三次45082第四次第四次45028结果:把次大结果:把次大的数放到倒数的数放到倒数第二个元素。第二个元素。for(j=0;jaj+1) t=aj; aj=aj+1; aj+1=aj;第三趟:第三趟: 4502第一次第一次4502第二次第二次4052第三次第三次4025for(j=0;jaj+1) t=aj; aj=aj+1; aj+1=aj;第四趟:第四趟: 402第一次第一次042第二次第二次024for(j=0;jaj+1) t=aj; aj=aj+1; aj+1=aj;第五趟
28、:第五趟: 02第一次第一次02for(j=0;jaj+1) t=aj; aj=aj+1; aj+1=aj;main()int i,j,a6=9,8,4,5,0,2;for(j=0;jaj+1) t=aj; aj=aj+1; aj+1=aj;for(i=1;i6;i+)6-ifor(i=0;i6;i+) printf(“%d “,ai);/*外层循环控制趟数外层循环控制趟数*/*内层循环控制每趟的比较内层循环控制每趟的比较*/练习:编程模拟练习:编程模拟23选选5的抽奖系统。(的抽奖系统。(lx1.c)1、一维数组的初始化、一维数组的初始化2、一维数组中元素的引用方式和地址表示、一维数组中元素
29、的引用方式和地址表示3、两种排序方法:冒泡法和选择法、两种排序方法:冒泡法和选择法6.26.2字符数组字符数组c本身没有字符串变量,字符串的存储完全依赖于字本身没有字符串变量,字符串的存储完全依赖于字符数组,但字符数组并不完全等价于字符串。符数组,但字符数组并不完全等价于字符串。字符数组:用来存放字符数据的数组。字符数组中的字符数组:用来存放字符数据的数组。字符数组中的 一个元素存放一个字符。一个元素存放一个字符。一、定义:一、定义:char 数组名数组名长度长度例如:例如:char c5=c,h,i,n,a;在内存中占在内存中占5个字节个字节a0 a1 a2 a3a4chinaint c5=
30、c,h,i,n,a;二、初始化和引用二、初始化和引用方法同前面所讲的一维数组方法同前面所讲的一维数组三、字符串和字符串结束标志三、字符串和字符串结束标志字符串借助于字符型的一维数组来存放,并规定以字符串借助于字符型的一维数组来存放,并规定以0作为结束标志。作为结束标志。0 :转义字符,称为:转义字符,称为“空值空值”。其。其ascii码值为码值为0. 占内存空间,但不计入字符串的长度。占内存空间,但不计入字符串的长度。字符串长度:字符串结束标志之前的有效字符的个数。字符串长度:字符串结束标志之前的有效字符的个数。字符串常量:系统在末尾自动加字符串常量:系统在末尾自动加0.例如:例如:“abc”
31、 的长度为的长度为3,在内存中占,在内存中占4个字节的空个字节的空间。间。每个字符串常量都分别占用内存中一串连续的存储空间。返回给每个字符串常量都分别占用内存中一串连续的存储空间。返回给系统的是字符串所占内存的首地址。系统的是字符串所占内存的首地址。字符数组与字符串的区别:字符数组与字符串的区别:字符数组的每个元素可存放一个字符,但并不限定最后字符数组的每个元素可存放一个字符,但并不限定最后一个字符是什么。一个字符是什么。在在c中,有关字符串的很多操作都与字符串的结束标志有中,有关字符串的很多操作都与字符串的结束标志有关,因此,在字符数组中的有效字符后加一个关,因此,在字符数组中的有效字符后加
32、一个0这一这一特定的情况下,可把这种一维数组称作特定的情况下,可把这种一维数组称作“字符串字符串”。可以说,字符串是字符数组的一种具体应用。可以说,字符串是字符数组的一种具体应用。例如例如:char s=a,b,c; 例如例如:char s=a,b,c,0; 都是正确的都是正确的1、一般赋值方式:在定义时逐个元素赋值、一般赋值方式:在定义时逐个元素赋值例如例如1)char s4=a,b,c,0; 2)char s=a,b,c,0; 3)char s10=a,b,c,0; ?这四种这四种方式有何方式有何异同?异同? 4)char s=a,b,c; 2、直接用字符串常量赋值、直接用字符串常量赋值例
33、如:例如:char s=“abc”;也可以省略大括号:也可以省略大括号: char s=“abc”;最常使用的方式最常使用的方式1、输出:、输出:若有定义:若有定义:char c=“string”;1)printf()函数函数逐个字符输出:格式符逐个字符输出:格式符 %c输出整个字符串:格式符输出整个字符串:格式符 %si=0;while( )printf(“%c”,ci);i+;格式:格式:printf(格式控制,输出的起始地址格式控制,输出的起始地址)例如例如1):):printf(“%s”, c); 结果为:结果为:string printf(“%s”, c+2);结果为:结果为:rin
34、gcc+2ci!=0例如例如4):):char c1=“boy”,c2=“girl”;则:则:printf(“%s”,c1); printf(“%s”,c2);输出结果为:输出结果为:boygirl则:则:printf(“%sn”,c1);boygirl例如例如2):):printf(“%s”,”china”);结果为:结果为:chinaprintf(“%.2s”,”china”);结果为:结果为:chprintf(“%.2s”,”china”+2); 结果为:结果为:inprintf(“%s”,”china”+2);结果为:结果为:ina例如例如3):):char c=a,b,c; prin
35、tf(“%s”,c);结果为:结果为:不确定不确定2)puts()函数函数格式:格式:puts(输出的起始地址输出的起始地址)若有定义:若有定义:char c=“string”;puts(c); 结果为:结果为:stringputs(c+2); 结果为:结果为:ring例如:例如:char c1=“boy”,c2=“girl”; puts(c2);输出结果为:输出结果为:则:则:puts(c1);boygirl注:注:puts函数自动将字符串结束标志函数自动将字符串结束标志0转为转为n输出,即该函数具有自动回车换行的功能。输出,即该函数具有自动回车换行的功能。1、输入:、输入:若有定义:若有定
36、义:char c20;1)scanf()函数函数逐个字符输入:格式符逐个字符输入:格式符 %c接收整个字符串:格式符接收整个字符串:格式符 %s格式:格式:scanf(格式控制,接收字符的起始地址格式控制,接收字符的起始地址)i=0;doscanf(“%c”,&ci); i+;while( );例如:例如:scanf(“%s”,c);若在程序运行中输入:若在程序运行中输入:china,则从则从第一个第一个元素开始存放字符。元素开始存放字符。例如:例如:scanf(“%s”,c+1);若在程序运行中输入:若在程序运行中输入:china,则从则从第二个第二个元素开始存放字符。元素开始存放字符。ci
37、!=n如果数组中如果数组中存储一个存储一个“字符串字符串”,而且当遇回而且当遇回车符结束输车符结束输入,应怎样入,应怎样表示条件?表示条件?i=0 & ) k-;printf(”%dn”,k);4、以下程序段在、以下程序段在w数组中插入一元素数组中插入一元素x,w数组中的已经按由数组中的已经按由小到大顺序存放,插入前数组中有小到大顺序存放,插入前数组中有n个元素。要求插入个元素。要求插入x后数组后数组中的数句仍然有序(由小到大存放)。中的数句仍然有序(由小到大存放)。int w15=1,2,3,6,9,15,n=6,x=8,i,p=0;while(xwp) p+; /*找出插入位置找出插入位置
38、*/for(i=n;ip;i-) wi= ; =x;n+; /*插入后元素个数加插入后元素个数加1*/wi-1wiak!=y以下函数均使用头文件以下函数均使用头文件“string.h”1、求字符串长度、求字符串长度 strlen()格式:格式:strlen(str)地址值或者字符串常量地址值或者字符串常量注:注:1)功能:求从地址)功能:求从地址str开始到结束标志开始到结束标志0之前之前 的字符的个数。的字符的个数。2)函数的返回值为一整数。)函数的返回值为一整数。例:例:1)strlen(“china”)的值为的值为5 2)strlen(“atsn0121”)的值为的值为8 3)strle
39、n(“sn0160end”)的值为的值为3 4)strlen(“t085xffn”)的值为的值为2 5)若有)若有 char s10=“china”; 则则 strlen(s)的值为)的值为5例题:以下程序功能是将例题:以下程序功能是将s1字符串的内容复制到字符串的内容复制到s2字符字符串中,请填空串中,请填空(copy.c)#include #include void main()char s1=good luck!,s220;int i;for(i=0; ;i+) puts(s1);puts(s2); i0) printf(“s1 is bigger than s2!n”);else if
40、(n0) printf(“s1 is smaller than s2!n”); else printf(“s1 is equal to s2!n”);#include “stdio.h”#include “string.h”作业作业1:输入若干字符串,直到输入空串为止,从中选出最大的字:输入若干字符串,直到输入空串为止,从中选出最大的字符串输出。(符串输出。(lt3.c)5、大小写字母转换函数、大小写字母转换函数 将字符串中的大写字母转换成对应的小写字母将字符串中的大写字母转换成对应的小写字母:strlwr(str) 将字符串中的小写字母转换成对应的大写字母将字符串中的小写字母转换成对应的大写
41、字母:strupr(str)例如例如:若有若有 char c=“china” 则则strlwr(c) 结果为结果为:chinastrupr(c) 结果为结果为:china作业作业2:编写程序完成十六进制数到十进制数的转化。:编写程序完成十六进制数到十进制数的转化。例如:输入例如:输入1a2 则输出十进制数:则输出十进制数:418分析:因为十六进制数包含分析:因为十六进制数包含0-9的数字,还包含的数字,还包含a-f或者或者a-f的字的字母母,所以可以把输入的十六进制数作为一个字符串来接收,将其保所以可以把输入的十六进制数作为一个字符串来接收,将其保存到一个字符数组中。存到一个字符数组中。(lt
42、4.c)二维数组:每个元素带有两个下标,在逻辑上可以把二维数组看成二维数组:每个元素带有两个下标,在逻辑上可以把二维数组看成是一个具有若干行和列的表格或者矩阵。是一个具有若干行和列的表格或者矩阵。一、定义:一、定义:类型名称类型名称 数组名称数组名称 常量表达式常量表达式1常量表达式常量表达式2二维数组的行数。二维数组的行数。 二维数组的列数。二维数组的列数。例如:定义一个具有例如:定义一个具有2行行3列的整型数组列的整型数组aint a23;分析:分析:1)数组名称)数组名称 :a2)共有)共有2 x 3=6个元素个元素3)逻辑结构如下:)逻辑结构如下:第第1行行第第2行行第第1列列第第2列
43、列第第3列列a00 a01a02a10a11a12int a23;注:每个元素有两个下标:注:每个元素有两个下标: 第第1个方括号中的下标代表个方括号中的下标代表行号行号,称为,称为行下标行下标 第第2个方括号中的下标代表个方括号中的下标代表列号列号,称为,称为列下标列下标二、存储方式:二、存储方式:按行存放,即在内存中先存放第按行存放,即在内存中先存放第1行的元素,再存放第二行的元素。行的元素,再存放第二行的元素。在在c语言中,可以把一个二维数组先看成一个一维数组,数组中语言中,可以把一个二维数组先看成一个一维数组,数组中每个元素又是包含若个元素的一维数组。每个元素又是包含若个元素的一维数组
44、。例如例如: int a23; aa0a1a03a00a01a02a13a10a11a02所以,二维数组名称和第一维的下标代表一个不可变的地址常量,所以,二维数组名称和第一维的下标代表一个不可变的地址常量,其值分别为每行的第一个元素的地址。其值分别为每行的第一个元素的地址。二维数组名称也是一个地址常量,代表整个数组的首地址。二维数组名称也是一个地址常量,代表整个数组的首地址。所以,若有所以,若有 int a23; 则数组中则数组中6个元素的存储方式为:个元素的存储方式为:a00a01a02a10a11a123000h3004h3008h300ch3010h3014ha的值的值a0的值的值a1的
45、值的值?思考:思考:a0+1的值?的值?思考:元思考:元素素a12的地址怎么的地址怎么表示?表示?如果表示?如果表示任意元素的任意元素的地址?地址?如何表示?如何表示i行行j列元素的列元素的地址?地址?思考:思考:a+1的值的值为多少?为多少?!元素元素a01的地址的地址!a1+2?*(a+1)+1的值?的值?如果表示?如果表示任意元素的任意元素的地址?地址?!ai+j或者或者*(a+i)+j由以上分析可以得出:由以上分析可以得出:ai : 表示第表示第i行的首地址,每加行的首地址,每加1相当于加相当于加1列,也称为列,也称为列地址列地址。a : 表示整个数组的首地址,每加表示整个数组的首地址
46、,每加1相当于加相当于加1行,也称为行,也称为行地址行地址。将行地址前加引用运算符即可将行地址转化为列地址。将行地址前加引用运算符即可将行地址转化为列地址。*(行地址)(行地址)列地址列地址三、引用三、引用1、直接引用:、直接引用: 数组名称数组名称行下标行下标列下标列下标例如前例中的例如前例中的a11等等注:注:1)下标为整型表达式,而且不能越界。)下标为整型表达式,而且不能越界。 2)两个下标分别放在方括号中。)两个下标分别放在方括号中。例如:例如:a1,2 是错误的是错误的2、间接引用:、间接引用:*(数组元素的地址)(数组元素的地址)例如若有例如若有int s34;则引用第则引用第2行
47、第行第3列的元素方法为:列的元素方法为:直接引用:直接引用: a12间接引用:间接引用: *(a1+2) 或者或者*( +2)*(a+1)a00&a00例题:程序运行时给数组元素赋值,并输出各数组元素。例题:程序运行时给数组元素赋值,并输出各数组元素。(lt5.c)main()int a23,i,j;/给各个元素赋值给各个元素赋值scanf(“%d”, );只给只给a00元素赋值:元素赋值:只给第只给第1行元素赋值:行元素赋值:for(j=0;j3;j+)j for(j=0;j3;j+) scanf(“%d”, &a0j );或者或者ai+j 或者或者*(a+i)+j/按行输出各个元素赋值按行
48、输出各个元素赋值只输出只输出a00元素:元素:printf(“%d “, );只输出第只输出第0行元素:行元素:for(j=0;j3;j+)jfor(i=0;i2;i+) for(j=0;j3;j+) printf(“%d ”, aij );或者或者*(ai+j ) 或者或者*(*(a+i)+j)printf(“n”);ifor(i=0;i2;i+)四、初始化四、初始化 :可以在定义的同时给数组元素赋值:可以在定义的同时给数组元素赋值1、分行赋值,每行放在一个花括号、分行赋值,每行放在一个花括号中。也可省略行数,列数中。也可省略行数,列数 不可省不可省例如:例如:1)int a23=1,2,3
49、,4,5,6结果:结果: a=1 2 34 5 62)int a23=1,2,4,5结果:结果: a=1 2 04 5 0注:注:没有被赋值的元素没有被赋值的元素自动取值为自动取值为03)int a3=1,2,4,5结果:结果: a=1 2 04 5 0注:注:行数自动计算为行数自动计算为22、将所有初值放在一个花括号中,按次序依次赋值给数组元素。、将所有初值放在一个花括号中,按次序依次赋值给数组元素。 行数可以省略,但列数不能省。行数可以省略,但列数不能省。例如:例如:1)int a23=1,2,3, 4,5,6结果:结果: a=1 2 34 5 62)int a23=1,2, 4,5结果:
50、结果: a=1 2 45 0 03)int a3=1,2,3,4,5,6结果:结果: a=1 2 34 5 64)int a3=1,2, 4,5结果:结果:a=1 2 45 0 0ijaij=bjiji例题:将一个二维数组例题:将一个二维数组行和列的元素互换行和列的元素互换,存到另一个二维数组中。例如,存到另一个二维数组中。例如 (lt6.c)a=1 2 34 5 6b=1 42 53 6b00=a00b10=a01b20=a02b01=a10b11=a11b21=a12main()int a23=1,2,3,4,5,6,b32,i,j;for(i=0;i2;i+) for(j=0;j3;j+) bji=aij;/给给b数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 非银金融行业中国机构配置手册(2025版)之公募基金篇:“平台式、一体化与多策略”行动方案
- 代办公司活动方案
- 代理活动策划方案
- 代账公司五月活动方案
- 代驾公司活动方案
- 以老带新创业活动方案
- 仪征社区迎重阳活动方案
- 任务打卡活动方案
- 企业接待活动策划方案
- 金昌市金川高级中学2025届高三三模数学(纯答案)
- 2022年上海市中考物理真题试题及答案
- GB/T 4513.5-2017不定形耐火材料第5部分:试样制备和预处理
- 印制电路板领域:深南电路企业组织结构及部门职责
- GB 1886.193-2016食品安全国家标准食品添加剂丙酸乙酯
- 《士兵突击》课件
- 接触网施工计算课件
- 雨棚棚盖检验批质量验收记录表
- DB14T 1049.1-2020 山西省用水定额 第1部分:农业用水定额
- 医院感染监测清单
- 医疗废物管理相关法律、法规介绍
- 手把手教华为PTN设备业务配置
评论
0/150
提交评论