第一章程序设计与C语言_第1页
第一章程序设计与C语言_第2页
第一章程序设计与C语言_第3页
第一章程序设计与C语言_第4页
第一章程序设计与C语言_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、2022-3-16C语言程序设计1 C语言程序设计 张芳 主编 (王维强 辅助设计)北京:电子工业出版社出版2022-3-16C语言程序设计2C语言程序设计语言程序设计 C Programmer2022-3-16C语言程序设计3院楼二层软件教研室院楼二层软件教研室电话:电话MAIL:如何与老师联系如何与老师联系?2022-3-16C语言程序设计4第一章 程序设计与C语言 1.1 C语言 概述 1.2C语言的程序结构 1.3 术语 1.4 C语言的上机步骤 1.5 算法简介习题(一)及参考答案与解析2022-3-16C语言程序设计51.1 C语言概述 程序设计语言现在已

2、经发展到了第四代。它的发展过程大体上是这样的:2022-3-16C语言程序设计6(1)机器语言 也有的称为CPU的指令系统。大约在20世纪50年代,人们开始用由二进制数“0”、“1”构成的指令码编写程序。程序的可读性很差,并且难于修改、扩充和移植。因此,当时的编程人员只是极少数计算机专业技术人员,并且程序只用于特定类型的计算机和特定的用途。这也使得其运算效率是所有语言中最高的。人们习惯上把机器语言称为第一代程序语言。(2)汇编语言 也称为符号语言,是用诸如:“ADD”(代表加法)、“MOV”(代表数据传送)等助记符号(一些简洁的英文字母、符号串)描述的指令系统。虽然与机器语言相比,有了较大的进

3、步(减轻了使用机器语言编程的痛苦,人们很容易读懂并理解程序在干什么,纠错及维护都变得方便了),但仍未完全摆脱具体机型的限制,且程序的可读性比较差,也不容易修改、扩充和移植。而此时人们设计出的具有用一条指令来描述若干条指令功能的宏汇编,是程序语言发展史上的一个巨大进步。由于作为第二代程序语言的汇编语言和机器语言一样,都是面向计算机硬件的,所以它们又被称为面向机器的语言。(3)面向过程的高级语言 也有人称之为算法语言,它主要面向解题的过程,这种语言接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编出的程序能在所有机器上通用。这些语言大约产生于20世纪60年代,主要有BASIC、C、FORT

4、RAN、PASCAL和C+等,人们称之为第三代程序语言。(4)非过程化的高级语言 使用过程化的语言解题。随着计算机图形学的发展,面向对象的程序设计方法和可视化软件开发越来越流行,这为非计算机专业人员提供了极大地方便。象用C语言开发的FOXBASE+等非过程化的高级语言,被称之为第四代程序语言。 2022-3-16C语言程序设计7现在使用的大多数程序是用高级程序(过程)语言编写的,而C语言就是其中的“顶梁柱”。C语言是一种编译型程序语言,其前身是60年代开发的BSPC语言,当时就能够处理与机器本身数据类型相近的数据,而且具有与内存地址对应的指针处理方式。到了1970年在继承和发展BCPC语言这些

5、特点的基础上,又提出了“B语言”,小型机的UNIX操作系统就是使用B语言记述和开发的。此后在进行UNIX操作系统的开发工作中,对B语言做了进一步完善,美国AT&T公司贝尔实验室的D.M.Ritchie在1972年推出了一种新型的程序语言,这就是C语言。自从C语言问世以来,就表现出了较强的生命力。它从最初的UNIX操作系统的记述语言,已迅速发展成为广泛应用的通用程序语言。过去仅在小型机领域中使用的C语言,随着16位和32位微机的发展和普及,正成长为微机的主要程序语言之一,当前某些机大中型中也在使用C语言。C语言有以下几个基本特点: 2022-3-16C语言程序设计8(1)C语言是处于汇编

