收藏 分销(赏)

c语言复习市公开课一等奖百校联赛获奖课件.pptx

上传人:a199****6536 文档编号:4155081 上传时间:2024-08-05 格式:PPTX 页数:104 大小:489.59KB
下载 相关 举报
c语言复习市公开课一等奖百校联赛获奖课件.pptx_第1页
第1页 / 共104页
c语言复习市公开课一等奖百校联赛获奖课件.pptx_第2页
第2页 / 共104页
c语言复习市公开课一等奖百校联赛获奖课件.pptx_第3页
第3页 / 共104页
c语言复习市公开课一等奖百校联赛获奖课件.pptx_第4页
第4页 / 共104页
c语言复习市公开课一等奖百校联赛获奖课件.pptx_第5页
第5页 / 共104页
点击查看更多>>
资源描述

1、c语言复习第1页标识符注意事项标识符注意事项标识符用来命名变量、函数或类型;由英文字母、数字和下划线组成组成,大小写敏感;大小写敏感;不能够不能够是数字开头;命名标准命名标准1 1直观,见名知意,便于记忆和阅读最好使用英文单词或其组合切忌使用汉语拼音命名标准命名标准2 2可用下划线或大小写来增强可读性variablenamevariable_nameVariableName,variableName不允许使用关键字关键字作为标识符名字int,float,for,while,if等一些功效变量采取习惯命名如:for语句所采取循环变量习惯用i,j,k第2页变量类型转换自动转换发生在不一样数据类型变

2、量混合运算时,由编译系统自动完成强制转换经过类型转换运算来实现(类型说明符)(表示式)(int)(a+b)第3页结合性在表示式中,在表示式中,各运算量参加运算先后次序各运算量参加运算先后次序不但要恪守运算符优先级别要求,还要受不但要恪守运算符优先级别要求,还要受运算符结合性制约,运算符结合性制约,方便确定是自左向右方便确定是自左向右进行运算还是自右向左进行运算进行运算还是自右向左进行运算算术运算符结合性是算术运算符结合性是自左至右自左至右,即先左后,即先左后右右:x-y+z赋值运算符是赋值运算符是右结合性右结合性运算符:运算符:x=y=z;第4页一、算术运算符基本算术运算符:+-*/%说明:(

3、1)在“”运算中,若操作数均为整数,则执行整除运算,舍去小数部分。比如:5/3=1(2)“”要求两侧均为整数,“”运算不能用于float和double型数据比如:2(3)优先级高于第5页二、自增、自减运算符(、-)+i,-i(先加/减1,然后取i值)i+,i-(先取i值,然后加/减1)b=2 ,a=2b=2 ,a=3作用:使变量值增或减,如:比如:inta=1,b;b=+a;b=a+;先使用i值,再执行i=i+1先执行i=i+1,再使用i值+ii+第6页说明:1.+、只能用于变量,不能用于常量或表示式。比如:10,(x+y)+,+a,b+中正当为:2.自增、自减运算符为右结合性。比如:a+b+

4、(a+)3.惯用于循环变量自动加 1 第7页4.表示式中运算符组合,尽可能左结合 如:I+J(I+)+J5.表示式中使用自加或自减运算时,需注意 如:I=3K=(I+)+(I+)+(I+)结果:k=9,I=6如:I=3I=(I+)+(+I)+(I+)结果:I=14第8页若a=2,b=3,x=3.5,y=2.5,则表示式(float)(ab)/2(int)x%(int)y值是3.5表示式1/4+2.75值是2.75第9页三、赋值运算符和赋值表示式 1.赋值运算符为“=”形式:变量名=常量或表示式作用:将一个数据赋给一个变量右结合性比如:a=3;b=c+d;C要求:任何表示式在末尾加上分号就组成语

