C语言程序设计ch_第1页
C语言程序设计ch_第2页
C语言程序设计ch_第3页
C语言程序设计ch_第4页
C语言程序设计ch_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计

主编任正云

中国水利水电出版社第1章程序设计基础1.1程序设计及程序设计语言

程序是以某种语言为工具编制出来的能被机器识别并执行的一系列的指令代码。

1.1.1程序设计语言1.1.2C语言的发展过程1.1.3C语言的标准1.1.1程序设计语言程序设计语言可以分为低级语言和高级语言两大类。1.低级语言低级语言又叫面向机器的语言,它是特定的计算机系统所固有的语言,又可分为机器语言和符号语言(汇编语言)两类。

机器语言就是计算机能够直接识别并执行的指令集合。由于计算机只能识别“0”和“1”两种状态,所以机器语言指令都是二进制指令。例如某种型号的计算机用10000000表示“进行一次加法”,用10010000表示“进行一次减法”。符号语言是从机器语言发展演变而来的,它用一些“助记符号”来代替那些冗长的二进制指令。例如用ADD表示加法,SUB表示减法,等等。

2.高级语言高级语言是类似于人类自然语言和数学描述语言的程序设计语言,分为面向过程的程序设计语言和面向对象的程序设计语言,如C语言、Pascal语言、FoxBase、VisualC++、VisualBasic等。(1)面向过程的程序设计语言

把精力集中在解题的思路和方法上,使程序设计语言开始与解题方法相结合。其中一种就是把解题过程看作数据被加工的过程。基于这种方法的程序设计语言称为面向过程的程序设计语言,C语言就是一种面向过程的程序设计语言。面向过程的程序设计语言main()

/*主函数*/{/*程序开始*/

floatr;

/*定义一个实型变量r,表示圆的半径*/

floats;

/*定义面积变量s*/

s=3.14*r*r;

/*把计算的面积赋给s*/

printf("%f",s);

/*输出面积s的值*/}/*程序结束*/(2)面向对象的程序设计语言

面向对象的程序设计是一种结构模拟方法,它把现实世界看成是由许多对象(object)所组成,所有的对象都属于特定的类(class),或者说每个对象都是类的一个实例。因而面向对象的程序设计的一个关键是定义“类”,并由“类”生成“对象”。面向对象的程序比面向过程的程序更清晰易懂,更适宜编写更大规模的程序,正在成为当代程序设计的主流。面向对象的程序设计语言有Java、VisualBasic、VisualBasic.NET等,由C派生出的C++语言也属于面向对象的程序设计语言,它是一种多范型程序设计语言,不仅可以利用它编写面向对象的程序,还可以用它编写面向过程的程序。

1.1.2C语言的发展过程

C语言是目前世界上流行最广泛的高级程序设计语言。C语言的发展过程可粗略地分为三个阶段:1970年至1973年为诞生阶段,之后至1988年为发展阶段,1988年以后为成熟阶段。1.C语言的诞生2.C语言的发展3.C语言的成熟

1.1.3C语言的标准

C语言的灵活性、丰富性和可移植性很快得到了普遍的认可,接着适合于各种操作系统(UNIX、MS-DOS、CP/M-80/86等)和不同机型(字长为8bit~32bit)的C语言编译系统相继出现。1982年,美国国家标准学会(AmericanNationalStandardsInstitute,ANSI)语言标准化委员会开始着手进行C语言的标准化工作,并于1983年公布了第一个C语言标准草案(’83ANSIC)。1989年,ANSI又发布了一个完整的C语言标准——ANSIX3.159-1989,通常称为“ANSIC”,简称“C89”,1990年,国际标准化组织ISO/JECJTC1/SC22/WG14采纳了C89,做了少量修改后,以国际标准ISO/IEC9899:1990发布,通常称其为“C90”,它同C89基本上相同。

1995年,WG14对C89做了两处技术修订和一个扩充,人们将其称为“C89增补1”或“C95”,同时,WG14开始着手对C标准全面修订,并于1999年获得通过,形成了正式的C语言标准,命名为ISO/IEC9899:1999,简称“C99”。1.2C语言的特点(1)语言简洁、紧凑,使用方便、灵活。

(2)运算符丰富

