1、C语言程序设计,邹琪 北京交通大学 计算机与信息技术学院工程系,1,建议教材及参考书,教材: 计算机程序设计基础赵宏主编,清华大学出版社、北京交通大学出版社 计算机程序设计基础辅导与实验教程赵宏主编,2,课程学时安排,本课程计划 40+24 学时 理论教学(40学时):采用电子教案授课,结合计算机的特点,边讲、边演示、边操作; 实验教学( 12次实验, 24学时):熟悉环境、顺序选择、循环、数组、函数、综合、指针、文件综合。每次实验上交一个实验报告。 集成开发环境:VC+6.0;,3,考核方式,本门课按两门课来计算: C语言程序设计:平时成绩+期末考试成绩 平时成绩:占总成绩的30%。课的出
2、勤+作业的完成; 期末考试成绩:占总成绩的70%。 综合程序设计: 平时实验作业(40%)综合程序设计实验考试(60%)。,4,理论教学主要内容,第1章 程序设计概述(4学时) 第2章 程序设计初步(4学时) 第3章 程序的控制结构(8学时) 第4章 函数(8学时) 第5章 构造数据类型(8学时) 第6章 指针(4学时) 第7章 动态数据结构(2学时) 第8章 文件(2学时),5,教学目标,培养利用计算机处理问题的思维方式;培养程序设计的基本方法;主动将计算机引入到学习、生活中解决实际问题,提高处理问题的效率。,6,第一章 程序设计概述,第一节 程序设计语言 第二节 程序设计基本概念 第三节
3、结构化程序设计 第四节 程序的实现环境,7,第一节 程序设计语言,什么是计算机语言? 语言: 用于传达信息的表示方法、约定和规则的集合,是人们交流信息的媒介和工具。 计算机语言:是指计算机能够接受和处理的具有一定格式的语言,是程序设计最重要的工具。人与计算机打交道时交流信息的媒介和工具。,8,计算机语言的发展,低 级 语 言,高 级 语 言,机器语言,用 0、1 表示的机器代码,汇编语言,用助记符表示的程序语言,非常接近于人类的自然语言和数学语言,它的一个语句往往对应几条机器指令,9,第二节 程序设计基本概念,10,程序程序是为了解决某一特定问题而编写的计算机能够接受并运行的一系列指令。简言之
4、,程序就是指令序列。 程序设计简单地说,程序设计就是用计算机语言编写程序的过程。一般包括以下几个步骤:,分析 问题,确定 算法,编程,运行 调试,总结,第二节 程序设计基本概念,11,进行程序设计应该掌握程序设计方法,本门课的就是要学习用结构化程序设计方法编写C语言程序; 一个程序必须是用某种计算机语言来编写的,并有必要的环境支持; 因此,可以这么认为:,程序=算法+数据结构+程序设计方法+语言工具和环境,例2.1:求12345,C语言编写的程序:#include Void main( ) int i,t;t=1;i=2;t=t*i;i=3;t=t*i;i=4;t=t*i;i=5;t=t*i;
5、printf(“%dn”,t); ,数据:1,2,3,4,5 数据结构:int 类型,算法:步骤1:先求12,得到结果2 步骤2:将步骤1得到的乘积2再 乘以3,得到结果6;步骤3:将6再乘以4,得24 步骤4:将24再乘以5,得120,12,设变量t为被乘数,i为乘数。 用循环算法来求结果, 算法可改写为:,C语言编写的程序:#include Void main( ) int i,t;t=1;i=2; while(i=5) t=t*i;i=i+1; printf(“%dn”,t); ,步骤1:t=1 步骤2:i=2 步骤3:ti = t 步骤4:i+1 = i 步骤5:如果i不大于5,返回步
6、骤3;否则结束。最后得到t的值就是5!的值。,13,思考:如果求2461000,如何设计算法?,算法概念,精确定义的一系列规则,这些规则指定了一系列操作顺序,以便在有限的步骤内得到所求问题的解答;,14,算法分类,数值运算:求数值解,如求方程的根、求函数的定积分非数值运算:事务管理领域,如图书检索、人事管理、行车调度管理,15,算法实例,例2.2 全班共30人,打印视力在0.8以上的学生姓名。 设g(i)代表第i个学生的视力,算法表示如下:S1:1 = i S2:如果g(i)0.8,则打印。 S3:i+1 = i S4:如果i30,返回S2;否则结束。,16,算法实例,例2.3 输入三个数,然
7、后输出其中最大的数。 设a、b、c代表三个数,算法表示如下:S1:输入a、b、c。 S2:如果ab, 则a= MAX;否则b= MAX 。 S3:如果c MAX, c= MAX 。 S4:输出MAX 。,17,算法的特征,包含有限的操作步骤 算法中每一个步骤都是确定的 从外界取得必要的信息 算法的目的是为了求解,“解”就是输出算法中每个步骤仅有一个后续动作 每个步骤应能有效地执行,并得到确定的结果,18,有穷性,确定性,有零个或多个输入,有一个或多个输出,连续性,有效性,算法的表示,流程图 N-S图 伪代码,19,流程图,20,常用流程图符号,例2.4 求5!,21,步骤1:t=1 步骤2:i
8、=2 步骤3:ti = t 步骤4:i+1 = i 步骤5:如果i不大于5,返回步骤3;否则结束。最后得到t的值就是5!的值。,例2.5 判断素数,22,S1:输入正整数= n S2:i=2(i作为除数) S3:n被i除,得余数r S4:如果r=0,打印n“不是素数”,结束;否则执行S5 S5:i+1 = i S6:如果i ,返回S3;否则打印n“是素数”,结束。,素数是指除了1和该数本身之外,不能被其它任何整数整除的数。判断一个数n是否素数的方法:将n作为被除数,将2到 各个整数轮流作为除数,如果都不能被整除,则n为素数。,23,S1:输入正整数= n S2:i=2(i作为除数) S3:n被
9、i除,得余数r S4:如果r=0,打印n“不是素数”,结束;否则执行S5 S5:i+1 = i S6:如果i ,返回S3;否则打印n“是素数”,结束。,用流程图表示算法要比用文字描述算法逻辑清晰、易于理解。,画流程图注意事项,开始时把注意力集中在问题的逻辑上,画出流程图的主路径 完成主路径后,加上分支和循环 一个流程图只能含有一个起始点和一个结束点 没有必要在流程图中画出程序的每个步骤。 让其他编程人员或用户能够轻松看懂你的流程图。,24,练习2.1 画流程图:打印50个学生中成绩在80分以上者,25,思考:设 代表第i个学生 的成绩,算法表示如下: S1:1 = i S2:如果 80,则打印
10、。 S3:i+1 = i S4:如果i50,返回S2;否则结束。,N-S图,美国学者I.Nassi和B.Shneiderman提出的一种新的流程图全部算法写在一个矩形框内,由一些基本的框组成一个大的框,称N-S图,26,例2.6 求5!,27,传统流程图分析:,例2.7 判断素数,28,29,一个 出口,传统流程图变换为:,例2.7 判断素数,30,伪代码,概念:伪代码(pseudo code)是用来描述算法的介于自然语言和计算机语言之间的文字和符号。 特点:自上而下每一行(或几行)表示一个基本操作;不用图形符号,书写方便、格式紧凑;便于向计算机语言算法(即程序)过渡。 用处:适用于设计过程中
11、需要反复修改时的流程描述。,31,例2.8 求5!,32,开始置t的初值为1置i的初值为2 当i=5,执行下面操作:使t=ti 使i=i+1 循环体到此结束 输出t的值 结束,注:可用中文、英文或中英文混用书写,第三节 结构化程序设计,在结构化程序设计中,有三种基本结构,可以作为表示一个良好算法的基本单元: 顺序结构 选择结构 循环结构用这三种基本结构作为“建筑单元”,通过组合和嵌套,就能解决任何复杂的问题。,33,图例,顺序结构 选择结构,34,循环结构:while型 直到(until/do-while)型,35,36,三种基本结构的扩展结构,37,三种基本结构的共同特点(1) 一个入口,
12、一个出口;(2) 结构内每一部分都有机会被执行;(3) 结构内不存在“死循环”;,38,错误 原因:语句A没有出口,错误 原因:出现死循环,39,正确,符合基本结构的特点,40,第三节 结构化程序设计,基本思路把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内结构化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构。,41,结构化程序设计步骤,1. 分析问题,建立数学模型包括考虑输入、输出、具体处理步骤等操作 2. 选定算法,用适当工具描述算法数学建模之后,为了有效地进行解题,不仅要保证算法正确,还要考虑算法的质量。 3. 编程实现将选定的算法从非
13、计算机语言的描述形式转换为计算机语句描述形式。 4. 测试及调试,42,第三节 结构化程序设计,结构化程序设计在总体设计阶段采用自顶向下逐步求精的方法,可以把一个复杂问题的解法分解和细化成一个由许多模块组成的层次结构的软件系统。,43,结构化程序设计特点,按功能划分为若干个基本模块,形成树状结构;每一个模块内部都是由顺序、选择和循环三种基本结构组成;各模块间的关系尽可能简单;,44,结构化程序设计,模块设计的方法功能分解,逐步求精把一个任务分为若干个简单的子任务; 根据功能将程序划分为若干个子模块; 子模块还再可以划分为更小的模块; 划分子模块时应注意模块的独立性:高内聚,低耦合;,45,第三
14、节 结构化程序设计,46,结构化设计实例,例2.9:求1到n之间的素数 程序要做的事是:从1开始依次找,判断是否是素数,是则打印出来,否则继续往下找,直到n为止。1.第一级伪代码begin Initialize number; /初始化变量nwhile (numbern) If number是一个素数 then print number;number取下一个值; end,47,48,2.细化“初始化number” “number是一个素数”及“number取下一个值”。 (1)细化“初始化number”: number=2;(2) 细化“number是一个素数”: 当number是一个素数时为
15、true,否则为false。细化如下:prim=true; dok=2; lim=开方(number);if nubmer能被k整除 then prim=false ;else k=k+1; while (prim=false) or (k达到lim);(3) 细化“number取下一个值”:number=number+1;,49,3.第三步细化 “number能被k整除” 及 “k达到lim” (1) 细化“number能被k整除”: number/k的余数=0; (2) 细化“k达到lim”: k=lim;4.补充完整程序。,第四节 程序的实现环境,硬件环境 输入设备 输出设备 外存储器
16、内存储器:存贮运行中的程序和数据 中央处理器CPU:包括运算器和控制器 运算器:按控制器的控制信息取数、进行算术运算或逻辑运算。 控制器:从内存取出程序指令进行分析并对其它相关部件发出操作控制信息。,50,第四节 程序的实现环境,软件环境 操作系统 编辑程序 编译程序 连接程序,51,52,C程序的执行过程,编译程序,连接程序,结果,可执行程序,目标程序,运行,.c,.exe,.obj,输入源程序、修改、保存等,编辑程序,源程序,源程序用户用高级语言编写的程序,C源程序文件名字后缀一般为“.c”,若在visual C+下编辑,也可为“.cpp”。 编译程序主要功能是将高级语言程序翻译成机器语言
17、程序(即目标程序),另外它还包含查错的功能。在翻译过程中如果发现源程序有错,则不生成目标程序,并向用户报告出错信息。 目标程序源程序经过编译程序转化成的机器语言程序 连接程序将所有的目标程序和系统提供的库函数等连接在一起成为一个整体,形成可执行程序。,53,54,55,55,实验步骤,启动Visual C+ 6.0开发系统; 选取“File”菜单中的“New”命令,结果如下图所示:,在“New”对话框的“Files”选项卡中选取“C+ Source File”,在Location 文本框中输入工作目录,在File的文本框中输入新文件名,例如“helloworld.c”,56,56,实验步骤,进
18、入程序的编辑状态,如图所示:,57,57,实验步骤,编辑helloworld程序文件,如图所示:,58,58,实验步骤,打开“Build”菜单,选择“Compile helloworld.c”命令:,59,59,实验步骤,单击“Compile helloworld.c”命令,显示如下结果:,60,60,实验步骤,单击“是(Y)”或按下Enter键。将显示如下结果:,输出区显示编译结果,实验步骤,若编译没有错误则生成目标文件; 打开“Build”菜单,选择“Build helloworld.exe”命令,若连接没有错误则生成可执行文件; 打开“Build”菜单,选择“Execute hellow
19、orld.c”命令,查看输出结果;,61,62,62,实验步骤,上述的结果显示,程序编译完全通过,没有语法错误。 但是,在程序调试过程中,发现程序中的错误是常见的。有错误时的显示状态如图所示:,63,63,实验步骤,编译结果显示程序cpp2.cpp有3个语法错误,错误类型是什么呢?可以通过拖动输出区的移动按钮查看程序的错误类型和位置。将移动按钮向上移,得到如下结果:,64,64,实验步骤,三个错误的详细信息如下:在ccp2.cpp的第12行有一个错误,没有声明标识符 i 。在ccp2.cpp的第15行有一个错误,缺少 “;“。在ccp2.cpp的第22行有一个严重错误,应该有一个 “ “。修改
20、源程序:当源程序中存在错误时,要对其进行修改,修改的方法是,单击第一个输出区中的错误提示信息,按下Enter 键。显示会自动切换到源程序编辑区,光标会指向出错的语句上,调试程序的步骤,将源程序输入到计算中; 对源程序进行编译,如编译的结果有错误信息提示,回到编辑区,对源程序进行修改; 没有错误之后,选择Build 菜单下的Build命令,产生最后的可执行程序。 选择Build 菜单下的Execute命令(或单击 图标 !),运行可执行程序。 对运行结果进行检查,如果不正确,继续修改。直至完全正确。,65,习题,画流程图:输入三个数,然后输出其中最大的数。 理解本课中所讲相关概念:计算机语言、程序、程序设计、算法、源程序、编译程序、目标程序、连接程序 思考:在你平时遇到的问题中,找三个问题,可以分别用顺序结构、选择结构和循环解构来编程解决。,66,67,结构化设计的优缺点,优点: 结构清晰 层次分明 易写易读 便于修改,缺点:可重用性差,课后练习,熟悉visual c+ 6.0环境 了解上机调试程序步骤: 输入源程序; 编译、链接; 如果有错误,则回到编辑状态,进行修改; 再编译、链接,直到没有错误; 运行目标程序; 查看运行结果; 将给定的一个程序输入到计算机中,进行调试。,68,课件下载地址,密码:bjtu2008,69,