5、句。如:A=B+C表示式A=B+C;语句第10页“=”号两端数据类型不一样时进行转换转换是系统自动进行,右边转换为左边类型。规则以下:(1)整型=实型舍去小数部分(2)实型=整型值不变,以浮点形式存放(3)整型=字符型值放入低8位,高8位为0(4)字符型=整型仅将整型低8位存入第11页 六、关系运算符和关系表示式语言中关系运算符有种。(左结合性)、!2.算术运算符(高)关系运算符赋值运算符(低)优先次序:1.前种同级,高于后种(后种同级)比如:x!=y、s-db+c、a=bc第12页关系运算符运算出结果为0或10,表示假,即该关系不成立1,表示真,即该关系成立在全部包括到真假判断地方,0表示假

6、,非0表示真第13页优先级:!高于&高于|混合运算中:!高算术运算关系运算&、|低赋值运算注:怎样判断一个逻辑表示式为“真、假”?用“非”代表“真”,用“”代表“假”。如:b&0值为:“0”第14页逻辑表示式:1.运算结果为逻辑值2.编译系统以非0、0判定逻辑值真、假3.逻辑表示式中作为参加逻辑运算运算对象能够是0或非0数值。但要区分运算对象。例:53&2|8b?a:b将条件表示式值赋给变量max说明:例:设a,b,c,d值为1、2、3、4求下述表示式值max=ab?a:cd?c:d等价于max=ab?a:(cd?c:d)结果为:4第19页优先级:!高于&高于|混合运算中:!高算术运算关系运算

