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

类型程序设计基础w07-讨论-4-数组-指针-函数课件.ppt

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

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

    特殊限制:

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

    关 键  词:
    程序设计 基础 w07 讨论 数组 指针 函数 课件
    资源描述:

    1、排错涉及到一种逆向推理,就像侦破一个杀人谜案。有些不可能的事情发生了,而仅有的信息就是它确实发生了!因此,我们必须从结果出发,逆向思考,去发现原因。有时你“看到的代码”实际上是你自己的意愿,而不是你实际写出来的东西。离开它一小段时间能够松驰你的误解,帮助代码显出其本来面目。程序设计实践现实就是这样,总是存在许多程序错误,需要通过测试来发现,通过排错去纠正。关于数组、指针、函数的综合讨论3任务:姓名排序任务:姓名排序n电视歌手大奖赛开赛报名时,由于人数较多,一些参电视歌手大奖赛开赛报名时,由于人数较多,一些参赛信息需要及时录入计算机并用计算机进行管理。赛信息需要及时录入计算机并用计算机进行管理。

    2、n其中一个很重要的工作就是:要按选手姓名(汉语拼其中一个很重要的工作就是:要按选手姓名(汉语拼音)排序后编号,以决定选手比赛的顺序。音)排序后编号,以决定选手比赛的顺序。n请你编程实现对姓名拼音串按英文字典顺序排序的程请你编程实现对姓名拼音串按英文字典顺序排序的程序。序。n为测试程序,假定共有为测试程序,假定共有10名选手,选手姓名拼音最长名选手,选手姓名拼音最长不超过不超过20个英文字符,且中间无空格。个英文字符,且中间无空格。4#include#include using namespace std;using namespace std;int mainint main()()char

    3、namelist1020;char namelist1020;for(int i=0;i10;i+)for(int i=0;i10;i+)cout i singer name:;cout i namelisti;cin namelisti;/此处代码省略(见后)用冒泡排序法对姓名进行排序此处代码省略(见后)用冒泡排序法对姓名进行排序for(int i=0;i10;i+)for(int i=0;i10;i+)cout i namelisti endl;cout i namelisti endl;return 0;return 0;5#include#include using namespace

    4、 std;using namespace std;int mainint main()()char namelist1020;char namelist1020;for(int i=0;i10;i+)for(int i=0;i10;i+)cout i singer name:;cout i namelisti;cin namelisti;/此处代码省略(见后)用冒泡排序法对姓名进行排序此处代码省略(见后)用冒泡排序法对姓名进行排序for(int i=0;i10;i+)for(int i=0;i10;i+)cout i namelisti endl;cout i namelisti endl;r

    5、eturn 0;return 0;6#include#include using namespace std;using namespace std;int mainint main()()char namelist1020;char namelist1020;for(int i=0;i10;i+)for(int i=0;i10;i+)cout i singer name:;cout i namelisti;cin namelisti;/此处代码省略(见后)用冒泡排序法对姓名进行排序此处代码省略(见后)用冒泡排序法对姓名进行排序for(int i=0;i10;i+)for(int i=0;i1

    6、0;i+)cout i namelisti endl;cout i namelisti endl;return 0;return 0;7#include#include using namespace std;using namespace std;int mainint main()()char namelist1020;char namelist1020;/数组下标从数组下标从0 0开始!开始!for(int i=0;i10;i+)for(int i=0;i10;i+)cout i singer name:;cout i namelisti;cin namelisti;/此处代码省略(见后

    7、)用冒泡排序法对姓名进行排序此处代码省略(见后)用冒泡排序法对姓名进行排序for(int i=0;i10;i+)for(int i=0;i10;i+)cout i namelisti endl;cout i namelisti endl;return 0;return 0;8先看看整数数组的冒泡算法先看看整数数组的冒泡算法for(j=for(j=1 1;j j=5 5;j+);j+)for(i=for(i=1 1;i=;i=6 6-j;i+)-j;i+)if(ai ai+1)if(ai ai+1)p=ai;p=ai;ai=ai+1;ai=ai+1;ai+1=p;ai+1=p;Page 93如何

    8、修改成以如何修改成以0为首元素下标?为首元素下标?9改成以改成以0 0为首元素下标为首元素下标for(j=for(j=0 0;j j 5 5;j+);j+)for(i=for(i=0 0;i;i5 5-j;i+)-j;i+)/why not“i6-j”?/why not“i6-j”?if(ai ai+1)if(ai ai+1)p=ai;p=ai;ai=ai+1;ai=ai+1;ai+1=p;ai+1=p;10依样画葫芦依样画葫芦for(j=for(j=0 0;j j 5 5;j+);j+)for(i=for(i=0 0;i;i5 5-j;i+)-j;i+)/why not“i6-j”?/why

    9、 not“i6-j”?if(ai ai+1)if(ai ai+1)p=ai;p=ai;ai=ai+1;ai=ai+1;ai+1=p;ai+1=p;for(j=for(j=0 0;j j 9 9;j+);j+)for(i=for(i=0 0;i;i9 9-j;i+)-j;i+)if(if(namelistnamelisti i namelistnamelisti+1)i+1)p=p=namelistnamelisti;i;namelistnamelisti=i=namelistnamelisti+1;i+1;namelistnamelisti+1=p;i+1=p;11for(int i=0;if

    10、or(int i=0;i9 9;i;i+)+)/轮轮(遍遍,趟趟)数数=元素数目元素数目-1-1 for(int j=0;jfor(int j=0;j 0)(namelistj,namelistj+1)0)char tmp20;char tmp20;strcpystrcpy(tmp,namelistj);(tmp,namelistj);strcpy(namelistj,namelistj+1);strcpy(namelistj,namelistj+1);strcpy(namelistj+1,tmp);strcpy(namelistj+1,tmp);12for(int i=0;ifor(int

    11、i=0;i9 9;i;i+)+)for(int j=0;jfor(int j=0;j 0)(namelistj,namelistj+1)0)char tmp20;char tmp20;strcpystrcpy(tmp,namelistj);(tmp,namelistj);strcpy(namelistj,namelistj+1);strcpy(namelistj,namelistj+1);strcpy(namelistj+1,tmp);strcpy(namelistj+1,tmp);13for(int i=0;ifor(int i=0;i9 9;i;i+)+)for(int j=0;jfor(

    12、int j=0;j 0)(namelistj,namelistj+1)0)/page 345,“strcpy()”/page 345,“strcpy()”char tmp20;char tmp20;strcpystrcpy(tmp,namelistj);(tmp,namelistj);strcpy(namelistj,namelistj+1);strcpy(namelistj,namelistj+1);strcpy(namelistj+1,tmp);strcpy(namelistj+1,tmp);字符串元素的特殊交换算法如何按字典逆序来排序姓名呢?如何按字典逆序来排序姓名呢?14如何按字典逆序

    13、来排序姓名如何按字典逆序来排序姓名for(int i=0;ifor(int i=0;i9 9;i;i+)+)for(int j=0;jfor(int j=0;j9-i9-i;j;j+)+)if(if(strcmpstrcmp(namelistj,namelistj+1)(namelistj,namelistj+1)0)0)/同前省略同前省略 比较关系符改为小于号,即按字典逆序排序姓名。如何根据用户输入来决定按何种次序排序姓名呢?如何根据用户输入来决定按何种次序排序姓名呢?15n可以用一个变量来记录用户的输入,根据可以用一个变量来记录用户的输入,根据输入选择来判定用户是想正逆排序姓名还输入选择来

    14、判定用户是想正逆排序姓名还是想逆序排序姓名。是想逆序排序姓名。n该变量的类型可以是:该变量的类型可以是:布尔型布尔型 bool 整数类型整数类型 int 字符类型字符类型 char。排序准则的动态变化排序准则的动态变化为什么这些类型都可以?假设使用假设使用 char UserInput;来记录用户选择:来记录用户选择:U表示升序,表示升序,D表示降序表示降序16排序准则的动态变化排序准则的动态变化 if(UserInput=D)/Down,if(UserInput=D)/Down,降序排列降序排列if(if(strcmpstrcmp(namelistj,namelistj+1)(namelis

    15、tj,namelistj+1)0)0)/交换相邻元素,同前省略交换相邻元素,同前省略 17char UserInput;cout UserInput;/确保输入合法 assert(UserInput=D|UserInput=U);如果输入不合法,则程序会以崩溃的方式退出。如果输入不合法,则程序会以崩溃的方式退出。18for(int i=0;i9;i+)for(int i=0;i9;i+)for(int j=0;j9-i;j+)for(int j=0;j9-i;j+)ifif(UserInput=D)(UserInput=D)ifif(strcmp(namelistj,namelistj+1)0

    16、)(strcmp(namelistj,namelistj+1)0)(strcmp(namelistj,namelistj+1)0)char tmp20;char tmp20;strcpy(tmp,namelistj);strcpy(tmp,namelistj);strcpy(namelistj,namelistj+1);strcpy(namelistj,namelistj+1);strcpy(namelistj+1,tmp);strcpy(namelistj+1,tmp);程序代码还能程序代码还能更更简简捷一些捷一些吗?吗?19程序代码的简化程序代码的简化 if(UserInput=D)if(

    17、UserInput=D)if(strcmp(namelistj,namelistj+1)0)if(strcmp(namelistj,namelistj+1)0)char tmp20;char tmp20;strcpy(tmp,namelistj);strcpy(tmp,namelistj);strcpy(namelistj,namelistj+1);strcpy(namelistj,namelistj+1);strcpy(namelistj+1,tmp);strcpy(namelistj+1,tmp);接连两个接连两个ifif判断,可合成一个!判断,可合成一个!if(cond_1)if(con

    18、d_1)if(cond_2)if(cond_2)/./.if(cond_1&if(cond_1&cond_2)cond_2)/./.20for(int i=0;i9;i+)for(int i=0;i9;i+)for(int j=0;j9-i;j+)for(int j=0;j9-i;j+)if(if(UserInput=D)UserInput=D)&(strcmp(namelistj,namelistj+1)0)(strcmp(namelistj,namelistj+1)0)(strcmp(namelistj,namelistj+1)0)char tmp20;char tmp20;strcpy(

    19、tmp,namelistj);strcpy(tmp,namelistj);strcpy(namelistj,namelistj+1);strcpy(namelistj,namelistj+1);strcpy(namelistj+1,tmp);strcpy(namelistj+1,tmp);程序代码还能做进一步的简化吗?程序代码还能做进一步的简化吗?21for(int i=0;i9;i+)for(int i=0;i9;i+)for(int j=0;j9-i;j+)for(int j=0;j9-i;j+)if(if(UserInput=D)UserInput=D)&(strcmp(namelist

    20、j,namelistj+1)0)(strcmp(namelistj,namelistj+1)0)(strcmp(namelistj,namelistj+1)0)char tmp20;char tmp20;strcpy(tmp,namelistj);strcpy(tmp,namelistj);strcpy(namelistj,namelistj+1);strcpy(namelistj,namelistj+1);strcpy(namelistj+1,tmp);strcpy(namelistj+1,tmp);怎么简化?怎么简化?22for(int i=0;i9;i+)for(int i=0;i9;i

    21、+)for(int j=0;j9-i;j+)for(int j=0;j9-i;j+)if(if(UserInput=D)UserInput=D)&(strcmp(namelistj,namelistj+1)0)(strcmp(namelistj,namelistj+1)0)(strcmp(namelistj,namelistj+1)0)char tmp20;char tmp20;strcpy(tmp,namelistj);strcpy(tmp,namelistj);strcpy(namelistj,namelistj+1);strcpy(namelistj,namelistj+1);strcp

    22、y(namelistj+1,tmp);strcpy(namelistj+1,tmp);怎么定义怎么定义Swap()Swap()函数函数呢?呢?Swap(namelistj,namelistj+1);Swap(namelistj,namelistj+1);Swap(Swap(namelistnamelistj,j,namelistnamelistj+1);j+1);23Swap()Swap()函数的定义函数的定义n注意到:调用该函数时,实参是注意到:调用该函数时,实参是 namelistjnamelistj和和 namelistj+1namelistj+1,它们分别对应二维数组变量,它们分别对应

    23、二维数组变量 namelistnamelist的的第第j“j“行行”和和第第j+1“j+1“行行”n二维数组的二维数组的“行变量行变量”对应的是一个数组:对应的是一个数组:void Swap(void Swap(charchar first first ,charchar second second ););24void Swap(char first,char second)char tmp20;strcpy(tmp,first);strcpy(first,second);strcpy(second,tmp);if(UserInput=D)&(strcmp(namelistj,namelis

    24、tj+1)0)char tmp20;char tmp20;strcpy(tmp,namelistj);strcpy(tmp,namelistj);strcpy(namelistj,namelistj+1);strcpy(namelistj,namelistj+1);strcpy(namelistj+1,tmp);strcpy(namelistj+1,tmp);25for(int i=0;i9;i+)for(int j=0;j9-i;j+)if(UserInput=D)&(strcmp(namelistj,namelistj+1)0)SwapSwap(namelistj,namelistj+1)

    25、;26依样画葫芦依样画葫芦for(j=0;j5;j+)for(j=0;j5;j+)for(i=0;i5-j;i+)for(i=0;i5-j;i+)if(ai ai+1)if(ai ai+1)p=ai;p=ai;ai=ai+1;ai=ai+1;ai+1=p;ai+1=p;for(j=0;j5;j+)for(j=0;j5;j+)for(i=0;i5-j;i+)for(i=0;i5-j;i+)if(ai ai+1)if(ai ai+1)Swap(ai,ai+1);Swap(ai,ai+1);Page 9327Swap()Swap()函数的定义函数的定义n注意到:调用该函数时,程序中的实参是注意到:调

    26、用该函数时,程序中的实参是 aiai和和 ai+1ai+1,它们分别对应一维数组变量,它们分别对应一维数组变量a a的第的第i i和第和第i+1i+1个元素个元素n一维整数数组的元素,是一个整数,其类一维整数数组的元素,是一个整数,其类型是整数类型型是整数类型n故有故有void Swap(void Swap(intint first,first,intint second);second);依样画葫芦依样画葫芦28#include using namespace std;void Swap(void Swap(intint first,first,intint second)second)in

    27、tint p;p;p=first;p=first;first=second;first=second;second=p;second=p;int main()int i,j,p,a6;memset(a,0,sizeof(a);for(i=0;i6;i+)cout 请输入待排序的数a i ai;依样画葫芦依样画葫芦29for(j=0;j5;j+)for(i=0;i5-j;i+)if(ai ai+1)Swap(ai,ai+1);for(i=0;i6;i+)cout ai endl;return 0;依样画葫芦依样画葫芦可惜啊!程序结果并不正确!30BUGBUG(问题)在哪里?(问题)在哪里?voi

    28、d Swap(int first,int second)int p;p=first;first=second;second=p;变量first和second是函数Swap的形式参数,该函数被调用时,实参的值是被赋值给形参的,即相当于是复制了一份。所以,在函数Swap中交换的是“复制品”之间内容的交换,并不影响实参的内容(值)!31验证一下验证一下#include using namespace std;void Swap(int first,int second)int p;p=first;first=second;second=p;int main()int a=3,b=4;cout Bef

    29、ore calling Swap(),a=a ,b=b endl;Swap(a,b);cout After calling Swap(),a=a ,b=b endl;return 0;32void Swap(int first,int second)cout&first=&first ,&second=&second endl;/同前省略int main()int a=3,b=4;cout&a=&a ,&b=&b endl;/同前省略进一步验证进一步验证33比较实参与形参的内存单元比较实参与形参的内存单元34如何改正这个如何改正这个BUGBUG(问题)(问题)void Swap(int*fir

    30、st,int*second)int p;p=*first;*first=*second;*second=p;/in main()for(j=0;j5;j+)for(i=0;i5-j;i+)if(ai ai+1)Swap(&(ai),&(ai+1);35为什么这样为什么这样BUGBUG就被去掉了?就被去掉了?firstsecond3849aiai+10X22FF400X22FF440X22FF400X22FF443849aiai+10X22FF400X22FF44int p=*first;*first=*second;*second=p;0X22FF400X22FF4449aiai+10X22F

    31、F400X22FF44?0X22FF400X22FF440X22FF400X22FF400X22FF440X22FF440X22FF400X22FF400X22FF440X22FF400X22FF44firstsecondfirstsecondfirstsecond函数调用前函数调用前函数调用时函数调用时函数调用函数调用中中3836为什么这样为什么这样BUGBUG就被去掉了?就被去掉了?firstsecond3849aiai+10X22FF400X22FF440X22FF400X22FF443849aiai+10X22FF400X22FF44int p=*first;*first=*secon

    32、d;*second=p;0X22FF400X22FF44aiai+10X22FF400X22FF44?0X22FF400X22FF440X22FF400X22FF400X22FF440X22FF440X22FF400X22FF400X22FF440X22FF400X22FF44firstsecondfirstsecondfirstsecond函数调用前函数调用前函数调用时函数调用时函数调用函数调用中中494937为什么这样为什么这样BUGBUG就被去掉了?就被去掉了?firstsecond3849aiai+10X22FF400X22FF440X22FF400X22FF443849aiai+10

    33、X22FF400X22FF44int p=*first;*first=*second;*second=p;0X22FF400X22FF44aiai+10X22FF400X22FF44?0X22FF400X22FF440X22FF400X22FF400X22FF440X22FF440X22FF400X22FF400X22FF440X22FF400X22FF44firstsecondfirstsecondfirstsecond函数调用前函数调用前函数调用时函数调用时函数调用函数调用中中493838为什么这样为什么这样BUGBUG就被去掉了?就被去掉了?firstsecond3849aiai+10X

    34、22FF400X22FF440X22FF400X22FF443849aiai+10X22FF400X22FF44int p=*first;*first=*second;*second=p;?aiai+10X22FF400X22FF44?0X22FF400X22FF44?0X22FF400X22FF440X22FF400X22FF440X22FF400X22FF44firstsecondfirstsecondfirstsecond函数调用前函数调用前函数调用时函数调用时函数调用函数调用后后493839for(int i=0;i9;i+)for(int j=0;j9-i;j+)if(UserInp

    35、ut=D)&(strcmp(namelistj,namelistj+1)0)SwapSwap(namelistj,namelistj+1);程序代码还能做进一步的简化吗?程序代码还能做进一步的简化吗?回到 姓名排序(二维数组)问题上来40strcmp()strcmp()的返回值是什么?的返回值是什么?#include#include using namespace std;using namespace std;int main()int main()cout strcmp(AAA,BBB)endl;cout strcmp(AAA,BBB)endl;cout strcmp(DDD,BBB)en

    36、dl;cout strcmp(DDD,BBB)endl;return 0;return 0;程序输出为:1141for(int i=0;i9;i+)for(int j=0;j9-i;j+)ifif(UserInput=D)&(strcmp(namelistj,namelistj+1)=-1)SwapSwap(namelistj,namelistj+1);ifif(UserInput=U)&(strcmp(namelistj,namelistj+1)=1)SwapSwap(namelistj,namelistj+1);int UserInput?042/.int UserInput;cin Us

    37、erInput;assert(UserInput=-1|UserInput=1);for(int i=0;i9;i+)for(int j=0;j9-i;j+)ifif(strcmp(namelistj,namelistj+1)=UserInput)/两种排序准则合并在一起处理 SwapSwap(namelistj,namelistj+1);/.抽取两种排序准则的共性思考题:如果用户仍然希望使用U和D表示升序和降序,程序应如何修改?43下面,任务又改变啦!领导和观众都强烈要求按歌手类型分开比赛,以保证公平竞争。即,会有多个不同人数的姓名数组需要排序处理。程序该如何修改呢?如通俗歌手有20人,美声

    38、歌手有15人。44难道是这样么?不过难道是这样么?不过有点有点for(int i=0;i19;i+)/通俗歌手排序for(int j=0;j19-i;j+)if(strcmp(NL_1j,NL_1j+1)=UserInput)SwapSwap(NL_1j,NL_1j+1);for(int i=0;i14;i+)/美声歌手排序for(int j=0;j14-i;j+)if(strcmp(NL_2j,NL_2j+1)=UserInput)SwapSwap(NL_2j,NL_2j+1);45冒泡泡的函数上场啦冒泡泡的函数上场啦Void bubble()for(int i=0;inum-1;i+)fo

    39、r(int j=0;jnum-1-i;j+)if(strcmp(NLj,NLj+1)=UserInput)SwapSwap(NLj,NLj+1);/.bubble(NL_1,20,UserInput);bubble(NL_2,15,UserINput);46void bubble(int a,int num)for(int j=0;jnum-1;j+)for(int i=0;inum-1-j;i+)if(ai ai+1)Swap(&(ai),&(ai+1);依样画葫芦依样画葫芦Page 93示例修改示例修改47另一种常见的定义方式另一种常见的定义方式void bubble(int*a,int

    40、num)for(int j=0;jnum-1;j+)for(int i=0;inum-1-j;i+)if(ai ai+1)Swap(&(ai),&(ai+1);编译器认为上述两种写法是相同的编译器认为上述两种写法是相同的Page 93示例修改示例修改48如果排序准则也要求动态设定如果排序准则也要求动态设定void bubble(int*a,int num,int order)for(int j=0;jnum-1;j+)for(int i=0;inum-1-j;i+)if(ai ai+1)Swap(&(ai),&(ai+1);依样画葫芦依样画葫芦上述函数应该如何修改其实现呢?上述函数应该如何修改

    41、其实现呢?Page 93示例修改示例修改49回顾一下姓名排序代码回顾一下姓名排序代码Void bubble()for(int i=0;inum-1;i+)for(int j=0;jnum-1-i;j+)if(strcmp(NLj,NLj+1)=UserInput)SwapSwap(NLj,NLj+1);Page 93示例修改示例修改50void bubble(int*a,int num,int order)for(int j=0;jnum-1;j+)for(int i=0;inum-1-j;i+)if(int_cmp(ai,ai+1)=order)Swap(&(ai),&(ai+1);依样画葫

    42、芦依样画葫芦Page 93示例修改示例修改51int_cmp(int,int)int_cmp(int,int)的实现的实现int int_cmp(int a,int b)if(a b)return 1;return 0;/完全参照 strcmp 的功能实现Page 93示例修改示例修改52为什么不这样为什么不这样实现呢?实现呢?bool int_cmp(int a,int b,int order)if(a b)return order=1;return false;/V1.0Page 93示例修改示例修改53为什么不这样为什么不这样实现呢?实现呢?bool int_cmp(int a,int

    43、b,int order)if(a b)&(order=1)return true;return false;/V2.0Page 93示例修改示例修改54为什么不这样为什么不这样实现呢?实现呢?bool int_cmp(int a,int b,int order)if(a b)&(order=1)return true;return false;/V3.0Page 93示例修改示例修改55为什么不这样为什么不这样实现呢?实现呢?bool int_cmp(int a,int b,int order)return(a b)&(order=1);/V4.0Page 93示例修改示例修改56void b

    44、ubble(int*a,int num,int order)for(int j=0;jnum-1;j+)for(int i=0;inum-1-j;i+)if(int_cmp(ai,ai+1,order)Swap(&(ai),&(ai+1);你还想到怎么修改上面的代码?你还想到怎么修改上面的代码?Page 93示例修改示例修改(未完持续)数组与指针int main()int a14=1,2,3,a25=1,2,1,2,9;int*p=a1,*q;/注意指针q的定义方式for(int i=0;i4;i+)cout pi =*(p+i);cout=a2;p-)cout *p ;/指针用作循环变量co

    45、ut endl;q=a2;for(;qa2+5;q+)cout *q ;cout endl;p=a1;/数组变量可以直接赋值给指针变量cout p=p a1=a1 endl;p=a2;cout p=p ,a2 =a2 endl;cout p+1=p+1 ,a2+1 =a2+1 endl;cout *(p+2)=*(p+2),p2 =p2 endl;cout *(a2+2)=*(a2+2),a22=a22 endl;return 0;/pointer-array-1.cpp58参考输出5960数组与指针#include using namespace std;int main()int a14=

    46、1,2,3,a25=1,2,1,2,9;int*p=a1,*q;/指针变量与数组变量的“大小”是不同的cout sizeof(a1)=sizeof(a1)endl;cout sizeof(a2)=sizeof(a2)endl;cout sizeof(p)=sizeof(p)endl;cout sizeof(q)=sizeof(q)endl;#ifdef SHOW_ERRORa1=q;/数组变量不能接受赋值a2=p;#endifreturn 0;/pointer-array-2.cpp61参考输出6263#include using namespace std;void test_1(int a

    47、,int len)/数组变量作函数参数cout test_1():a=a ,len=len endl tt;for(int i=0;ilen;i+)cout ai =*(a+i);cout endl;void test_2(int*a,int len)/指针变量作函数参数cout test_2():a=a ,len=len endl tt;for(int i=0;ilen;i+)cout ai =*(a+i);cout endl;数组与指针64int main()int a14=1,2,3;int a25=1,2,1,2,9;cout main():a1=a1 ,a2=a2 endl;test

    48、_1(a1,4);test_1(a2,5);test_2(a1,4);test_2(a2,5);int*p=a2;test_1(p,2);test_2(p,3);return 0;/pointer-array-3.cpp数组与指针65参考输出6667数组与指针#include using namespace std;void test_3(charchar a,int len)cout test_3():a=a ,len=len endl tt;for(int i=0;ilen;i+)cout ai =*(a+i);cout endl;void test_4(charchar*a,int le

    49、n)cout test_4():a=a ,len=len endl tt;for(int i=0;ilen;i+)cout ai =*(a+i);cout endl;68数组与指针int main()char*name1=XXX;/这是初始化,不是赋值!char name2=tsinghua;char name310=computer;name1=name1=J0X-?;/OK!改变字符指针变量的值/name2=YYY;name3=ZZZ;ERROR!/(数组形式的)字符串赋值,必须使用 strcpy 函数!test_3(name1,4);test_4(name1,4);test_3(name

    50、2,8);test_4(name2,8);test_3(name3,8);test_4(name3,8);test_3(name3,10);test_4(name3,10);test_3(name3,3);test_4(name3,3);return 0;/pointer-array-4.cpp注意代码中关于注意代码中关于 name1=“J0X-?”;name1=“J0X-?”;的说明。的说明。“J0X-?”J0X-?”是一个常量字符串,它也对应一个地是一个常量字符串,它也对应一个地址值,所以语句址值,所以语句 name1=“J0X-?”;name1=“J0X-?”;的意思是:的意思是:将存放

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:程序设计基础w07-讨论-4-数组-指针-函数课件.ppt
    链接地址:https://www.163wenku.com/p-3529171.html

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


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


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

    163文库