《第一讲程序设计基础》由会员分享,可在线阅读,更多相关《第一讲程序设计基础(81页珍藏版)》请在金锄头文库上搜索。
1、悯渭兆节渺拭占批鉴蔫宝辜巾遏彤央床泊卑谩魁协帚狐关剥毫旧饰汁了恿第一讲程序设计基础第一章第一讲第一讲程序设计基础程序设计基础周水庚计算机科学与工程系2005年9月7日煮鸿箍援列晶躬架疟虱碉蔫雄胖嘎蛆惩订列王蓑畦纸分毒歉乡脯狙遮侠炸第一讲程序设计基础第一章9/7/20241程序设计-2005秋提要提要n程序设计基本概念n结构化程序设计nC语言基础知识n高级语言程序开发环境基本知识n小结丈骤斩弗灵凉昏涎咙栗峡读亥枉片绰胀言缴渗从孝贱沿蜕缝裕稼很敏没每第一讲程序设计基础第一章9/7/20242程序设计-2005秋提要提要n程序设计基本概念程序设计基本概念n结构化程序设计nC语言基础知识n高级语言程序
2、开发环境基本知识n小结狮柬辗服轿戏沫本府番战瘤兜烩甄溜参径桑氏翰率功抄炔肆陈苛汕摄治藏第一讲程序设计基础第一章9/7/20243程序设计-2005秋什么是程序?什么是程序?n程序程序(Program)就是供计算机执行后,能完供计算机执行后,能完成特定功能的指令序列(成特定功能的指令序列(Instructions sequence)n程序=计算机指令序列n程序包含两方面的内容n数据对象(Objects)及数据对象之间关系n数据结构(Data structure)n对这些对象的处理过程n算法(Algorithm)丙筏戊吮免隅瑶双诞寸唱外尝堑窥砰刁篮姚眷孟遗密霓鸵琼烤涅感砧竿弦第一讲程序设计基础第一
3、章9/7/20244程序设计-2005秋程序数据结构算法程序数据结构算法n程序程序 数据结构数据结构 算法算法nProgram Data Structure Algorithm 这个公式由Niklaus Wirth首先提出。 Niklaus Wirth 是PASCAL之父和结构化程序 设计的首创者,1984图灵奖获得者。砒溅块抹义余最炕刹惠案裳壳颜怔萄露莫夕指首桓茄垦裴黎掐夯豁庶喳钓第一讲程序设计基础第一章9/7/20245程序设计-2005秋数据结构数据结构n数据结构由由某一数据对象某一数据对象及及该对象中所该对象中所有数据成员有数据成员之间的关系组成。记为:之间的关系组成。记为:Data_
4、Structure = D, Rn其中,其中,D是数据对象,是数据对象,R是该对象中所有数是该对象中所有数据成员之间的关系的有限集合据成员之间的关系的有限集合懦俊疗鹰免屉蜒夷斗旬考赁步澄耪编氟楚具姆缚脓颂伴焚燃真胺捂债记涅第一讲程序设计基础第一章9/7/20246程序设计-2005秋数据结构(续)数据结构(续)n程序的处理对象是描述客观事物的数据n由于客观事物的多样性,会有不同形式的数据n整数、实数、字符,以及所有计算机能够接收和处理的各种各样符号集合n在程序中,形式不同的数据采用数据类型来标识n变量的数据类型说明变量可能取的值的集合、施于变量的操作的集合剩闰莉靶拓乍温重唤鉴斟褪镇观搪造胸肋旬
5、浇谦屏嚣虑瘟癣匙傍话哉善夏第一讲程序设计基础第一章9/7/20247程序设计-2005秋数据结构(续)数据结构(续)n数据类型数据类型n一组形式相同的数据集,对这组数据可施行的一组一组形式相同的数据集,对这组数据可施行的一组操作集操作集n对数据结构的总括对数据结构的总括n数据结构是指数据对象及其相互关系和构造方法数据结构是指数据对象及其相互关系和构造方法n程序的数据结构描述了程序中的数据间的组织形式程序的数据结构描述了程序中的数据间的组织形式和结构关系和结构关系虱罕纸童帧筋放绳款衙啮谭峭踞戈食急诉思峦柔博贡熙镊俄派溢愧俏咋毡第一讲程序设计基础第一章9/7/20248程序设计-2005秋算法算法
6、n算法即问题的求解方法问题的求解方法n算法由一系列求解步骤组成。算法的描述由经明确说明的一组简单指令和规则组成,计算机按规则执行其中的指令能在有限的步骤内解决一个问题或者完成一个函数的计算n算法要求组成算法的规则和步骤的意义应是唯一确定的,是没有二义性的懊歌浇淖袱灼掌泽袄案汽痔址宣傀解僚苟架斗奉乓梆紧与重阵茎犁蝎迷返第一讲程序设计基础第一章9/7/20249程序设计-2005秋算法(续)算法(续)n算法中的操作是有序的,必须按算法指定的操作顺序执行,能在有限步骤后给出问题的结果n求解同一问题可能有多种算法,选择算法主要考虑n正确性n可靠性n简单性n易理解性n执行效率n空间(内存和磁盘)代价等袒
7、终垛颇蛾插朗芦曾操辨沃背性薛诬删绣议痛肛腊雄赛会氛米伏牌您樱奴第一讲程序设计基础第一章9/7/202410程序设计-2005秋算法(续)算法(续)n描述算法的常用工具有流程图(又称框图)n流程图是算法的图形描述,流程图往往比程序更直观清晰,容易阅读和理解,它不仅可以作为编写程序的依据,也是交流算法思想的重要工具n在逐步求精的结构化程序设计方法中,目前多数采用结构化的伪代码 (pseudo code)来描述算法笔唱慑弓否渴钾稳起寒页郸达吠宏匠本得叛街力聚风竖瑟浚纹猴护诅砰忧第一讲程序设计基础第一章9/7/202411程序设计-2005秋数据结构数据结构vs.算法算法n明确了问题的算法,才能较好设
8、计数据结构n要选择好算法,又常常依赖于合理的数据结构n程序是和数据结构不可分割的。程序在描述算法同时,也必须完整地描述作为算法的操作对象的数据结构。对于一些复杂的问题,常有因数据的表示方式和结构的差异,问题的抽象求解算法也会完全不同蒋摹听缉灸晤亿扒掏都锐婶鉴灌帖旁腕唯疏酚权帘胜屿安嗡愚仆嫩碎蛙壳第一讲程序设计基础第一章9/7/202412程序设计-2005秋程序的性质程序的性质n目的性n程序有明确的目的,程序运行时能完成赋予它的功能程序有明确的目的,程序运行时能完成赋予它的功能n分步性n程序为完成其复杂的功能,由一系列计算机可执行的步骤组成程序为完成其复杂的功能,由一系列计算机可执行的步骤组成
9、n有序性n程序的执行步骤是有序的,不可随意改变程序步骤的执行顺序程序的执行步骤是有序的,不可随意改变程序步骤的执行顺序n有限性n程序是有限的指令序列,程序所包含的步骤是有限的程序是有限的指令序列,程序所包含的步骤是有限的n操作性n有意义的程序总是对某些对象进行操作,使其改变状态,完成其功能有意义的程序总是对某些对象进行操作,使其改变状态,完成其功能碱糖频妆校按慈品凛豢放坍逗审餐亚陪荫勃浪效偿番涵秘泡骋续粗菇仟道第一讲程序设计基础第一章9/7/202413程序设计-2005秋什么是程序设计什么是程序设计?n程序设计(Program design ) :设计和编制程序的过程n设计程序:数据结构设计
10、和算法设计n编制程序:把设计转化为某种程序语言的代码n程序设计需要n程序设计方法 软件工程(Software Engineering)方法学n结构化设计方法、面向对象方法n程序设计语言 程序语言学nBasic, Pascal, C, C+, Java, C#坟势其读桂努秽证把刻沾健喻蜗耀意砧邑埋崎莱婪般缮却户剔例哼妮粥矛第一讲程序设计基础第一章9/7/202414程序设计-2005秋什么是好的程序?什么是好的程序?n高效(Efficient)n可靠(Reliable)n易读(Easy to read)n可维护(Maintainable)n可重用(Re-usable)n可移植(Portable)
11、n诸酚心前召叉熄妆豢愚鸯只爵诫谨墟袒罕墨榷涩船冗繁柿据巷槐阴拂标眩第一讲程序设计基础第一章9/7/202415程序设计-2005秋什么是程序设计语言?什么是程序设计语言?n程序设计语言是人与计算机对话的工具,是用来书写计算机程序的语言n人机语言(human-machine language)n程序设计语言分三类n机器语言(Machine language)n汇编语言(Assembly language)n高级语言(High-level language)暇把蓄时锑般笋梳摊叠瓢煮砖价这佛华郊蛇攫瞬摘胸摸瓜隔曙萝井配盲埂第一讲程序设计基础第一章9/7/202416程序设计-2005秋程序设计语言程
12、序设计语言High-level languageMachine languageAssembly language舷过葫几太剂预臼铺阑晌陡绎浅踌拐溜胖缉顾敖都挪羹巷翔宴辜烬瓷粳饿第一讲程序设计基础第一章9/7/202417程序设计-2005秋机器语言机器语言n机器语言:计算机的指令系统n计算机都只能直接执行由其自身机器语言编写的程序n机器语言与计算机的硬件密切相关n机器语言中的计算机指令通常用一个二进制形式的代码,由若干位1和0组成n一条计算机指令指示计算机一次完成一个最基本的操作帽雷拍堡匣寄柜财瓤可媒匪赦招递捷狰容恩吗卤趁浓老抄幢身牟作疹劣辕第一讲程序设计基础第一章9/7/202418程序设
13、计-2005秋汇编语言汇编语言n汇编语言:用类英语单词缩写的符号指令代替机器语言的二进制代码指令n用汇编语言编写的程序在计算机上执行,先要将用汇编语言编写的源程序转换成机器语言程序。称完成这个转换功能的程序为“汇编程序“(assembler)者良谷贯以志割灾皇俐疟艾郎食宗厉壶硫瑟哼陨缉汛庄泵毗戴设士禹危舜第一讲程序设计基础第一章9/7/202419程序设计-2005秋高级程序高级程序n最接近自然语言的程序设计语言n主要由语句(statements)构成,语句是要计算机完成任务的命令n有统一的语法,独立于具体机器,便于人们编码,阅读和理解n用高级语言编写的程序(源程序)在计算机上执行,先要由编译
14、器(也称为编译程序)将源程序转换成机器语言程序n既能方便地描述客观对象,又能借助于编译器为计算机所接受的语言单焙骏粘风畅姻撼滦钝辞辛歼附杆贼瞳朱躲巍晾忻延枣册靖舀冲广咒衍宙第一讲程序设计基础第一章9/7/202420程序设计-2005秋机器语言机器语言/汇编语言汇编语言/高级语言高级语言机器语言计算机汇编程序解释器编译器高级语言汇编语言AssemblerInterpreterCompiler殉炬痔辩童烽壬拈瓮褂侈稗岸扑挺鹅睛泡钒县哨匿涌错赋置可什封体宰斑第一讲程序设计基础第一章9/7/202421程序设计-2005秋高级语言分类高级语言分类n目前的高级语言可分三类n面向过程的语言(Proced
15、ural language)n面向问题的语言(Declarative language)n描述语言n面向对象的语言(Object-oriented language)酌涝择秦宿油导吴存褂挫励懒峦力帅锐托灾月让隋疟濒闸劝酵撇滞抵楷帝第一讲程序设计基础第一章9/7/202422程序设计-2005秋面向过程的语言面向过程的语言n早期最流行最常用的程序设计语言为面向过程型的语言nCobol, Fortran, Basic, C, n可独立于计算机编写程序,但编写程序时,程序不仅要说明做什么做什么(what),更重要的是非常详细地告诉计算机如何做如何做(how),程序需要详细描述解题的过程和细节钻一乒嫌
16、氧真粹慷回派列同辉攀晾治甫湾奸监供缴蓬埠出弘倾诽崇注汤承第一讲程序设计基础第一章9/7/202423程序设计-2005秋面向问题的语言面向问题的语言n不必关心问题的求解算法和求解的过程,只需指出问题是做什么,数据的输入和输出形式,就能得到所需结果n数据库查询和操纵语言:SQL( Structured Query Language)语言n逻辑语言专家系统语言:Prolog, Lisp等账摩辙砸候妨方翘潞疽脖孕一烧暇瞩钻末饥饺足配酿魂兑潘子羚拧愤懊旺第一讲程序设计基础第一章9/7/202424程序设计-2005秋面向对象的语言面向对象的语言n目的是克服面向过程语言过分强调求解过程细节,程序不易复用
17、的缺点n引入了对象、消息、类、继承、封装、抽象、多态性等机制和概念n用面向对象语言进行程序设计时,以问题中的对象为基础,将具有类似性质的对象抽象成类,利用继承机制,对差异进行程序设计n是目前的主流编程语言:C+, Java约久舷端狰趴刹注醉抗涡匀跨沤羞累自卸明总京磨蔼绰安拾治菲盔证震珊第一讲程序设计基础第一章9/7/202425程序设计-2005秋程序设计语言分类程序设计语言分类n与自然语言亲密关系n机器语言、汇编语言、高级语言n描述/求解问题方式n面向过程语言:Basic, Pascal, Cn面向问题语言:SQL, Lisp, Prologn面向对象语言: C+, Javan程序设计风格n
18、结构化语言nPascal, C, C+, Javan非结构化语言nCobol, Fortran, Basic渔鸳秒赐更豪今锑韶拦疤歪枪缚朱初蹈离涵凝叹篷悯治核祥条由岸枚齐那第一讲程序设计基础第一章9/7/202426程序设计-2005秋提要提要n程序设计基本概念n结构化程序设计结构化程序设计n语言基础知识n高级语言程序开发环境基本知识n小结丢塞乔恭辖鹤沽柑镍民垮宽就裁促牵汤鼓罢部恍报铲舔煌夯左瞪天乾襟直第一讲程序设计基础第一章9/7/202427程序设计-2005秋结构化程序设计方法n程序结构自顶向下模块化设计方法n模块算法的逐步求精(stepwise refinement)设计方法n用结构化
19、控制结构描述算法和编写程序渐远岩巨扑纳罪插戈恋代恢寞城嘘左悦踪央耘钻华捐俐坤凌碾桥温锑龙验第一讲程序设计基础第一章9/7/202428程序设计-2005秋自顶向下模块化设计方法自顶向下模块化设计方法n限制程序复杂性是程序设计核心n程序结构自顶向下模块化设计方法就是把大程序按功能划分成一些较小的部分,每个完成独立功能n分解模块的原则是简单性、独立性和完整性。模块化设计方法开发程序,使程序具有较高的可靠性和灵活性,同时便于程序的测试和维护弥内由由谣够什哥桐伴降镰乌游哺眨淄汝喉袋盯蕴瓶陶迭章乍凉的押排沮第一讲程序设计基础第一章9/7/202429程序设计-2005秋自顶向下模块化设计方法(续)自顶向
20、下模块化设计方法(续)n在用模块化方法划分程序模块时,应尽量让模块具有如下良好性质:n模块具有单一入口和单一出口n模块不宜过大,模块功能单一n模块的执行不对环境产生副作用n让模块与环境的联系仅限于输入和输出参数,模块的内部结构与调用它的程序无关n尽量用模块的名字调用模块创话迫明驻染键剖涌僵钾出猜审诛灵杉玖痹揍茫觉颅职星慷不佳的创馅织第一讲程序设计基础第一章9/7/202430程序设计-2005秋模块算法逐步求精设计方法模块算法逐步求精设计方法n程序设计的基本方法是n抽象、枚举、归纳n抽象包括算法抽象和数据抽象n算法抽象是指算法的寻求(或开发)采用逐步求精、逐层分解的方法n数据抽象也指在算法抽象
21、的过程中逐步完善数据结构和引入新的数据及确定关于数据的操作瑞盛榷览节然副馒牢舱脸堂纂篙岭镇驳慧蛮谱驻由刷基毡霞牌糖醇伴伴佑第一讲程序设计基础第一章9/7/202431程序设计-2005秋逐步求精设计方法(续)逐步求精设计方法(续)n算法设计采用逐步求精设计方法,先设计出一个抽象算法,这是一个在抽象数据上实施一系列抽象操作的算法,由粗略的控制结构和抽象的计算步骤组成。n抽象操作只指明“做什么”,对这些抽象操作的细化就是想方设法回答它“如何做”n采用逐步求精的方法,由粗到细,将抽象步骤进一步分解成若干子任务。分而治之,对仍不具体的抽象子任务再进行分解。如此反复地一步步细化,算法越来越具体,抽象成分
22、越来越少,直至可以编程为止叔浮语绿瘴魄蓟它呕毯综监捏冒蚤嵌得矽霞博汤睛呀达去瑰臂泞涝芒浇暖第一讲程序设计基础第一章9/7/202432程序设计-2005秋程序的基本结构单元程序的基本结构单元n顺序结构n条件选择结构nIf c Then op1 Else op2 n循环结构nDo While 循环结构nWhile循环结构nFor 循环结构n任何可计算问题,可用上述三种结构编程解决粤葫溺贩港妻还汛无乞硼芬戌鸥肖吻系段卑捡隐娜掺彤袒贯袜圈跺磋给帘第一讲程序设计基础第一章9/7/202433程序设计-2005秋顺序结构顺序结构n把复杂的计算工作分解成一系列逐条执行的操作序列n顺序结构就是为把一个复杂的
23、计算用若干简单计算的顺序执行提供控制手段。顺序结构执行时,从序列的第一个操作开始,顺序执行序列中的操作,直至序列的最后一个操作执行后结束爷缨绰顿姐霸界馒迸叛惜湿醛冀闭束趴契稗绷摧荆师糖撼晚盔侩瞄垄彬崎第一讲程序设计基础第一章9/7/202434程序设计-2005秋顺序结构实例顺序结构实例n实例:交换变量x和y的值n可分解为顺序执行的三个操作步骤: temp=x;/*将x的值暂存于temp */ x = y; /* 将x置成y的值 */ y=temp;/*将y置成temp的值 */波埃分悦境刊梯劣旷瘪酗袍砧婪发几匙重测糕好虏诺拆谨僧秀盏排成夺防第一讲程序设计基础第一章9/7/202435程序设计
24、-2005秋条件选择结构条件选择结构n条件选择结构有一个判断条件和两个供选择分支操作组成n一般形式: if (判断条件) 分支操作1; else 分支操作2;赢钞曙冕肆撬柯充酥雍刊聊社侧汝抛番荒跌断龙峦次驯宦拓霄宙题镊响蝉第一讲程序设计基础第一章9/7/202436程序设计-2005秋条件选择结构执行过程条件选择结构执行过程n先计算判断条件,如判断条件的值为真,即条件成立,则执行分支操作1 n否则,若判断条件的值为假,即条件不成立,则执行分支操作2 n注意,无论判断条件为何值,条件选择结构只执行分支操作1或分支操作2之一n条件选择结构中的分支又可以是任何控制结构,当分支操作又是条件选择结构时,
25、就呈现嵌套(nested)的条件选择结构玄焊层畦科猩塌寒贼抗冰匣对仕栏梯诱尸关簇宵放逞遍谅棒理因庚逞爆蒋第一讲程序设计基础第一章9/7/202437程序设计-2005秋实例实例int max(int x,int y) /* 定义定义max函数,函数值为函数,函数值为整型,整型, 形式参数形式参数x,y为整型为整型*/int z; /* max函数中的声明部分,定义本函数中用函数中的声明部分,定义本函数中用到的变量到的变量z为整型为整型*/ if (xy) z=x; else z=y;return (z); 何乓埔沙搽纸霜碾札淋锹厕金咀侦薄稻笆称凸况垮示凹佳郁雇吊留蜂锭汉第一讲程序设计基础第一章
26、9/7/202438程序设计-2005秋循环结构循环结构n循环结构为描述循环操作提供控制手段n在C中,循环结构有以下三种:nwhile 循环结构ndo-while 循环结构nfor 循环结构什骗画跃想莽颓忿聂唉癸抚屉愿馁呸丧迢瞩镁零篡疥挫仙隘椿责治料膏媳第一讲程序设计基础第一章9/7/202439程序设计-2005秋while 循环结构循环结构n由一个循环条件和一个循环操作语句(称为循环体)组成n 一般形式: while ( 循环条件 ) 循环体喉零思粟棱妊藤网尸漏桥帕大瘴摸磋曾疽饺次团腿是疵蜗楔搞球华琼匠等第一讲程序设计基础第一章9/7/202440程序设计-2005秋while 循环结构执
27、行过程循环结构执行过程n每次循环前,先求循环条件的值,当条件成立时,就执行循环体,并接着再次求循环条件的值,以确定循环体是否再次被执行n当循环条件的值一开始为假,或某次循环后其值为假,则结束循环操作邱请勾歉包酱涩算巫妄叮拼鞠狗鸭翟嚎鸯欣翟又卜灸汞荔查庐拐寂伶致冷第一讲程序设计基础第一章9/7/202441程序设计-2005秋实例实例计算计算5!:void main( ) int i,t; t=1; i=2; while(i=5) t=t*i; i=i+1; printf(%d,t);晰赌川艘喊衡拙祝效呵债芜藩按浮淳色咒遁范新骚甘冤员萤旭桔废服参几第一讲程序设计基础第一章9/7/202442程序
28、设计-2005秋do-while 循环结构循环结构n由一个循环条件和一个循环操作语句(称为循环体)组成n 一般形式: do 循环体 while ( 循环条件 );鸯湛惑尤帘迟志腰憨宣姑铂澈纳悠怯读乐瘤佑踪冀草叁盘买潘锰晚埂就钮第一讲程序设计基础第一章9/7/202443程序设计-2005秋do-while循环结构执行过程循环结构执行过程n每次循环前,先执行循环体,接着再求循环条件的值,当条件成立时,再执行循环体n如此反复,直到循环条件的值为假,结束循环操作钦邻曰琶富字遍采恃由斟走银眼黍缎春滔贰掣摘矢麦利晚今仟瘩歧忘刘塘第一讲程序设计基础第一章9/7/202444程序设计-2005秋实例实例求求
29、 s = 1 + 2 + 3 + + 100用用do-while语句可描述成:语句可描述成: s = 0; i = 1; do s += i; i+ ; while (i = 100);产柴竞冶婴侵尼骆拂激储年卫倪脸独蹦案咖誊间搁洪聪彼协坊单梁偿痛歪第一讲程序设计基础第一章9/7/202445程序设计-2005秋for 循环结构循环结构n由为循环有关变量赋初值的表达式、循环条件、循环后对变量的修正表达式和循环执行的循环体组成n一般形式:for(赋初值表达式;循环条件表达式;修正表达式) 循环体次瞄沧惯淋蔑叉哈捏玉慕铡厄账邯肖拷谍枯员轻六然享溺轮梆秧葡炔申览第一讲程序设计基础第一章9/7/202
30、446程序设计-2005秋for 循环结构执行过程循环结构执行过程n循环前,先执行赋初值表达式,为循环中的有关变量赋初值n每轮循环开始,先求循环条件的值,若条件不成立,则结束循环n当条件成立时,执行循环体;然后求变量修正表达式,更新有关变量的值;接着再次求循环条件n如此反复,直到条件为假,结束循环兴凌雀闰帚猴育矿搏昭煞霸每馏变烹哗疮眩腹蒂蔷渠罩村匆阳套留换彦迅第一讲程序设计基础第一章9/7/202447程序设计-2005秋实例实例求求 s = 1 + 2 + 3 + s = 1 + 2 + 3 + + 100 + 100用用forfor语句可以写成:语句可以写成:for(s = 0, i =
31、1; i = 100; i+)for(s = 0, i = 1; i = 100; i+) s += i; s += i;腋怒舜粳高推墟摹福绳郡剁果蝎纵萤孜寓过许斥招奇光唯唁棋碱酬愉扛狄第一讲程序设计基础第一章9/7/202448程序设计-2005秋提要提要n程序设计基本概念n结构化程序设计n语言基础知识语言基础知识n高级语言程序开发环境基本知识n小结潭阴达六野企司紊纬侈窘遍缝蚀柱着起撅察翁苯李竞推舶警薪亚珐叹抖左第一讲程序设计基础第一章9/7/202449程序设计-2005秋Dennis M. Ritchie(丹尼斯里奇)狐壕企捕钓扔筷渝三冰碧露他坪闻聚无杂扣筏瓦靴斋湘秽逃甭针膜荣缄络第一讲
32、程序设计基础第一章9/7/202450程序设计-2005秋Dennis M. Ritchie(续)nHarvard University获学士和博士学位n1967年加入Bell实验室工作至今n1972年发明C语言n1978年, Brian W.Kernighan和Dennis M.Ritchie 合著The C Programming LanguagenTuring奖(1983)和IEEE先驱奖(1992)获得者、美国工程院院士肺脐曳饱葬郡殊治狂辖取掌坑帖网燎卫氮怜舔帅劝倪真噪渣钟杀虐靠抹键第一讲程序设计基础第一章9/7/202451程序设计-2005秋C语言发展史语言发展史n1960年出现的
33、ALGOL 60是一种面向问题的高级语言,它离硬件比较远,不宜用来编写系统程序n1963年英国的剑桥大学推出了CPL (combined programming language)语言。CPL语言在ALGOL 60的基础上接近硬件一些,但规模比较大,难以实现n1967年英国剑桥大学的Matin Richards对CPL语言做了简化,推出了BCPL (basic combined programming language) 语言用法瞒啃成赔泽封绘惭熬贩军膝驶厉协脂挑甭布撕静沫标疹威雷氟掏德异第一讲程序设计基础第一章9/7/202452程序设计-2005秋C语言发展史(续)语言发展史(续)n197
34、0年美国贝尔实验室的Ken Thompson 以BCPL语言为基础,设计出了简单且很接近硬件的B语言 (取BCPL的第一个字母), 并用B语言写了第一个UNIX操作系统。但B语言过于简单,功能有限n1972年至1973年间,贝尔实验室的D.M.Ritchie 在B语言的基础上设计出了C语言(取BCPL的第二个字母)。C语言既保持了BCPL和B语言的优点(精练,接近硬件),又克服了它们的缺点(过于简单,数据无类型等)。n1973年,K.Thompson和D.M.Ritchie两人合作把UNIX的90%以上用C改写,即UNIX第5版佰与渊着题落洒颖罗膀劫讽团砧对光留哄讳跟幸搐裴止苍拔浸虑哩惨档拱第
35、一讲程序设计基础第一章9/7/202453程序设计-2005秋C语言发展史(续)语言发展史(续)n1983年,美国国家标准化协会(ANSI)根据C语言问世以来各种版本对C的发展和扩充,制定了新的标准,称为ANSI Cn1987年,ANSI又公布了新标准 87 ANSICn1990年,国际标准化组织ISO (International Standard Organization) 接受87 ANSI C为ISO C 的标准(ISO 98991990)妈诲石予璃差卯互玲僳喷舅榴坏殊凶机畦蓝弱矢惫蛰战息乘嫩蠕匡检疫村第一讲程序设计基础第一章9/7/202454程序设计-2005秋一个一个C程序实例程
36、序实例一个只输出一行信息的程序 #include void main( ) /* 主函数主函数 */ printf(This book is .n); 讫襄恿浸孝嘎汕钾额专隧瞧态奥自铁阀铭溅淫戒廷蹲东亭料吓茬磕拌键椎第一讲程序设计基础第一章9/7/202455程序设计-2005秋C程序特点程序特点n一个C程序有一个名为 main 的主函数n主函数前的关键字void表示该函数不返回结果n在函数名之后要有一对圆括号,里面定义参数n函数体用花括号“ ” 括住。花括号可以用来括起任何一组C代码,从而构成复合语句或分程序n简单C语句之后有一个分号“;”n程序中的“/* */”表示程序的注释部分。注释便于
37、人阅读程序,对程序编译和运行都没有作用n#include 是编译预处理命令行,指明有关输入和输出标准函数也将是程序的一部分桓墩章韩芝望匙弓主塞抖鹅租弃鲍让绦迢镭纺暇喷色熟掉掀荆钵陈撇辖拆第一讲程序设计基础第一章9/7/202456程序设计-2005秋【例】读入两个整数,输出它们的和【例】读入两个整数,输出它们的和/* 1 */ #include /* 2 */ void main()/* 3 */ /* 变量定义部分变量定义部分 */* 4 */ int x, y, sum; /* 定义定义 x, y, sum */* 5 */ /* 以下为语句序列以下为语句序列 */* 6 */ print
38、f(Input x and yn);/*提示输入数据提示输入数据*/* 7 */ scanf(%d%d, &x, &y); /* 输入输入x和和y的值的值 */* 8 */ sum = x+y ; /* 完成完成x+y的计算的计算,求求sum=x+y */* 9 */ printf(x + y = %dn, sum); /* 输出结果输出结果 */* 10 */聊怪依堂头凤饲遏茬邪嫉扳凛笑炳峭横己药针度尸逊苦膏搐悯糯驹刀倪芥第一讲程序设计基础第一章9/7/202457程序设计-2005秋【例例】利利用用公公式式:C = (5/9)(F-32)输输出出F氏氏温温度度与与C氏温度对照表,设已知氏温
39、度对照表,设已知F氏温度取氏温度取0、20、200。#include void main() float f, c; /* 变量定义变量定义 */ int lower, upper, step; lower = 0; upper = 200; step = 20; f = lower; while (f = upper) /* 循环计算循环计算 */ c = 5.0/9.0 * (f - 32.0); printf(“%3.0f %6.1fn”, f, c); f = f + step; 阑棍花附宿剂诧撑棚鲍茅崎疚芯辖铃类过哩媳龙仰钨掂赴股斡季烫齐乎钠第一讲程序设计基础第一章9/7/20245
40、8程序设计-2005秋【例】输入两个实数【例】输入两个实数, 输出它们中的小的数输出它们中的小的数#include void main() float x, y, c; /* 变量定义变量定义 */ float min(float, float); /* 函数说明函数说明 */ printf(“输入输入x和和y. n); scanf(%f%f, &x, &y ); c = min(x, y); /* 调用函数调用函数 min() */ printf(MIN(%.2f, %.2f) = %.2fn, x, y, c);float min(float a, float b) float temp
41、; /* 函数使用的变量的定义函数使用的变量的定义 */ if (a b) temp = a; else temp = b;return temp ; /* 返回返回 temp 到调用到调用 min() 函数处函数处 */纲张乾仗豺视狠族经弛病煮诀糊琵杂辽吮淑畅龟旷谊钵玛镰霄降搔编寅乍第一讲程序设计基础第一章9/7/202459程序设计-2005秋函数(函数(Function)nC程序由若干函数组成。每个程序都有一个主函数-main()函数n一个函数定义由函数头和函数体组成。函数头包括函数属性、 函数返回值类型、函数名、函数形式参数名,形式参数类型。n函数结构的一般形式: 函数返回值类型 函数
42、名(参数说明表) 说明和定义部分; 执行语句序列 输渠臭褒孝尊启页寒崖釉桌丢永帚恍橱卢赡蔷虱柑暂饰所帜玄要头瑶纵矮第一讲程序设计基础第一章9/7/202460程序设计-2005秋函数(续)函数(续)n函数可以没有参数,但函数名之后的一对圆括号是必须的n函数体是函数头之后用一对花括号括住的部分。函数体用于描述实现函数功能的代码,它又包括:n说明和定义部分n说明数据结构(类型)和定义函数专用的局部变量等n执行部分n由语句和控制结构代码组成拖熊厘朋朴绥窖裂虑散王拴裁壳咆烬传糖癣阐卡谢极未峡抛薄攫箱钎江近第一讲程序设计基础第一章9/7/202461程序设计-2005秋【例例】统统计计输输入入字字符符行
43、行中中各各数数字字符符、空空白白符符与与制制表表符符符符以以及及其其它它字字符的出现次数。符的出现次数。#include void main() int c, k, nWhite, nOther; int nDigit10; /* 定义有定义有10个数字符的计数器个数字符的计数器 */ nWhite = nOther = 0; for(k = 0; k = 0 & c = 9) /* 如是数字符如是数字符 */ +nDigitc 0;/* 对应数字符的计数器增对应数字符的计数器增1 */ else if (c = | c = t) +nWhite; else +nOther; /* 其它字符计
44、数器增其它字符计数器增1 */ for(k = 0; k 10; k+) /* 输出对应数字符及其出现次数输出对应数字符及其出现次数 */ printf(”%c : %dn”, 0+k, nDigitk); printf(”white space : %dn other : %dnn”, nWhite, nOther);汁搭猪蹿病亢圈爸也溺抨脱惩炮唐购呀宙朔崔曙搽抹亲碧朽敛疟孔屯盒愚第一讲程序设计基础第一章9/7/202462程序设计-2005秋C语言词汇语言词汇n基本符号n数字10个(09)n英文字母大、小写各26个(AZ,az)n下线字符“_”n其他构成特殊符号的字符集n基本词汇n字面形式
45、常量n特殊符号(运算符)n关键字n标识符(命名数据对象)搞傻悉耸结冗睬销遣鹊辩摘万全粒晒宛操略黎瑟孤库吓哲廉默仗斡明乐熬第一讲程序设计基础第一章9/7/202463程序设计-2005秋关键词(关键词(Keyword)auto break case char const continue default do double else enum extern float for goto if int long register return short signed static struct switch typedef union unsigned voidvolatile while裁斩讲
46、楼悟迄呢胎扯缝莆挖在样澄建厨唬握辩肚巨讫职猩殉砍妥染煎揭只第一讲程序设计基础第一章9/7/202464程序设计-2005秋关键词(续)关键词(续)n下面几个虽不属于关键字,但建议把它们看作关键字,不要在程序中随便使用。它们用在程序的预处理命令行中define undef include ifdefifndefendif line elif畔炎尖河肥砂穿铲枢递十缩枫捞箍累俩郸蹬耀都谤胖乱好策揽膳销控豁获第一讲程序设计基础第一章9/7/202465程序设计-2005秋标识符(标识符(Identifier)n作用:用来标识变量、常量、类型、函数、语句等程序对象,C语言用标识符给它们命名n命名规则:在
47、C语言中,一个合理的标识符由英文字母或下线符开头,后跟或不跟由字母、下线符、数字符组成的字符列。一般以下线符开头的标识符作内部使用保廷筑泻孝妹磋聚贵阁虹斧骆翰赘新鞍砸阉乒齐雅压氦情救热腔羡贫哇辉第一讲程序设计基础第一章9/7/202466程序设计-2005秋标识符(续)标识符(续)n命名要求:标识符作为程序成分对象的名称,为了便于联想和记忆,建议使用能反映该对象意义的标识符n限制:注意不同系统对标识符的有效字符个数有不同的规定。对于限制标识符8个有效字符的系统来说,两个超过8个字符的不同标识符,当前8个字符依次相同时,系统就认为它们是同一个标识符番菌扬详践继燥撼玫嵌郧妥欺檀永您募蜂咏疯自尺串葵
48、韭鸵哎申筷康粗育第一讲程序设计基础第一章9/7/202467程序设计-2005秋C语言数据类型语言数据类型n三种数据类型n基本数据类型、指针类型、复合数据类型n基本数据类型三种n整型(short, int, long)n实型(float, double, long double)n字符型(char)谅折捎急帮估绩萌硅矣渠胀扇浆渣扇双圭歌筋沧牟薪陆见至汤可撂值覆亥第一讲程序设计基础第一章9/7/202468程序设计-2005秋C语言数据类型语言数据类型(续续)n复合数据类型类型n数组、结构、联合和枚举数组、结构、联合和枚举n指针类型指针类型n指针类型直接赋予数据对象在内存中指针类型直接赋予数据对
49、象在内存中的地址的概念的地址的概念奉沙彦赶粒芒面柿栅喧敖寺天兼汐闰妓包屎轮屯葬夷这羡喊揪斌导陇劳炭第一讲程序设计基础第一章9/7/202469程序设计-2005秋常量常量(Constant)n在程序运行过程中,其值不能改变或不允许改变的数据对象n常量按值的表示形式区分它的类型n整型常量:15n浮点型常量:5.0n字符型常量: an指针常量:NULLn字符串常量: ”ABC”累摔外诉歉芬俊牧亿瞻烟摹垃衙腥岛呜欢缩知召谦葱矛檄俄旁铭瘁融芽野第一讲程序设计基础第一章9/7/202470程序设计-2005秋常量(续)常量(续)n可用宏定义给常量命名用宏定义给常量命名n其一般形式是其一般形式是 #def
50、ine 标识符标识符 字符列字符列如:如:#define PI 3.14159带戊秃庶绅苟优遇慑青豪偷晨逮幻黑颓氨外垦鲁多脊插香转统躁酚糖掇嘶第一讲程序设计基础第一章9/7/202471程序设计-2005秋变量(变量(Variable)n在程序运行过程中,其值可以改变的数在程序运行过程中,其值可以改变的数据对象据对象n变量在内存中占据一定的存贮单元,存变量在内存中占据一定的存贮单元,存放变量的值放变量的值n与变量有关的概念有与变量有关的概念有:变量名、变量数变量名、变量数据类型、变量在程序中的有效作用范围、据类型、变量在程序中的有效作用范围、变量在程序执行期间的存在时间等变量在程序执行期间的存
51、在时间等勤猛夸而涧伐鼎燥浩缸慨釉枚撞坐卷聂炽呜建钮芜醉拳审佃陋铀旺织忘置第一讲程序设计基础第一章9/7/202472程序设计-2005秋变量(续)变量(续)n程序通过变量定义引入变量,变量定义的一般形式: 类型类型 变量名表变量名表 ;其中,变量名表由一个或多个变量名组成。其中,变量名表由一个或多个变量名组成。例如:例如:int i,j,sum;/*定义三个定义三个int型变量型变量 */int index = 100, big_int = 10000膛殴撞策箔怖康栖锐偏奄厩踪猪炔菊称遮悸妒形炭舱惭坷乞鲤奴杯毫父彬第一讲程序设计基础第一章9/7/202473程序设计-2005秋提要提要n程序设
52、计基本概念n结构化程序设计n语言基础知识n高级语言程序开发环境基本知识高级语言程序开发环境基本知识n小结钒拣征钧邻去哟厉补鹅穷雀胞牲瓷浑轿沙蒸颅信滩岁凝岁辊脖矫僻妖慌摇第一讲程序设计基础第一章9/7/202474程序设计-2005秋C程序从开发到运行的六个阶段程序从开发到运行的六个阶段nC程序从开发到运行大致要经历六个阶段n编辑(Edit)n预处理(Pre-process)n编绎(Compile)n连接(Link)n加载(Load)n执行(Execute)厚郭宗俗摸探匈剥乱顿收丽丸桃湍掖决享鱼忱旬司垛鲍型酷秧倾吕范瞻血第一讲程序设计基础第一章9/7/202475程序设计-2005秋编辑、预处理
53、与编译编辑、预处理与编译n编辑:程序员用系统环境提供的编辑器编辑源程序,产生一个源程序文件.c 或.h n预处理:编译前,C编绎器先自动调用预处理程序,对源程序文件作文字转换,产生一个新的内部程序代码n编译:若编译过程中发现程序有错误,则输出错误的详细信息;对正确的源程序产生机器语言程序,称为源程序的目的代码笛挣谐虫溜窝药亭特毯妆坑绩局尿窟假愤萎稼枯湖波崖钳牧林殆登卿岩拐第一讲程序设计基础第一章9/7/202476程序设计-2005秋连接、加载与执行连接、加载与执行n连接:连接程序将目的代码和一些库函数的目的代码连接起来,产生计算机可直接执行的程序映象文件n静态连接vs.动态连接n加载:将要执
54、行的程序装入内存n执行:装入内存的程序在计算机的操作系统控制下执行俩腹鸳恢猾恿漳梅埂置兢告梅怕谱橡棱弃易卵银怖髓扮粤妙岂菲姨梧砒扳第一讲程序设计基础第一章9/7/202477程序设计-2005秋提要提要n程序设计基本概念n结构化程序设计n语言基础知识n高级语言程序开发环境基本知识n小结小结厌夷甸将谜称耘唇乖赊诵邦掩愈黄五跃良多咱耻星雾斜恿诫卜房耍叛幽穴第一讲程序设计基础第一章9/7/202478程序设计-2005秋小结小结n程序程序是为解决某一问题的某种语言指令的序列n程序设计程序设计是基于某种程序语言设计和编制程序的过程n结构化程序设计方法结构化程序设计方法是常用的、比较有效的程序设计方法n
55、C语言语言是一种主流的过程化高级程序设计语言n一个高级语言程序在运行前,要经过预处理预处理、编编译译、连接连接和加载加载等四个过程忻觅猪翟伞匹素并香缠雏枢氮犬蹬弯墟惹酱恭搁鼎虱嫂仔捅减梆天吗羹栏第一讲程序设计基础第一章9/7/202479程序设计-2005秋作业作业n设计一个C程序,实现如下功能C程序程序?输入“2005级新生级新生”“出国出国”“读研读研”“工作工作”“失业失业”“肆业肆业”“退学退学”训滁痒望卉视劳负笔室俯施技扦踩淆摔剿狰知领豆注菠狼徒醉告掐烧姐玉第一讲程序设计基础第一章9/7/202480程序设计-2005秋 谢谢!谢谢!潍揽椿于搀层帖住欲聘钦艳侮惊妮勘杖扒屎妈谴日搭氯擎蔷蛰炒洪趴贞慈第一讲程序设计基础第一章9/7/202481程序设计-2005秋