C 程序设计 潘荣江 vr.sdu.edu.cn/panrj
课程解读 -C 程序设计 计算机:辅助工具 计算机语言:人 - 机交流途径 交流层次: 编程 应用程序: OA ,网络,数字媒体,科学计算 ,娱乐,游戏 自然语言与自然交互
课程解读 课程学习内容 语法(词、短语、句子、篇章架构) 语义 - 算法 - 解决典型问题, 线性数据组织,检索排序 简单语法(描述能力) vs 复杂的问题 C 语言与科研: 逻辑与推理 科学计算软件二次开发
课程解读 C 语言,众多高级语言的一种 B, C, C++, C#, Java… 古老(计算机领域)而经典的语言 众多的计算机语言与 C 联系密切 C 语言与科研: 科学计算软件二次开发 培养逻辑思维能力
课程解读 实验( 6-13 周) 4 * 8 次,联系实验时间,每周 1 次 实验平台 DEV-CPP , VC 6.0 , Visual C++ Express 2008 课程 4-17 周 教材 C 语言程序设计 第三版 谭浩强
第一章
本章要点 C 语言的特点 C 语言的特点 C 程序的结构 C 程序的结构 在计算机上运行 C 程序的方法 在计算机上运行 C 程序的方法
1.1 C语言出现的历史背景 C 语言是国际上广泛流行的高级语言。 C 语言是在 B 语言的基础上发展起来的。 B ( BCPL )语言是 1970 年由美国贝尔实 验室设计的, 并用于编写了第一个 UNIX 操 作系统, 在 PDP 7 上实现。优点:精练, 接近 硬件,缺点:过于简单, 数据无类型。 1973 年贝尔实验室的 D.M.Ritchie 在 B 语言 的基础上设计出了 C 语言,对 B 取长补短, 并用之改写了原来用汇编编写的 UNIX , ( 即 UNIX 第 5 版),但仅在贝尔实验室使用 。
1.1 C语言出现的历史背景 1975 年 UNIX 第 6 版发布,C 优点突出引起关注 。 1977 年出现了《可移植 C 语言编译程序》 , 推动了 UNIX 在各种机器上实现 , C 语言也得 到推广,其发展相辅相成。 1978 年影响深远的名著《 The C Programming Language 》由 Brian W.Kernighan 和 Dennis M.Ritchie 合著, 被称 为标准 C 。 之后, C 语言先后移植到大、中、小、微型 计算机上, 已独立于 UNIX 和 PDP ,风靡世界, 成为最广泛的几种计算机语言之一。
1.1 C语言出现的历史背景 1983 年, 美国国家标准化协会 (ANSI) 根据 C 语 言各种版本对 C 的发展和扩充, 制定了新的标 准 ANSI C ,比标准 C 有了很大的发展。 1988 年 K & R 按照 ANSI C 修改了他们的《 The C Programming Language 》。 1987 年,ANSI 公布了新标准 —— 87 ANSI C 。 1990 年,国际标准化组织接受了 87 ANSI C 为 ISO C 的标准 (ISO9899 — 1990) 。 1994 年, ISO 又修订了 C 语言标准。 目前流行的 C 语言编译系统大多是以 ANSI C 为基础进行开发的。
1.1 C语言出现的历史背景 说明: 不同版本的 C 编译系统所实现的语言功 能和语法规则又略有差别,因此读者应 了解所用的 C 语言编译系统的特点 ( 可以 参阅有关手册 ) 。本书的叙述基本上以 ANSI C 为基础。说明:
§1-2 C语言的特点 ( 1 )语言简洁、紧凑, 使用方便、灵活。 32 个关键字、 9 种控制语句, 程序形式自由 ( 2 )运算符丰富。 34 种运算符 ( 3 )数据类型丰富, 具有现代语言的各种数据 结构。 ( 4 )具有结构化的控制语句 ,是完全模块化 和结构化的语言。 ( 5 )语法限制不太严格, 程序设计自由度大。
§1-2 C语言的特点 ( 6 )允许直接访问物理地址, 能进行位操 作, 能实现汇编语言的大部分功能, 可直 接对硬件进行操作。兼有高级和低级语 言的特点 。 ( 7 )目标代码质量高, 程序执行效率高。 只比汇编程序生成的目标代码效率低 10 % -20% 。 ( 8 )程序可移植性好 ( 与汇编语言比 ) 。基 本上不做修改就能用于各种型号的计算 机和各种操作系统。 接近硬件,过于灵活。
§1-2 C语言的特点 解释 1 : 解释 1 : C++ 是由于开发大型应用软件的需 要而产生的,并不是所有的人都要去编 写大型软件; 解释 2 : 解释 2 :面向对象的基础是面向过程。 C++ 是面向对象的语言, C 是面向过程的,学 起来比 C 语言困难得多,所以不太适合程 序设计的初学者。 解释 1 : 解释 1 : C++ 是由于开发大型应用软件的需 要而产生的,并不是所有的人都要去编 写大型软件; 解释 2 : 解释 2 :面向对象的基础是面向过程。 C++ 是面向对象的语言, C 是面向过程的,学 起来比 C 语言困难得多,所以不太适合程 序设计的初学者。 问题: 问题:既然有了面向对象的 C++ 语言,为 什么还要学习 C 语言?
§1-3 简单的 C 语言程序介绍 #include main( ) { printf ("This is a C program.\n"); } /* 文件包含 */ /* 主函数 */ /* 函数体开始 */ /* 输出语句 */ /* 函数体结束 */ 说明: 说明: main- 主函数名, void- 函数类型 每个 C 程序必须有一个主函数 main { } 是函数开始和结束的标志, 不可省 每个 C 语句以分号结束 使用标准库函数时应在程序开头一行写: #include 说明: 说明: main- 主函数名, void- 函数类型 每个 C 程序必须有一个主函数 main { } 是函数开始和结束的标志, 不可省 每个 C 语句以分号结束 使用标准库函数时应在程序开头一行写: #include 说明: 本程序的作用是输出一行信息 : This is a C program.
例 1.2 求两数之和 #include void main( ) /* 求两数之和 */ { int a,b,sum; /* 声明,定义变量为整型 */ /* 以下 3 行为 C 语句 */ a=123; b=456; sum=a+b; printf(″sum is %d \ n″,sum); } 说明: 说明: /*……*/ 表示注释。注释只是给人看 的, 对编译和运行不起作用。所以可以用汉 字或英文字符表示,可以出现在一行中的 最右侧,也可以单独成为一行。 说明: 输出一行信息 :sum is 579
例 1.3 求 2 个数中较大者。 #include void main( ) /* 主函数 */ { int max(int x,int y); / 对被调用函数 max 的声明 */ int a, b, c; /* 定义变量 a 、 b 、 c */ scanf(″ % d, % d″,&a,&b); /* 输入变量 a 和 b 的值 */ c=max(a,b); /* 调用 max 函数, 将得到的值赋给 c */ printf(″max= % d\\n″,c); /* 输出 c 的值 */ } 程序运行情况如下: 8,5 ↙ ( 输入 8 和 5 赋给 a 和 b) max=8 ( 输出 c 的值 ) int max(int x, int y) { int z; if (x>y) z=x; else z=y; return (z); } max(int x,int y); 说明: 说明:本程序包括 main 和被调 用函数 max 两个函数。 max 函 数的作用是将 x 和 y 中较大者的 值赋给变量 z 。 return 语句将 z 的值返回给主调函数 main 。
§1-3 简单的 C 语言程序介绍 C 程序: (1) C 程序是由函数构成的。 这使得程序容易实现模 块化。 (2) 一个函数由两部分组成 : 函数的首部:例 1.3 中的 max 函数首部 int max(int x,int y ) 函数体:花括号内的部分。若一个函数有多个花括 号, 则最外层的一对花括号为函数体的范围。 函数体包括两部分 : 声明部分: int a,b,c; 可缺省 执行部分:由若干个语句组成。可缺省
§1-3 简单的 C 语言程序介绍 注意: 函数的声明部分和执行部分(函数体)都可缺省 ,例如: void dump ( ) { } 这是一个空函数, 什么也不做, 但是合法的函数。
§1-3 简单的 C 语言程序介绍 小结: (3) C 程序总是从 main 函数开始执行的, 与 main 函数的 位置无关。 (4) C 程序书写格式自由, 一行内可以写几个语句, 一 个语句可以分写在多行上, C 程序没有行号。 (5) 每个语句和数据声明的最后必须有一个分号。 (6) C 语言本身没有输入输出语句。输入和输出的操 作是由库函数 scanf 和 printf 等函数来完成的。 C 对 输入输出实行 “ 函数化 ” 。
§1-4 运行C程序的步骤和方法 运行C程序的步骤 一、运行C程序的步骤 上机输入与编辑源程序 对源程序进行编译 与库函数连接 运行目标程序
§1-4 运行C程序的步骤和方法 二、上机运行C程序的方法 目前使用的大多数 C 编译系统都是集成环境 (IDE) 的。 可以用不同的编译系统对 C 程序进行操作 常用的有 Turbo C 2.0 、 Turbo C 、 Visual C++ 等 Turbo C :是一个集成环境,它具有方便、直观 和易用的界面,虽然它也是 DOS 环境下的集成环境,但 是可以把启动 Turbo C 集成环境的 DOS 执行文件 tc.exe 生成快捷方式,也可以用鼠标操作。 Visual C++ :也可以用 Visual C++ 对 C 程序进行编译。
例: Turbo C 的使用 将 Turbo C 编译程序装入磁盘某一目录下 例如: 放在 C 盘根目录下一级 TC3.0 子目录下。 (1) 进入 Turbo C 集成环境 ①在 DOS 环境下 C:\TC3.0>tc ↙
② 在 Windows 环境下 找到可执行文件 tc.exe ,执行该文件。 主菜单: 11 个菜单项 : File Edit Search Run Compile Debug Project File Edit Search Run Compile Debug Project Options Window Help Options Window Help
(2) 编辑源文件 新建:单击 “File” 菜单下 的 “New”, 修改:选择 “File”→“Open”( 即单击 “File” 的下拉菜 单中的 “Open” 项,修改已有的源程序。
在编辑 (EDIT) 状态下光标表示当前进行编辑的位 置,在此位置可以进行插入、删除或修改,直到 自已满意为止。
保存:在编辑 (EDIT) 状态下光标表示当前进行编辑 的位置,在此位置可以进行插入、删除或修改, 直到自已满意为止。
(3) 对源程序进行编译 选择 “Compile”( 或 “Alt+F9”) 对源程序进行编译。 c1.cpp 源程序,出现 1 个错误 (error) , 0 个警告 (warming) 。
(4) 将目标程序进行连接 选择菜单 “Compile” →“Link” ,如果不出现错 误,会得到一个后缀为.exe 的可执行文件。 (5) 执行程序 选菜单 “Run” →“Run”( 或按 “Ctrl+F9” 键 ) 。 (6) 退出 Turbo C 环境 选择 “File”→“Quit” 。
在 VS 中编写 ANSI C 程序 1 、启动 Microsoft Visual Studio 2 、在 文件 菜单上指向 新建,和然后单击 项目 3 、项目类型 下, 单击 Visual C++ 项目 4 、在 模板 中选择 Win32 项目 5 、在 名称 文本框中键入 项目名称 6 、在 位置 文本框中键入 路径,然后单击 确定
在 VS 中编写 ANSI C 程序 7 、在 Win32 应用程序向导 对话框中框中,在 左边窗口中单击 应用程序设置 8 、在 应用程序类型 中选择 控制台应用程序 9 、在 附加选项 勾选 空项目 10 、单击 完成 11 、在 解决方案资源管理器 中右击 源文件 文 件夹,指向 添加,然后单击 新建项 12 、选择模板下的 C++ 文件 (.cpp) 13 、注意在 名称 文本框中键入 test.c 14 、单击 添加
在 VS 中编写 ANSI C 程序 15 、编写代码 #include void main() { printf("hello world !"); } 16 、按 Ctrl+F5 执行
36 编译过程: 1 )启动 Visual C++, 选择 “ 文件 ” 菜单中的 “ 新建 ” 命 令,选择 “ 文件 ” 标签中的 “C++ Source File” 选项。 2 )选择源程序存放的目录和输入源程序名,单击 “ 确定 ” 。 3 )在编辑器中编写源程序。 4 )单击 F7 或 “ 编译 ” 中的 “ 重建全部 ” 编译源程序, 若编译通过,单击 “ 执行 ” ,在 DOS 屏上看结果, 任按一键返回编辑器。
37 启动 VC++ 编译系统
38 VC++ 编译 系统界面 单击 “File” 菜单 中 “New” 命令
39 选择 “Files” 选项卡 选择 C++ 源 文件命令 输入文件名 输入文件 存放位置 单击选择 驱动器 选择驱动 器或目录
40 C++ 源文件 编辑界面 输入 C++ 源代码
41 可以将此源 代码另起文 件名存盘
42 选择编译命令,将源文 件.cpp 生成.obj 文件
43 如果编译出错,会出现提示信息, 指出错误的位置及种类 错误所在行 错误的原因
44 双击错误 所在行 光标移到该行
45 生成可执 行文件 通过后单 击该命令 运行程序
46 运行结果显示 在 DOS 屏上 注意:不可以在软盘上 运行程序!应该把保存 在软盘中的源文件拷贝 到硬盘的目录中再运行 !
47 源程序所在目录 未编译前,只 有一个源程序
48 编译运行后,出 现众多附加文件 同时,产生一个 子目录 Debug
49 Debug 目录中,有 obj 和 EXE 文件