C语言程序设计课件-第1章 程序设计基础_第1页
C语言程序设计课件-第1章 程序设计基础_第2页
C语言程序设计课件-第1章 程序设计基础_第3页
C语言程序设计课件-第1章 程序设计基础_第4页
C语言程序设计课件-第1章 程序设计基础_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章程序设计基础

1.1C语言简介

1.1.1C程序结构

1.简单C程序实例

【例1.1】求任意两个整数之和。

#include”stdio.h”/*编译予处理命令,表示将stdio.h(标准输入输出源文件包含到本源文件中,以便本源程序调用*/

main() /*主函数首部*/

{ /*函数体开始*/

inta,b,sum; /*声明部分,定义3个整型变量*/

a=123;b=456; /*给变量赋值*/

sum=a+b; /*变量a和b加,其和赋给变量sum*/

printf(“Thesumis%d\n”,sum);/*把运算结果输出到显示终端*/

}

运行结果:

Thesumis579【例1.2】编写程序求任意三个整数中的最小值。

#include“stdio.h”

main()/*main函数的首部*/

{/*main函数体的开始*/

intn1,n2,n3;/*定义三个整型变量*/

intminnum;/*定义变量minnum,用于存放最小值*/

printf(“\nEnterthreeintegers:”);/*输出提示信息*/

scanf(“%d,%d,%d”,&n1,&n2,&n3);/*读入变量的值*/

minnum=min(n1,n2,n3);/*调用自定义函数min*/

printf("\nMinimumis:%d",minnum);/*输出minnum的值*/

} /*main函数体的结束*/

intmin(intx,inty,intz)/*min函数的首部*/

{intm;/*定义1个整型变量*/

m=x;/*假定第一个数最小*/

if(y<m)m=y;/*如果第二个数更小,则修改m*/

if(z<m)m=z;/*如果第三个数更小,则修改m*/

returnm;/*将m的值作为函数值返回*/

}/*min函数体的结束*/

2.函数的构成

一个函数由函数首部和函数体两部分组成。

intmin(intx,inty,intz)函数首部:int为函数的类型,min为函数名,括号内为形式参数表。

{函数体的开始

intm;函数的声明部分

m=x;

if(y<m)m=y; 函数体

if(z<m)m=z; 执行部分

returnm;

}函数体的结束3.C程序的一般形式如下:

预编译处理命令

全局变量定义

main()

{

声明部分

执行部分

}

sub1()/*自定义函数1*/

{

……

}

……

subn()/*自定义函数n*/

{

……

}

1.1.2

C程序的结构特点●一个源程序有一个且只能有一个main函数(又称主函数)。C程序的执行总是从main函数开始的,在调用其它函数后,最后回到main函数中结束整个程序的执行。●C程序书写格式自由。既允许在一行内写多个语句,也允许将一个语句分写在多行上,但每个语句必须以分号结束。●C语言既有高级语言的特点,又具有汇编语言的特点;既是一个成功的系统设计语言,用来编写各种系统程序,又能用来编写不依赖计算机硬件的应用程序,而且能够直接访问计算机的物理地址,实现汇编语言的大部分功能,即具有低级语言的功能。●生成的目标程序质量高,一般只比汇编程序生成的目标代码效率低10%~20%,而且C程序的可移植性好。

C语言适合于多种操作系统,如WINDOWS、UNIX,也适用于多种机型。

“/*……*/”表示对函数或语句的功能作注释。在“/”和“*”之间不能有空格,且“/*”和“*/”必须配对使用。注释是供人阅读的,并不参与编译和运行。注释可以出现在程序的任何地方,添加必要的注释可以提高程序的可读性。

●源程序中可以使用预处理命令(如include命令、define命令),预处理命令以“#”开头,一般预处理命令应放在源文件或源程序的最前面。

●C语言是一个锻炼编程思想的语言,适合初学程序设计的学员学习。1.1.3

C语言的历史

●C语言的前身是ALGOL60语言。它描述算法很方便,但是它离硬件比较远,不适合用来编写系统程序。●1963年,英国的剑桥大学在ALGOL60语言的基础上添加了硬件处理的功能,推出CPL语言。但CPL语言规模比较大,难以实现。●1967年英国剑桥大学的MatinRichards对CPL语言作了简化,推出了BCPL语言。●1970年美国贝尔实验室以BCPL语言为基础,又作了进一步简化,设计出更简单且更接近硬件的B语言,并用B语言写第一个UNIX操作系统。●但B语言过于简单,功能有限。1972年至1973年间,贝尔实验室在B语言的基础上设计出了C语言。C语言既保持了BCPL和B语言的优点(精练、接近硬件),又克服了它们的缺点(过于简单、数据无类型等)。

