ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:549.86KB ,
资源ID:8496159      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8496159.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言第五次课讲义.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言第五次课讲义.docx

1、C语言第五次课讲义第五次课安排时间课次授课标题上课时长上午第一课时一维数组与指针50第二课时二维数组与指针50第三课时数组与函数50下午第四课时字符串与字符串数组50第五课时字符串的输入和输出50第六课时对字符串的操作50课后布置习题作业第十章选择题:18到39,填空题:1、2、5、6、7、8、9第十二章 选择题:14、15、16、17、21; 填空题:1、2、3、4、7、8第八章选择题:21到33,填空题:1至13 第十二章 数组与指针 本章考点考点考核几率分值指向数组元素的指针100%34指向多维数组的指针(难点)100%34二级指针及指针数组(难点)90%13用数组名作为函数参数90%2

2、3 教学内容一、 一维数组与指针1. 一维数组首地址与数组元素地址int a5=1,2,3,4,5;(1) 数组元素都可以看做一个变量,因此每个元素有一个地址。例如:数组a中元素地址分别为:&a0、&a1、&a2、&a3、&a4(2) C语言规定数组名代表数组在内存中的起始地址,即使用a表示数组a的首地址,a等价于&a0(3) a是一个地址常量,它永远指向a数组的首地址。因此不能对a进行重新赋值,例如:a+或是a=&i是错误的,换句话说:数组名不能出现在赋值号的左边2. 通过指针引用一维数组(1) 指针指向首地址int a5=1,2,3,4,5,*p; p=a; 指针指向了数组的首地址,即存储

3、了数组中第一元素的地址&a0,因此*p的值为a0的值1,依次类推:p+i表示数组第i个元素的地址,*(p+i)表示第i个元素,p+3表示a3表示a3地址1012,*(a+3)表示a3为4 注意:由于课本P169例1和例2没有具体输入数据,因此导致学员在理解该例题的时候容易混淆,为了避免此类事情发生,请各位老师不再讲解例1和例2,学员也不用去看,将下列例题讲解清楚即可!(2) 指针指向任意数组元素地址int a5=1,2,3,4,5,*p; p=&a2; 重点讲解课本P170例3:(3) 数组名当作指针使用int a3=10,20,30;a代表数组a的首地址,同时可以将a当作一个指针来使用。可以

4、理解为下列的表达形式:重点讲解课本P170例4:(4) 指针名当作数组使用指针指向了数组中元素的地址,可以将指针当做一个数组使用,但是指针数组的第一个元素从该地址对应的值。int a5=10,20,30,40,50,*p;p=&a2; 重点讲解课后习题P50第15题: 二、 二维数组与指针1. 二维数组的首地址和数组元素地址(1) 二维数组的组成int a23=1,2,3,4,5,6;二维数组在内存中是连续存储的,下图为二维数组在内存的存储形式:通常我们也可以使用下图表示上述的地址图:从图中可以看出,二维数组a是一个2行3列的数组,第一行中的元素为:a00、a01、a02;第二行中的元素为:a

5、10、a11、a12;每行都可以看做一个一维数组,a0和a1分别表示每行的首地址,a0相当于&a00,a1相当于&a10,是一个地址常量,不能进行重新赋值。1) 指针指向二维数组中某行的首地址 int a23=1,2,3,4,5,6; int *p; p=a0; 依次类推:如果指针p指向了二维数组a的第行行,即p=ai,则p+j就是从第i行往后数j个元素的地址。例如:p=a5,表示p指向了二维数组的第5行,那么p+3就表示a53的地址,*(p+3)就表示a53(2) 二维数组的数组名 int a23=1,2,3,4,5,6;1) 二维数组名a表示数组a的一个元素的地址,即:a00的地址,不能进

6、行a+等赋值操作2) 二维数组名等价于一个二维指针,ai是一个一维指针3) a+i表示&ai,*(a+i)为ai,表示第i行的首地址4) int *q;q=a;是错误的表示方法,不能进行这样的赋值5) int *p=a;也不能进行这样的赋值,类型不一致!(3) 二维数组中元素及其地址 int a23=1,2,3,4,5,6;1) aij表示第i行第j列的元素2) &aij表示第i行第j列元素的地址3) ai表示第i行的首地址,ai+j相当于&aij4) *(ai+j)相当于aij5) *(*(a+i)+j)相当于aij6) 讲解以上的的表达式一定要注意演变过程2. 指针数组与二维数组(1) 指

