北大c语言高级编程PPT(数组与算法)ppt课件.ppt

北大c语言高级编程PPT(数组与算法)ppt课件.ppt

ID:58821939

大小:1.10 MB

页数:78页

时间:2020-10-01

上传者:U-5649
北大c语言高级编程PPT(数组与算法)ppt课件.ppt_第1页
北大c语言高级编程PPT(数组与算法)ppt课件.ppt_第2页
北大c语言高级编程PPT(数组与算法)ppt课件.ppt_第3页
北大c语言高级编程PPT(数组与算法)ppt课件.ppt_第4页
北大c语言高级编程PPT(数组与算法)ppt课件.ppt_第5页
资源描述:

《北大c语言高级编程PPT(数组与算法)ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

第七讲:C语言高级编程(第一部分)数组与算法I北京大学信息科学技术学院2009年 关于宏 形式:#definePI3.14159宏名(一般用大写,以区别一般变量)宏体(可以是一个复杂的表达式)作用与意义1.在源程序中,用简单的宏名指代复杂的宏体2.程序更加直观 形式:#definePI3.14159注意:1.#define可出现在程序的任一行2.宏的作用范围:由宏定义开始到程序末尾之间的区域3.宏定义不是C语句,不必在行尾加分号 #definePI3.141593;#includeintmain(){doubleS;S=PI-PI;printf(“%lf ”,S);return0;}S的值是多少? 按下build后……源文件可执行程序预编译编译连接没有宏的源文件二进制代码 #definePI3.141593;intmain(){doubleS;S=PI-PI;return0;}预编译intmain(){doubleS;S=3.141593;-3.141593;;return0;}把源程序中的所有PI替换为3.141593;源文件没有宏的源文件 intmain(){doubleS;S=3.141593;-3.141593;;return0;}intmain(){doubleS;S=3.141593;-3.141593;;return0;} 错误:使用宏定义常量时,在结尾加;#definePI3.14159;intmain(){return0;}#definePI3.14159intmain(){return0;}✕✓ 宏定义其他例子://整数常量#defineMAX200 几个例子 #includeintmain(){inta,b;inte;scanf("%d",&a);scanf("%d",&b);………………printf("%d%d ",a,b);return0;}程序填空,要求:输出的两个数值按照从小到大的顺序排列 #includeintmain(){inta,b;inte;scanf("%d",&a);scanf("%d",&b);if(a>b){e=a;a=b;b=e;}printf("%d%d ",a,b);return0;} #includeintmain(){inta,b,c;inte;scanf("%d",&a);scanf("%d",&b);scanf("%d",&c);………………printf("%d%d ",a,b,c);return0;}程序填空,要求:输出的3个数值按照从小到大的顺序排列 #includeintmain(){inta,b,c;inte;scanf("%d",&a);scanf("%d",&b);scanf("%d",&c);if(a>b){e=a;a=b;b=e;}if(b>c){e=b;b=c;c=e;}if(a>b){e=a;a=b;b=e;}printf("%d%d%d ",a,b,c);return0;} 如果要求:1.接收用户输入的10个数值2.输出的10个数值按照从小到大的顺序排列难道需要这样定义10个变量吗?inta,b,c,d,e,f,g,h,i,j;如果要输入更多的数值呢?!有没有一种更简便的方式,可以一次定义一组变量? 数组 数组是什么?数组是一组变量数组是一组具有编号的、类型相同的变量数组是一组类型相同的变量 如何声明一个数组intsz[10];数组的类型数组名数组中变量的数目必须是一个常量 数组中变量的编号intsz[10];数组中变量的编号从0开始;到数组的长度-1结束0123456789 如何访问数组中的变量intsz[10];sz[0]=1;sz[1]=3;sz[2]=7;…sz[8]=16;sz[9]=12;…sz[2]…;数组名变量编号 数组变量赋值的一种特殊方式声明时赋值intsz[5]={12,3,7,28,-2}; 访问数组中变量的一种常见方式intsz[10];inti;…i=…;sz[i]=……i的值可以根据需要变化 #includeintmain(){intsz[10];inti;for(;;){;}for(i=0;i<10;i++){printf("%d",sz[i]);}return0;}程序填空,要求:1.接收用户输入的10个数字2.存放在数组sz中 #includeintmain(){intsz[10];inti;for(i=0;i<10;i++){scanf("%d",&(sz[i]));}for(i=0;i<10;i++){printf("%d",sz[i]);}return0;} 数组的遍历通过循环结构 正向遍历#defineLEN10intsz[LEN];for(inti=0;i=0;i--){…sz[i]…}#defineLEN10intsz[LEN]; 通过遍历实现对数组变量的控制台赋值for(inti=0;isz[i+1]){e=sz[i+1];sz[i+1]=sz[i];sz[i]=e;}}用冒泡法作第1步:把第1大的数放在变量sz[LEN-1]中; inte;for(inti=0;isz[i+1]){e=sz[i+1];sz[i+1]=sz[i];sz[i]=e;}}用冒泡法作第2步:把第2大的数放在变量sz[LEN-2]中; inte;for(inti=0;isz[i+1]){e=sz[i+1];sz[i+1]=sz[i];sz[i]=e;}}用冒泡法作第3步:把第3大的数放在变量sz[LEN-3]中; inte;for(inti=0;isz[i+1]){e=sz[i+1];sz[i+1]=sz[i];sz[i]=e;}}用冒泡法作第k步:把第k大的数放在变量sz[LEN-k]中; 用冒泡法对数组intsz[LEN]进行排序inte;for(inti=0;isz[i+1]){e=sz[i+1];sz[i+1]=sz[i];sz[i]=e;}} 用冒泡法对数组intsz[LEN]进行排序inte;for(inti=0;isz[i+1]){e=sz[i+1];sz[i+1]=sz[i];sz[i]=e;}} 用冒泡法对数组intsz[LEN]进行排序inte;for(inti=0;isz[i+1]){e=sz[i+1];sz[i+1]=sz[i];sz[i]=e;}} 用冒泡法对数组intsz[LEN]进行排序inte;for(;;){for(inti=0;isz[i+1]){e=sz[i+1];sz[i+1]=sz[i];sz[i]=e;}}} 用冒泡法对数组intsz[LEN]进行排序inte;for(intk=;k<=;k++){for(inti=0;isz[i+1]){e=sz[i+1];sz[i+1]=sz[i];sz[i]=e;}}} 用冒泡法对数组intsz[LEN]进行排序inte;for(intk=1;k<=;k++){for(inti=0;isz[i+1]){e=sz[i+1];sz[i+1]=sz[i];sz[i]=e;}}} 用冒泡法对数组intsz[LEN]进行排序inte;for(intk=1;k<=LEN;k++){for(inti=0;isz[i+1]){e=sz[i+1];sz[i+1]=sz[i];sz[i]=e;}}} 用冒泡法对数组intsz[LEN]进行排序inte;for(intk=1;k<=LEN;k++){for(inti=0;isz[i+1]){e=sz[i+1];sz[i+1]=sz[i];sz[i]=e;}}}对该算法进行测试编写一个程序:1.从控制台输入一组数据,并将其存放一个数组中;2.用左侧算法进行排序;3.打印出排序结果; 选择排序法 排序的基本方法对数组intsz[LEN]进行排序,可以分为LEN个步骤进行。第k步:把第k大的数放在变量sz[LEN-k]中;(K=1,2,3,4,…,LEN-1,LEN) 用选择法作第1步:把第1大的数放在变量sz[LEN-1]中;intmaxIndex,e;maxIndex=0;for(inti=0;i<=LEN-1;i++){if(sz[i]>sz[maxIndex]){maxIndex=i;}}if(maxIndex!=LEN-1){e=sz[maxIndex];sz[maxIndex]=sz[LEN-1];sz[LEN-1]=e;} 用选择法作第2步:把第2大的数放在变量sz[LEN-2]中;intmaxIndex,e;maxIndex=0;for(inti=0;i<=LEN-2;i++){if(sz[i]>sz[maxIndex]){maxIndex=i;}}if(maxIndex!=LEN-2){e=sz[maxIndex];sz[maxIndex]=sz[LEN-2];sz[LEN-2]=e;} 用选择法作第3步:把第3大的数放在变量sz[LEN-3]中;intmaxIndex,e;maxIndex=0;for(inti=0;i<=LEN-3;i++){if(sz[i]>sz[maxIndex]){maxIndex=i;}}if(maxIndex!=LEN-3){e=sz[maxIndex];sz[maxIndex]=sz[LEN-3];sz[LEN-3]=e;} 用选择法作第k步:把第k大的数放在变量sz[LEN-k]中;intmaxIndex,e;maxIndex=0;for(inti=0;i<=LEN-k;i++){if(sz[i]>sz[maxIndex]){maxIndex=i;}}if(maxIndex!=LEN-k){e=sz[maxIndex];sz[maxIndex]=sz[LEN-k];sz[LEN-k]=e;} 用选择法对数组intsz[LEN]进行排序;intmaxIndex,e;maxIndex=0;for(inti=0;i<=LEN-k;i++){if(sz[i]>sz[maxIndex]){maxIndex=i;}}if(maxIndex!=LEN-k){e=sz[maxIndex];sz[maxIndex]=sz[LEN-k];sz[LEN-k]=e;} 用选择法对数组intsz[LEN]进行排序;intmaxIndex,e;maxIndex=0;for(inti=0;i<=LEN-k;i++){if(sz[i]>sz[maxIndex]){maxIndex=i;}}if(maxIndex!=LEN-k){e=sz[maxIndex];sz[maxIndex]=sz[LEN-k];sz[LEN-k]=e;} 用选择法对数组intsz[LEN]进行排序;intmaxIndex,e;maxIndex=0;for(inti=0;i<=LEN-k;i++){if(sz[i]>sz[maxIndex]){maxIndex=i;}}if(maxIndex!=LEN-k){e=sz[maxIndex];sz[maxIndex]=sz[LEN-k];sz[LEN-k]=e;} 用选择法对数组intsz[LEN]进行排序;intmaxIndex,e;for(;;){maxIndex=0;for(inti=0;i<=LEN-k;i++){if(sz[i]>sz[maxIndex]){maxIndex=i;}}if(maxIndex!=LEN-k){e=sz[maxIndex];sz[maxIndex]=sz[LEN-k];sz[LEN-k]=e;}} 用选择法对数组intsz[LEN]进行排序;intmaxIndex,e;for(intk=;k<=;k++){maxIndex=0;for(inti=0;i<=LEN-k;i++){if(sz[i]>sz[maxIndex]){maxIndex=i;}}if(maxIndex!=LEN-k){e=sz[maxIndex];sz[maxIndex]=sz[LEN-k];sz[LEN-k]=e;}} 用选择法对数组intsz[LEN]进行排序;intmaxIndex,e;for(intk=1;k<=LEN;k++){maxIndex=0;for(inti=0;i<=LEN-k;i++){if(sz[i]>sz[maxIndex]){maxIndex=i;}}if(maxIndex!=LEN-k){e=sz[maxIndex];sz[maxIndex]=sz[LEN-k];sz[LEN-k]=e;}} 用选择法对数组intsz[LEN]进行排序;intmaxIndex,e;for(intk=1;k<=LEN;k++){maxIndex=0;for(inti=0;i<=LEN-k;i++){if(sz[i]>sz[maxIndex]){maxIndex=i;}}if(maxIndex!=LEN-k){e=sz[maxIndex];sz[maxIndex]=sz[LEN-k];sz[LEN-k]=e;}}对该算法进行测试编写一个程序:1.从控制台输入一组数据,并将其存放一个数组中;2.用左侧算法进行排序;3.打印出排序结果; 一些问题的程序求解 问题1:判断某一年份是否是闰年 什么是闰年?闰年的充分必要条件是:“年份能被400整除”或者“年份能被4整除,但不能被100整除” intmain(){intyear;scanf(“%d”,&year);if(year%400==0||(year%4==0&&year%100!=0)){printf(“%disRuiNian.”,year);}else{printf(“%dnotRuiNian.”,year);}return0;} 判断闰年的函数intisRunNian(intyear){intresult;if(year%400==0||(year%4==0&&year%100!=0)){result=1;}else{result=0;}returnresult;} 问题2:给定一个年月日,判断这一天是这一年的第几天 求解思路step1:将该日所在月份之间的所有月份的天数加起来;并存入一个变量中;step2:将该日的日期号加入这个变量中;step3:输出该变量; intmain(){intyear,month,day,total;scanf(“%d%d%d”,&year,&month,&day);total=0;for(inti=1;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