●最初,C语言被用来编写UNIX操作系统,但由于C语言的强大功能和各方面的优点逐渐为人们认识,C开始迅速传播,成为当代最优秀的程序设计语言之一。

●多年来C语言在各种计算机上的迅速推广,导致了许多C语言版本,为了明确定义与机器无关的C语言,1983年,美国国家标准化协会(ANSI)根据C语言问世以来各种版本对C的发展和扩充,制定了新的标准,称为ANSIC。1987年,ANSIC又公布了新标准87ANSIC。1990年,国际标准化组织ISO接受87ANSIC为ISOC的标准。1.1.4C语言的优点

①语言简洁、紧凑,使用方便、灵活。C语言一共只有32个关键字,9种控制语句,程序书写形式自由,主要用小写字母表示。

②运算符丰富,可以实现其他高级语言难以实现的运算。

③实践结构丰富,能够实现各种复杂的数据结构的运算。

④具有结构化的控制语句,用函数作为程序的模块单位,便于实现程序的模块化。

⑤语法控制不严格,程序设计自由度大。

⑥允许访问物理地址,实现汇编语言的大部分功能,直接对硬件进行操作。

⑦生成的目标代码质量高,程序执行效率高,一般只比汇编语言生成的目标代码效率低10%-20%。。

⑧程序的可移植性好。

⑨具有丰富的库函数,编译效率高。1.1.4C语言的不足

●运算符多,难以掌握。

●对变量类型约束不严格,常常为了类型转换上的方便不要求类型检查,导致有些情况下即使要求类型一致,但实际类型不一致也不出错,而产生莫名其妙的运算结果,影响程序的安全性。

●C语言中对数组进行处理时对数组元素的下标不做越界检查,若程序中引用数组元素时越界,容易造成数据的混乱,甚至产生更严重的错误。

●C语言比其他高级语言较难掌握。1.1.5C语言的发展

1.C与C++

●用c语言编写大型程序时,程序员要考虑的东西很多,所以很容易出错,降低了效率,于是产生了c++,c++是c的升级版。

●c只有面向过程的程序设计,c++中包括面向过程程序设计,和面向对象程序设计。c++使用面向对象的方法,杜绝了C面向过程的缺陷,在进行大项目编程时效率倍增。

●C的特点是语言体积小,效率高,语言灵活,给程序的限制小,而且可以方便的对底层进行操作,所以它非常适合于开发操作系统,驱动程序,嵌入式等对速度要求较高的程序。

●C++向下完全兼容C,C++与C相比最显著的变化就是增加了类的概念,也就是增加了面向对象的成分,可以比较容易的描述人类的思维,使得软件的开发和维护变得相对简单,直接降低了软件的成本。但因为C++是面向对象的语言,这本身就制约他的速度,所以C++适合开发大型项目。

2.C/C++与Java

●JAVA是跨平台的语言,主要分三个方向:

JavaEE(企业级应用开发)

JavaME(桌面应用程序开发)

JavaSE(手机应用开发)。

Java去掉了C/C++的有可无的语言元素,如指针运算、结构、枚举、联合类型、typedefs、#define、释放内存等功能,所以Java语言很精炼,减少了平常出错的50%;

Java实现了C++的面向对象技术但有增强,并增加了一些很有用的功能,如自动收集碎片的功能;Java解释器只需215K的RAM,因此,较C++更轻便,更精简。

●从功能的角度看,Java提供了一个功能强大语言的所有功能,但几乎没有一点含混特征。从形式上看,Java设计成C++形式,让大家很容易学习。3.C与C#

●c#是微软公司为了实现平台统一和与java争夺市场为.NETFramework量身订做的程序语言,

C#拥有C/C++的强大功能以及VisualBasic简易使用的特性,和C++与Java一样是面向对象(object-oriented)的程序语言,但又是第一个面向组件(Component-oriented)的程序语言。

C#与Java有着惊人的相似,但是与Java又有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,它是微软公司.NETwindows网络框架的主角,擅长于开发网络方面的程序。

综上所述,C语言不但历史悠久,特点明显,至今仍然得到广泛的应用,而且目前流行的C++、Java、C#等语言都是在C语言的基础上发展起来的,所以大多数高等学校至今仍然把C语言作为学生学习程序设计的入门语言。1.2程序设计的基本概念

1.2.1算法