7、&、|低赋值运算第20页表示式:2-2值是 1设x、y和z是int类型变量,且x=3;y=4;z=5;则下面表示式中值为0是 。Ax&y Bx=y Cx|y+z&y-z D!(x=A&x=a&x=z第32页whilewhile(表示式)语句块1;语句块2;只要表示式值为非0,就重复执行语句块1,直到表示式值为0时止,开始执行语句块2表示式表示式表示式表示式!=0?!=0?Y YN N语句块语句块语句块语句块1 1语句块语句块语句块语句块2 2第33页forfor(表示式1;表示式2;表示式3)语句块;首先执行表示式1。假如表示式2值为非0,就重复执行语句块和表示式3,直到表示式2值为0时止相当

8、于:表示式1;while(表示式2)语句块;表示式3;for全部表示式均可省略表示式表示式表示式表示式2!=0?2!=0?Y YN N语句块语句块语句块语句块表示式表示式表示式表示式3 3表示式表示式表示式表示式1 1第34页注意在for和while语句之后普通没有分号有分号表示循环体就是分号之前内容,即循环体不存在while(i 100);i+;for(i=0;i 100;i+);printf(%d,i);for通常有一个循环变量控制循环次数,不要在循环体内改变这个变量第35页循环do-whiledo语句块1;while(表示式);语句块2;首先执行语句,然后判断表示式值。假如表示式为0,继

9、续向下执行,不然,再次执行语句,再次判断表示式值语句块1会被执行最少一次表示式表示式表示式表示式!=0?!=0?Y YN N语句块语句块语句块语句块1 1语句块语句块语句块语句块2 2第36页break和continue对for、while、do-while循环进行内部手术break,退出循环退出循环continue,中止此次循环执行,开始下一次中止此次循环执行,开始下一次break和continue少用为妙它们增加了循环执行分支,break更增加了循环出口它们能够用来处理程序异常,而尽可能不要用来处理正常流程第37页若intx=4,y=6,z=0;有循环while(x=y)z+;y-;则循环

10、语句执行完后,z值为。6判断题:1.标准C中,并不区分英文字符大小写。2.表示式“ELSE”是正当C语言标识符。错对第38页若一自然数全部正整数因子(该因子不包含其本身)之和仍为该自然数,则该自然数称为完全数。如:6=1+2+3,则6是完全数。求2,1000以内全部完全数。main()intx,n,m;for(n=2;n=1000;n+);for(m=1;my?x:y);函数可依据需要出现个return语句第45页(1)假如函数值类型与return语句表示式值类型不一致,以函数类型为准(数值型会自动进行类型转换)(2)申明为void型函数中不能包含带值return语句;主函数体内不能出现ret

11、urn语句。注意注意:第46页注意注意:(3)当函数没有return语句时,以结束函数大括号作为返回点。但这时并不表明函数没有返回值,这时返回值是系统给不确定值。(4)除了空值函数以外全部函数都返回一个值,那么我们是不是非得去使用这个返回值呢?答案是否定。假如没有用它赋值,那它就被丢弃了。(5)在同一函数内,可用依据需要在多处出现return语句,但函数第一次碰到return时就马上停顿执行,并返回到主调函数第47页函数调用形式参数:在定义定义函数时函数名后面括弧中变量名,简称形参实际参数:在调用函数时函数名后面括弧中表示式,简称实参调用格式:函数名函数名(实参实参表列表列)第48页说明:实参

12、必须有确定值形参必须指定类型形参加实参类型一致,个数相同若形参加实参类型不一致,自动按形参类型转换函数调用转换形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释放函数参数及其传递方式第49页值传递方式方式:函数调用时,为形参分配单元,并将实参值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值,形参作域只限函数内特点:形参加实参占用不一样内存单元单向传递参数传递方式第50页方式:函数调用时,将数据存放地址作为参数传递给形参特点:形参加实参占用一样存放单元“双向”传递实参和形参必须是地址常量或变量函数地址传递第51页递归调用函数在它函数体内调用自己,以实现层次数

13、据结构查询和访问使用递归条件:1一个问题能够逐步处理,而且每一步处理方法一样,只是问题参数有规律改变2有一个明确结束递归条件优点:优点:递归使用能够使代码更简练清楚,可读性更加好缺点:缺点:因为递归需要系统堆栈,所以空间消耗要比非递归代码要大很多,而且,假如递归深度太大,可能系统资源会不够用方便了程序员难为了机器全部递归函数都能够转换为迭代函数全部递归函数都能够转换为迭代函数,反之亦然,反之亦然第52页概述变量是对程序中数据存放空间抽象内存.main()inta;a=10;printf(“%dn”,a);printf(“%dn”,&a)编译或函数调用时为其分配内存单元10程序中使用变量名对内存

14、操作6.6变量存放属性第53页6.6.1变量作用域与生存期变量作用域与生存期C语言中变量必须先定义后使用,变量数据类型决定了计算机为变量预留多少存放空间以及该变量上应含有一组运算。C语言中,除了对变量进行数据类型说明,还能够说明变量存放类型。不一样存放类型能够确定一个变量作用域和生存期。变量存放类型变量存放类型第54页1.1.变量作用域变量作用域 变量作用域是指变量作用范围,在C语言中分为在全局有效、局部有效和复合语句内有效三种。语言中全部变量都有自己作用域。变量说明位置不一样,其作用域也不一样,据此可将语言中变量分为局部变量(内部变量)和全局变量(外部变量)。2.生存期生存期变量生存期是指变

15、量作用时间长短,在C语言中分为程序期、函数期和复合期三种。第55页变量属性数据类型:变量所持有数据性质(操作属性)存放属性存放器类型:存放器、静态存放区、动态存放区生存期:变量在某一时刻存在-静态变量与动态变量作用域:变量在某区域内有效-局部变量与全局变量变量存放类型auto-自动型register-存放器型static-静态型extern-外部型变量定义格式:存放类型数据类型变量表;数据类型存放类型变量表;staticintx,y;第56页局部变量定义:在函数内定义,只在本函数内有效说明:main中定义变量只在main中有效不一样函数中同名变量,占不一样内存单元形参属于局部变量可定义在复合语

16、句中有效变量局部变量可用存放类型:autoregisterstatic(默认为auto)#includemain()intTest_Var=1;intTest_Var=2;intTest_Var=3;printf(“%dn”,Test_Var);/*?*printf(“%dn”,Test_Var);/*?*printf(“%dn”,Test_Var);/*1*第57页1.自动变量在函数内部或复合语句内部定义变量,假如没有写明存放类,或使用了auto说明符,系统就认为所定义变量含有自动变量类别,有时也称(动态)局部变量。形参属于被调用函数局部变量。注意:形参缺省关键字是auto,但不能将auto

17、直接加在形参之前。自动变量初始化是:每一次调用,形参都以实参为初值,非形参自动变量在函数体内部或复合语句内部都重新赋初值。所以,未赋初值自动变量,“无定义”,其值不定。第58页3.静态局部变量静态局部变量在函数体(或复合语句)内部,用以下定义格式定义变量称为静态局部变量:static数据类型变量表;比如:staticinta=8;静态局部变量初始化只在编译时进行一次,每次调用它们所在函数时,不再重新赋初值,只是保留上次调用结束时值。若定义但不初始化,则自动赋以(数值型)或0(字符型)。第59页例例6.18求以下程序输出结果#includemain()intf(void);/*函数申明*/int

18、j;for(j=0;j3;j+)printf(%dn,f();intf(void)/*无参函数*/staticintx=1;x+;returnx;程序运行结果:程序运行结果:234第60页例例:分析执行结果f(inta)intb=0;staticintc=3;b+;c+;printf(“%5d%5d%5d”,a,b,c);return(a+b+c);main()inta=2,k;for(k=0;k3;k+)printf(“%5dn”,f(a);静态变量只初始化一次结果:214(a,b,c)7(f(a)21582169第61页2.静态全局变量静态全局变量当用static说明符说明全局变量时,此变

19、量就称为静态全局变量或静态外部变量。此时static作用不是把全局变量改为静态存放,因为它本身就是静态存放类,而是限制了它作用域只能在本文件内,不能用extern说明符使其作用域扩展到程序其它文件中。静态外部变量允许程序一部分对其它部分充分隐蔽,这有利于管理大型复杂程序,程序员无须担心因全局变量重名而引发混乱。第62页静态动态存放方式程序整个运行期间函数调用开始至结束生存期编译时赋初值,只赋一次每次函数调用时赋初值自动赋初值0或空字符不确定未赋初值静态存放区动态区存放区存放器局部变量外部变量作用域定义变量函数或复合语句内本文件其它文件u局部变量默认为auto型uregister型变量个数受限,

20、且不能为long,double,float型u局部static变量含有全局寿命和局部可见性u局部static变量含有可继承性uextern不是变量定义,可扩展外部变量作用域register局部staticauto外部static外部存放类别变量存放类型第63页找出2个错误用递归语句编函数计算10!longf(intm)longa;if(m0)printf(“dataerror!”);elsea=f(m1)*m;main()intn;n=10;printf(“%d!=%ld”,n,f(n);if(m=0)a=1;return(a);第64页用递归语句编函数计算6!longf(intm)longa

21、;if(m0)printf(“dataerror!”);elsea=f(m-1)*m;main()intn=6;printf(“%d!=%ld”,n,f(n);if(m=0)a=1;return(a);第65页#includeinti=0;main()intk=1;i+;k+;printf(“goodi=%d,k=%dn”,i,k);sub();sub();staticinty=0;sub()intk=0;staticintx=1;y+;k+;x+;printf(“badi=%d,k=%d,x=%d,y=%dn”,i,k,x,y);goodi=1,k=2badi=1,k=1,x=2,y=1ba

22、di=1,k=1,x=3,y=2第66页一维数组定义v定义方式:数据类型 数组名常量表示式;正当标识符表示元素个数下标从0开始:数组运算符单目运算符优先级(1)左结合不能用()例 inta6;a00145a1a2a3a4a523a编译时分配连续内存内存字节数=数组维数*sizeof(元素数据类型)数组名表示内存首地址,是地址常量 一维数组一维数组第67页 .4高位字节4低位字节2高位字节2低位字节a0a1a2a3a4数组在内存数组在内存中首地址中首地址即即a=int a5=2,4,23,6,78;第68页二维数组定义v定义方式:数据类型数组名常量表示式常量表示式;v数组元素存放次序l原因:内存

23、是一维l二维数组:按行序优先l多维数组:最右下标改变最快例inta34;floatb25;intc234;inta3,4;()行数列数元素个数=行数*列数inta32a01a10a11a20a21014523a00a00a01a10a11a20a21intc23401234567.20212223c000c001c002c003c010c011c012c013c020c021c022c023c100c101c102c103c110c111c112c113c120c121c122c123二维数组及多维数组二维数组及多维数组第69页v引用例aij(i:0N-1,j:0M-1)v初始化例 inta2

24、3=1,2,3,4,5,6;a00 a01 a02 a10 a11 a12123456分行全部赋初值例 inta23=1,2,3,4,5,6;a00 a01 a02 a10 a11 a12123456全部元素赋初值例inta3=1,2,3,4,5;a00 a01 a02 a10 a11 a12123450全部元素赋初值第一维可省例inta23=1,2,4;a00 a01 a02 a10 a11 a12124000部分元素赋初值例 inta3=1,4,5;a00a01a02a10a11a12100450赋初值时指定维数第一维能够省略例 inta23=1,2,4;a00 a01 a02 a10 a

25、11 a12120400分行部分赋值第70页字符数组v 定义:v初始化l逐一字符赋给数组中元素;l利用字符串常量.例charc10,ch34;例 charch6=Hello;charch6=Hello;charch=Hello;字符串常量初始化ch0Helloch1ch2ch3ch40ch5例例charch5=Boy;ch0Boy00字符串常量初始化ch1ch2ch3ch4 例例charch5=B,o,y;ch0Boy00逐一字符初始化ch1ch2ch3ch4 例例charch5=H,e,l,l,o;ch0Hello逐一字符初始化ch1ch2ch3ch4第71页例例chardiamond5=.

26、,.,*,.,*,.,*,*,.,.,.,*,.,*,.,*,.,.,*;二维数组初始化.*00.*.*0*.*.*.*0.*00diamond0diamond1diamond2diamond3diamond4例例charfruit7=Apple,Orange,Grape,Pear,Peach;二维数组初始化fruit0fruit1fruit2fruit3fruit4Apple00Orange0Grape00Pear000Peach00第72页v 字符串:l没有字符串变量,字符串用字符数组来处理;l一个字符串用0作结束标志。(或空字符)例“hello”有5个字符,存放在6个字符字符数组中。ch

27、ara=“hello”h e l l o 0第73页l输入输出字符串字符输入/输出:%c字符串输入/输出:%s例使用%cmain()charstr5;inti;for(i=0;i5;i+)scanf(“%c”,&stri);for(i=0;i5;i+)printf(“%c”,stri);例使用%smain()charstr5;scanf(“%s”,str);printf(“%s”,str);使用数组名,不需使用地址运算符&输入字符串长度 数组长度用空格或换行结束输入自动添加结束符0使用数组名用0标志字符串结束第74页v字符串处理函数uputs(字符数组名)stdio.hputs 输出字符串,能

28、够包含转义字符;字符数组必须含有字符串结束标识0ugets(字符数组名)stdio.hgets 输入一个字符串到字符数组,换行表示输入字符串结束;自动在输入字符串后加入结束标志0;字符串长=数组长度函数返回值是数组首地址,普通不关心。只输入一个字符串。例#includemain()charstring80;printf(Inputastring:);gets(string);puts(string);input:Howareyou?output:Howareyou?第75页ustrcat(字符数组名1,字符数组名2)string.h将字符数组2连接到字符数组1后面,连接时自动取消字符数组1后面

29、结束标志;结果存放到字符数组1中,函数返回值是字符数组1首地址;字符数组1要有足够空间存放结果;ustrcpy(字符数组1,字符串2)string.h将字符串2复制到字符数组1,包含0;字符数组1必须有足够空间存放结果;字符串2能够是数组名。能够将字符串2前面若干个字符赋值到字符数组1中去。不能用赋值语句将一个字符串赋值给字符数组例charstr120,str220;str1=Hello!;()str2=str1;()第76页例:strcpy和strcat#include#includemain()chardestination25;charblank=,c=C+,turbo=Turbo;st

30、rcpy(destination,turbo);strcat(destination,blank);strcat(destination,c);printf(%sn,destination);TurboC+TrboC+0123456789u024.Trbo0123456789u024.Trbo00123456789u24.第77页ustrcmp(字符串1,字符串2)string.h用字符ASCII值逐一对应比较字符串1与字符串2字符大小(left-to-right);if字符串1字符串2,返回字符串2,返回0;不能用=去直接比较两个字符串大小.ustrlen(字符数组)string.h返回字符

31、串长度;函数值是字符串实际长度,不包含0.例strlen(s)结果:(1)chars10=A,0,B,C,0,D;结果:1第78页已知矩阵已知矩阵a=,求该矩阵对角线元素之和。,求该矩阵对角线元素之和。main()inti;inta33=1,2,3,4,5,6,7,8,9;for(i=1;i=3;i+)sum=sum+ii;printf(“sum=%d”,sum);intsum=0;for(i=0;i3;i+)第79页已知质数定义是:若某一正整数只有1和它本身两个因子,则这个正整数称为质数。比如13只有1和13两个因子,则13为质数。数学上要求1不是质数。若整数A是整数B因子,且整数A是质数,

32、则称A是B质因子。比如整数36质因子为2,3。编写程序求整数12903最大质因子。f(intx)inti;for(;ix;i+)if(x%i=0)k=2;break;return(k);main()intn=12903,b,a;for(a=2;an;a+)if(f(a)=1)&(n%a=0)printf(“theansweris%dn”,b);int k=1i=2b=a;第80页指针变量定义指针变量定义定义指针变量普通形式为基类型*指针变量名指针变量与普通变量类似,在程序中若要使用指针变量,必须先进行定义后使用。比如:int*p1,i;(定义p1为指向整型变量指针变量)char*p2,c;(定

33、义p2为指向字符型变量指针变量)float*p3,f;(定义p3为指向实型变量指针变量)int、char、float分别称为指针变量p1、p2、p3“基类型”,第81页.整型变量i10变量i_pointer指针与指针变量区分?v指针:一个变量地址v指针变量:专门存放变量地址变量叫指针指针变量变量内容变量地址指针变量变量变量地址(指针)变量值指向地址存入指针变量第82页&与*运算符含义含义:取变量地址单目运算符结合性:自右向左含义:取指针所指向变量内容单目运算符结合性:自右向左v二者关系:互为逆运算v了解.整型变量i10变量i_pointer指针变量i_pointer-指针变量,它内容是地址量*

34、i_pointer-指针目标变量,它内容是数据&i_pointer-指针变量占用内存地址10i_pointer*i_pointer&i_pointerii_pointer&i&(*i_pointer)i*i_pointer*(&i)i_pointer=&i=&(*i_pointer)i=*i_pointer=*(&i)第83页直接访问与间接访问直接访问:按变量地址存取变量值间接访问:经过存放变量地址变量去访问变量例i=3;-直接访问指针变量.整型变量i10变量i_pointer3例*i_pointer=20;-间接访问20第84页指针变量.整型变量i10变量i_pointer整型变量k例k=i

35、;-直接访问k=*i_pointer;-间接访问10例k=i;k=*i_pointer;第85页指针变量赋值(初始化)指针变量赋值(初始化)1经过取地址运算符(&)取得地址值以下定义和赋值:inta=5,*p,*q;p=&a;它建立了如图所表示逻辑关系pa&a5所以当有语句:p=&a;时,scanf(%d,&a);和scanf(%d,p)是等价第86页 2经过指针变量取得地址值经过指针变量取得地址值能够经过赋值运算,把一个指针变量中地址值赋给另一个指针变量,从而使这两个指针变量指向同一地址q=p;使指针变量q中也存放了变量a地址,也就是说指针变量p和q都指向了整型变量a赋值号两边指针变量基类型

36、必须相同paq&a5&a第87页 3给指针变量赋给指针变量赋“空空”值值p=NULL;p=0;NULL代码值为0,应该注意:1.指针变量只能存放地址,不能把一个整型量赋给指针变量p=5;应该经过取地址运算符“&”把一个地址赋给指针变量。2.应防止使用没有赋值指针变量,没有赋值指针变量虽不会造成编译犯错,但可能造成无法预料灾难性后果第88页注意:)指针变量数据类型必须与所赋值变量类型一致,比如以下语句是非法。floaty;int*p;p=&y;因为为整型指针变量,y为实型变量,类型不一致,故为p=&y;是非法语句。)不允许把一个数(常量)赋予指针变量,故下面赋值是错误。int*p;p=1000;

37、)被赋值指针变量前不能再加“*”说明符,如写为*p=&a也是错误。但对于在定义指针同时赋值是允许,如:int*p=&a;其实质可分解为两句,即:int*p;p=&a;)能够将指针变量初始化为空值NULL。如:p=NULL;第89页为深入明确运算符为深入明确运算符“&”和和“*”含义和作用,思索下面几个含义和作用,思索下面几个问题:问题:)假如已经执行了p=&a;语句,则&*p含义是什么?假设已经执行了假设已经执行了p=&a;语句,则语句,则(*p)+相当于相当于a+,即将指针变,即将指针变量量p所指示变量值加所指示变量值加1。而。而*p+等价于等价于*(p+),这时先将),这时先将p值值加加1

