PowerPoint 演示文稿

第一章 概述
教
主
武
汉
大
材:
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