算法--为了解决某个问题(包括数学问题和逻辑问题)或 为了完成某项任务所要执行的若干有限的操作步骤。

例:用自然语言表示的三个数从小到大的排序算法。

①输入三个数x、y、z;

②将x与y比较,若x>y,交换x与y的值;

③将x与z比较,若x>z,交换x与z的值;

④将y与z比较,若y>z,交换y与z的值;

⑤输出此时的三个数x、y、z。

1.2.2算法的特性和目标

1.算法必须具有以下五个特性:

①有输入:有零个或多个输入数据;

②有输出:有一个或多个输出数据;

③确定性:每一个步骤必须确定地定义,不能模凌两可;

④有穷性:一个算法必须在执行有限步之后终止,而且每一 步都能在有限时间内;

⑤可行性:算法中有待完成的每一步运算都是可执行的,即 可以在计算机的能力范围内用有限的时间完成。

2.算法的优劣

①可读性:算法不仅仅是让计算机来执行的,更要让人来阅读,可读性好的算法有助于调试程序、发现和修改错误,使得日后对软件功能的扩展、维护易于实现。一个算法应当思路清晰、层次分明、简单明了。

②健壮性:指算法能够对非法的输入做出合理的处理,而不是产生莫名其妙的结果。

③高效率与低存储空间需求:指解决特定问题的算法的执行时间应尽量的短,算法执行过程中需要的存储空间应尽量的小。1.2.3算法的表示

1.用自然语言表示算法

2.用传统流程图表示算法开始输入xx=0y=-1x<0y=0y=1输出y结束YNYN表1.1传统流程图常用符号

符号符号名称

含义

起止框表示算法的开始和结束输入输出框表示输入输出操作处理框表示对框内的内容进行处理判断框表示对框内的条件进行判断流程线表示流程的方向连接点表示两个具有同一标记的“连结点”应连接成一个点注释框表示对流程图中某些框的操作做必要的补充说明传统流程图的优缺点:

优点:表示算法直观形象,算法的逻辑流程一目 了然,便于理解。

缺点:

①画起来比较麻烦

②由于允许使用流程线,使用者可以随心所 欲,使流程可以任意转移,造成阅读和修 改上的困难。结构化程序设计是为了克服传统流程图的缺点结构化程序设计包括三种基本程序结构

顺序结构

选择结构循环结构真处理A处理B假条件

选择结构处理A处理B

顺序结构假真

处理A条件

当型循环结构假

处理A真条件

直到型循环结构①顺序结构

顺序地执行按先后次序排列的每一个基本的处理单位。处理A处理B

顺序结构②选择结构

根据判断条件的成立与否,选择执行不同的处理过程。当判断条件成立是,执行处理过程A,否则执行处理过程B。处理A处理B假条件

选择结构③循环结构

根据一定的条件,对某些语句重复执行。被重复执行的部分称为循环体。

A.当型循环 B.直到型循环

当型循环结构真假

处理A条件

直到型循环结构

处理A条件假真3.用N-S流程图表示算法

⑴N-S流程图的主要特点:是取消了流程线,不允许有随意的控制流,整个算法的流程写在一个矩形框内。

N-S流程图表示的三种基本结构如下:

①顺序结构,如图1.6所示。

②选择结构,如图1.7所示。图1.6顺序结构处理A处理B图1.7分支结构

条件

处理A处理B成立不成立③循环结构。

当型循环结构的N-S流程图如图1.8所示。

直到型循环结构的N-S流程图如图1.9所示。

当条件成立时继续

处理A图1.4当型循环结构

处理A图1.5直到型循环结构直到条件成立时结束对三个数进行从小到大排序的算法

输入x、y、z

x>y?YN

交换x、y

x>z?YN交换x、z

y>z?YN

交换y、z

输出x、y、z4.用伪码表示算法

伪码-------用一种介于自然语言和计算机语言之间的 文字和符号来描述算法。

例如,用伪码描述上述算法:

inputx,y,z

x→max

ify>maxtheny→max

ifz>maxthenz→max

outputmax

伪码不能在计算机上实际执行,但是用伪码表示算法方便友好,便于向计算机程序过渡。伪码的表现形式灵活自由、格式紧凑,没有严谨的语法格式

1.3程序设计方法

要想设计高质量的程序,除了熟练掌握程序设计语言的语法功能,还要注重程序设计方法和设计技巧,在实践中不断地深化了解程序设计的内涵,才能逐步提高程序设计的能力。1.3.1程序设计的步骤

简单的程序设计步骤一般包含以下几部分。