6、语言和高级语言之间的一种记述性程序语言,又被称为中级计算机语言。中级语言并没有贬义,并不意味着它功能差,难以使用,或者比BASIC、PASCAL那样的高级语言原始,也不意味着它与汇编语言相似,会给使用者带来类似的麻烦。C语言之所以被称为中级语言,是因为它把高级语言的成分同汇编语言的功能结合起来了,也就是说C语言是比较靠近面向硬件和系统的语言,象汇编语言那样可以直接访问硬件的功能。允许对位,字节和地址这些计算机中的基本成分进行操作,又有高级语言面向用户,容易记忆,便于阅读和书写的优点。(2)C语言具有简洁的程序表示和书写格式,以及强大的功能。用C语言编写的程序往往短小精悍,功能强大,不仅可以用于

7、科学计算、信息处理,还可以用于系统软件和应用软件的开发。(3)C语言程序具有较强的可移植性,也就是说可将编写的软件不需要做较大修改就可以从一种机型移到另一种机型上运行。由于C语言的语句中,没有依存于硬件的输入输出(I/O)语句。程序的I/O功能是通过调用I/O函数来实现的,而这些函数是由系统提供的独立于C语言的程序模块库。因此C语言本身并不依存于机器的硬件系统,从而便于在硬件结构不同的机型间实现程序的移植。(4)C语言是一种结构化的程序设计语言,即:程序的逻辑结构可以用顺序,选择和循环三种基本结构组成。(5)C语言是便于模块化软件设计的程序语言。C语言程序的函数结构,十分利于把整体程序分割成若

8、干相对独立的功能模块,并且为程序模块间的相互调用以及数据传递提供了便利。这一特点也为把大型软件模块化,由多人同时进行集体性开发的软件工程技术方法提供了强大的支持。2022-3-16C语言程序设计9(6)C语言程序中可以使用如#define、#include等编译预处理语句,能够进行字符串或特定参数的宏定义,以及实现对外部文本文件的读取和合并。同时还具有#if、#else等条件编译预处理语句,提高了软件开发的工作效率,并为程序的组织和编译提供了便利。(7)C语言具有种类丰富的运算子。除一般高级语言中使用的“+”、“-”、“*”、“/”等四则运算以及“AND”、“OR”、“NOT”等逻辑运算符外,

9、还可以实现以二进制位(bit)为单位的位与(&)、位或()、位非()、位异或()以及移位操作(,)等位运算,并且具有“a+”、“b-”等单项运算和“+=”、“-=”、“*=”、“/=”等复合运算功能。(8)C 语言的数据类型丰富。基本类型有字节型(8bit),单精度整数(16bit),双精度整数(32bit)和单、双精度实数型,同时它还具有结构体和联合体(又称为共同体)两种数据类型。利用它们可以便利地处理包含着不同数据类型的复杂数据类型。因此,C语言具有较高的数据处理功能。(9)C语言程序执行效率高。试验证明,针对同一问题,用C语言编写的程序生成目标代码的质量以及执行的速度都比诸如FO

10、RTRAN、BASIC等其它高级语言编写的程序要好很多。C语言的以上特点使其得以广泛普及和应用。C语言又被称为“高级汇编语言”,使用它的趋势日益增强,最近呈现出C语言有可能取代汇编语言的发展趋向。 2022-3-16C语言程序设计101.2 C语言的程序结构 C语言具有32个关键字(见表1.2),它们与标准C句法结合形成了程序设计语言C。 表1.2 C语言的关键字auto break case char const continute default dodouble else enum extern float for goto ifint long register return shor

11、t sight sizeof staticstruct switch typedef union unsigned void volatile while C的关键字都是小写的。在C语言中区分大、小写,如“else”是关键字,“ELSE”就不是关键字。在C语言中关键字不能用于其它目的,即不允许将关键字作为变量名或函数名使用。 2022-3-16C语言程序设计11所有的C程序都是由一个或多个函数构成,其中必须只能有一个主函数“main()”,它是程序运行开始时被调用的第一个函数,无论它的位置如何。在编制完整的C代码中,“main( )”实质上包含着程序要完成动作的轮廓,这个轮廓由函数调用组成。虽

