书签 分享 收藏 举报 版权申诉 / 48
上传文档赚钱

类型c语言组织数据2-课件.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:2774549
  • 上传时间:2022-05-25
  • 格式:PPT
  • 页数:48
  • 大小:791KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《c语言组织数据2-课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    语言 组织 数据 课件
    资源描述:

    1、Programming In CC C程序设计程序设计 -组织数据Programming In C课程组织uC语言入门n 数据n 操作n 过程组织u基本算法n 判断与选择-分支n 迭代与递推-循环n 穷举-流程转向控制n 递归-变量的存储类型u组织数据n 数组n 结构n 指针n 文件Programming In C组织数据-1.数组(处理批量数据)u数组类型;u常用算法:排序、查找、求最大最小值等;u用字符数组存取字符串;u使用字符串处理函数处理字符串u向函数传递一维数组和二维数组;(指针)Programming In C组织数据-2.指针(地址)u指针的概念;n难点:对指针数据类型的理解 u

    2、数组的下标法引用和指针法引用;n难点:二维数组的地址和指针概念 u利用字符指针存取字符串;n难点:字符数组和字符指针的区别与联系 u指针数组应用;n难点:指向数组的指针与指针数组的区别 n带参数的main函数;u。Programming In C 一、指针的概念一、指针的概念n变量与地址变量与地址程序中程序中: : int i; float k; 内存中每个字节有一个编号内存中每个字节有一个编号-地址地址.20002000200120012002200220052005内存020032003ik 编译或函数调用时为其分配内存单元编译或函数调用时为其分配内存单元变量是对程序中数据存储空间的抽象P

    3、rogramming In C地址Programming In C.200020002004200420062005整型变量整型变量i i10变量变量i_pointer200120012002200220032003n指针与指针变量指针与指针变量 指针:一个变量的地址指针:一个变量的地址 指针变量:专门存放变量地址的变量指针变量:专门存放变量地址的变量2000指针指针指针变量 变量的变量的内容内容 变量的变量的地址地址指针变量指针变量变量变量变量地址变量地址( (指针指针) )变量值变量值指向地址存入指针变量Programming In Cn &与*运算符 含义含义含义: : 取变量的地址取变

    4、量的地址单目运算符单目运算符优先级优先级: 2: 2结合性结合性: :自右向左自右向左含义含义: : 取指针所指向变量的内容取指针所指向变量的内容单目运算符单目运算符优先级优先级: 2: 2结合性结合性: :自右向左自右向左 两者关系:互为逆运算 理解.20002000200420042006200620052005整型变量整型变量i10变量变量i_pointer2001200120022002200320032000指针变量指针变量i_pointer-指针变量,它的内容是地址量指针变量,它的内容是地址量*i_pointer-指针的指针的目标变量目标变量,它的内容是数据,它的内容是数据&i_p

    5、ointer-指针变量占用内存的地址指针变量占用内存的地址2000200010i_pointer*i_pointer&i_pointeriProgramming In Cn 直接访问与间接访问直接访问与间接访问 直接访问:按变量地址存取变量值直接访问:按变量地址存取变量值 间接访问:通过存放变量地址的变量去访问变量间接访问:通过存放变量地址的变量去访问变量例例 i=3; -直接访问直接访问指针变量指针变量.2000200420062005整型变量整型变量i10变量变量i_pointer20012002200320003例例 *i_pointer=20; -间接访问间接访问20Programmi

    6、ng In C指针变量指针变量.20002000200420042006200620052005整型变量整型变量i1010变量变量i_pointer20012001200220022003200320002000整型变量整型变量k例 k=i; -直接访问直接访问 k=*i_pointer; -间接访问间接访问1010例例 k=i; k=*i_pointer; Programming In C指针变量指针变量与其所指向的变量之间的关系n指针变量的定义指针变量的定义 一般形式: 数据类型 *指针名;3变量i2000i_pointer*i_pointeri*i_pointer&ii_pointeri

    7、=3;*i_pointer=33变量变量i2000i_pointer*i_pointeri*i_pointer&ii_pointeri=3;*i_pointer=3合法标识符合法标识符指针的目标变量的数据类型指针的目标变量的数据类型表示定义指针变量表示定义指针变量不是不是* *运算符运算符例 int *p1,*p2; float *q ; 注意:注意:1 1、intint * *p1, p1, * *p2;p2; 与与 intint * *p1, p2p1, p2; ;2 2、指针变量名是、指针变量名是p1,p2 ,p1,p2 ,不是不是* *p1,p1,* *p2p23 3、指针变量只能指向

    8、定义时所规定类型的变量指针变量只能指向定义时所规定类型的变量4 4、指针变量定义后,、指针变量定义后,变量值不确定变量值不确定,应用前必须先赋值,应用前必须先赋值Programming In Cn指针变量的初始化指针变量的初始化一般形式:一般形式: 数据类型数据类型 * *指针名指针名= =初始地址值初始地址值;赋给指针变量,不是赋给目标变量例 int i; int *p=&i;变量必须已说明过类型应一致例 int *p=&i; int i;例 int i; int *p=&i; int *q=p;用已初始化指针变量作初值Programming In C例 main( ) int i=10;

    9、int *p; *p=i; printf(“%d”,*p); 危险!危险!例 main( ) int i=10,k; int *p; p=&k; *p=i; printf(“%d”,*p); 指针变量必须指针变量必须先赋值先赋值, ,再使用再使用.2000200420062005整型变量i10指针变量p200120022003随机随机Programming In Cn零指针与空类型指针零指针与空类型指针 零指针:零指针:( (空指针空指针) )定义定义: :指针变量值为零指针变量值为零表示:表示: int * p=0; p指向地址为0的单元,系统保证该单元不作它用表示指针变量值没有意义#def

    10、ine NULL 0int *p=NULL:p=NULLp=NULL与未对与未对p p赋值不同赋值不同用途用途: : 避免指针变量的非法引用避免指针变量的非法引用 在程序中常作为在程序中常作为状态状态比较比较 例 int *p; . while(p!=NULL) . void void * *类型指针类型指针表示表示: void : void * *p; p; 使用时要进行使用时要进行强制类型转换强制类型转换例 char *p1; void *p2; p1=(char *)p2; p2=(void *)p1;表示不指定p是指向哪一种类型数据的指针变量Programming In C例例 指针的

    11、概念指针的概念main() int a; int *pa=&a; a=10; printf(a:%dn,a); printf(*pa:%dn,*pa); printf(&a:%x(hex)n,&a); printf(pa:%x(hex)n,pa); printf(&pa:%x(hex)n,&pa);运行结果:a:10*pa:10&a:f86(hex)pa:f86(hex)&pa:f88(hex).f86f8af8cf8b整型变量a10指针变量paf87f88f89f86Programming In C例 输入两个数,并使其从大到小输出/*1-0*/main() int *p1,*p2,*p,a

    12、,b; scanf(%d,%d,&a,&b); p1=&a; p2=&b; if(ab) p=p1; p1=p2; p2=p; printf(a=%d,b=%dn,a,b); printf(max=%d,min=%dn,*p1,*p2);运行结果:a=5,b=9 max=9,min=5.指针变量p1 指针变量p20002008200220042006 指针变量p2 整型变量b 整型变量a5200692008200620082006Programming In C 二、指针与数组n指向数组元素的指针变量例 int array10; int *p; p=&array0; / p=array;或 i

    13、nt *p=&array0;或 int *p=array;array0array1array2array3array9.整型指针p&array0p数组名是表示数组首地址的地址常量Programming In Cn指针的运算 指针变量的赋值运算 p=&a; (将变量a地址p) p=array; (将数组array首地址p) p=&arrayi; (将数组元素地址p) p1=p2; (指针变量p2值p1) 不能把一个整数p,也不能把p的值整型变量如 int i, *p; p=1000; () i=p; ()指针变量与其指向的变量具有相同数据类型Programming In C 指针的算术运算: p

    14、i p id (i为整型数,d为p指向的变量所占字节数) p+, p-, p+i, p-i, p+=i, p-=i等若p1与p2指向同一数组,p1-p2=两指针间元素个数(p1-p2)/d p1+p2 无意义例 p指向float数,则 p+1 p+1 4例 p指向int型数组,且p=&a0; 则p+1 指向a1例 int a10; int *p=&a2; p+; *p=1;例 int a10; int *p1=&a2; int *p2=&a5; 则:p2-p1=3;a0a1a2a3a4a5a6a7a8a9a数组pp+1,a+1p+i,a+ip+9,a+91Programming In C 指针

    15、变量的关系运算若p1和p2指向同一数组,则 p1p2 表示p1指的元素在后 p1=p2 表示p1与p2指向同一元素若p1与p2不指向同一数组,比较无意义 p=NULL或p!=NULLProgramming In Cn 数组元素表示方法数组元素表示方法 int a10,*p=a;a0a1a2a3a9.aa+9a+1a+2地址元素下标法a0a1a2a9a0a1a2a3a9.pp+9p+1p+2地址元素指针法*p*(p+1)*(p+2)*(p+9) 变址运算符ai *(a+i)ai pi *(p+i) *(a+i)*a*(a+1)*(a+2)*(a+9)p0p1p2p9Programming In

    16、Ca0a1a2a3a4例 数组元素的引用方法main() int a5,*pa,i; for(i=0;i5;i+) ai=i+1; pa=a; for(i=0;i5;i+) printf(*(pa+%d):%dn,i,*(pa+i); for(i=0;i5;i+) printf(*(a+%d):%dn,i,*(a+i); for(i=0;i5;i+) printf(pa%d:%dn,i,pai); for(i=0;i5;i+) printf(a%d:%dn,i,ai);12345paProgramming In Cmain() int i,*p,a7; p=a; for(i=0;i7;i+)

    17、scanf(%d,p+); printf(n); for(i=0;i7;i+,p+) printf(%d,*p);例 注意指针的当前值p=a;pp58762730123456apppppp指针变量可以指到数组后的内存单元Programming In C 一级指针变量与一维数组的关系int *p 与 int q10 数组名是指针(地址)常量 p=q; p+i 是qi的地址 数组元素的表示方法:下标法和指针法, 即若p=q, 则 pi qi *(p+i) *(q+i) 形参数组实质上是指针变量,即int q int *q 在定义指针变量(不是形参)时,不能把int *p 写成int p; 系统只给

    18、p分配能保存一个指针值的内存区(一般2字节);而给q分配2*10字节的内存区Programming In C 三、指针与二维数组三、指针与二维数组 二维数组的地址对于一维数组:(1)数组名array表示数组的首地址,即array0的地址;(2)数组名array是地址常量(3)array+i是元素arrayi的地址(4)arrayi *(array+i)arrayint array10;Programming In C对于二维数组:(1)a是数组名, 包含三个元素 a0,a1,a2(2)每个元素ai 又是一个一维 数组,包含4个 元素aa+1a+2*(*(a+0)+1)*(a0+1)int a3

    19、4;a0a1a2200020082016200020022008201020162018a00a01a10a11a20a21a02a03a12a13a22a23基类型行指针与列指针a0+1a1+1a2+1*(a+0)+1*(a+1)+1*(a+2)+1Programming In C 对二维数组 int a34,有 a-二维数组的首地址,即第0行的首地址 a+i-第i行的首地址 ai *(a+i)-第i行第0列的元素地址 ai+j *(a+i)+j -第i行第j列的元素地址 *(ai+j) *(*(a+i)+j) aij a+i=&ai=ai=*(a+i) =&ai0, 值相等,含义不同 a+

    20、i &ai,表示第i行首地址,指向行 ai *(a+i) &ai0,表示第i行第0列元素地址,指向列int a34;a0a1a2200020082016200020022008201020162018a00a01a10a11a20a21a02a03a12a13a22a23aa+1a+2Programming In Cint a34;a00a01a10a11a20a21a02a03a12a13a22a23二维数组元素表示形式:(1)a12(2)*(a1+2)(3)*(*(a+1)+2)(4)*(&a00+1*4+2)地址表示:(1) a+1 (2) &a10(3) a1(4) *(a+1)(5)

    21、(int *) (a+1)行指针列指针地址表示:(1) &a12(2) a1+2(3) *(a+1)+2(4)&a00+1*4+2Programming In C表示形式含义地址a二维数组名,数组首地址二维数组名,数组首地址a0,*(a+0),*a第第0 0行第行第0 0列元素地址列元素地址a+1第第1 1行首地址行首地址a1,*(a+1)第第1 1行第行第0 0列元素地址列元素地址a1+2,*(a+1)+2,&a12第第1 1行第行第2 2列元素地址列元素地址*(a1+2),*(*(a+1)+2),a12第第1 1行第行第2 2列元素值列元素值2000200020082008201213Pr

    22、ogramming In C 四、四、 指针与字符串指针与字符串n 字符串表示形式 用字符数组实现例 main( ) char string=“I love China!”; printf(“%sn”,string); printf(“%sn”,string+7); IloveChistring0string1string2string3string4string5string6string7string8string9stringstring10string11string12string13n!a0Programming In C 用字符指针实现例 #include main( ) cha

    23、r *string=I love China!;printf(%sn,string);string+=7;while(*string)putchar(string0); string+; IloveChistringn!a0字符指针初始化:把字符串首地址赋给string char *string; string=I love China! ;string*string!=0Programming In Cn字符指针变量与字符数组字符指针变量与字符数组char *cp; 与 char str20; str由若干元素组成,每个元素放一个字符;而cp中存放字符串首地址 char str20; str

    24、=“I love China!”; () char *cp; cp=“I love China!”; () str是地址常量;cp是地址变量 cp接受键入字符串时,必须先开辟存储空间例 char str10; scanf(“%s”,str); ()而 char *cp; scanf(“%s”, cp); ()改为: char *cp,str10; cp=str; scanf(“%s”,cp); ()Programming In C字符串与数组关系字符串与数组关系 字符串用一维字符数组存放 字符数组具有一维数组的所有特点 数组名是指向数组首地址的地址常量 数组元素的引用方法可用指针法和下标法 数

    25、组名作函数参数是地址传递等 区别 存储格式:字符串结束标志 赋值方式与初始化 输入输出方式:%s %cchar str=“Hello!”; ()char str=“Hello!”; ()char str=H,e,l,l,o,!; ()char *cp=“Hello”; ()int a=1,2,3,4,5; ()int *p=1,2,3,4,5; ()char str10,*cp;int a10,*p;str=“Hello”; ()cp=“Hello!”; ()a=1,2,3,4,5; ()p=1,2,3,4,5; ()scanf(“%s”,str);printf(“%s”,str);gets(

    26、str);puts(str);Programming In C五、二维数组的指针变量 指向二维数组元素的指针变量指向二维数组元素的指针变量例 指向二维数组元素的指针变量-main() static int a34=1,3,5,7,9,11,13,15,17,19,21,23; int *p; for(p=a0;pa0+12;p+) if(p-a0)%4=0) printf(n);printf(%4d ,*p); p=*a; p=&a00; p=*(a+0); p=a; p=*a; p=&a00; p=(int *)a; p=a; int a34;a00a01a10a11a20a21a02a03

    27、a12a13a22a23pProgramming In C指向一维数组的指针变量- 定义形式: 数据类型 (*指针名)一维数组维数; 例 int (*p)4;( )不能少int (*p)4与int *p4不同p的值是一维数组的首地址,p是行指针 可让p指向二维数组某一行 如 int a34, (*p)4=a;int a34;a00a01a10a11a20a21a02a03a12a13a22a23aa+1a+2pp+1p+2p0+1或 *p+1p1+2或 *(p+1)+2*(*p+1) *(*(p+1)+2)一维数组指针变量维数和二维数组列数必须相同Programming In C例例 一维数组

    28、指针变量举例一维数组指针变量举例main() static int a34=1,3,5,7,9,11,13,15,17,19,21,23; int i,j,(*p)4; for(p=a,i=0;i3;i+,p+) for(j=0;j4;j+) printf(%d ,*(*p+j); printf(n);p=a0; p=*a; p=&a00; p=&a0; p=a0; p=*a; p=&a00; p=&a0; int a34;a00a01a10a11a20a21a02a03a12a13a22a23ppp p0jProgramming In C 六、指针数组和多级指针六、指针数组和多级指针用于处理

    29、二维数组或多个字符串n 指针数组 定义:数组中的元素为指针变量 定义形式: 数据类型 *数组名数组长度说明;例 int *p4;指针所指向变量的数据类型区分int *p4与int (*p)4 指针数组赋值与初始化赋值:main() int b23,*pb2; pb0=b0; pb1=b1; .int *pb2pb0pb1int b23123246初始化:main() int b23,*pb =b0,b1; .int *pb2pb0pb1int b23123246Programming In C 指针数组赋值与初始化L i s p 0F o r t r a n 0B a s i c 0p0p1p

    30、2p30赋值:main() char a=Fortran; char b=Lisp; char c=Basic; char *p4; p0=a; p1=b; p2=c; p3=NULL; .或:main() char *p4; p0= Fortran; p1= Lisp; p2= Basic; p3=NULL; .初始化:main() char *p=Fortran, Lisp, Basic,NULL; .L i s p 0F o r t r a n 0B a s i c 0p0p1p2p30Programming In C char name59=“gain”,“much”,“stronge

    31、r”, “point”,“bye”; char *name5=“gain”,“much”,“stronger”, “point”,“bye”;g a i n 0s t r o n g e r 0p o i n t 0m u c h 0name0name1name2name3name4b y e 0g a i n 0s t r o n g e r 0p o i n t 0m u c h 0b y e 0 二维数组与指针数组区别:二维数组与指针数组区别:二维数组存储空间固定字符指针数组相当于可变列长的二维数组分配内存单元=数组维数*2+各字符串长度指针数组元素的作用相当于二维数组的行名但指针数组中

    32、元素是指针变量二维数组的行名是地址常量Programming In Cn多级指针多级指针 定义: 指向指针的指针 一级指针:指针变量中存放目标变量的地址p1&p2&i3P2(指针变量)i(整型变量)例 int *p1; int *p2; int i=3; p2=&i; p1=&p2; *p1=5; 二级指针:指针变量中存放一级指针变量的地址例 int *p; int i=3; p=&i; *p=5;&i3P(指针变量)i(整型变量)一级指针单级间接寻址二级指针一级指针目标变量二级间接寻址Programming In C定义形式: 数据类型 *指针名;如 char *p;例 int i, *p;

    33、 p=&i; ()/p是二级指针,不能用变量地址为其赋值最终目标变量的数据类型*p是p间接指向对象的地址*p是p间接指向对象的值例 int i=3; int *p1; int *p2; p1=&i; p2=&p1; *p=5;ip1p23&i&p1*p2, *p1*p2 多级指针例 三级指针 int *p; 四级指针 char *p;Programming In C定义含义int i;int *p;int an;int *pn;int (*p)n;int f();int *p();int (*p)();int *p;定义整型变量ip为指向整型数据的指针变量定义含n个元素的整型数组an个指向整型

    34、数据的指针变量组成的指针数组pp为指向含n个元素的一维整型数组的指针变量f为返回整型数的函数p为返回指针的函数,该指针指向一个整型数据p为指向函数的指针变量,该函数返回整型数p为指针变量,它指向一个指向整型数据的指针变量指针的数据类型指针的数据类型Programming In C例 下列定义的含义(1)int *p3;(2)int (*p)3;(3)int *p(int);(4)int (*p)(int);指针数组指向一维数组的指针返回指针的函数指向函数的指针,函数返回int型变量Programming In C顺序查找。从数组中查找指定的数据顺序查找。从数组中查找指定的数据,并输出其序号并输

    35、出其序号.#includemain() int i, n, a10= 4,6,2,9,7,3,0,5,1,8 ; printf(array are: ); for(i=0;i10;i+) printf(%3d,ai); printf(nInput a number to find: ); scanf( %d, &n ); for(i=0;i10;i+) if( ai=n ) break; if( i10 ) printf(pos = %dn, i); else printf(pos = -1n) ;思考:统计数组中某个元素出现的个数,应如何设计?思考:统计数组中某个元素出现的个数,应如何设计?

    36、Programming In Clowhighmid例 1 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92找211 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92lowhighmid1 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92lowhighmid折半查找。从有序数组中查找指定的数据折半查找。从有序数组中查找指定的数据算法描述:Programming In C例 1 2 3 4 5 6 7 8 9 10 115 13

    37、19 21 37 56 64 75 80 88 92lowhighmid找701 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92lowhighmid1 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92low highmid1 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92lowhighmidProgramming In C折半查找。从有序数组中查找指定的数据折半查找。从有序数组中查找指定的数据n算法实现 设数组长为n,low

    38、、high和mid分别指向待查元素所在区间的上界、下界和中点,k为给定值 初始时,令low=0,high=n-1,mid=(low+high)/2 让k与mid指向的记录比较 若k=amid ,查找成功 若kamid,则low=mid+1 重复上述操作,直至lowhigh时,查找失败Programming In C#includemain() int i,n,s10= 2,5,7,8,12,16,24,32,36,40 ; int low, high, mid ;printf(array are: ); for(i=0;i10;i+) printf(%3d,si); printf(nInput a number to find: ); scanf( %d, &n ); low = 0; high = 9; while( lown) high = mid-1; else if(smidhigh ) printf(pos = -1n) ; else printf(pos = %dn, mid );

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:c语言组织数据2-课件.ppt
    链接地址:https://www.163wenku.com/p-2774549.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库