38、,p不再指向不再指向a了,而是指向了,而是指向a所占用存放区域后续位置,再所占用存放区域后续位置,再取其内存值。取其内存值。)如inti=5,*p;再执行*i运算可不能够?因为运算符因为运算符“”和和“*”优先级相同,按自右而左方向结合,优先级相同,按自右而左方向结合,因些进行因些进行*p运算,即得到变量运算,即得到变量a值,再执行运算。所以,值,再执行运算。所以,*p与与a、p是等价。即能够说是等价。即能够说“”与与“*”是互为反运算。是互为反运算。这是不允许,因为这是不允许,因为i只是一个整型变量,而不是指针变量,故依据只是一个整型变量,而不是指针变量,故依据自右而左运算自右而左运算*i是

39、错误,是错误,*运算符只能是对指针变量进行运算。运算符只能是对指针变量进行运算。3)(*p)+和*p+区分是什么?第90页数组元素表示方法a0a1a2a3a9.aa+9a+1a+2地址元素下标法a0a1a2a9a0a1a2a3a9.pp+9p+1p+2地址元素指针法*p*(p+1)*(p+2)*(p+9)变址运算符ai*(a+i)aipi*(p+i)*(a+i)*a*(a+1)*(a+2)*(a+9)p0p1p2p9第91页数组名作函数参数v数组名作函数参数,是地址传递v数组名作函数参数,实参加形参对应关系实参形参数组名指针变量数组名指针变量数组名数组名指针变量指针变量第92页字符串与数组关系

