计算机程序设计基础C语言武汉理工大学计算机科学与技术学院主讲教师:王舜燕教授博士网络教学互动平台使用方法:jwc.whut.edu.cn→网络教学平台→课程编号→10020023关于本课程的教学安排本课程的教学目的:通过对C语言的学习,掌握使用计算机编程语言解决实际问题的基本理论、方法、技巧、以及常用的算法。本课程的教学安排:教学36学时,实验20学时。参考书:《写给大家看的C语言书》美:GregPerry著谢晓刚刘艳娟译人民邮电出版社ISBN978-7-115-21635-9《C语言教程》(ABookonC)美:AlKelleyIraPohl著徐波译机械工业出版社ISBN7-111-20213-9《C程序设计语言》(TheCProgrammingLanguage)美BrianW.Kernighan等著机械工业出版社ISBN7-111-19626-0《C程序设计》谭浩强著清华大学出版社《ThinkinginC++》机械工业出版社Let’scontinueourClanguagejourney!ThestrategyoflearningCisastep-by-stepapproach,firstlayingasoundfoundationonprogrammingconcepts,flowofcontrol,andfunctions.ThefundamentalsofCprogrammingisasteppingstonethatwillprepareyoutoembarkonthejourneyoflearningC++andJAVA.YouwillbegintolearnhowtowritesimpleCprogramswithprimitivedatatypes,controlstatements,functions,andarrays.ProgrammingExercisesattheendofeachchapterprovideyouwithopportunitiestoapplytheskillsonyourown.Thetrickoflearningprogrammingispractice,practice,andpractice.第一章概论2011年10月9日,C语言之父,美国著名计算机专家DennisRitchie病逝,享年70岁。在众多的国际互动论坛上,计算机爱好者们以特有的方式纪念这位编程语言的重要奠基人。许多网友的发帖中仅仅留下一个分号;在C语言中,分号标志着一行指令语句的结束。网友们以此来悼念DennisRitchie所引领的时代悄然远去。虽然在C语言之后,C++、Java等各式各样计算机高级语言层出不穷,但不少程序员仍旧认为,C语言简洁、高效、灵活的特性令其具有独特魅力。“3.计算机语言所谓计算机语言是人类为了有效地与计算机进行信息的传递、沟通,并且能让计算机按照人类的意志进行工作而开发出的一种语言。人类使用它描述解决问题一系列步骤,计算机能够识别并执行它,以达到解决问题的目的。(1)机器语言(2)汇编语言(3)高级语言在此,请注意,计算机只能识别并执行二进制机器指令的特点并被有改变。要想计算机执行汇编程序或者高级语言程序就必须将该程序“转换”(编译或解释)成机器指令程序,方可执行。Languageabstractionpyramid1stGeneration,MachineLanguage,0101010112ndG.AssemblyLanguageHumanLanguage3rdG.StructuredLanguages,C,Fortran4thG.OOPLanguages,C++,Java4.翻译方式编译程序或解释程序对高级语言程序(或汇编语言程序)进行“翻译”处理,使它成为机器指令程序,才能提交计算机执行。其核心是将高级语言(或汇编语言)转换成“机器指令程序”。下面分别介绍这两种处理方式。(1)解释方式使用解释程序(Interpreter)将高级语言程序的语句逐条“翻译”成机器指令并逐条提交计算机执行,直至程序结束(如图1-5所示)。(2)编译方式所谓编译方式是分两步进行的首先通过编译程序(Compiler)对整个高级语言程序进行编译,它包括翻译和查错(词法分析、语法和语义分析、生成和优化目标程序)。出现错误时,停止编译,报告错误,不生成目标程序,待修改源程序后,再进行编译,直到最终得到正确的目标程序。然后使用链接程序(Linker)对目标程序进行链接,得到可执行的程序,这时才能将可执行程序提交计算机执行(如图1-6所示)VC++和TurboC均是以编译方式进行工作的。1.2算法及其表示1.2.1算法的概念和特点我们在使用计算机解决实际问题的时候,通常按如下步骤进行:1.分析问题,找出解决问题的模型。2.根据模型,设计出适合计算机特点的处理方法即算法。3.选择适合的计算机语言,进行编程以实现算法。4.上机编辑、调试、运行所编制的程序,得到结果。5.对结果进行分析,整理出文字材料即文档。一个合理的算法具有以下特点:1.有穷性:一个算法应该是“有限”个步骤的,而不能是“无限“个步骤的。也就是说经过有限个步骤的处理以后,算法应该结束。2.确定性:算法中的每一个步骤的含义都是确定的、唯一的,不能具有其他的含义或可被理解成其他的含义。3.有输入:可有零个或多个输入。输入是用来在一个算法的执行过程中,向它提供处理对象(数据)或控制算法执行过程的信息的。4.有输出:可有一个或多个输出。它是算法执行的结果的输出。没有输出的算法是一个无效的算法。5.有效性:算法的每一步骤都可有效地执行。1.2.2如何表示一个算法表示一个算法的方法很多,如自然语言法、传统流程图法、N-S流程图法、伪代码法等,理论上都可用来表示算法,但是效率上有很大差异。例如:M=5!,要求M的值。自然语言法描述算法如下:①设定变量M,M置初值为1,设定变量I,置初值为1。②如果I的值小于6,则执行③,否则执行④。③将M乘以I并置于M中存放,将I中的值加1并置于I中存放,再执行②。④将M中的值输出。用传统流程图法描述算法如图1-7所示:用N-S流程图描述算法如图1-8所示:结构化程序设计人们经过长期的实践,不断地总结经验,提出了结构化程序设计方法,将算法的描述归纳为三种基本结构的顺序组合,即顺序结构、选择结构、循环结构。它们的共同特点是:只有一个入口,只有一个出口,每个基本结构中的每一部分都有机会被执行,结构内部不存在死循环。使用三种基本结构描述的算法是结构化的算法,按照结构化算法编写出来的程序具有良好的可读性和可维护性。需要说明的是传统流程图使用几何图形、流程线、文字说明(见表1-1)来描述一个算法,美国学者I.Nassi和B.Shneiderman在论文《Flowcharttechniquesforstructuredprogramming》提出了用N-S流程图又称盒图(三种基本结构对照表见表1-2)描述算法的方法。《Flowcharttechniquesforstructuredprogramming》I.NassiB.ShneidermanStateUniversityofNewYorkUniversityofMaryland1.3C语言基本知识1.3.1C语言的发展历史及特点1.C语言程序结构紧凑、语言简洁。2.C语言的数据类型丰富。3.C语言的运算符丰富,有多达44种运算符,(见附录III)。4.C语言是一种结构化程序设计语言。5.C语言是处于汇编语言和高级语言之间的程序设计语言,即中级语言。6.C语言可移植性好7.C语言的语法限制不太严格。1.3.2C语言的标识符与关键字在C语言程序中,标识符和关键字都属于程序的基本语法单位。正确地使用标识符和关键字对于程序的编制是至关重要的。1.标识符标识符一般是指用户或系统定义的符号名、变量名、数组名、类型名、函数名、文件名等。C语言规定标识符由字母、数字、下划线组成,必须以字母或下划线开头。大写字母小写字母被认为是不同的字符,在标识符中不能含有其它字符,也不能跨行书写。例如,合法的标识符如下:a_1name_x123workerWorld_1_Wolf非法的标识符如下:1abcname,1x123n&a12To-medate..1TurboC规定标识符长度不超过32个字符,超过32个字符的部分无效。用户在定义标识符的时候应注意:①不要与系统预定义的标识符或关键字相同。如:用户不要定义printf作为用户标识符,因为系统已经将其预先定义为格式输出函数的标识符,以免引起冲突。②尽可能直观地定义标识符,也就是说,从所定义的标识符的字面上就能够了解其含义,以方便以后的使用。2.关键字C语言中的关键字又称保留字,它是由C的编译程序预定义的、具有特定含义的单词,用户不可将其定义成自己的标识符使用。C的关键字有以下32个:autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile1.3.3C语言的基本结构1.C语言程序由一个或多个函数组成,其中有且只有一个主函数,名为main()。2.函数由函数说明和函数体组成。其中函数名命名应符合标识符的规定,函数体应以花括弧“{”开始,并以“}”结束。3.函数体由C语言的“语句”组成,每条语句必须以“;”结尾。4.C语言程序的语句书写格式自由,一行内可以写一条或多条语句,也可将一条语句写在多行上,但关键字、标识符、字符串作为一个整体不能分写在两行上。5.在C语言程序中,可以在任何位置成对地使用/*和*/对程序进行注释,注释的作用是利用文字信息对程序进行说明或注解,以便人们在阅读程序时理解程序的功能,注释部分在程序的运行时不执行。例1.3在屏幕上显示“Hello,C!”字符串。main()/*主函数*/{/*函数体开始*/printf(″Hello,C!″);/*在屏幕上显示字符串*/}/*函数体结束*/main()/*主函数*/{/*主函数体开始*/inta,b,c;/*定义三个整型变量名*/printf(“Hello,C!”);/*屏幕输出字符串*/scanf(“%d%d”,&a,&b);/*从键盘输入两个数,分别给a和b这两个变量*/c=add(a,b);/*调用用户定义的函数add,并将函数值置于变量c中*/printf(“%d\n”,c);/*屏幕输出变量c的值*/}/*主函数体结束*/add(inta,intb)/*用户自定义标识符add作为函数名,有两个参数a和b*/{/*用户自定义函数的函数体*/inty;/*定义一个整型变量名y*/y=a+b;/*将a+b的值置于y中*/returny;/*将y的值返回*/}/*用户自定义函数的函数体结束*/加强对C语言程序基本结构的理解,对今后的学习会有很大帮助。建议:初学者除了注意对书本知识的学习以外,要多观察、多思考、多做自己的“作品”(不在于复杂程度,只要是自己的)、多做上机练习,坚持一段时间,培养起自己的兴趣,有了兴趣就意味着成功的开始。第一章C语言程序设计基础知识1.1概述1.1.1信息的表示1.数制十进制:日常使用的数制。二进制、八进制、十六进制:计算机中使用的数制。不同数制间的转换:二、八、十六进制转换成十进制的方法是--------按位权法展开。例:二进制转换成八、十六进制的方法是--------分组法(三位、四位一组)。例:八、十六进制转换成二进制的方法是--------直接法(直接将八、十六进制数字符号转换成二进制数字符号)。例:十进制转换成二、八、十六进制间的方法是--------整数部分除法取余,小数部分乘法取整。例:(101.01)2=1×22+0×21+1×20+0×2-1+1×2-2=(5