12、然从技术上讲,主函数不是C语言的一个成分,但它仍被看作是其一部分。这样,如果“main()” 用作变量名,会给编译程序造成混乱。C语言程序的基本形式是:函数类型 函数名(形式参数)形式参数说明;数据说明部分;语句部分;函数头包括函数说明、函数名和小括弧“()”中的形式参数。如果函数调用无参数传递,小括号中形式参数为空。形式参数说明指定函数调用传递参数的数据类型。函数体指大括号“”内的部分,包括其内使用的数据说明和执行函数功能的语句。大括号“”和“”表示函数体的开始和结束。C语言书写格式自由,允许一行内写若干个语句,每个语句和数据定义的后面必须跟上一个分号“;”。当然,也可以把一个语句写在若干行

13、上。C语言中的注释语句要放在注释符“/*”与“*/”之间。在“/”与“*”之间不允许有空格,并且一般来说,注释部分允许出现在程序的任何位置。注释的目的是增加程序的可读性。因此,建议大家在编写程序时要写上必要的注释。 2022-3-16C语言程序设计12例1.2.1,如下完整的C语言程序用于输出“Welcome to learning C program!”。/*文件名:print.c*/ #include /*插入标准I/O库的头文件*/main() /*主函数*/ printf(“Welcome to learning program C!n”); /*输出语句*/例1.2.2,如下完整的C

14、语言程序用于输出所输入的两个在-32768到32767之间的整数中的最小者。 #include /*插入标准I/O库的头文件*/ main() /*主函数*/ int x,y,z; /*声名部分,说明局部变量x,y为整型*/ scanf(“%d,%d”,&x,&y); /*输入变量x,y的值*/ z=min(x,y); /*调用函数min(),将得到的值赋给z*/ printf(“The minor between %d and %d is %d .n”,x,y,z); /*输出结果*/ int min(int a,int b) /*定义函数min(),返回值为整型,行参a,b

15、为整型*/ int c; /*声明部分,说明局部变量c为整型*/ if(ab) ; /*通过条件语句把a,b最小者赋给c*/ c=b; else c=a; return (c) /*文件名:min.c*/ /*返回c的值*/ 2022-3-16C语言程序设计131.2.1 函数库和链接 从技术上讲,纯粹由程序员自己编写的语句构成C语言程序是可以的,但这也是罕见的。因为C语言在它的定义中没有执行输入、输出操作的任何方法。因此大多数C语言程序都含对C语言种种标准库函数的调用。 所有的C编译程序都是和标准C函数库一起提供的,后者含有完成各种常用任务的函数。在C语言的某些实现中,函数库以一个大文件的形

16、式出现;在另一些C语言的实现中,它却被分成几个小文件,以提高效率和实用性。为了简单起见,我们讨论函数库时,都采用单一文件形式。 C编译程序的实现者已经编写了大部分常用的通用函数。当我们调用一个别人编写的函数时,编译程序“记忆”它的名字。随后,“链接程序”把我们编写的程序同标准函数库中找到的目标码结合起来,这个过程称“链接”。某些C编译程序带有自己的链接程序,有些则使用操作系统提供的标准链接程序。 最初,C语言被用于系统程序设计,一个“系统程序”是一大类程序的一个部分,这一大类构成了计算机操作系统及其实用程序。通常被称之为系统程序的有:操作系统、翻译程序、编辑程序、汇编程序、编译程序和数据库管理

17、程序。 保存在函数库中的函数是可适定位的,这意味着其中机器码指令的内存地址并没绝对确定,只有偏移量是确定的,当把程序与标准函数库中的函数连接时,内存偏移量被用来产生实际地址。某些技术手册和参考书中更为详细地讲述了这一处理过程,但是,以上对适定位的了解对于运行C语言程序来说已经足够了。 2022-3-16C语言程序设计141.2.2分别编译 大部分以C语言编写的短程序都可以完全放于一个源文件中。然而随着程序长度的增加,编译时间也会增加,因此C允许将一个程序分解为若干块,每一个文件可单独编译,一旦所有的文件编译完毕,就可以将它们与库函数中的函数链接,形成一个完整的目标代码程序。分别编译的优点是,当