40、字符串用一维字符数组存放字符数组含有一维数组全部特点数组名是指向数组首地址地址常量数组元素引用方法可用指针法和下标法数组名作函数参数是地址传递等区分存放格式:字符串结束标志赋值方式与初始化输入输出方式:%s%ccharstr=Hello!;()charstr=Hello!;()charstr=H,e,l,l,o,!;()char*cp=Hello;()inta=1,2,3,4,5;()int*p=1,2,3,4,5;()charstr10,*cp;inta10,*p;str=Hello;()cp=Hello!;()a=1,2,3,4,5;()p=1,2,3,4,5;()scanf(“%s”,s

41、tr);printf(“%s”,str);gets(str);puts(str);第93页二维数组和指针变量二维数组和指针变量指向数组元素指针变量定义一个二维数组:inta23=1,2,3,4,5,6;二维数组元素在内存中是按行存放,对于上面定义我们能够认为a是数组名,数组包含2行即2个元素a0,a1。每个元素又是一维数组,包含3个元素aa0a1123456a02*(a0+2)*(*(a+0)+2)第94页指向指针指针指向指针指针定义:指向指针指针一级指针:指针变量中存放目标变量地址p1&p2&i3P2(指针变量)i(整型变量)例int*p1;int*p2;inti=3;p2=&i;p1=&p