7、针数组的定义如下:类型名 *指针数组名常量表达式(2) 通过指针数组引用二维数组元素(上机考试填空题重点)(3) 重点讲解课本P174例1(4) 3. 行指针与二维数组(1) 定义行指针类型名 (*指针数组名)常量表达式int (*p)2;表示p只能存放含有2个整型元素的一维数组的首地址,即p相当于是一个二维指针。int (*p)2,a32=1,2,3,4,5,6;p=a;/*考试重点,填空题中经常出现该知识点*/ p+i就表示二维数组中第i行的首地址,相当于&ai(2) 通过行指针引用二维数组的元素int (*p)2,a32=1,2,3,4,5,6;p=a;p相当于二维数组,pij相当于ai

8、j,其余的等价式可以不讲解(3) 讲解习题P53第30题三、 数组与函数1. 一维数组元素作实参 一维数组元素作实参相当于一个普通的变量,传递的是“值”2. 一维数组名作实参viod fun(int *a)可以换为:viod fun(int a)或viod fun(int a5)重点讲解P177例1:执行for语句:(1) i=0,判断:i5为真,执行:sum=sum+x0;sum=1,继续执行i+i=1(2) i=1,判断:i5为真,执行:sum=sum+x1;sum=3,继续执行i+i=2(3) i=2,判断:i5为真,执行:sum=sum+x2;sum=6,继续执行i+i=3(4) i=

9、3,判断:i5为真,执行:sum=sum+x3;sum=10,继续执行i+i=4(5) i=4,判断:i5为真,执行:sum=sum+x4;sum=15,继续执行i+i=5(6) i=5,判断:i5为假,循环结束函数返回值sum为15,s=fun(a,5);将函数返回值赋值给变量s,因此s的值为153. 一维数组元素地址作实参 p0的值为3,p-1表示p0前面的值为2,p1为4,p0=p-1+p1p0=64. 二维数组名作实参当二维数组名作为实参时,对应的形成必须是一个行指针变量!viod fun(int (*a)10)可以换为:viod fun(int a10)或是viod fun(int

10、a510)行下标可以省略,列下标不能省略。讲解课本P179例3:5. 指针数组作实参viod fun(int *a10)可以换作:viod fun(int *a)或者是viod fun(int *a)第八章 字符串 本章考点考点考核几率分值字符串和字符串结束标志60%01字符数组和指针对字符串的处理(难点)100%25字符串的输入输出100%23字符串处理函数50%12 学习提示1. 本章知识点具有结合性强的特点,因此学习时候一定要注意2. 本章涉及到字符串、数组、指针、函数,因此是考试的重点,笔试占5至10分,上机考试填空题中20%的题目涉及到字符串 教学内容四、 字符串与字符串数组1. 字

11、符串常量(1) 字符串常量:以双引号括起来的,由若干字符组成的序列(2) 字符串举例:1) 普通字符串:”xiaoyuan”、”ABC”2) 空字符串:”/*双引号里面什么也没有*/3) 空格字符串:” ”/*双引号里面有一个空格*/(3) 字符串结构:”字符+0”1) 在存储字符串是,在字符串最后自动加上0作为字符串的结尾符,0是隐藏的2) 0是一个转义字符,它的ASCII为0,也称为“空值”3) 0是字符串结束的标志,如果没有0就不能称为一个字符串。如同分号是C语言语句结束的标志,没有分号就不能称为一条语句(4) 字符串长度:第一个0以前的字符个数1) “xiaoyuan”xiaoyuan

12、0”字符串的长度为:82) “xiao0yuan”xiao0yuan0”字符串长度为:43) “”字符串长度为04) “ ”字符串长度为1,因为双引号中有一个空格(5) 字符串的总长度:所有字符个数和所有0个数1) “xiaoyuan”字符串长为8,总长度为92) “xiao0yuan”字符串长度为4,总长度为103) “”字符串长度为0,总长度为14) “ ”字符串长度为1,总长度为22. 使用一维字符数组存放字符串(1) 通过对单个数组元素赋值1) 先定义后赋值形式char str5;str0=x;str1=i;str2=a;str3=o;str4=0;将单个字符常量赋值给字符数组中的元素

13、,从上面可以看出定义的数组长度为5,分别赋值了4个字符常量:x、i、a、o和1个结束符:02) 边定义边赋值形式采取“一一对应”的赋值方法3) 数组长度大于元素个数数组长度大于元素个数时,采取一一对应原则进行赋值,不够的部分填充字符0例char str10=s,p,e,l,s,0; spels00000字符数组的长度为10,赋值了6个数组元素,不够4个数组元素,因此补充4个0int a10=1,2,3,4,5;1234500000数组的长度为10,赋值了5个数组元素,不够5个数组元素,因此补充5个04) 比较下列的字符数组赋值(1) char str5=x,i,a,o,!;str0str1st

14、r2str3str4xia0! 字符数组str存储的不是一个字符串,因为赋值号的右边没有出项0,因此不能称之为字符串。(2) char str5= x,i,a,o,0;str0str1str2str3str4xia00字符数组str存储的是一个字符串”xiao”,因为赋值号右边有0(3) char str6= x,i,a,o,!;str0str1str2str3str4str5xia0!0 字符数组str存储的是一个字符串”xiao!”,因为赋值号右边会自动赋值一个0,因此它是一个字符串(4) 讲解习题4:正确的字符串语句是:A) char str =046; B) char str=“x43

