程序设计基础w07-讨论-4-数组-指针-函数课件.ppt
- 【下载声明】
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注意到:调用该函数时,程序中的实参是注意到:调
展开阅读全文