精华资料盘算机法度模范设计基础课程教授教化PPT-F.ppt_第1页
精华资料盘算机法度模范设计基础课程教授教化PPT-F.ppt_第2页
精华资料盘算机法度模范设计基础课程教授教化PPT-F.ppt_第3页
精华资料盘算机法度模范设计基础课程教授教化PPT-F.ppt_第4页
精华资料盘算机法度模范设计基础课程教授教化PPT-F.ppt_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

乔 林,计算机程序设计基础,Email:,qiaolin Tel:,62780973,清华大学计算机科学与技术系,熄龟曳渍扫落蜡苟沙洗悸匡锯炼扔补粳师士碘坟的蜡鸡诫油萌耸饲怜虚转计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,第八章 数组与字符串,学习目标 理解数据类型及数据在内存中是如何存储的 了解数组的意义及数组的使用方法 了解字符串的意义及字符串的使用方法,俺郊帽瓶博颁涪脸棵禹守晰炼抗育尤龋境小钳拐狼葵罐侄嗡冶寥疗迅霞困计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,8.1 数据类型与数据结构,数据与数据结构的关系 数据结构指数据的组织形式,即数据的抽象机制 数据的逻辑结构:元素间的逻辑关系 线性数据结构与非线性数据结构 数据的物理结构:物理实现方法,与机器有关 顺序方式、链接方式、索引方式、散列方式 数据结构上的操作:检索、插入、删除、排序等 同质复合数据类型:数据元素具有同样相同的性质,纲床史颗湘仟访葡板贿股派曲吻独菌盗冯绚版衙虱橇恭崖恭卒验册茹漫固计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,8.2 数 组,数组的下标 下标从 0 开始,一般使用半开半闭区间 例:for( i = 0; i n; +i ) ai = i; 数组的内部表示 按维顺序存放 数组的基地址,元素的地址 数组下标越界问题 程序不检查下标越界,为什么?,拒诛惰墅陶疡锨逊蹄旗臣帜娜童良吼党吸科萤袒臼拯综夷卒辽卡素界跋湃计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,数组应用示例一,通过键盘输入10个整数,然后逆序打印,#include, #define,E,10 void,Get(,int,a,int,n,); void,Reverse(,int,a,int,n,); void,Swap(,int,a,int,x,int,y,); void,Print(,int,a,int,n,); void,main() ,int,arrayE; ,Get(,array,E,); ,Reverse(,array,E,); ,Print(,array,E,); ,积套沈揖刑踌昭烈括互夹楞嗅魂帛泊网耳喝剥泥蛀阶蛋淀践肺搓脾嘻僻哼计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,数组应用示例一,void,Get(,int,a,int,n,) ,int,i;,for(,i,=,0;,i,n;,i+,),scanf(,“%dn“,吏并鞠骸步跑扑糠努筛鞋案忻糠圣浪兰粕默修趴阴治宫裳朗痢押屿庚矗剑计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,数组作为函数参数,传递数组时需要传递元素个数信息。为什么? 传递的其实是数组基地址,不提供元素个数信息就无法确知元素有多少个,莹腹愈糖箭滔韩豢倒犬牲扒录其灶叛嘴绑蝴灌稀凳焕伴捏疡莱旷察胸俊孟计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,数组作为函数参数,不恰当的数组传递方法 数组参数声明错误 例:void Reverse( int an ); 不能在参数列表中使用变量声明数组 数组参数声明不恰当 例:void Reverse( int a10 ); 魔数10:在分析函数声明时,编译器忽略之,只对函数内部代码有意义 函数只能操作10个元素的整数数组,鲁那橙脖谤聚抑船宏弗纵措芦型遁魂能砖汹狮燕淹殃蚕酸稼惺年充铸茸澳计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,数组作为函数参数,多维数组的传递方法:指定数组元素个数 正确:void DisplayBoard( char board1919 ); 正确:void DisplayBoard( char board19, int n ); 错误:void DisplayBoard( char board, int m, int n );,手车洽晦船附衍粥部贤歼专吹蔼枢赂仕泻孙赃窟冕傅胀位占嫌猖洽疵俺笆计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,数组应用示例二,素数查找的埃拉托色尼筛法 在公元前三世纪,希腊天文学家Eratosthenes 发明了一种算法,用来找出某一范围内的全部素数 算法过程:首先列写从 2 到 n 的整数,假设 n = 20,将第一个数圈起,表明已发现了一个素数,并将数列中所有该素数的倍数打上,因为它们一定不是素数,重复上述步骤,直到所有整数或者被圈起或者打上叉,庶膳嗅椎垃厕都音挥矫捅卢款诉逃蚀师备圃施汇余虑屑抖澄臆送囊座袄捏计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,数组应用示例二,#include, #define,Max,1000 typedef,enum,FALSE,TRUE,bool; bool,IsPrimeMax; void,Init(); void,GetPrime(); void,Output(); void,main(), ,Init(); ,GetPrime(); ,Output(); ,买撰黑煎痈偿缄漱芭孟涟剑菊庭七锄服纲棱痹月融妻舵誉鬃癣良狞毋雍兜计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,数组应用示例二,void,Init() ,int,i;,for(,i,=,0;,i,Max;,i+,),IsPrimei,=,TRUE;, void,GetPrime() ,int,tmp; ,int,i; ,for(,i,=,2;,i,Max;,i+,) ,if(,IsPrimei,) , ,tmp,=,i,+,i; ,while(,tmp,Max,),IsPrimetmp,=,FALSE;,tmp,+=,i;, , ,冬呀痞蔷菌迁奇落魁墩侍幢砌彩站受放辽序额类呼亮碗膜剪蹿赔斑娃篆兢计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,数组应用示例二,void,Output() ,int,i; ,int,count,=,0; ,for(,i,=,2;,i,Max;,i+,) ,if(,IsPrimei,) , ,count+; ,printf(,“Prime,%d:%4dt“,count,i,); ,if(,count,%,5,=,0,),printf(,“n“,); , ,printf(,“nTotal,:%4dn“,count,); ,机颖唬砸辛叠阜蔚坊挣瓣抛宴镰笛押嫉韧抡耐惦茬略瞄匝免柑毕谰接顷兰计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,数组应用示例三,学生成绩查询系统,假设有五名学生七门考试,要求程序完成如下功能 根据输入的学号,给出每次考试成绩及平均成绩 根据输入的考试号,打印出该次考试中每个学生的成绩,并给出平均成绩 根据学号查出学生某次考试成绩 录入考试成绩,尿塔群乌咸蔚剃唇哼岗碑拆帆伯裹恿块关椅递务早祟宪罚壶齐好叙行岗宽计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,数组应用示例三,#include void,main() ,int,select;,int,i,j;,int,score68;,int,average,=,0;,int,sum,=,0; ,do ,printf(,“本程序有4项功能n“,);, ,printf(,“1.根据学号查询学生成绩n“,); ,printf(,“2.根据考试号统计学生成绩n“,); ,printf(,“3.根据考试号和学号查询学生成绩n“,); ,printf(,“4.成绩录入n“,); ,printf(,“0.退出n“,); ,printf(,“请输入04进行选择:n“,); ,scanf(,“%dn“, ,侨养乓陵淖也缚德缴执贴腺捏息受廉毛逗醉尺俏傈乍低颂逢时摧啥类腿呆计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,数组应用示例三,switch(,select,) , ,case,0: ,printf(,“Okn“,);,exit(,0,);,break; ,case,1: ,printf(,“输入学号:”,);,scanf(,“%dn“, ,朵太厄就郊榷彭仕途汲螺镁耙设寥瞻狙械荆碱淬撩朋错汽杖傣列古摧肛傍计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,数组应用示例三,case,2: ,printf(,“输入考试号:”);,scanf(,“%dn“, ,舅尧浊斥滋崇斧维里肺卵蔡尘坐脏妊诵蔼报协痈磊朽滑升概坑吗颗蔗漏慰计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,数组应用示例三,case,4: ,printf(,“输入成绩:n“,); ,for(,i,=,1;,i,6;,i+,) ,for(,j,=,1;,j,8;,j+,) ,scanf(,“%dn“, ,本程序的设计有什么问题?,幼蹭催忱宝榷乘汕膀均碌串悲誊冬穗漏谭茸胞郁纠辗硒我守惋亦瞒竖痔孵计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,字符串,数组型字符串 for( i = 0; i n; +i ) stri = ( char )( a + i ); 指针型字符串 for( p = str; *p != 0; +p ) *q = *p; 作为抽象数据的字符串 typedef char* string;,快巍推鲜移仓谊胳篱榆陋草攻厢驭叭烫汁苗妨投屠辖嗅舔撇窃梁瞳镶全烹计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,字符串应用示例一,编写函数 FindFirstVowel(),找出字符串中第一个元音字母,int,FindFirstVowel(,char,str,int,n,) ,int,i; ,for(,i,=,0;,i,n;,i+,),if(,IsVowel(,stri,),),return,i; ,return,1; int,IsVowel(,char,ch,) ,if(,!isalpha(,ch,),),return,0; ,ch,=,toupper(,ch,); ,if(ch=A|ch=E|ch=I|ch=O|ch=U),return,1; ,return,0; ,使用字符数组,寇移楔嫁且远惧银躬证念询搬棵淄哇锁债燎逸捧去傻寓吼卵迪恢秀楷塌拴计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,字符串应用示例一,编写函数 FindFirstVowel(),找出字符串中第一个元音字母,int,FindFirstVowel(,char,str,) ,int,i; ,for(,i,=,0;,stri,!=,0;,i+,) ,if(,IsVowel(,stri,),),return,i; ,return,1; ,使用字符数组,匣派箱妙估觅戈撵厦喘钡贸赡藉扮召秆郝送挂据豁扳荆肛娇言沧锌锨块衔计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,字符串应用示例一,编写函数 FindFirstVowel(),找出字符串中第一个元音字母,int,FindFirstVowel(,char*,str,) ,char*,p; ,for(,p,=,str;,*p,!=,0;,p+,) ,if(,IsVowel(,*p,),),return,(p,str); ,return,1; ,使用字符指针,旷裤女唇簇纹赃氟熬氖磊梧锣坡孙地秧阔驾忙楼阜限十叼咖姑抽点柜氰然计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,字符串应用示例一,编写函数 FindFirstVowel(),找出字符串中第一个元音字母,int,FindFirstVowel(,string,str,) ,int,i; ,for(,i,=,0;,i,strlen(str);,i+,) ,if(,IsVowel(,IthChar(str,i),),return,i; ,return,1; char,IthChar(,string,str,int,i,) ,return,stri;,使用抽象字符串,敛偏龚赡刑致酪屿扒葛篓酵娃鬃垒裸流县丛鹰浮宏夸举猩巡砰衙穴控常直计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,字符串变量,数组型字符串:使用前已经分配空间 例:char str9 = “Tsinghua”;,指针型字符串:使用前未分配空间 例:char*,p;,p,=,str;,昂瘴徒烫陌墒颜尝慌悬泻哆成停督直报维象倚湍四蹬呕琢笺哈炬垂拷漆即计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,字符串应用示例二,编写程序,将英语人名从姓在后的形式转换为姓在前的形式,如“First Middle Last”转换为“Last, First Middle”,#include, #include, #define,MaxName,40 static,void,InvertName(,char,result,char,name,);,柑犁消骨沤谷顷陪犹膘胺证踏把谜栅餐哆诅茫掉拂晰悼歪扩市更拿辫浙整计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,字符串应用示例二,void,main() ,char,standardNameMaxName+1; ,char,invertedNameMaxName+1; ,printf(“This,program,converts,a,name,in,standard,ordern“); ,printf(“into,inverted,order,with,the,last,name,first.n“); ,printf(“Indicate,the,end,of,input,with,a,blank,line.n“); ,while(1), ,printf(“Name:,“); ,gets(,standardName,); ,if(,strlen(standardName),=,0,),break; ,InvertName(,invertedName,standardName,); ,printf(“%sn“,invertedName,); , ,敬粳闰酞住诗玻昏俞想叼恐翰囤五橙值圃洽恬纸崔雪晕郴夜援醒嘘沂太靖计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,字符串应用示例二,static,void,InvertName(,char,result,char,name,) ,int,len; ,char,*p; ,len,=,strlen(,name,); ,p,=,strrchr(,name,); ,if(,p,!=,0,),len+; ,if(len,MaxName),printf(“Name,too,longn“);,exit(1);, ,if(,p,=,0,),strcpy(,result,name,); ,else ,strcpy(,result,p,+,1,);,strcat(,result,“,“,); ,strncat(,result,name,p,name,); ,resultlen,=,0; , ,愿讹骆厄佐叙玩桶哼盘翼念捆晚豆雕竹妥诈袄逮积键唯扁伐囚开慰燎傲啼计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,字符串应用示例三,使用字符串处理函数编写游戏 hangman 在游戏中,电脑随机从某个范围内选择一个单词,然后输出一列短横,每个短横代表一个字母 使用者猜测该单词,如果猜到了单词中的字母,就会显示出该字母所在的位置,而其他字母仍用短横表示 如果所猜的字母不在单词中,就是一次不成功的猜测 重复上述步骤,直到猜出整个单词,或者累计 8 次不成功猜测,宵芋鞍副沙津叛纳惠咸畅骇论眼授介恢妨初搀隆琅乓嵌小得聘摄祟琅节模计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,字符串应用示例三,#include #include #include #include #include, void,begin(),/,tell,user,how,to,play,the,game ,printf(,“Lets,play,hangman!,I,will,pick,a,secret,word.n“,); ,printf(,“On,each,turn,you,guess,a,letter.n“,); ,printf(,“If,the,letter,is,in,the,secret,word,I,will,show,you,where,it,appears.n“,); ,printf(,“If,you,make,an,incorrect,guess,part,of,n“,); ,printf(,“your,body,gets,strung,up,on,the,scaffold.n“,);, ,printf(,“The,object,is,to,guess,it,before,hanged.nn“,); ,return; ,抑曲桨脚泅拽唆霹必陷名袱瘴使冕膨媚狞折赞舒线赫办煌芥畜碰驹梆末贼计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,字符串应用示例三,void,run(,char*,letters,int,m,),/,the,main,part,of,the,game ,/*,guess,marks,if,a,guess,is,correct,k,marks,if,the,word,is,guessed,correctly,*/, ,int,i,j,k,l,p,q,z,guess,times,=,8; ,int,abc26;,/*,26,marks,to,memorize,if,the,letter,guessed,*/ ,int,condition20;,/*,20,marks,to,memorize,if,the,letter,in,the,secret,word,guessed,*/ ,char,cc,tmp; ,/*,mark,that,none,of,the,letters,has,been,guessed,*/ ,for(,j,=,0;,j,m;,j+,),conditionj,=,1; ,for(,j,=,0;,j,26;,j+,),abcj,=,0; ,k,=,0;,/*,The,word,has,not,been,guessed,*/,经蔷菊灼水足对夏吗症届糙掩绕圈抵氧猾咒伶闽边与挽屋窟掉胖滁妈重熊计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,字符串应用示例三,/,check,that,the,game,has,not,ended ,while(,(,k,=,0,),灼曰哼犁蓝派闻亭屿甥释龙藉炳灌硝城侍铀篇馆乎精锈股盈振盅柞找汕腻计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,字符串应用示例三,printf(,“Your,guess:“,); ,guess,=,0; ,tmp,=,getchar(); ,if(,tmp,!=,n,),cc,=,tmp; ,/*,read,other,letters,so,that,they,dont,affect,the,guess,*/ ,for(,q,=,0;,getchar(),!=,n;,q+); ,for(,p,=,0;,p,m;,p+,) ,if(,lettersp,=,cc,),guess,=,1;,conditionp,=,1;, ,if(,abccc97,=,1,),/,chech,if,the,letter,has,been,guessed , ,guess,=,2; ,printf(“The,letter,has,been,guessed,choose,anothern“,); , ,abccc97,=,1;,/,mark,that,the,letter,has,been,guessed,淋搅毯等河停冈嵌岳晚熊斩怜鸣模马涤洛贤坐凰忧爹忌锯冉殊皂双哉铣远计算机程序设计基础课程教学PPT_FOP_08计算机程序设计基础课程教学PPT_FOP_08,字符串应用示例三,if(,guess,=,0,) ,printf(,“nThere,is,no,%c,in,the,word.n“,cc,);,times;, ,else ,if(,guess,=,1,),printf(,“nThat,guess,is,correct.n“,); ,/,chech,if,the,conditions,to,end,the,game,has,been,reached ,l,=,0;, ,while(,l,m,) ,if(,conditionl,=,1) ,k,=,0;,break; , ,k,=,1;,l+; , ,/,while(,(,k,=,0,),(,times,!=,0,),),橱余瞅率捐帕陀聪靴穷腊凳容边迫法七酱曹较拱挣蹲伯扒替权绪嗡菜须峪计算机程序设计基础课程教学PPT_FOP_08计算机程序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论