15、”C) char str=; D) char str =“0”;(2) 直接将字符串常量赋值给字符数组char str10=“xiaoyuan”;或char str10=“xiaoyuan”;char str10 ;str=“xiaoyuan”;/*这种赋值方式是错误的,因为str是一个数组名,不能对数组名进行赋值运算*/3. 使用指针指向字符串讲解例7、8char *p=“xiaoyuan”;char *p;p=“xiaoyuan”; 讲解课本P109习题3char s20=“Beijing”,*p;p=s; 4. 二维字符数组存放字符串数组讲解例11:char name410=“I”,”a

16、m”,”a”,”teacher”;name0I000000000name1am00000000name2a000000000name3teacher000五、 字符串的输入和输出1. 字符串的输出(1) 使用printf函数输出字符串:用%s格式控制符,输出列表是字符串的首地址1) 讲解P109例1:char str =“Hello,xiaoyuan!”;printf(“%s”,str);2) 讲解P109例2:char str =“Hello,xiaoyuan!”;printf(“%s”,str+6);3) 讲解P109例3:char str =“Hello0,xiaoyuan!”;prin

17、tf(“%s”,str);4) 讲解习题p61第16题 main() char str10=“China”,”Bejing”,*p=str; printf(“%sn”,p+10); China00000Beijing0005) 讲解习题P61第17题 main() char s =“ABCD”,*p; for(p=s+1;ps+4;p+) printf(“%sn”,p); (2) 使用puts函数输出字符串: puts(字符串首地址)讲解P110例4:char *p=“Hello,xiaoyuan!”;printf(“%s”,p);puts(p);2. 字符串的输入(1) scanf函数:采用

18、%s格式控制符,制表符、空格和回车不读入讲解P110例5:char str20;scanf(“%s”,str);输入:xiaoyuan! xiaoyuan!0输入:xiao yuan!xiao0(2) gets函数:gets(待输入字符串的首地址),制表符、空格和回车读入讲解P110例6:char str20;scanf(“%s”,str);输入:xiaoyuan! xiaoyuan!0输入:xiao yuan!xiao yuan0(3) 讲解P111习题2:六、 对字符串的操作1. 字符串拷贝char *strcopy(char *d, char *s) char *p=d; while(*

19、s!=0) *p=*s; p+;s+; *p=0;strcpy(d,s);:将字符串s赋到字符串d的存储空间中将字符串s赋到字符串d的存储空间中。红色部分为上机考试中填空题中经常考查的知识点!2. 字符串求长度int strlength(char *str) int i=0; while(stri!=0) i+; return i;strlen(s);:求字符串s的长度。红色部分为上机考试中填空题中经常考查的知识点!3. 字符串连接char strcat(char *d, char *s) int len; len=strlen(d); while(*s!=0) *d=*s; d+;s+; *

20、d=0;strcat(d,s);:将字符串s赋值到字符串d的后面。红色部分为上机考试中填空题中经常考查的知识点!4. 字符串比较int strcompare(char *s1, char *s2) while(*s1!=*s2&*s1) s1+;s2+; return (*s1-*s2);strcmp(s1,s2);:比较s1和s2两个字符串的大小。红色部分为上机考试中填空题中经常考查的知识点!5. 讲解P113习题(1) 习题1char *x=“abcdefghi”;A)char y10; strcpy(y,x4);B)char y10; strcpy(+y,&x1);C)char y10;

21、 strcpy(s=y+5,x);D)char y10; strcpy(s=y+1,x+1);分析:A答案中strcpy(y,x4);x4为数组元素,strcpy只能对字符串或是指针进行赋值,因此strcpy(y,x4);是错误的,改为:strcpy(y,&x4);才正确;B答案中strcpy(+y,&x1);+y是错误的,因为y是数组名,不能进行赋值运算C答案中strcpy(s=y+5,x);y+5表示从数组中下标为5的位置开始,没有足够的存储空间容纳字符串“abcdefghi”D答案中strcpy(s=y+1,x+1);正确(2) 习题2main() char p20=a,b,c,d,q =“abc”; char r =“abcde”; strcat(p,r); strcpy(p+strlen(q),q); printf(“%dn”,strlen(p);分析:strcat(p,r);将字符串p连接到字符串r的后面,则r字符串为:“abcddeabcd”strcpy(p+strlen(q),q); strcpy(p+3,q);将字符串q赋值到以p+3开始的空间中,则字符串p为:“abcabc”printf(“%dn”,strlen(p);输出字符串p的长度为:6(3) 习题3

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1