42、2;*p1=5;v二级指针:指针变量中存放一级指针变量地址例int*p;inti=3;p=&i;*p=5;&i3P(指针变量)i(整型变量)一级指针单级间接寻址二级指针一级指针目标变量二级间接寻址第95页定义形式:存放类型数据类型*指针名;如char*p;例inti,*p;p=&i;()/p是二级指针,不能用变量地址为其赋值指针本身存放类型最终目标变量数据类型*p是p间接指向对象地址*p是p间接指向对象值例inti=3;int*p1;int*p2;p1=&i;p2=&p1;*p=5;ip1p23&i&p1*p2,*p1*p2v多级指针例三级指针int*p;四级指针char*p;第96页例用二级

43、指针处理字符串void main()char*p;char*name=Follow me,BASIC,Great Wall,FORTAN;int i;for(i=0;i4;i+)p=name+i;printf(%x%sn,*p,*p);name0name1name2name3name4char*name5GreatWallFORTAN0FollowmeBASICnamep第97页指向函数指针函数指针:函数在编译时被分配入口地址,用函数名表示max.指令1指令2v函数指针变量赋值:如p=max;函数返回值数据类型专门存放函数入口地址可指向返回值类型相同不一样函数指向函数指针变量v定义形式:数据类

44、型(*指针变量名)();如int(*p)();函数指针变量指向函数必须有函数说明v函数调用形式:c=max(a,b);c=(*p)(a,b);c=p(a,b);v对函数指针变量pn,p+,p-无意义()不能省int(*p)()与int*p()不一样第98页以下定义含义(1)int*p3;(2)int(*p)3;(3)int*p(int);(4)int(*p)(int);(5)int*(*p)(int);(6)int(*p3)(int);(7)int*(*p3)(int);函数指针数组,函数返回int型指针指向函数指针,函数返回int型变量指向函数指针,函数返回int型指针函数指针数组,函数返回

