1、1C语言程序设计语言程序设计2010年年9月月 刘梅彦刘梅彦计算中心计算中心 计算机教研室计算机教研室.2C语言程序设计语言程序设计n教学要求教学要求掌握程序设计语言的基本知识掌握程序设计语言的基本知识常用算法(用计算机解决问题时常用的算法)常用算法(用计算机解决问题时常用的算法)初步的程序设计能力初步的程序设计能力n学习方法学习方法自主学习自主学习重视上机实践重视上机实践.33本课程着重培养的能力点本课程着重培养的能力点问题分析与算法设计能力程序阅读和编写能力程序调试与排错能力.4如何尽快学会用如何尽快学会用C语言进行程序设计语言进行程序设计n了解程序设计语言了解程序设计语言(C语言语言)n
2、模仿、改写、编写模仿、改写、编写n通过不断的编程实践,逐步领会和掌握程通过不断的编程实践,逐步领会和掌握程序设计的基本思想和方法。序设计的基本思想和方法。.55关于大学的学习关于大学的学习. .n拥有一套学习方法拥有一套学习方法n培养自学能力培养自学能力n拓宽知识面拓宽知识面n充分利用各种资源充分利用各种资源.66大学教育与中小学教育大学教育与中小学教育有什么不同?有什么不同?n给学生以更大的发挥空间,教师仅进行基础性、引给学生以更大的发挥空间,教师仅进行基础性、引导性的教育,更深入的知识要靠学生自学。导性的教育,更深入的知识要靠学生自学。n课堂学习课堂学习可持续发展的必备知识可持续发展的必备
3、知识n基本理论、思想、技术n一定的新知识关键是学会思考关键是学会思考n尊重权威人士、挑战权威理论n自学能力自学能力是跨进大学校门后必备的素质之一是跨进大学校门后必备的素质之一.7教材和参考书教材和参考书nC语言程序设计,语言程序设计,李文杰等,清华大学出版社李文杰等,清华大学出版社n实验指导书与自测练习集实验指导书与自测练习集参考书:参考书:nC语言程序设计,语言程序设计,何钦铭、颜晖主编,高等教育出版社何钦铭、颜晖主编,高等教育出版社nC语言编程(第语言编程(第3版),版),美美Stephen, G.Kochan,张小潘,张小潘译,电子工业出版社,译,电子工业出版社,2006nC语言教程(第
4、语言教程(第4版),版),美美Al Kelley, Ira Pohl,徐波译,徐波译,机械工业出版社,机械工业出版社,2007nC程序设计语言,程序设计语言,美美Brian W. Kernighan, Dennis M. Ritchie,徐宝文等译,机械工业出版社,徐宝文等译,机械工业出版社,2006.8课程情况介绍课程情况介绍n本课学时数共本课学时数共6464学时,其中:学时,其中:n上课学时数:上课学时数:4848n上机学时数:上机学时数:1616(共(共 8 8 次)次)) )n课程安排:课程安排:n 上课时间:周二上课时间:周二5 5,6 6节,周四节,周四5 5,6 6节(双周)节(
5、双周)n 上机时间:在第上机时间:在第4/5, , 9-12,14-15,17周周n 电信电信10011001班:周一班:周一 1 1,2 2节节 n 电信电信10021002班:周三班:周三 7 7,8 8节节 n 电信电信10031003班:周三班:周三 9 9,1010节节 n地点:计算中心清河校区机房(二教四层地点:计算中心清河校区机房(二教四层401401机房)机房) .9 程序、计算机程序、计算机n 程序程序一词来自生活,通常指完成某些事务一词来自生活,通常指完成某些事务的一种既定方式和过程。的一种既定方式和过程。n 从表述方面看,可以将程序看成对一系列从表述方面看,可以将程序看成
6、对一系列动作的执行过程的描述。日常生活中也可以动作的执行过程的描述。日常生活中也可以找到许多找到许多“程序程序”实例。实例。n 例如,一个学生早上起床后的行为可以描例如,一个学生早上起床后的行为可以描述为:述为:.10起床;起床;刷牙;刷牙;洗脸;洗脸;吃饭;吃饭;早自习;早自习;这是一个直线形程序,是最简单形式的程这是一个直线形程序,是最简单形式的程序。描述这种程序的就是给出一个包含其序。描述这种程序的就是给出一个包含其中各个基本步骤的序列。如果按顺序实施中各个基本步骤的序列。如果按顺序实施这些步骤,其整体效果就完成该项事务。这些步骤,其整体效果就完成该项事务。.11现在考虑另一个复杂些的过
7、程:到食堂吃饭。这一常见过现在考虑另一个复杂些的过程:到食堂吃饭。这一常见过程可以描述为:程可以描述为:1. 1.进入食堂;进入食堂;2. 2.查菜谱;查菜谱;3. 3.向服务员点菜;向服务员点菜;4. 4.可能由于某种原因,菜谱上的菜没有;可能由于某种原因,菜谱上的菜没有;食客可以有两种选择:食客可以有两种选择: 4.1.4.1.回到第回到第2 2步(进一步查找其它想吃的菜);步(进一步查找其它想吃的菜); 4.2.4.2.放弃在此吃饭,离开食堂;放弃在此吃饭,离开食堂;5. 5.若点的菜有,在此吃饭。若点的菜有,在此吃饭。6. 6.吃完饭离开食堂。吃完饭离开食堂。这个程序比前一个复杂得多。
8、可以看到,这一程序不是一这个程序比前一个复杂得多。可以看到,这一程序不是一个平铺直叙的动作序列,其中步骤更多,还出现了分情况处理个平铺直叙的动作序列,其中步骤更多,还出现了分情况处理和可能出现的重复性动作。和可能出现的重复性动作。.12计算机的最计算机的最基本功能是可以执行一组基本操作,每基本功能是可以执行一组基本操作,每个操作完成一件很简单的计算工作,例个操作完成一件很简单的计算工作,例如整数的加减乘除运算等等。为使计算如整数的加减乘除运算等等。为使计算机能按人的指挥工作,每种计算机都提机能按人的指挥工作,每种计算机都提供了一套指令,其中的供了一套指令,其中的每一种指令对应每一种指令对应着计
9、算机能执行的一个基本动作着计算机能执行的一个基本动作。.13预备知识:计算机的工作原理n计算机系统的组成计算机系统的组成n硬件系统硬件系统n计算机基本组成计算机基本组成n指令的执行过程指令的执行过程n程序程序n软件系统软件系统.14系统软件系统软件应用软件应用软件计算机系统包括:硬件计算机系统包括:硬件+软件软件硬硬 件件软软 件件计算机系统.15CPUCPU存储器存储器数据流数据流控制流控制流运算器运算器外存储器外存储器输输出出设设备备内存储器内存储器输输入入设设备备控制器控制器地址流地址流 计算机系统的硬件组成 演示:演示:计算机的五大部件计算机的五大部件.16存储器存储器是计算机存储是计
10、算机存储数据和程序数据和程序的记忆单元集合,的记忆单元集合,每个记忆单元由每个记忆单元由8 8位二进制位组成,可读写其中的数据。位二进制位组成,可读写其中的数据。存储器存储器存储器通常分为存储器通常分为内存储器内存储器和和外存储器外存储器存放大量信息存放大量信息的外存储器的外存储器信息交流中心信息交流中心内存储器内存储器存储器.17CPU控制器运算器控制整个计算机控制整个计算机所有部件的工作所有部件的工作执行算术运算执行算术运算和逻辑运算和逻辑运算中央处理器(CPU).18常用输入设备:常用输入设备:键盘、鼠标、扫描仪、光笔、麦克风等。键盘、鼠标、扫描仪、光笔、麦克风等。常用输出设备:显示器、
11、打印机、音箱、绘图仪等。常用输出设备:显示器、打印机、音箱、绘图仪等。输入设备和输出设备:.19指令是能被计算机识别并执行的的二进制代码,完成一种操作。指令是能被计算机识别并执行的的二进制代码,完成一种操作。操作码操作码 操作数操作数 数据传送指令数据传送指令数据处理指令数据处理指令程序控制指令程序控制指令输入输出指令输入输出指令 其它指令其它指令 If Goto And OrCPUCPU内存内存I/O设备设备存储器存储器对计算机的硬件进行管理等对计算机的硬件进行管理等指令指令 结构结构分分类类操作码操作码 要完成的操作类型或性质要完成的操作类型或性质操作数操作数 操作的内容或所在的地址操作的
12、内容或所在的地址 计算机指令 .20通常包含以下通常包含以下3个步骤:个步骤: 取指令取指令 按照指令计数器中的地址,从内存储器中取出指令,并按照指令计数器中的地址,从内存储器中取出指令,并送往指令寄存器。送往指令寄存器。 分析指令分析指令 对指令寄存器中存放的指令进行分析,由译码器对操对指令寄存器中存放的指令进行分析,由译码器对操作码进行译码,将指令的操作码转换成相应的控制电位信号;由地作码进行译码,将指令的操作码转换成相应的控制电位信号;由地址码确定操作数地址。址码确定操作数地址。 执行指令执行指令 由操作控制线路发出完成该操作所需要的一系列控制由操作控制线路发出完成该操作所需要的一系列控
13、制信息,去完成该指令所要求的操作。信息,去完成该指令所要求的操作。 一条指令执行完成后,指令计数器加一条指令执行完成后,指令计数器加1 或将转移地址码送入程序计或将转移地址码送入程序计数器,然后回到。数器,然后回到。指令的执行过程(了解).21计算机软件计算机软件n什么是计算机软件,软件的作用是什么?什么是计算机软件,软件的作用是什么?n什么是计算机语言?什么是计算机语言?n如何创建一个程序?如何创建一个程序?n了解程序的执行过程了解程序的执行过程.22软件软件系统软件系统软件实用程序实用程序 (诊断程序(诊断程序 排错程序等排错程序等 )操作系统操作系统(Windows, Unix, Lin
14、ux)语言处理程序语言处理程序(例(例C语言编译器程序,语言编译器程序, 链接程序等)链接程序等) 应用软件应用软件系统软件:系统软件: 控制和维护计算机的正常运行, 管理计算机的各种资源, 以满足应用软件的需要。应用软件:应用软件: 完成一个特定的任务, 在系统软件的支持下,才能运行.23计算机语言:即程序设计语言计算机语言:即程序设计语言n程序要需要用某种形式(语言)来描述。现代计程序要需要用某种形式(语言)来描述。现代计算机的程序则是用计算机程序设计语言来描述的。算机的程序则是用计算机程序设计语言来描述的。n从计算机诞生到今天,程序设计语言也在伴着计从计算机诞生到今天,程序设计语言也在伴
15、着计算机技术的进步不断升级换代。算机技术的进步不断升级换代。n 机器语言机器语言 汇编语言汇编语言 高级语言高级语言.24机器语言机器语言n一种一种CPUCPU的指令系统,也称该的指令系统,也称该CPUCPU的机器语言,它是该的机器语言,它是该CPUCPU可以识别的一组由可以识别的一组由0 0和和1 1序列构成的指令码。序列构成的指令码。n下面是某下面是某CPUCPU指令系统中的两条指令:指令系统中的两条指令: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 (进行一次加法运算)(进行一次加法运算) 1 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 (进行一次减法
16、运算)(进行一次减法运算) n用机器语言编程序,就是从所使用的用机器语言编程序,就是从所使用的CPUCPU的指令系统中的指令系统中挑选合适的指令,组成挑选合适的指令,组成一个完成特定任务的指令系列一个完成特定任务的指令系列。n计算机计算机自动执行自动执行这个程序。这个程序。.25机器语言机器语言n这种程序虽然可以被机器直接理解和执行,却由于它们这种程序虽然可以被机器直接理解和执行,却由于它们不直观,难记、难认、难理解、不易查错,只能被少数不直观,难记、难认、难理解、不易查错,只能被少数专业人员掌握,同时编写程序的效率很低,质量难以保专业人员掌握,同时编写程序的效率很低,质量难以保证。证。n这种
17、繁重的手工方式与高速、自动工作的计算机极不相这种繁重的手工方式与高速、自动工作的计算机极不相称。这种方式仅使用于计算机出现的初期称。这种方式仅使用于计算机出现的初期( (使用穿孔纸使用穿孔纸带的时期带的时期) )的编程(用有孔、无孔,分别代表的编程(用有孔、无孔,分别代表1 1、0 0)。)。现在已经不再使用。现在已经不再使用。 .26汇编语言汇编语言n为减轻人们在编程中的劳动强度,为减轻人们在编程中的劳动强度,2020世纪世纪5050年年代中期人们开始用一些代中期人们开始用一些“助记符号助记符号”来代替来代替0 0,1 1码编程。如前面的两条机器指令可以写为码编程。如前面的两条机器指令可以写
18、为 A+B A+B A A 或或 ADD AADD A,B B A-B A-B A A 或或 SUB ASUB A,B Bn这种用助记符号描述的指令系统,称为符号语这种用助记符号描述的指令系统,称为符号语言或汇编语言。言或汇编语言。.27汇编语言汇编语言n用汇编语言编程,程序的生产效率及质量都有所用汇编语言编程,程序的生产效率及质量都有所提高。但是汇编语言指令是机器不能直接识别、提高。但是汇编语言指令是机器不能直接识别、理解和执行的。理解和执行的。n用它编写的程序经检查无误后,要先翻译成机器用它编写的程序经检查无误后,要先翻译成机器语言程序才能被机器理解、执行。语言程序才能被机器理解、执行。这
19、个翻译转换这个翻译转换过程称为过程称为“代真代真”。n代真后得到的机器语言程序称为代真后得到的机器语言程序称为目标程序目标程序(object(object program)program)n代真以前的程序,称为代真以前的程序,称为源程序源程序(source program)(source program)。.28高级语言高级语言n汇编语言和机器语言是面向机器的,不同类型的计算汇编语言和机器语言是面向机器的,不同类型的计算机所用的汇编语言和机器语言是不同的。机所用的汇编语言和机器语言是不同的。n19541954年出现的年出现的FORTRANFORTRAN语言以及随后相继出现的其它高语言以及随后相
20、继出现的其它高级语言,开始使用级语言,开始使用接近人类自然语言的、但又消除了接近人类自然语言的、但又消除了自然语言中的二义性的语言自然语言中的二义性的语言来描述程序。来描述程序。n这些高级语言使人们开始摆脱进行程序设计必须先熟这些高级语言使人们开始摆脱进行程序设计必须先熟悉机器的桎梏,悉机器的桎梏,把精力集中于解题思路和方法上把精力集中于解题思路和方法上。高级语言源程序高级语言源程序目标程序目标程序(二进制表示的)(二进制表示的)翻译翻译.29第第 1章章 C语言概述语言概述n一个一个C语言程序语言程序n程序与程序设计语言程序与程序设计语言nC语言的发展历史与特点语言的发展历史与特点n实现问题
21、求解的过程实现问题求解的过程.30本章要点本章要点n什么是程序?程序设计语言包含哪些功能?什么是程序?程序设计语言包含哪些功能?n程序设计语言在语法上包含哪些内容?程序设计语言在语法上包含哪些内容?n结构化程序设计有哪些基本的控制结构?结构化程序设计有哪些基本的控制结构?nC语言有哪些特点?语言有哪些特点?nC语言程序的基本框架如何?语言程序的基本框架如何?n形成一个可运行的形成一个可运行的C语言程序需要经过哪些语言程序需要经过哪些步骤?步骤?n如何用流程图描述简单的算法?如何用流程图描述简单的算法?.311.1 C语言的发展历史与特点语言的发展历史与特点 n 历史历史 1972年:贝尔实验室
22、的年:贝尔实验室的Dennis Ritchie在在B语语言的基础上设计并实现了言的基础上设计并实现了C语言。语言。1978年:年:B.W.Kernighan和和D.Ritchie(简称简称K & R)合著的合著的The C Programming Language是各种是各种C语言版本的基础,称之为语言版本的基础,称之为旧标准旧标准C语言。语言。1983年:美国国家标准化协会(年:美国国家标准化协会(ANSI)制定了制定了新的新的C语言标准,称语言标准,称ANSI C。.3232C语言的祖师爷语言的祖师爷Dennis M. Ritchie32.3333Ritchie和和Thompson在开发在
23、开发UNIX33.3434接受美国国家技术勋章接受美国国家技术勋章34.35C语言的特点语言的特点 1C语言是一种结构化语言语言是一种结构化语言2C语言语句简洁、紧凑,使用方便、灵活语言语句简洁、紧凑,使用方便、灵活32个关键字个关键字,9种控制语句,程序书写形式自由。种控制语句,程序书写形式自由。3C语言程序易于移植语言程序易于移植C语言将与硬件有关的因素从语言主体中分离出来,语言将与硬件有关的因素从语言主体中分离出来,通过库函数或其他实用程序实现它们。通过库函数或其他实用程序实现它们。 4C语言有强大的处理能力语言有强大的处理能力5生成的目标代码质量高,运行效率高生成的目标代码质量高,运行
24、效率高.36C语言的特点语言的特点 6数据类型检查不严格,表达式出现二义性,数据类型检查不严格,表达式出现二义性,不具备数据越界自动检查功能,运算符的不具备数据越界自动检查功能,运算符的优先级与结合性对初学者难于掌握。优先级与结合性对初学者难于掌握。C 语言中语言中大小写字母大小写字母代表代表不同含义不同含义.371.2 认识认识C语言程序语言程序例例1-1求阶乘问题。输入一个正整求阶乘问题。输入一个正整数数n,输出输出n!。 #include int main(void) int n, result; int factorial(int n); scanf(“%d”, &n); result
25、 = factorial(n); printf(“%dn”, result); return 0; int factorial(int n) int i, fact = 1; for(i = 1; i (大于)(大于)请对照一个请对照一个C语言语言程序来理解本页中程序来理解本页中的概念的概念.51程序设计语言的语法程序设计语言的语法n C语言的主要语法单位语言的主要语法单位(1)表达式表达式: 运算符与运算对象组合就形成了表运算符与运算对象组合就形成了表达式。如,达式。如,2 + 3 * 4(2)变量变量: 变量也有数据类型,所以在定义变量变量也有数据类型,所以在定义变量时要说明相应变量的类型
26、。如时要说明相应变量的类型。如: int i;(3)语句语句: 语句是程序最基本的执行单位,程序语句是程序最基本的执行单位,程序的功能就是通过对一系列语句的执行来实现的。的功能就是通过对一系列语句的执行来实现的。(4)函数:函数:定义一个函数,调用一个函数。定义一个函数,调用一个函数。 请对照一个请对照一个C语言语言程序来理解本页中程序来理解本页中的概念的概念.52程序设计语言的语法程序设计语言的语法其中,其中,(3)语句:语句:表达式语句表达式语句:表达式加分号:表达式加分号“;” 分支语句分支语句:实现分支控制过程:实现分支控制过程 if (a b) x = a;else x = b;循环
27、语句循环语句:实现循环控制的过程:实现循环控制的过程 sum = 0; /* 初始化初始化sum和和i */i = 1; while (i = 100) /* while循环语句循环语句 */ sum = sum + i; i = i + 1;复合语句复合语句:用一对用一对“ ”,将若干语句顺序组合在一起就形,将若干语句顺序组合在一起就形成了一个程序段。成了一个程序段。.53程序设计语言的语法程序设计语言的语法(4)函数定义与调用)函数定义与调用 函数是完成特定任务的独立模块,函数的使用函数是完成特定任务的独立模块,函数的使用最主要涉及到函数的定义与调用。最主要涉及到函数的定义与调用。输入输出
28、:输入输出:C语言没有输入输出语句,用库函数语言没有输入输出语句,用库函数printf、scanf等实现。等实现。.54程序的编译与编程环境程序的编译与编程环境 n 程序的编译程序的编译 编译器编译器 程序程序 计算机直接能理解的指令序列计算机直接能理解的指令序列编译器:对源程序进行词法分析、语法与语义分析,生成可执行的编译器:对源程序进行词法分析、语法与语义分析,生成可执行的代码。代码。直接指出程序中的语法错误直接指出程序中的语法错误n 编程环境编程环境包括编辑程序(包括编辑程序(Edit)、)、编译(编译(Compile)、)、调试(调试(Debug)等过等过程。程。 n掌握程序设计语言:
29、根据语言的语法,用语言表达数据、掌握程序设计语言:根据语言的语法,用语言表达数据、实现程序的控制,并会使用编程环境。实现程序的控制,并会使用编程环境。.55可执行代码源程序C 语言上机过程语言上机过程编译编译连接连接 运行运行test.cpptest.objtest.exe.561.4 实现问题求解的过程实现问题求解的过程 问题:求问题:求1100间所有偶数的和。间所有偶数的和。1问题分析与算法设计问题分析与算法设计 求在一定范围内(求在一定范围内(1100)、满足一定条件)、满足一定条件(偶数偶数)的若干的若干整数的和,求整数的和,求累加和累加和。 思路思路:设置一个变量:设置一个变量(su
30、m),其初值为其初值为0,然后在,然后在1100的的数中数中(i)寻找偶数寻找偶数,将它们一个一个累加到将它们一个一个累加到sum中。中。n一步累加:一步累加:sum = sum + i; n重复累加,用循环语句实现,在循环过程中:重复累加,用循环语句实现,在循环过程中:(1) 判别判别 i 是不是偶数:用分支控制语句来实现。是不是偶数:用分支控制语句来实现。(2) 对循环次数进行控制:通过对循环次数进行控制:通过 i 值的变化值的变化.57问题分析与算法设计问题分析与算法设计 思路思路 确定算法确定算法算法算法:一组明确的解决问题的步骤,它产生结一组明确的解决问题的步骤,它产生结果并可在有限
31、的时间内终止。果并可在有限的时间内终止。算法的描述:算法的描述:n自然语言自然语言n伪代码伪代码n流程图:算法的图形表示法流程图:算法的图形表示法 .sum = 0i = 1i = 100i 是偶数?是偶数?sum=sum+ii=i+1输出输出sum真真真真假假假假.59实现问题求解的过程实现问题求解的过程2编辑程序编辑程序生成程序的源文件,生成程序的源文件,C语言源文件的后缀为语言源文件的后缀为 .c或或 .cpp#include int main(void)int i, sum = 0; for(i = 1; i = 100; i+) if (i%2 = 0) sum = sum + i;
32、 printf(%d, sum); return 0; .60实现问题求解的过程实现问题求解的过程3程序编译、连接程序编译、连接 编辑程序后,用该语言的编译程序对其进行编编辑程序后,用该语言的编译程序对其进行编译,以生成二进制代码表示的目标程序译,以生成二进制代码表示的目标程序(.obj)。 与编程环境提供的库函数进行连接(与编程环境提供的库函数进行连接(Link)形形成可执行的程序成可执行的程序(.exe)。编译程序指出编译程序指出语法错误语法错误 语法错误语法错误VS逻辑错误逻辑错误.61实现问题求解的过程实现问题求解的过程4运行与调试运行与调试经过编辑、编译、连接,生成执行文件后,就可以
33、在编经过编辑、编译、连接,生成执行文件后,就可以在编程环境或操作系统环境中运行该程序。程环境或操作系统环境中运行该程序。如果程序运行所产生的结果不是你想要的结果,这是程如果程序运行所产生的结果不是你想要的结果,这是程序的序的语义错误(逻辑错误)语义错误(逻辑错误)。调试:在程序中查找错误并修改错误的过程。调试:在程序中查找错误并修改错误的过程。调试的方法调试的方法n设置断点设置断点n单步跟踪单步跟踪调试是一个需要耐心和经验的工作,也是程序设计最基调试是一个需要耐心和经验的工作,也是程序设计最基本的技能之一。本的技能之一。.62开始开始结果结果语法语法错误错误源程序源程序.c / .cpp目标程序目标程序.obj可执行程序可执行程序.exe编辑编辑编译编译连接连接运行运行连接连接错误错误运行运行错误错误C语言程序的调试、运行步骤语言程序的调试、运行步骤.63作业作业.