18、一个文件中的代码改变以后,并不必重新编译全部程序。 2022-3-16C语言程序设计151.2.3 编译一个C语言程序 编译一个C语言程序包括以下四步: (1)程序设计(程序编辑):用编辑程序产生一个后缀为“.C”的C源程序文件。如:“cf.c”。C程序习惯上使用小写英文字母,常量和其他用途的符号可用大写字母。C语言对大、小写字母是有区别的。关键字必须小写。 (2)程序编译:将存盘的C源程序翻译成二进制目标代码,在MS-DOS下是后缀为“.obj”的文件。这个过程是使用系统提供的编译程序(编译器)运行的。不同操作系统下的各种编译程序的启动命令不同。编译的同时对源文件的语法和逻辑结构等进行检查,

19、当出现错误时,就会在显示器上显示错误的位置和种类,再次使用编译程序进行排错修正。 (3)链接过程:编译后产生的目标文件是浮动的程序模块,不能被直接用于执行。经过链接后,才生成可以运行的可执行文件。链接过程就是把目标文件和其他分别进行编译生成的目标程序模块(如果有的话)及系统提供的标准库函数链接在一起,生成可以运行的可执行文件的过程。UNIX下名字为“cf.out”,而在MS-DOS下名字为“cf.exe”。 (4)程序运行:直接输入“Ccf”,再按回车键(用“”表示),当执行结果达到预期目的,则开发工作到此完成,否则,从头开始执行(1)、(2)、(3)、(4)。 2022-3-16C语言程序设

20、计161.2.4用批命令编译程序 将编辑、编译、链接、调试、运行全过程在窗口状态下实现,这就是Turbo C,这要看操作系统中是否具备。 2022-3-16C语言程序设计171.3 术语 (1)源代码:用户可以阅读的程序正文(文本),通常也被成为源程序,它是C编译程序的输入。 (2)目标码:由源代码转换而来的机器码,计算机可直接读入并执行,目标码是链接程序的输入。 (3)链接程序:可以把分别编译的函数链接为一个完整的程序,它能够把C的标准函数与程序开发人员编写的代码结合起来。链接程序的输出是可执行代码。 (4)函数库:一个用来存放可被用户程序引用的标准函数的文件,这些函数包括所有I/O操作及其

21、它有用的子程序。 (5)编译时间:程序被编译时出现的事件。在编译时间内出现的错误通常是语法错误。 (6)运行时间:程序在运行时出现的事件。 2022-3-16C语言程序设计181.4 C语言的上机步骤 Turbo C是目前应用十分广泛的编译程序。下面简单介绍一下Turbo C的一些情况。 按装并打开Turbo C后,大家会看到“主菜单”有8个“子菜单项” (见表1.4),每个“子菜单项”又有若干“子菜单项”。 表1.4.1 Turbo C的菜单主菜单 File Edit Run Compile Project Option Debug Break/watch含义 文件 编辑 运行 编译 项目

22、选项 调试 中断/观察 操作 文件 2022-3-16C语言程序设计19 表1.4.2 Turbo C的一些快捷键 快捷键操作 相当于 *F3 File/Load Alt+F3 File/Pick *F2 File/Save Alt+X File/Quit Ctrl+F9 Run/Run Ctrl+F2 Run/Program reset F4 Run/Go to cursor F7 Run/Trace into F8 Run/Seep over *F9 Compile/Make EXE file *Alt+F5 Run/User screen Ctrl+f4 Debug/Evaluate C

23、trl+F3 Debug/Call stack Ctrl+F7 Break/watch/Add watch 注:加“*”的为常用快捷键。加号“+”表示同时按键。另外“F10”常用于状态切换。 用键盘的左移键“”和右移键“”进行选择菜单项,按回车键(常用“”表示)选定 当前的一个菜单项。选定菜单项之后,再用上移键“”和下移键“”选择所需项,按回车键选定。2022-3-16C语言程序设计20使用Turbo C的一般步骤如下:(1)打开Turbo C后,系统会自动建立一个新的C语言源程序。也可以通过选择“File/New”新建一个C语言源程序。如果源程序已经存在,则选择“File/load”,在弹出