45、int型变量指针数组指向一维数组指针返回指针函数第99页1.若有若有说说明:明:int*p,m=5,n;以下正确程序段是;以下正确程序段是:Ap=&n;scanf(“%d”,&p);Bp=&n;scanf(“%d”,*p);Cscanf(“%d”,&n);*p=n;Dp=&n;*p=m;2.已知已知变变量定量定义义和函数和函数调调用用语语句:句:int a=25;print_value(&a);下面函数正确;下面函数正确输输出出结结果是果是:voidprint_value(int*x)printf(“%dn”,+*x);A23B24C25D26选择选择DD第100页以下对a5元素非法表示是:i

46、nta10,*p=a;A*(a+5)Bp+5C*(p+5)Dp5B第101页若已经有定义:inta10;int*p;p=a;试说明*(p+)与*(+p)有什么区分?*(p+)是先取*p值,后使p加1,对本例即先得到a0值,然后p指针指向a1;*(+p)使先使p加1,后取*p值,对本例即p指针指向a1,再得到a1值。简答题简答题第102页main()intx23=4,7,2,5,6,1;char*str=thank,right,good;char*p;inti,j;printf(%d,%dn,*x0,*(x1+2)/3);for(i=0;i2;i+)for(j=0;j3;j+)printf(%d,*(xi+j);p=str;printf(%c,%sn,*(*p+1),*(p+2);4,04,7,2,5,6,1 h,good求程序运行输出结果求程序运行输出结果第103页#includemain()inta34=1,2,3,4,5,6,7,8,9,10,11,12;int(*p)4,i=2,j=1;p=a;printf(“%d,%d,”,*(*(p+i)+j),*(*(a+i)+j);printf(“%d,%dn”,*p,*(p+i);10,10,1,9求程序运行输出结果求程序运行输出结果第104页

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服