①分析问题,确定数据结构

根据问题的具体要求进行分析抽象为相应的数学模 型, 确定存放数据的数据结构。

②确定算法

根据数据结构和确定的解决方案设计出具体的操作 步骤(用流程图清晰、直观的表示出来)。

③编写程序

选用合适的程序设计语言以书面形式描述算法,即形成 用程序设计语言编制的源程序。

④调试运行程序

试运行和检验编写好的计算机程序,发现问题即进行修 改,直至得出正确的结果。

⑤建立文档资料

对程序进行整理和分析,并建立相应的文档资料以便日 后维护和修改。1.3.2结构化程序设计方法

结构化程序设计方法是为了克服软件危机

在上世纪六十年代,随着计算机的发展,软件规模和复杂性的不断增加,在大型软件开发工作中出现了许多问题,如软件开发的进度被推迟、成本超出预算等。人们开始认识到软件开发的复杂性,由此提出了“结构化程序设计方法”,旨在提高程序的可读性,保证软件的质量,降低软件的成本,提高软件开发和维护的效率。迄今为止,结构化程序设计方法仍然是一种广为使用的计算机软件开发方法。●结构化程序设计方法的目标是编写清晰、可读性好、易修改性强的程序。

●结构化程序设计方法要求程序仅由三种基本结构。而且,要求每个程序模块是单入口单出口的;程序中没有永远执行不到的语句,没有死循环即无终止的循环。

●结构化程序设计方法要求采用“模块化”的设计方法。模块化的思想就是“分而制之”,将一个复杂的任务,分解成若干个功能单一、相对独立的小任务来进行设计,每个小任务就是一个模块,每个模块由三种基本结构组成。模块的功能要独立、简单,这样才能使程序具有灵活性和可靠性。结构化程序设计过程采用“自顶向下,逐步求精”的策略。

自顶向下,是指模块的划分要从问题的顶层向下逐层分解、逐 步细化,直到最底层达到最简单的功能模块。

逐步求精,是指在将抽象问题分解为若干个相对独立的小问题 时,要逐级的由抽象到具体、由粗到细、由表及里进行细 化,直到将问题细化到可以用程序的三种基本结构来实施 为止。1.4程序设计风格

程序设计包含着程序员的大量个人行为,所以必定有个性化的一面。编程风格是指程序结构形式、行文方式的编写特点。编程风格实际上是一种编程原则,是根据软件技术发展需要提出来的,也是程序设计工作者实践经验的总结。高质量的程序必须具有良好的易读性、易理解性和易维护性,因此必须具有清晰、合理的结构、简明易懂的编码,直观标准的格式。正像内功深厚的武林高手出招往往平淡无奇一样,编程高手也不会使用奇门怪招。编程风格最重要的两条是简单和清晰。本节主要介绍编程过程中初学者主要应该注意的几个问题。1.4.1符号的命名

●符号的命名首先要符合源程序的语法规定,如长度不能超过 规定,使用规定的字符及数字等。更重要的是要见名知 意,容易理解。

●一般不要使用单个字母作符号名,试想如果一本小说里的人 和物都是以单个英文字母命名的,这样的小说还能读得 下去吗?有部分程序员喜欢用拼音给符号命名,其实许 多中国人尚且不懂拼音字母,用拼音命名的符号名怎么 能和世界接轨?怎么能走向世界?

●符号名应尽量用英文名词,这样就能达到见名知意的目的。●符号命名也要采用有经验的程序员已经形成的传统,比如宏 定义用大写字母表示如:PRICE;全局变量以大写字母 开头,如:Student、School;有的程序员在变量名前 加上变量类型的首字母,如*pflag表示flag是指针变量、 ilength表示length是整型变量,对增加程序的易读性也 很有帮助。1.4.2程序文档

根据软件工程学的观点,软件不仅仅是数据结构+算法,还包括文档。文档是程序的重要部分。事实上,注释甚至要占到源程序篇幅的三分之一。

1.序言性注释

序言性注释是在程序或模块的开头为本程序或程序段做的说明。例如可以在每个函数的开头安排一个序,说明下列内容:

(1)标志(程序名、日期、版本号)。

(2)函数的用途,采用的方法(算法)及数据结构。

(3)使用方法。

(4)函数的开发历史和所做的改动。

(5)程序之外的参考文档。2.解释性注释(功能性注释)

