《标准C语言基础教程(第四版).docx》由会员分享,可在线阅读,更多相关《标准C语言基础教程(第四版).docx(29页珍藏版)》请在课桌文档上搜索。
1、第-部分基岫知MKS第1个计妹机程汴设计介绍第2章在Cifti编程中开始第3章数据处理和交互式输入K1中计算机租用设计介绍1.1历史和慢件用某种机器执行计算的过程儿丁,与有记录的历史一样古老.44早的计算工具是算盘(ahncu,在当今的中国仍很常见,就像英田的手持式计獴擀If,但是这两类设i都需要人的11按畲与才能使用“用算IS相加两个牧要求按动算球.用计算相加四个数机要:求按下四个数字谊和加号Bh仃心Jt的首次尝试建造一台可筑程的计W机器是在1822年由英国的衣尔斯巴比奇(CharlesBabbaKe)进行的.侍人诺行庠伦(IqrdByron)的女儿艾达拜伦(AdaBymrO开发过Tl指令,
2、可用于操作这台机:(长麻上这台机器没有被建造出来)。这台俄巴比奇称为分析引塞的机器尽我在他的“生之年没被成功地建过出来,但是可战程的机器的概念被保窗下家.1937年.荚Ia艾奥比州立大学的均翰阿塔纳索夫(JohnV-Aianasoff)博I:和一位名叫克利福德贝里(CMfeHBerry)的研究生利用电子元减件每分实现这种机JS见图1.1).这台机器称为BC.ABC表示阿塔纳索夫一贝里计究机(Enascrf-BurryConputer).运行时要求-幺撵作人心控制外SJ的配戏以执行残IW的运算,因此,内部存钻一殂可秒代的1今的IJ标还是我有达到.图1.1查尔斯巴比奇的分析引擎1939年末爆发的第
3、二次世界大成.也得开发计灯机的需求更加强劲.这项工作的先驱之一支美W宾夕法尼北大学麻尔J:程学院的妁翰马茨奥(JahnrMauchIy)博士,他曾长拜访过阿塔纳素夫并见过也的AHC机器,后家就帮手与普瑞斯休艾克特”.PresperEckert)一起研制一种称为ENlAC(ElectricalNunericalIntegratorandCcoputer)的电广数字枳分计停机.这个项H的基金由美国政府提供.这台机最早实现的功能之一是计尊大炮发射的徐道机迹.到1X6年完成时.ENlAC已经包含18OOO个真学电子管明妁30(XlOFft,每秒能执行50次加法或360次来法(见图1.2).图1.2EN
4、IAC在利用我空电行的ENlAC的研刎工作正在进行的问时.哈佛大学的研究人员正在从事利川机械绰电洪开关研制名为Mark【的计算机(见1.3).该机既于】弘4印完成,不过它毋秒只傥执行6次乘法.这两台机择与皿一样,都雷饕外部巾。才能执行预期的运算.图1.3MarkI1949年5月6Bi及普制桥大学EDsAC(ElectronicDeleyedStorageAuUxiaticmpuler,电子时存砧门动计灯机)的成功运行.能存他秩序的计算机的取线目标终于实现了.除了执行计尊之外,EDSACi1.fiS解存储数据和指导计算机运行的指令.EDSAC结合了一种存彷券的形式.存储SS的Ki理由约翰玛诺侬曼
5、JhnWxiXemHnrO提出,允许取何(FtriCVeA条指令,然后取向执行这个指令所需要的数推.同择的戊计和操作成理现花仍然被人多tifB.机所使用椎由必加攵变的特点是用于制造计.源机的无部件的大小和执行通收.以及存储在计饪机中的积序类型.用体察说,用于Wiif和机的无蔺件砍为硬件(hardware).而程序称为软件CoEare).计算机硬件计停机由称为硬件的物理元部件构成,,硬件的用途是在一个已存储的程序的指导F使数据的存储和处理更容S.如果计算机硬件能够别人样使用相同的符号存储数据.如放字126就可以用符号1.2和6存储.同样.我们认做“A*的字母也可以用这种相同的符“进行存储.令人遗
6、Ie的是.计算机内的海件要求种不同的数字和字母农示方法,只有首先理解了H算机为什么不能使用我。的籽号之后,才能进一步理篱数字在机揩内部是如何史东的.这将使理好用于存体和处理数据的计口机的大分部件更容易些.位和字节计算机中最小的和最基本的数据项是位(bi).从物理上U.一个位实际上此个廉能开乂能大的开天.习慎上开的位置用O表示.而关的位置M1表示遗然的是,这个习惯有口忒断,并且保常,常会遇到相反的情况,开和关的位区分别表示为1和D.历史注解;二边制校本知识在几年的时间里.因塔纳索夫樽士加在为如何设if台低帮助他的艾奥比州立大学的研究生解决乂杂的力和式求解同咫的计第机器面大伤胞的他考虑正道一日些r
7、二进刎敝的机;s二进制数型用于具仃两个容妙辨别状态(开和关)的机电装置城门然的系统,但他又担心人O不会使用这种不是基于燃态的和方JH的十进制系统的机揩Wfi5.在1937年伊利诺伊州的小娘馆里个杂冷的晚上,也终r下决心采川呆简单的利赞用以小的二进制ft(t)来IW过他的计算机sa.接下来的两球他和研究生克利福德贝里建迨/第台电:.物字计算机称为皿:(阿塔纳索夫一贝里H!?机).从够时起,大多款主流的计算机一汽是二进剂机器.小的位只能衣示数侑O和1.这取M了它的可用性.因此为了存M和传输故据,所有的计口机都把织位沉令在一起.8个位祖令在-也形成个更大的收元.它是个几乎地川的计就机标小.称为1个字
8、1V(byte).1个字节的8个便中的fij一位旗可以是。也可以是1.总共能移表示256种不同的模式(PatsE).这些模式由IXIQIM)QW(8个开关全开到IIlnln(8个开关全关)和它们之间所有的O和1的可能祖合筑成.这些校式的姆个都能够用来衣示字母发中的一个字母、共他的触字符(美元符,汉号等)、位数字或者多位数字等.由。和1组成的用表示字母m数字和H他取字符的模式Oi林为字符码(比如ASCu码,它将在2.1节介的),对于类似名林和地址以及任何需娈处理的文本而N,字符码是作常有用的但足对于算术数据.它几平从来没有被使用过.这有两方面的原因.首先,把十进IWtk转换成字符码霸要为碌个故字
9、/省个代码.对于大数字.这会浪费计口机的内存空间.然而奥塞本的原闪是:暴F数字10的tMM计数系统本身就不核计停机内部的帔件所支持,同忸起位是il算机的小本存心部件,只能采用两个可能的表示。和1的开关状态之一.这发明趋于这两个状电的计数系统将产生更多的意义,事实上就是这样,1.8节将介绍端常见的使用M于2的计数系统.财丁计券机内部的计数系统不同卜进系统的情况.我们应该不会想到奇怪.举例来说,你也许熟爰下面两个itSk系统,并H能够容易堆识别它们,罗马数字:XIV哈桁标记系统;部件所行的计算机从价假儿仃万美元的大里超级计算机到价他几百美元的桌IBi个人计JIt机理必须执行一个最小的任务妪.并具备
10、完成下列任务的能力:1 .接收输入,包括数据和折合输入,2 .显示输出.包括文本和数字输出.3 .存储数梯和指令.1.对怆入的数据或已存储的敖品执行算术和逻轼运算.5.监视.控制和指导乐统的全SJ拨作和I序,图1.4衣示的是支持这些解力和蛆成合计算机硬件的完瞥的计。机部件.图1.4计弊机的基本硬件的元历史注解:图其机(TurinMachine)在2。世纪30年代和,K)年代,艾伦马西森图曼(AlanWtthiSQnTuring,1912-1960和其他人提出了一种描述计#机渊应谖能好搬什么的理论,图灵的理论机SS称为图灵机,它包含杆决编程何题的最小操作象.通过给这样一台假校的计算机纲指令.图灵
11、希里悠济语明所有的问题都能够解决.它在证明中佚得的成功是仃些计8不傥被任何机IK超决就像仃些“虺不饯被人解决样.在.第台电计。机建造之前图M的工作形成了ifWtIlS论的-H1.也对这个研究团队的贡献H按守效了他的理论得以具体实现,这就是二播时期开发出的关耀的变码横件计算机.主存储器单元(MainMenoryVnit),这个雎7口按照字节麻序存储数累和指令.如处要操作计舞机.个程序必须驻例在主存储器中.主存储器将1个或多个字版组合成一个雌元.杉为字(wsd).尽管更大尺寸的字句利FH比机速慢和能力的增加,但它是通过潴加H算机的复杂性达到的.早期的个人计算机(PC).如AppleUe和CEdor
12、e计翼机,在内都存储和传送由1个字节现成的字.第台IBMPC使川由网个字节组成的字.曲目前更多的基子英制尔芯片的PC存他和处理由J个字节细成的字.字在计以机存保备中的扑列类慑丁人旅坨中套间的排列.旅忸中的忸个套间都由相同大小的历间祖成.就像祗个套同柢右惦-的月间*?让颈客在找和确定它样.H算机存心器中每个字排有性-的敖字堆址*与房号一样,字地址总是正的.无符号的、用于置找和物定用途的克整数?,与瑞伯国向通过房门连接形成更大的台同样,字徒够纲台也更大的肽元.以适应不同大小的放施类型.作为一个物理设备,主存储5用防机存取存储i(RAM)构造.这意味着每一段存读器都能幡与其他段杆被快速地机存取,主存
13、储Ift同样是为央性的(“4Iaile).无论其中存偌的是什么内容.一旦电源切断就会丢失.当程序正在被执行时,程序和效据总.是存站在IMM中,IMM的大小通常以用户可获得名少RN的字出来标明.当前的PC存储器股至少有512兆字节(1兆字节=1MB).第二笑存储;S是只读存储器(ROM).ROM是非易失性的,当电淑美斯时它的内容不会洒失.RcW总是包含不假丢失或者不能被用户改变的基本指令,这些指令包括:在电影接通时后动计籁机运行所必须的指令,花计。机运行时制造Ift要求必须永久可访问的其他指令,中央处理单元(CPS.中央处理单元由陶个基本的了单元组成:拄M单元(COntroIunit)和算术9辑
14、单元(A1.I.Aritheeticand1.osicUni.拄制柒元指导和Ift视计算机的运行,它隹持对存怙器中下一条指令保留的Zw的鼠踪、发出从系统的其他单元读取致摄和把数幅芍到系统的其也中无所优要的信号,并II执行所为的Ifi令。AW则执行计算机提供的所有计算,Ulfill.收,比1等。CpU是计算机的中心元件和堆品战的部分.当前的CPu利用片微芯片构造.称为Ri处理:(Sicruprocessor).图1.5概示的是Viit笔记本电脑中使用的一个代衣技术发展水平的微处理器芯片及K内部结构,图15代表技术发展水平的英特尔微处理班输入/输出单元(I/O).饱入/输出朝元提供对计惊机的访问,
15、允许计算机输入和输出数据,它是连接外IH设备(InttA,控川台屏解和打印机)的接口.二极存件;S.因为大容fit主RAM存俅骞仍然相对M:;”“行易失性,伶为球微集的永久春储区是不实际的.二雄或者物助存储设备可实现这个用途,过去是将数据存储在打孔的卡片.成帝或其他的媒介上,实上现在所有的二级存储器播是磁带、出次和只求光fitCD-ROM).幽带和磁机的衣面涂行层能够被俄化以存他牧据的物质.当Iiif的确密姆英寸U英寸=2.54悚米使第存彷儿干个字符一盘磁带可以存储几万兆字节的数报.琳帝本上是一种仃!序的存储介质,这意味着它允许数品以一个从开蛤到结束的有胤序的流被写入和读出,如果希望存取磁带中
16、麻的块数第,则必须打描所有在前而的数据,以找到这块数据,囚为这个特点,磁带主要用于大Ie历史数据的备份种更便利的快速存取效掘的方法是利用直接存取存储设拓(DASD.directaccessstoragedevice).它允许计算机读写任何一个文件或程序.而不受它归在存俅81介质上的彼盥的约束.在光盘(6)出现之前.地通行的MSO是退盆,,一个磴性慢盘加11nicharddisk)由你国挠在同一根轴上的一个或几个钠性盘片生成,个可移动的存取胃的定读写机械瑟先在可记录的衣面上.他并不按软st片表面的位Tr这样的配KinlS1.6所示.图1.6检找驱动JS的内Sf结构图1.7奴初的(20世纪80年代
17、)IBM个人计算机械早出现的停爵圾电存储器是可移动软盘(floppydisk).它戢范行的尺寸处比在3.5英寸.有1.MMB容聚.后来出现称为ZiWla的可移动磁盘.它仃250MB容域.而容城达到650MB至700WI的光盘(CD)是当IW苜选的知助存储设备.与存储容量:大陆及增加同时发生的是计算机处理速度的快速提高以及计*机大小和价格的显#卜降,】950年价值一百多万美元的计第机硬件,现在用不到500美兀就徙买到H有同等处理能力的机.打个比方.如果同样的下降速度发生在汽车行业.则劳斯茉斯(Rolls-Royce)汽车现在Mlo荚元就健买到I与50多年前的计算机相比,现在的it算机的处理速度已
18、短提鬲了几千倍,当曲的计算机的计算速度以每秒几百万条指令(MIPS)或几十亿条指令(BlI1S)计算.作为比较,图1.7展示的是一台20世纪80年代早期的台式IBM个人计口机,而图1.B届一台当前的ImlI&记本电依.图1.8当前的IBM堡记本电口练习1.】简答区1 .定义术语“便。一个位能够表现什么快?2 .定义术语“字节一个字节能够表现多少个不同的位模W?3 .怎样在计算机中用个字节发求字符?4 .定义术语字愉出某些常见小儿机中学的大小.5 .CK)的两个主要加分是什么?每个部分的功能是什么?6 .IMM和W)M之间的差别是什么?它们有什么共同的地方?7 .a.什么是输入/输出单元?b.写
19、出三个连接到输入,输出限元的设备名徐.8 .定义术喈“二线存晶器给出三个二级存储器的例子.9 .喙序存估溶和真按存取存彷揩之间的基别是什么?H接存取存砧算的优点是什么?10 .定义术语“微处理捐、山日常生活中使用微处理器的三种情;11 2城程谓声ISfflI2中显示的现代笔记本电脑一样,计停机是一种由物理部件组成的机器,与其也机器一样,例如飞机、汽中或对草机.计惊机也必须被开启,然后才能被珞收成排媒,以完成我们布改它做的W情.而完成任务的方式就是计算机区别于其他机然的地方.例加花新汽车中.控制由坐在汽车内的驾驶员挑供.在计尊机中,这个5驶贝杉为程序(pronrae).更正式地曳,计算机程序(E
20、nPUtCrPr口加)是用干操作计算机并产生特定结果的指令和致黑的姑构化组合.用于程序或程序Sl的另个术语是“软件在本段口中,我们将交件使用这两个术语.W(profi三11ing)JIJ种计妹机能笫响应、其他和序员能算理胡的语宫端、这些指令的过程.能算用于构造程:,幻称为编程ift?J(ProgramWr.muae).当前可用的编程谢言以各种形式和类型出现,这些不同形式和类型的选力使娘程过程更容易,它们或者专门的对某个硬件的特别M性,或井满足某个应用程序的特殊变求,但是在她本反面.所芍的程序都必须依终转换成机JS语言程序,这是能缈实际掇作计停机的彼桎序类型.历史注能:艾达奥古斯塔井伦(AdaA
21、ugusUByron).拉夫罗斯的的国夫人当近尔斯巴比奇在挖个19世纪中期尝试建地一台分析引擎时.浪漫诗人诺德拜伦的女儿艾达拜伦是他的l,:H.艾达的任务是开发算法一一用逐步指令的形式求超何国的方法,这幽指令格使这台引笊U资散学m数的值.巴比奇的机器在他花Ht时没有制造出朱,主娈足因为i时的制造工艺还达不轲部件所允许的公差,尽符如此,艾达仍被公认为是钝个计。机理序员.她出版过本St定了计算机编程基本Ki则的笔记集.现代的Maie理谙育肮足用她的名字命名的.机器语言个可执行的枳序(executableprogra11是能够操作计算机的程序.这样的程Fr总是技二进制数字的序列编巧.它是计刃机的内部
22、滑得.也称为机磔用常(aehinelan8UaRe)程序.一个简染的包含两条指令的机器诺吉程序是:每一个构成一条机JSiS在指令的:逆制S字样列域少由两加分狙成:指令邮分和数据邮分指令警分林为拨作码(opcode).通常位于二遥制数的开始处,告诉计翼机饕执行的掾作,如加、减./等,二进制*的犬余部分搬供仃关;SM的信任.汇坨谙言因为每一种类型的计算机,如IIMPe,AppleMacintosh,Hwdet1.PndHIrd计算机等,步守它打自己特定的机搭语言.因此公弓机潴语言程序是H常年隅乏味而耗找时间的,使馍程方法向前迈送的第一步是果M里词风格的符号替代二进网愫作码,ADD.SUB.Mu1.
23、等.井Ia用十进制数和标势铸代存储耦地址.例加在下列指令集中果用/注词风格的符号相加两个数(分别称为firs和SeCOnd).把结果与第三个已知为Iaclor的数相乘,并把坡后的结果保存为answer.使川这类软征性符号的埔却语言麻为汇茹语占(assenblylanuage).因为计算机只能执行机ifjK四序.所以在计灯机执行T编语月之前.必须先将汇弟lift当中包含的指令柒醐评成机编训汴程序(见图1.9).把汇t谙方程序翻泳为机器讲齐程序的航评程序移为汇JfiJSGissE1.ler).图1.9注编程序必须翻译旺戏语言和高级语言注箱语苜利机俄语宫那被分类为低统语百(Iglevellangua
24、ge.W为这四种第百类R都使川Att与某个类中的计灯机相联系的指令实际上任级谓亶足为了构造计灯机的处理JS而定义的.同样地.汇策谓有程序也芍所限制,它只能计对特定计算机类型而编写.但是这样的程序允许利用fij一类特定计獴机的专有特性,)IISM.APPl。或HEleU-PaCkard的计飘机,并通常使诙补烛快的执行速收,与低级语言不同.岛级语者使用类似人类的语宫(例如英语.并能在所有计算机上运行,Alj不必考虑计算机的制造厂家.C,C+.VisualBasic和JaVa都是高级语方.例如,使用Ciff营,IWlBl的程序段中相加两个数字井格结果与第三个数字相架所用的艺织语含程序能修号或:图1.
25、10建立个可执行的C程序的飙程步物用某种计算机退古品级或低级编写的悭序称为源程序(scurreprrmn)或淞代码(SUrCCeic),Qll果某个程序用森级语言呜,则它同样必须转族为将在其上运行的计粽机的机器语言.就像低级语言一样,这种转倏可用何种方法实现.当面欲源程序中的每一条用句被中独地转换并立即执行时.这种程iH称为解n;,;(interpretedHngunge),执行这个转次的程序称为好转器(interpreter).在执行任何豹独的话旬之前,当高级该程序中的所盯语句作为一个完整取位转换时,这种馍程语吉林为笫件语自cowiledIansuase).这时执行这个传倏的探序称为/译戕c
26、owiler).某种语R的编译版本和胡糅版本都能够存在,但典型情况下只仃一个版本傥Itf成为主流.例Sh4管存在CiflH的解株Ifi木.但Cifl吉主瞿是编评语吉,图.)履承了一个C源程序被i济为机器语才可执行程序的过程,这个图没盯必示规划和分析这个程序设计的基本步骤,这应该在外入弟行代码之前就进行.1.4节将讲解如代娥之个程序设计.加图所示.W序员使用某种编辑JS程序输入观程序耕器程序处一个有效的字处理程序.它是由娴译:提供的开发环境的一都分.把C语才戏程序转换为可执行程济的过程开始于编伸渊,由馍件器产生的输出移为目标程序(objectprogran),它是源代利的机谙苜版本.你的源代码还
27、可以利用外外的以前泊译过的代码,这些代码N以足期嵋序员提供的制评代码.或者是IaMal提供的己集译代孙如求平方IR用的数学代码尚i*时,另外的机潺帝吉代玛必须与n库程序也合在一起,以创建一个域性的可执行程序,完成这共步舞是连接器Cinker)的任务,连接过程的结Jtt是一个完整的机器语言程序,包含你的程序所娈求的全解代码,并11.已做好执行的准备.它是这个最终的可执行停序的机捐语言程库.这个过科的取石力是相这个机拓诲百程庠关入计/机主存储JS去实际执行.过程iff力和面向对象诺言i04语才公初都是过程语言(procedurallongune在一个过程语言中.那些可利M的指令被M于建立林为过程(
28、procedure)的独立单元.过印的用途是接收数据作为输入、用某种方式转换数据并产生特定结果作为粕出.用一个过程都沿在如图1.n所示的路径石效地移动畋据步,并逐渐靠近到最终期审的检出.图1.11基本的过程除作图1.1】展示的程序设H过程H接反映了川干构成一合计#机的输入、数据处理和输出的硬件里元.这并不意外.因为得缀过程语百破初就足设计用来见M和巴接控制相应的技件的兀的.母种计算机语百部川个不同的名移未引用它的过程.例如,三Crtf中?过程称为函数(ftinciion):在JaVa培力中.法(method):而在C,JS2中,术塔“方法”和“函数”都可使用.按照己独立好的Ki则.一个&笃规甩
29、的过程由机合在特定的内部结构中的指令班成(这说则将在】.4节介细).遵简达些结构依妍的过印麻为玷构化过用Gtructuredprocedure).行效地地强了对这段结构的支持的高级过程谙卉称为结构化凿方(structuredlaluae.lCift.我们将经常使用术用“结构化语言”表示这类箫必了结构化过程的IftfS过程语含.从20世纪90年代初开始,几乎所盯新出现的典型痴级语言部是结构化诱方.城近,一种移为面向对象的新方法成为了主M.这些由O+,Java.VisualBasic和C#组成的语自稔为面向对软的语盲(object-orientedlanguage).促使面向对象语育出现的原因之一
30、是图形化屏卷的发笈和对图形用户界面(GUI)的支持,这些Gll能移&示包含图形和文本的匕个窗11。在这样的环境中,解格上的每个窗口都可看成是与颜色、也网何大小衿特性有关的对象.个面向时象的程序必须首先定义它将处FE的时象,这包含描述对象的般特征.然后指定个特定的过程去处理它们,如改变大小和位置以及在对象之间传递数据等.但是曲向对领的谓力在它的的过程中仍然保苗和结合了结构化用征.因此,Cr,JnvH和CS都使用一些在C语吉中能城;找到的礼车的结构化过程类型W实上,O,就是为了使C语古能犷充到包含对象而特1谀计的“这些炉先将在第15堂中介绍,在这些较新的编程谙育中,C语有处惟仍被广泛使用的结物化语
31、?(.事实上,在许多情况下.CiA酉都是专业程序员的枭爱特别是在设计处理大最故粼的理序商瞿快速开发、要来很专业的结然指标或并构造攵朵的操作系统程序时内北,作为学习较新的面向对象编程诏;的姓Ml.或若作为一个本身就能移用户许多用程序的&程语N,学习。语言对程序员而言仍然是有价的的.应用软件和系统软件计算机程序的两个造泗分类是成用攸件(applicationsofare)和系统软件(systSofiuare).应M软件由执行用户要求的特定任务所织写的程序ill成本E中大多致例子可以右戊腹用软件.乐统软件是必须对任何能使计口机工作的计驾机系统易于使用的程序先,在20世妃50年代和60年代Y.期的计舞
32、机环蜕中,用户不得不从零开始川产工装入系统软件.以准备计算机的工作.方法足调性面板上儿排开关的状志.那些屐初用手工输入的命令用干引导(boot)计算机,术语“引导”来白描述.拿白己的努力OKHHStmP0成功今天,这样命名的引导装入程序(botst11ploader)被也含在内部的RtM中,并且是永久的、自动执行的if源机乐统软件的一部分。用于操作和控耨计算机的全群:系统理序集称为操作系统(operatingsysias).由现代换作廉统处理的任务包含存他器管理、CPU时间分配、iffOlltirfit.显示溜和打印机的输入和输出设备的控制.以及所有的二级存站设法的管理.许多操作系统把程序按需
33、空划分为在瓶能和内存之间移动的段或页,以处理线很大的程序,并可处理同时发生的多用户事件,这样的掾作系统允许一个以上的用户同时使用计。机,蛤每个用户的印象是计并机和设备是他独占的.这样的操作条统稔为苏用户系统(Iwltiusersysen).另外,许多操作系统.包括大多数视窗化环境允许哥个用户运行多个程序.这样的操作系统称为多道程序设it(nUlliPrCgraining)或多任务Imiltitnsking)系统C语言的发展20做纪70年代.ATaT公司贝尔实帔室的肯汤杆森(KenThonpson),丹尼斯里奇(DennisRiUhie和布林恩克利安(BrianKernighan)Ift早开发了
34、C谙甫.除了能宜接访问计*机内部硬件外.Ciftft具有高段结构化用N的特性,它被称为“专业程序员的诺言。Cifj言允许出田G进入“电机存储器内tft.并可直接更改存站计算机存钻器中的数据,c语言的标准由美国国家惊准协会wirm,20做纪80年代.正在ATOT公司工作的布加尼斯特罗斯楚If(BjarneStroustrup)开发了C作为对C谙我的折充,这种新的用再包含广泛的由Cift书提供的傥力果但它是一个价向对软的程序.C和C之同的这种紧密关系好转了C”程序包含相当数质的结构化C谱汴类型代码的现象,小女上,现在许多C噜方程序是M。,发写的,但.是被眼利只使用C语言独有的那些特征。殊习1.2简
35、答图1.定义下列术语:”.计第机程序。b.同序设计.C.编程谓审.dIftiSiS吉.e.ttiSS.f.机器语育.g.汇摘语言.h.面向过程的婚盲.i.面向对象的语言。j.源程序.k.编评2*.1 .汇率器.2 .描述高线语N和低戏语言之间的区别,b.描述面向过程的语言和面向对象的语宫之间的区别.3 .描述汇i器、超棒;S和蜗评器之向的区别.I.n.假定下列探作代闪:”0D表示把第一个推作数加到第二个操作数1(HOOQOO表示从第二个振作数忒去第一个振作数UH(100o我示把第二个悚作数乘以第个操作教UcH(Io00表示把第二个操作数除以第一个操作数把下列指令翻诉成文字:授作日第一个探作数地
36、址第二个探作侬地址I100oO00。I)OOOOflOoool(100000MIlXXHo111100MOWX100OOOO100OOOOOOOWXII1IOIMOMOMOOOOOOIOIXIOIXIOMX100OI1110KI000(X)00101(l00CHX)CMXIlIh.假定下列地址包含下列数据,偷定由缄习4门中所列指令产生的结缨:地址存估在地址中的值0000000000150000(10000103Ixiaxioixioi16000000X0014OOoOOO(XnO145,使用$匚循语冒符号小写练习4a中所叫求的机戕级指令.分别使用符号名教ADO.SIB.MU1.和DIV表示加减
37、乘和除运算.在纲巧这当指令时.使用十进制敝值表示地址.6.Iy设ATO,炉20,C=O.6,询定下列汇编语吉类型谙句集的数字站JK.对于这个生习,1.0M)拧令相当于输入一个数伤到计口机的显示屏.ADD及示加.MII我东乘“1.3UiA在编写C语K和序之Ii1.程序员必须济楚地理斛将要使用的数M、预期的玷果和产生纪果采用的步界是什么.产生结果所造和的步骤徐为算法(algrithu).史布用地说.算法就是箱述故第要如何处理才能产生预期的输出的逐步指令序列(sequenceofstruction).本质上说,算法就是网答这个问区:“你将用什么方法M决这个PJlM?”只有在我们清龙地FH就将要使用的
38、数据井HjS择了算法之后.才能第蛤这个月序泊利.说砰更叫白些.W序设计就是把所选择的打法翻洋成计/机能镭使用的一种谓*.就本书而1程序设计总计把我们的步骤转化为Ciff有程序的过程.为了说明尊法,我们将设捌一个简单的问题,假及程序,。须it*从1到10。全部t字的数”图1.12隈示了我,可徒使川的栈到所要求的急致的四种方法.柘种方法祢能也立一个打法.图1.12计算数字1到100的和历史注解:艾戈瑞孜米(I-Khnrismi)大约在公元825年,最伟大的数学室之书罕默彼之子Ml加尔戈JW孜米写了72为“换算和计霓“UIml-jabrwa,1OUQabeIah)的论文.解词algorith11(算
39、法就是从Al-Kharismi的名字得来的.而单词algeb11(代数学)是从他的作用标愿中的用词“al-Jabr”得来的.历史注圈:年轻的高斯tt!国数学天才约翰卡尔1里!里希高斯(JohonnCnrlFredrichGauss,1777-1855)在他会说话之诃就能鲂“计算在四岁时,他就发现了父亲嫩本中的处饰设.有一人在学校,海斯的色加要求同学们将1到100的数字相加,老却想这个任务会使这个班的学牛忙一阵子.让仲延到吃惊的是,Ift斯儿乎立即就把结果写在石板上井辽称“救是它二高斯斛每到:可以把IIU面的和后面的数字笃成数字媛Ii并逐项相加得到UH的50倍.这样,和就是】IW$*$2X1(H
40、.在他I。岁时.高斯就发现了l+2-+n=r2).在解决这择的何超时,大多数人不怕麻烦地用种洋圳的逐步进行的方式列出可能的备选方案(如图1.12所示),然后选齐算法之一去娜决这个问题这是因为大乡数人没仃用肾K.格色来胆雉.他们只是用发K地思维.例如.如果必须更族制的汽a漱粕时.你不会思考所需要的全部小骤,而只会K)单地更换佗脂或仔打电话请求别人的借助.这就是启发式也维的例子.令人通然的是,计算机不响鹿用发式命令.一个通常的好句(如“轿I到100的数字相加”)对计电机不表示任何意义,因为计停机只能响应可以接受的,用语N(加。语言)Srj的功法命令,为了成功地第一台计口机珀程.你必须济楚地即第口法
41、命令和启发代命令之间的这种差井.计算机是种-算法响应-的机揖.不:上1;;发式典应”的机;a.你不能告诉一台计算机去换轮胎.或存杷数字从I加到loo.你必Jfiffr计算机,建详细的、逐步的.能全面形成一个算法的指令Mi.例如,拧令集:设?In等于100设宽a等于I设SSb等于100计算sun=n(a+b/2显示mm形成个洋织的方法或既法,用于确定数字从】J(KIO的总教,注电这&指令并不坐H灯机程序.与程序不一样,律法能够用各种方法编笃或描述,而程序必须用计。机能够识别的运吉编号.当使用英语翻追描述尊法(处理步监)时,这种描述称为伪代码(pseudocode).比如上面的例了当使用教学方程式
42、描述打法时.这种描述称为公式“。EUIa).使用梁用特殊定义的图形的图像描述打法时,这骅描述称为流程图.一个流程图提供用图1.13中所示符号的算法的图形表示法.图I.M展示了这些符号在描逑一个确定三个数的平均值的算法中的M法,图1.13液和图符号图1.M计算三个数的平均值的流积图因为流印图惟小起去比较麻烦.所以程序员更感Btt川伪代科表示用法造泄.与定义/标准存多的法理图不一样伪代码的构造不存在标准的规则.任何自然iff才短语都可以用做伪代码来播述个葬法.例如,下列是可接受的描逑计!?个敖的平均曲所需空的步麒的伪代码,输入三个救到计源机中相加速些妆并杷和(ft除以3计算平均仅小丫均位只仃在程序
43、员选择/一个算法并理解所瞿求的步骤之后,他才能用计算机语力的语句编算法.肾法一Uifi选比,就必须料换为能终被计算机使用的形式.用一种语言(如C语言把口法代换为计制机程序的过科稔为给尊法珀冈(Caiinithealgorithn).如图1.15所示.从这些步骤产生的程序指会稔为印序代码(PiOKiai.code).或简徐为代码(code).从下一聿开始.本书将主饕介绍如何开发算法和如何用C诩汴表达这些!?法,图1.15给源法编码练习1.3wn1 .确定和列出完成下列任务的逐步过程.注意:这些任务都没行惟一的正砒答案.这些炼习的目的处熟.金将房发式命令转换为相应的算法并在与这两类.思椎方美的思惟
44、过程之间进行依次,.怪补一个泄气的轮舶.b.打个电话.c.去商店买一块Wi包.士博一只火鸡.2 .询定和编与一个要求互换两杯水的算法(列出步骤),假定第三个杯子能”施时川东容纳任一杯子中的水C每个杯子在灌入新的水之Iiif应该冲洗干净.3 .用门物语*新与一个许细的逐步的指令集.计算一个含存h个5角帙币.q个2角5分硬币.n个5分校币、d个】角硬币和P个I烫分硬币的小猪钱端中的故数,要求站!R的眼位为美元.1.用自然语言编写一个详fffl的逐步的折令妪,找出三个整数中的如小数,5. a.用自然语盲编写个详细的迩步的指令第.计算付个ToTA1.tilft的账唯所需要的最少纸币的数疑.例如.如Jt
45、tTOTA1.是97美元.则川黄W流通抵币.应该由一张SO美元的纸币.芮米20美元的纸币、一张5美元的城市和两张1美元的俄币ifl成。假定只力100美元、50燹元、20美元、5美元和1美元的纸币可以茨得b.假定这个蜜依只用】美元的纸币付账.由新求琳练习5a.6. a.强与一个尊法,独找一个随机排列的名单表中名字Jones第一次出现的位置.b.如果名冷去按字母胤序井列,则应该如何故逃城习6n的算法.7. 次弓一个以法,确定任一句子中字母e出现的总数.8. 个算法.将三个数按升序排序(从最低到JRi).1.4软件开发过程现代社会正变得博太越Sl杂,随之出现的何甥也变得红杂了,这样好决向磔就成了种生
46、活方式,比如冏体废料处理、全球受腿.国际金融.污染.核技被告问题就是出现时间不长的断问题.谖如何M决这些问题是对人类技术和能力的挑战.人多数问咫的解决方案要求考虑周全的“划.并,。要依光电点杆决方案让古站延“I的和行效的.对丁大多数程序设计何磔,第要考电的因素也心如此.Wto.通过反复试验为移动电话网络纲写炊件攻宕为百货公司创建库存赞理程序的过程就是如此,这样一个杆次方案奴好的结果是价用昂出怛效果良好,燃煤的忸况是抠央tfeR.脱离现实.传个研究总域部有或用于设计这些豺咫的解决方案所使用的系统方法的命名规则.在科学界.这种方法称为科学方法(scientificnctb,而在:程学科中,这种方法
47、称为系统方法(sy:SIEw;IPflrctICh).为了理挈需娈帮决的问卷和为建、工一个疗效的I1.适当的软件解决方案,专业软件开发人员使用书嘲:为软件开发过和(soft*aredeveIopnentprocess)的方法.这个过程由下列4个阶段组成,阶段1:商定杵序的也求阶段2:设计和开发步骤I:分析问JH步蟋2:选择一个完整的解决方案尊法步播3:独写出序步辎I:潮试和修正程序阶段3:文档的制阶设4:推护如RH.16所示,航三个阶段经常改进并相互彬响,H到Ai终电计和程序被开发出来为止,而且在设计和开发阶段.你可徙会发现时题没有被完全叫曲或分析,需要在初期的步骐段进力的工作以完成程序.每个阶段都招在下面的段落中讨论.阶段I:确定程序的要求这个阶段以H物的陈述或对程序的特定要求开始,称为程序的要求(programrequire11n.你的任务是确保和序的要求被明瑜地陈述,井口要理酬期也达到的U标是什么.例加,件设作收到由来自上行的简知IW件配件内容是说我们需要一个提供关丁例的俏息的程序.这不是一个定义清楚的察求,它没右明确说明一个良好定义的何磔.因为它没行M