(3)数据结构丰富,具有现代化语言的各种数据结构。

(4)具有结构化的控制语句。用函数作为程序的模块单位,便于实现程序的模块化。C语言是良好的结构化语言,符合现代编程风格的要求。(5)语法限制不太严格,程序设计自由度大。

(6)C语言允许直接访问物理地址,可以直接对硬件进行操作。

(7)生成目标代码质量高,程序执行效率高。(8)程序可移植性好(与汇编语言比)。1.3C程序结构【例1.1】C程序输出。main(){

printf("ThisisaCprogram.\n");}ThisisaCprogram.1.3C程序结构【例1.2】设计一个程序,计算两数之和并输出结果。main(){

int

a,b,sum; a=123;b=456; sum=a+b;

printf("sum=%d\n",sum); }sum=5791.3C程序结构【例1.3】输入两个整数,计算两者较大的数,并输出。main() {

int

a,b,c;

int

max(int

x,inty);

scanf("%d,%d",&a,&b); c=max(a,b);

printf("max=%d",c);} int

max(int

x,inty) {

intz;

if(x>y)z=x;elsez=y;returnz; }1.4源程序的编辑、编译、连接与运行

用高级语言编写的程序称为“源程序”,通常简称为程序。高级语言程序也必须被转换为机器语言程序才能被机器理解和执行,完成这种转换任务的系统软件称为编译程序。相应的转换过程通常称为编译。1.5算法程序是语句的集合,一个程序应该包含两个方面的内容:一个是对数据的描述,一个是对操作的描述。数据是操作的对象,操作的目的是对数据进行加工和处理,以得到期望的结果。著名的计算机科学家沃思(NiklausWirth)提出:程序=算法+数据结构实际上,一个程序除了以上两个要素之外,还应该采取适当的程序设计方法进行程序设计,并且用某种计算机语言来表示。因此:程序=算法+数据结构+程序设计方法+语言工具和环境其中算法是灵魂,数据结构是加工的对象,语言是编程的工具,编程要采用适合的方法,算法主要解决“做什么”和“怎么做”的问题,程序中的操作语句实际上就是算法的体现。1.5.1算法的组成要素为解决一个问题而采取的方法和步骤称为“算法”。对于同一个问题可以有不同的解题方法和步骤,也就是有不同的算法。算法有优劣,一般而言,应当选择简单的、运算步骤少的,也就是运算快、内存开销小的算法(也就是说,设计算法时,还要考虑时间复杂度和空间复杂度的问题)。

1.算法的特性(1)有穷性:一个算法应当包含有限的步骤,而不是无限的步骤;同时一个算法应当在执行一定数量的步骤后结束。

(2)确定性:算法中的每一个步骤都应当是确定的,而不是含糊的、模棱两可的。也就是说不应当产生歧义,特别是算法用自然语言描述时应当注意。(3)有0个或多个输入。

(4)有1个或多个输出。

(5)有效性。算法的每个步骤都应当能有效执行,并能得到确定的结果。

2.算法的组成要素算法含有两大要素:一是操作。每个操作的确定不仅取决于问题的需求,还取决于它们来自哪个操作集,它还与使用的工具系统有关。算法的另一要素是结构控制。结构控制就是如何控制组成算法的各个操作的执行顺序。

1966年Bohm和Jacopini证明,由顺序结构、选择结构和循环结构这三种基本结构可以组成任何结构的算法,可以解决任何问题。三种基本结构(1)顺序结构。即语句的执行顺序与书写的顺序一致。这是一种理想的结构,仅有这样的结构不可能处理复杂的问题。(2)选择结构(分支结构)。最基本的选择结构是当程序执行到某一语句时,要进行一下判断,从两条路径中选择一条合适的路径进行。例如,要在a和b中取一个较大的数,就要做比较判断,决定是将a输出还是将b输出。(3)循环结构(重复结构)。这种结构是将一条或多条语句重复执行若干遍。1.5.2算法的表示方法

为了表示一个算法,可以用不同的方法。常用的算法表示方法有自然语言、传统流程图、结构化流程图、N-S流程图、PAD图、伪代码、计算机语言等。1.用自然语言表示算法