一般插在程序正文中,经常写在程序语句之后,用“;”或“/*”与程序语句隔开,其目的是为阅读和理解程序提供解释说明,以便说明程序为什么要这样做以及做什么。解释性注释包括下列内容:

(1)对所定义的每一个变量和常量都要说明它们是什么以 及应如何使用。

(2)对程序的每一个段落(或代码块)都加以注释,简要 说明其目的和作用。

(3)指明程序每一重要部分的结束位置,如果该位置原来 不够明显的话。

(4)解释程序中使用的某种技巧或意义不够明确的语句, 最好不要使用这种意义不明确的语句。

(5)无论何时如果程序作了改动,要保证文档作相应的修 改。1.4.3源程序的书写格式

程序中的空格、空行以及缩格是文档的重要形式,它们可以明显地增加程序的易读性,使用户一眼就能判断出程序的哪些部分相互有关,何处会发生中断,以及每个循环包含哪些语句,或一个条件语句的每种选择包含哪些语句。1.4.4语句构造

构造语句是编写程序的一个主要任务。构造语句的基本原则是简单、直接。

1.最好一行只写一条语句。

2.尽量避免使用复杂的条件测试。

3.尽量排除对“非”条件的测试。

4.避免使用多维数组,避免多重循环嵌套或条件嵌套。

5.简化表达式,利用括号使表达式的运算次序更加清晰。1.4.5输入输出

输入/输出风格与人机交互的方式有关,一般应遵循下列原则:

1.保持简单的输入格式,应保证输入数据和规定的数据格式的 一致性。

2.检查所有输入数据的有效性,并有完备的出错处理措施。

3.用标记标明交互的输入请求,规定可以使用的选择值或边 界值。

4.使用数据结束标记,不要要求用户指定数据的数目。

5.对所有输出加标记,并设计出赏心悦目的输出报告。

养成良好的编程风格并不是轻而易举的,但是千里之行,始于足下,如果从学习编程的第一天开始就注意编程风格的养成,持之以恒,日积月累,就一定会形成良好的编程习惯。1.5C语言程序的调试与运行

高级语言程序要经过编译才能被计算机执行

二进制机器语言程序

C语言源程序C语言编译程序1.5.1C语言程序的调试与运行过程

①编辑:将C语言程序输入编辑器中。②编译:C语言程序经过编译或解释翻译成二进制目标程序。

●编译过程由编译程序(Compiler)完成,编译程序将 发现大多数语法错误并且发出“出错信息”,

●用户需要重新调用编辑程序改正这些错误,然后再进 行编译,直到编译成功,产生目标(.obj)文件。③连接:将编译产生的目标程序、程序中使用到的库函数及其 它目标程序连接成可执行(.exe)程序。④执行:运行(Run)可执行程序,检查输出结果,如果结果 不正确,则返回编辑窗口对源程序进行修改,然后重复 上述过程直到结果正确无误。1.5.2C语言程序上机操作和调试TurboC2.0C语言集成开发环境FileEditRunCompileProjectOptionDebugBreak/Watch

Line1Col3InsertIndentFillUnindent*D:NONAME.C

编辑窗口

Message

信息窗口

F1-HelpF5-ZoomF6-SwitchF7-TraceF8-StepF9-MakeF10-Menu

File装入或保存文件、退出TCEdit编辑。也可用Word编辑,保存为.TXT文件Run编译、连接、运行当前程序Compile编译当前程序Project管理多文件工程Option 设置编译和连接程序的各个选项Debug 设置各调试选项Break/Watch设置断点和监视表达式Insert 使编辑程序处于插入状态Indent 自动缩进,换行时与上一行行首对齐F1-HelpF5-Zoom 使光标所在窗口放大到满屏F6-Switch 使光标在编辑窗口和信息窗口之间切换F7-Trace 逐行执行程序并深入到各函数 F8-Step 逐行执行程序但跳过各函数F9-Make 编译并连接程序F10-Menu 使光标跳到顶端主菜单TurboC上机步骤1.启动TurboC2.建立源程序文件●在编辑窗口中编辑

●如用Word编辑,保存为.txt文件3.装入已有文件

F10→File→Load→键入文件名→4.另存为其它文件

F10→File→Writeto→键入Newname→5.编译程序Alt+C→Compile→

Alt+F9

必须改正Error才能生成.OBJ文件

Warning可不修改6.连接程序

Alt+C→CompileLinkExeFile7.运行程序Alt+RRunAlt+F9只有结果正确,才能认为程序正确3.掌握调试技巧,提高调试效率

程序编写好后,必须进行调试(Debug),只有“调通”了的程序,才能交付运行。

最有用的两种调试技巧:

(1)设置/清除断点

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论