24、的对话框中输入所需的文件名并按“”,即可打开文件。(2)在“Edit”编辑状态下,输入或修改源文件后,选择“Compile/Compile to OBJ”进行编译,再选择“Compile/Link EXE file”进行链接。也可以直接选择“Compile/Make EXE file”,将编译和链接同时进行。(3)按“F10”进行状态转换,选择“Run/Run”执行程序。当源程序有误时,返回(2);否则,选择“Run/User screen”,便可以看到程序的输出结果。考虑到绝大多数高校、培训机构以及个人使用Turbo C,对于C语言程序在DOS和UNIX操作系统下的运行,请读者参阅其它参考书

25、。 2022-3-16C语言程序设计211.5 算法简介 计算机大师Nikilaus Wirth提出了一个著名的公式: 程序设计=数据结构+算法 数据结构是程序对数据的描述。它是绝大多数计算机及其相关专业的基础课。关于这方面,这里不再赘述。算法则是对某一个特定问题求解步骤进行描述的有序指令序列。它具有:有穷性、确定性、可行性以及输入和输出等5个重要特性。评价一个算法的优劣则一般从正确性、可读性、健壮性和算法效率等4个方面进行考虑。 一个算法常用伪码和流程图等描述。软件专业人员则习惯使用伪码。 2022-3-16C语言程序设计22(1)伪码 用介于自然语言和计算机语言之间的文字和符号来表示算法,

26、书写格式自由。例1.5.1,任意输入一个非零自然数n,求1+2+n的值。用伪码表示如下: 算法开始: 赋予x的初始值为0赋予y的初始值为n当ix n=y for(ii) x+i=xprint xEnd自己尝试写一下下例中算法的伪码表示。例1.5.2,任意输入一个非零自然数,求的值。 n12112022-3-16C语言程序设计23(2)普通流程图 用一些规定的图标以及一些文字和符号来表示算法,具有直观性。American National Standard Institute(简称:ANSI)对这些图标作了规定。其中一些常用的图标如下: 表1.5.1 普通流程图的常用图标 名称 起止 输入输出

27、处理 判断 注释 方向 结点 图标 图标 图标 图标 图标 图标 图标 图 标2022-3-16C语言程序设计24例1.5.3,任意输入三个数,按自小到大顺序输出。用普通流程图表示为: 开始 输入x,y,z N xy x=n y=m Y x=y y=n 1 m=p zn n=m z=n Y mm 2 Y z=p 2 2 输出p,m,n 尝试着写一下下例算法的普通流程图表示。例1.5.4,任意输入四个数,按自大到小顺序输出。 2022-3-16C语言程序设计25(3)N-S流程图由顺序结构、选择结构和循环结构三种基本结构按程序执行的顺序构成的放在一个矩形内的算法表示(见表1.5.2)。 表1.5

28、.2 N-S流程图的基本结构 再执行B. A;否则执行B。 反复执行A。 P不成立。基本 A Y P N P A结构 B A B A P名称 顺序结构 选择结构 当型循环结构直到型循环结构含义 先执行A, 条件P成立,执行 当条件P成立, 执行A,直到条件2022-3-16C语言程序设计26例1.5.5,某超市规定:一次购物在1000元人民币以上者,打9.5折;一次购物在5000元以上者,打8.5折;一次购物在10000元以上者,打7折。一位顾客只购买单价为280元的皮鞋和单价为150元的上衣。编写一个程序,当输入这类顾客 购买的鞋子的双数和上衣的件数时,程序输出顾客应付的钱数。用N-S流程图

29、表示为:输入m,n280m+150n=xY x10000 N Y x5000 N 7 x=x 8.5 x=x Y x1000 N 9.5 x=x 输出x试着用N-S流程图表示下例中的算法。例1.5.6,求解“1+2+n100”的n的最大值。2022-3-16C语言程序设计27习题(一) n1, C语言程序以()为基本单位。A. 子程序 B. 过程 C. 函数 D. 函数和过程n2, 一个C语言程序有且仅有一个()。A. include B. 函数 C. 主函数 D. 过程n3, 下列说法正确的是()。A. 在C语言程序中,任何函数都可以被其它函数调用。B. C语言程序的执行从main()函数开

