第一章 概述 教 主 武 汉 大 材: C程 序设 计 导 论 讲: 谭 成 予 [email protected] 学 计 算 机 学 院 本讲重点 本课程定位 程序设计语言简介 C语言的历史、背景 C程序组成 编辑、编译和运行C程序的方法 什么是程序设计? 程序(program): 指示计算机如何运作的指令集合。 程序设计(programming): 把多条指令有计划地串在一起,使计算机完成用户期望 的工作;换句话说,程序设计是将人的期望“转化” 成一连串的计算机指令,如果转化成功,计算机就会 按照我们的期望来运作,感觉就好像成功地对计算机 施展了魔法。 学习程序设计好处 深入了解软件的运作方式、设计出功能更强大的应用 软件、加深对计算机的认识。 如何学好程序设计 语法学习阶段 练习写较大 的程序 循 序 学习并提高 程序设计技 巧 渐 进 软件工程 本课程定位 必修课:高级语言程序设计、面向对象程序设计; 选修课:C++程序设计、C#程序设计等。 本课程以高级语言中的C语言为主介绍第三代语 言——高级语言,要求同学们不仅学习好具体的语 法规范,更重要的是掌握结构化程序设计的方法。 本课程是同学们接触到的第一门程序设计的课程, 不仅是程序设计的入门课程,而且是学习后续其他 程序设计如面向对象程序设计等其他计算机专业课 程的基础课程和前导课程 本讲重点 本课程定位 程序设计语言简介 C语言的历史、背景 C程序组成 编辑、编译和运行C程序的方法 现在有哪些程序设计语言? 第一代语言:机器语言。 低级语言 第二代语言:汇编语言。 现在有哪些程序设计语言? 第三代语言:过程化高级语言。 • BASIC(Beginner’s all Purpose Symbolic Instruction Code ) • PASCAL •C • FORTRAN • COBOL(Common Business Oriented Language ) • LISP(List Processing Language) • PROLOG(Programming in Logic) 第四代语言:非过程化的高级语言。 非过程化,面向应用 ,面向对象语言及可视化编程环境, 如Visual系列(VC++、VB等)、Power Builder、Delphi、 Java等 高 级 语 言 本讲重点 本课程定位 程序设计语言简介 C语言的历史、背景 C程序组成 编辑、编译和运行C程序的方法 C语言的发展历史 ALGOL CPL (规模较大, (不宜编写系 统程序,1960年)难以实现,剑 桥大学和伦敦 大学,1963年 ) BCPL B C (对CPL的简化, M .Richard,剑桥 大学,1967年) (编写了UNIX操作系统, K.Thompson,贝尔实验室 1970年) (描述和实现UNIX操作系统, D.M.Ritchie,贝尔实验室,1972 年) C语言的发展历史 经典C 《The C Programming Language》 1978年,B.W.Kernighan、D.M.Ritchie合著, K&R 1988年进行修订使之符合ANSI C标准。 ANSI C 1983年,由ANSI(American National Standards Institute)制订 C语言标准。 标准C 1990年,ISO(International Standard Organization)通过C程序设计 语言的国际标准,以ANSI C为基础制订。 1999年修订新标准,称C99标准。 什么是“ANSI C 标准”? • 1983 年, 美国国家标准协会(ANSI) 对C 语言进行标准化。1989 年 12 月14 日正式被批准为ANSX3.159-1989 并于1990 年春天颁布。 • 1990年,该标准被接受为国际标准, ISO/IEC 9899:1990, 这个标准 甚至在美国国内(在这里它被称作ANSI/ISO 9899-1990 [1992]) 代 替了早先的X3.159。 • 1994年, 技术勘误1 (TC1) 修正标准中40 处地方, 多数都是小的修 改或明确,而标准附录1 (NA1) 增加了大约50 页的新材料, 多数是规 定国际化支持的新库函数。1995 年, TC2 增加了一些更多的小修 改。 • 最近, 该标准的一个重大修订, “C99”, 已经完成并被接受。 • 该标准的数个版本, 包括C99 和原始的ANSI 标准, 都包括了一个 “基本原理”(Rational), 解释它的许多决定并讨论了很多细节问 题, 包括本文中提及的某些内容。 C语言的特点 语言简洁、紧凑,使用方便:32个关键字,9种控制语句 运算符丰富:共有34个运算符 数据结构丰富。 具有结构化的控制语句。 语法限制不太严格,程序设计自由度大。 允许直接访问物理地址,能进行位操作,可以直接操作硬 件。 生成目标代码质量高,程序执行效率高:一般只比汇编程 序生成的目标代码效率低10へ20% 程序可移植性好 本讲重点 本课程定位 程序设计语言简介 C语言的历史、背景 C程序组成 编辑、编译和运行C程序的方法 程序组成——基本概念 源程序: 在编辑方式下建立起来的程序文件称为源程序文件,简称源文件, 相应程序称为源程序。 C语言的源程序文件扩展名为 “.c” 目标程序:当用户将高级语言编写的源程序输入计算机后,编 译程序便把源程序整个地翻译成用机器语言表示的与之等价的目标 程序。 机器代码:机器指令形式的可执行程序。 以上三者都可称为程序,通常需依据上下文判断。 本课程中无特别说明程序指源程序。 C程序组成 /* L1-1.c: 例1. 1一个经典的例子。*/ 圆括号内定义函数参数,void表示没有参数 #include <stdio.h> int main(void) 函数首部,函数名称main,即主函数。 { 函数类型(返回结果) printf(“Hello!World!\n”); return 0; } Hello!World! C程序组成 /*L2-2.C: 例1.2 计算两个整数的和*/ 文件包含行,表示程序中用到了stdio.h文件中定 #include <stdio.h> 义的常量或宏 int main(void ) { int a,b,sum; “{”表示函数体开始。 a=45; b=70; 函数体,包括数据说明和执行语句两个部分。 sum=a+b; printf(“sum=%d\n”,sum); return(0); “}”表示函数体结束 } sum=115 /*L1-3.C: 例1.3 输出两个整数中大的数据。*/ #include <stdio.h> int main( void) 函数原型。由于函数max在主函数之后定义,所以在主 { int max(int,int); 函数前要给出max函数的使用说明即函数原型。 int a,b,c; scanf(“%d,%d”,&a,&b); c=max(a,b); 调用函数max,计算变量a和b的最大值,并将结 printf(“max=%d”,c); 果赋给变量c return 0; } int max(int x, int y) 函数max首行,其中定义int类型的形式参数x和y 。 { 该函数返回结果为int类型 int z; if(x>y) z=x; else z=y; return(z); 将变量z的值返回给main函数 } 21,45 max=45 从键盘输入21,45 C程序组成 /*L1-4.C: 例1.4 求数组元素的和。*/ #include <stdio.h> int main(void) 定义数组a,由5个数组元素组成 { int i,a[5]={4,5,6,7,8},sum=0; for(i=0;i<5;i++) 循环语句,重复执行5次 sum=sum+a[i]; printf(“sum=%d\n”,sum); return 0; } sum=30 C程序的一般组成形式 预处理命令 返回值类型 main(参数说明) /*主函数说明*/ {变量定义 /*主函数体*/ 执行语句组 } 返回值类型 子函数名1(参数说明) /*子函数说明*/ {变量定义 /*子函数体*/ 执行语句组 } …… 返回值类型 子函数名N(参数说明) /*子函数说明*/ {变量定义 /*子函数体*/ 执行语句组 } C程序的基本组成 函数是C程序的主要组成部分 一个C程序必须有且仅有一个主函数,名称为main。 无论main 函数出现在代码的任何位置,C程序的执行总是从 main函数开始,在main函数结束。 main函数中可以调用C语言提供的库函数或用户自定义的其他 函数。 各函数并列关系。 C语言中的函数由函数头和函数体组成 函数头包括函数类型、函数名、函数参数和参数类型说明等部分。 函数体:函数头下面的由一对花括号括起来的部分。通常包括数据 说明部分和语句部分。 数据说明部分:定义函数内部将要使用的变量。 语句部分:规定函数要执行的动作。 C程序的基本组成 根据需要可以在程序中增加注释 注释由“/*”开头,以“*/”结尾。可以分多行书写,也可以在程序中 任意位置出现。 注释只是为了增强程序的可读性,并不执行。 语句以分号结尾。 C程序的基本组成 怎样正确定义main函数? int main() int main(void) int main(int argc, char *argv[]) 能否把main() 定义为void, 以避免扰人的“main无返回值” 警告? 不能。main() 必须声明为返回int, 且没有参数或者 接受适当类型的两个参数 为什么main()函数必须采用上述三者之一的定义形式? 如果main() 声明得不对, 它的调用者(运行期初始代码) 可能甚至都不能 正确调用它。你的操作系统可能会忽略退出状态, 而void main() 在你那 里也可能可行, 但这不可移植而且不正确。 本讲重点 本课程定位 程序设计语言简介 C语言的历史、背景 C程序组成 编辑、编译和运行C程序的方法 如何编写自己的代码? 问题定义:在解决问题之前,先彻底了解问题是什么? 定义解决方案所需的范围; 定义输入和输出; 定义常量和公式; 定义基本计算需求(数据的类型、范围和精度); 设计测试计划:验证程序的正确性。 测试计划:由输入数据集和预期输出数据组成。 需要考虑所有正常情况和异常情况。 如何编写自己的代码? 设计解决方案: 算法:正确的计算方法 驱动程序:对输入数据的正确性判断,非法输入不处 理。 测试和调试:设计执行测试计划的方式,提供监视程 序执行过程的有效方法。 开发环境选择:程序员编辑、编译、维护程序的环境。 文本编辑器 编译程序或者翻译程序 连接程序 如何编写自己的代码? 编写代码:上机前,应该画好程序的详细的代码流程图。 编辑源程序; 编译程序,并改正编译错误; 连接程序,并改正连接错误; 验证程序:执行和测试程序。 执行程序; 测试和验证:定位和改正错误(调试程序);重新编译、连接程 序; C程序的编辑、编译和运行 编译不正确 编辑源程序 结果不正确 对源程序进行编译 ↓ 与库函数连接 ↓ 运行目标代码 ↓ 结果 C程序的编辑、编译和运行 源程序:在编辑方式下建立起来的程序文件称为源程序文件,简称 源文件。相应程序称为源程序。 编译:将高级语言源程序转换成机器语言程序的过程称为编译,而 完成这种转换过程的系统软件称为编译程序。 目标代码: 经编译的生成的目标程序文件称为目标文件;由于程 序中用到库函数或其他函数,需要把分离的目标程序连接成完整 的可执行程序,这种计算机能识别的二进制代码称为目标代码, 对应文件称为可执行文件。 在UNIX/Linux中编辑、编译和运行C程序 1. 2. 3. 4. 5. 登录进入UNIX/Linux系统 在系统提示符(通常为$)下使用vi命令编辑源程序, 以扩展名“.c”保存文件,如f.c。 在shell提示符下输入编译命令,一般为 $ cc f.c 生成的可执行文件为默认的文件名a.out,如果以后希望 指定生成的可执行文件名,可以声音以下命令格式: $ cc f.c -o f.out 运行程序,在系统提示符下直接输入可执行文件名,如: $f.out 在TURBO C中编辑、编译和运行C程序 1. TC是窗口菜单程序,由三类系统文件组成(假定TC 的工作目录为c:\tc): 2. 扩展名为.h的系统文头件,存放在c:\tc\include目录下。 扩展名为.lib或.obj的库文件,存放在c:\tc\lib目录下。 扩展名为 .exe的可执行文件;其中tc.exe为TC的可执行程序。 启动TC: 在DOS提示符下,输入TC ,如: C:\TC>TC Turbo C开始运行后,出现下图所示的主菜单窗口 Visual C++ 6.0集成环境 利用Visual C++ 6.0集成环境开发C程序 的过程如下: 1.启动Visual C++ 6.0环境 2. 编辑源程序文件 3. 编译和连接 4. 执行 Visual C++ 6.0集成环境 1.启动Visual C++ 6.0环境 方法:单击 “开始”-“程序”-“Microsoft Visual studio 6.0”“Microsoft Visual C++ 6.0”命令,启动Visual C++,VC6主窗口如 下: 标题栏 菜单栏 工具栏 文件编辑区 项目工作区 输出区 状态栏 Visual C++ 6.0集成环境 2. 编辑源程序文件 (1)建立新工程项目 ①单击“文件”-“新建”, 弹出 “新建”对话框。 ②单击“工程”选项卡;单击 “Win32 Console Application” 选项;“工程”文件框中输入 项 目名,如“gc1”和“位置”框 输入 或选择新项目所在位置,单击 “确定”按钮。 弹出“Win32 Console Application Step 单击该选项 输入项目名 单击“工程” 选择新项目位置 单击“确定” 单击“完成” 单击“确定” 单击“Win32 Console Application” ③单击“An empty project”按钮和 “完 成”按钮。系统显示“新建工程信息” 对 话框。单击“确定”按钮。 Visual C++ 6.0集成环境 2. 编辑源程序文件 (2)建立新项目中的文件 ①单击“文件”-“新建”, 弹 出“新建”对话框。 ② 选择“文件”选项卡。单 击 “C++ Source File”选项, 在 “文件”文件框中输入文件 名, 单击“确定”按钮。系统自 ③显示文件编辑区窗口,在文件编辑 动 区窗口输入源程序文件。 返回VC6主窗口。 输入文件名 单击“文件” 选择“添加工程” 单击“C++ Source file” 输入源程序 单击“确定” Visual C++ 6.0集成环境 3. 编译和连接 方法一:选择主窗口菜单栏中 “编译”菜单项;系统弹出下 拉菜单,选择“构件”菜单命 令。 方法二:单击主窗口编译工具栏 上的 “Build”按钮进行编译和 连接。 单击“Build” 单击“编译” (1)系统对程序文件进行编译和连接,生成以项目名称命名的可执行目标 代码文件.exe。 (2)编译连接过程中,系统如发现程序有语法错误,则在输出区窗口中显 示错误信息,给出错误的性质、出现位置和错误的原因等。如果双击某 条错误,编辑区窗口右侧出现一个箭头,指示再现错误的程序行。用户 据此对源程序进行相应的修改,并重新编译和连接,直到通过为止。 Visual C++ 6.0集成环境 4. 执行 方法一:单击“编译”菜单 中“执行”命令。 方法二:单击主窗口编译工 具 栏 上 的 “ Build Execute” 按 钮 来 执 行 编 译连接后的程序。 单击“Build Execute” 单击“编译” 运行成功,屏幕上输出执行 结果,并提示信息: “ Press any key to continue”。此时按任意 键系统都将返回VC6主窗 在执行程序过程中出现运行错误。用户要 口。 修改源程序文件并且重新编译、连接和执 行。 THE END
© Copyright 2024 ExpyDoc