自然语言就是人们日常使用的语言,可以是汉语、英语或其他语言。用自然语言表示算法通俗易懂,但文字冗长,容易出现有歧义的算法。自然语言表示的含义往往不太严格,要根据上下文才能准确判断。此外,用自然语言描述分支和循环的算法,不是很直观。

2.用流程图表示算法流程图表示算法:用一些图框表示各种操作,用箭头表示算法流程。用图形表示算法直观形象,易于理解,流程图图形符号下图所示。

起止框处理框输入输出框判断框连接点流程线注释框准备框待处理框美国标准化协会ANSI规定了一些常用的流程图符号,已为世界各国程序工作者普遍采用。

abABaYNPABbPYNaAbbNaPYAaYPbNAY顺序结构

选择结构

当型循环直到型循环循环结构

程序流程图【例1.4】用流程图描述从3个数中取最大数的算法。2.用N-S流程图表示算法ABABP成立不成立选择结构顺序结构当型循环直到型循环当p成立AA直到p成立A循环结构直到p成立【例1.4】用流程图描述从3个数中取最大数的算法。4.用伪代码表示算法伪代码是用介于自然语言和计算机语言之间的文和符号来描述算法的工具。它无固定的、严格的语法规则,通常借助语某种高级语言的控制结构,中间操作可以使用自然语言,也可以使用程序设计语言,或使用自然语言与程序设计语言的混合体。一般专业人员习惯用伪代码进行算法描述。输入a、b、c;if(a>=b)max=a;elsemax=b;if(max>=c)

输出max;else

输出c;

初始化:max=0,i=1;当(i<=3){

输出n;i++;

if(n>max)max=n;}输出max;

1.5.3算法设计举例

算法的设计过程是一个复杂的过程,也是一个智力过程。为了让设计算法的复杂性能够在人的智力控制的范围之内,人们提出了自顶向下、逐步细化的方法。按照这种方法,解题之初不要马上就力图触及问题的细节,而应当从问题的全局出发,给出高度概括、高度抽象的算法,通常是把这些问题的求解分成可独立求解的若干子问题;接着对每一个子问题再进行分解……最后对不可再划分的子问题分别设计算法,而且设计的过程也是从概括逐步走向细化。一般说来,上层所解决的是“做什么”,逐步细化的过程解决的是“怎么做”。在用伪代码描述算法时,随着逐步细化的深入,最终可以用程序设计语言代替算法中的伪代码。等到全部代码都使用某种程序设计语言描述的时候,程序设计也就基本完成。

【例1.5】用自顶向下、逐步细化的方法设计3个数中取最大数算法

(1)首先,分析问题需求

S1:输入三个数a、b、c;

S2:从a、b、c中找出最大数赋给max;

S3:输出max。(2)在前一阶段的基础上考虑各个“做什么”的实现途径,把算法细化如下。

S1:调用scanf()函数输入三个数a、b、c;

S2:调用一个求三个数中最大数函数max3(a、b、c),这里就需要设计max3(floatx,float

y,floatz);

S3:调用printf()函数,将最大数输出。

(3)编写主程序main(){floata,b,c,max;floatmax3(floatx,float

y,floatz);

printf("Input3numberabc:");

scanf("%f%f%f",&a,&b,&c);max=max3(a,b,c);}(4)设计max3()。仍然需要采用逐步细化的方法,先给出概要算法。

S2.1:从x与y中取较大数送入m中;

S2.2:从m与z中取较大数送入m中;

S2.3:返回m给主调函数。进一步细化的结果如下。s2.1:if(x>y)m=x;elsem=y;s2.2:if(m<z)m=z;s2.3:return(m);floatmax3(floatx,float

y,floatz){floatm;

if(x>y)m=x;elsem=y;

if(m<z)m=zreturn(m);}

【例1.6】(百钱百鸡)公元前五世纪,我国古代数学家张丘建在《算经》一书中提出:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?(1)解题思路的分析。这是一个有名的不定方程问题。

cocks+hens+chicks=100①5*cocks+3*hens+chicks/3=100②

式中:cocks为鸡翁数;hens为鸡母数;chicks为鸡雏数。对于上述不定方程的问题,要先确定一个变量的值,才能对其求解。由问题中给出的条件

温馨提示

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

评论

0/150

提交评论