30、始到该程序文件的最后一个函数结束。C. C语言程序中main()函数的位置必须放在最开始。D. C语言程序本身没有输入、输出语句。n4, 下列说法不正确的是()。A. C语言程序一行内只能写一条语句。B. C语言源程序只能转换为目标代码后才可以执行。C. 分号“:”是C语言程序的一部分。D. 一个完整的C语言程序可以由一个或多个源程序文件组成。2022-3-16C语言程序设计28 5,指出下列程序片段中程序注释正确的是()。 A. #include B. #include main() main() int x=1; float x/*初始化/*把1.00赋给x*/*/=1.00;printf

31、(“%d/*整型*/”,x); printf(“%f”,x); C. #include D. #include,stdio.h main(/*主函数*/) main() int x/*初始化*/=1; printf(“%dn”,x); print/*打印*/f(“OK!”); 6,参照本章例题1.2.1,编写一个C语言程序:任意输入三个-32768到32767之间的整数,输出输入的第二个数。7,参照本章例题1.2.2,编写一个C语言程序:任意输入两个-32768到32767之间的整数,输出最大者。8*,参照本章例题1.2.2,编写一个C语言程序:任意输入三个-32768到32767之间的整数,

32、输出最大者。9*,编写一个程序,求解“”的根(提示:“开平方根”运算用函数“sqrt()”)。10,用伪码表示题6,7,8,9中的算法。11,任选一种流程图,表示题6,7,8,9中的算法。12,简述C语言程序的主要特点。13,简述C语言程序的组成。 02Cxx2022-3-16C语言程序设计29答案与解析(答案仅供参考)n1,Cn2,Cn3,D在C语言程序中,main()函数只能自身调用,不可被其它函数调用,除函数main()外,其它任何函数都可以被调用,所以A项不正确;一个C语言程序的执行总是从main()函数开始,无论main()函数在整个程序中的位置如何,到该main()函数结束。当然,

33、main()函数可以放在程序最开头,也可以放在程序的最后,或一些函数的前面或后面;所以B、C项不正确;C语言程序本身没有输入、输出语句,要完成输入、输出操作则需调用库函数scanf()和printf()等。故正确答案为D。n4,AC语言程序书写格式自由,一行内可以写多个语句,每个语句之间用分号“;”分开,一个语句也可以写在多行上。所以A项错误,为所选项。n5,CA项把注释放在printf()函数的格式说明中了,程序将在屏幕上直接输出“注释”,而起不到注释的作用,所以A项不正确;注释不可以嵌套,所以B项不正确;D项把输出函数printf()分开了,所以不正确。2022-3-16C语言程序设计30

34、 6, main() /*主函数*/ int x,y,z; /*声明部分,说明局部变量x,y,z为整型*/ scanf(“%d,%d,%d”,&x,&y,&z); /*输入x,y,z的值*/ printf(“The second is %d.n”,y); /*输出语句*/ 7, /*文件名:max.c*/ #include /*插入标准I/O库的头文件*/ main() /*主函数*/ int x,y,z; /*声名部分,说明局部变量x,y为整型*/ scanf(“%d,%d”,&x,&y); /*输入变量x,y的值*/ z=max(x,y); /*调用函数max(),将得到的值赋给z*/ printf(“Max= %d .n”,z); /*输出结果*/ int max(int a,int b) /*定义函数max(),返回值为整型,形参a,b为整型*/ int c; /*声明部分,说明局部变量c为整型*/ if(ab) /*通过条件语句把a,b最大者赋给c*/ c=a; else c=b; return (c); /*返回c的值*/ 2022-3-16C语言程序设计31 8,/*文件名:maxtr.c*/ #include /*插入I/O库文件头*/ main() /*主函数*/ int x,y,z,m; /*声明部分,

温馨提示

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

评论

0/150

提交评论