Transcript 没有幻灯片标题
参考书与课时安排
•
参考书
C程序设计(第三版)
谭浩强 清华大学出版社
全国计算机等级考试二级教程——C语言程序设计
……
•
课时安排
授课:36学时
上机:28学时
上机安排
•
上机地点:计算中心机房
•
上机实验题目:
随上课进度布置
•
要求:
上机实验题目要事先做在纸上
课程要求
•
•
•
•
课前做好预习
保持课堂安静,认真听讲、思考
上课、上机考勤
上机实验题目、作业必须独立、按时完成,
且经上机调试
•
重视上机实践,有效利用宝贵的上机时间
考
核
•期末:全校统一考试、闭卷、笔试
•平时成绩10%+实验成绩10%+期末考试80%
第1章 C语言概述
为什么要学习C语言
C语言发展历史
C语言特点
C程序格式和结构特点(重点)
C程序的开发过程(重点)
为什么要学习C语言
•本课程是向学习者介绍结构化(模块化)程序设计
的基本思想和方法,
•了解用计算机解决问题的一般方法,
•掌握程序设计的思路和基本方法,
•掌握编写和调试简单应用程序的方法,
•使学习者养成利用计算机解决工作、生活中的实际
问题的习惯,提高计算机方面的能力和素质。
程序设计语言
C语言是一种程序设计语言。
那么什么是程序设计语言? 是用来编写计算机程序的语言
举例
算式:56 2 24
85 34
C语言程序:
#include <math.h>
main( )
{ float x;
x=56+2*sqrt(24)/(85-34);
printf("%f ",x);
}
1.1 C语言的发展历史
–程序设计语言的发展
程序设计是数据被加工的过程
机
器
语
言
汇
编
语
言
高
级
语
言
面向过程
面向对象
面向机器的语言
CPU指令系统,由0、1序列构成的指令码组成
用助记符号描述的指令系统
如:10000000
加
如 ADD
10010000
减 A, B
– C语言发展过程
• 产生背景
• 产生过程
–
–
–
–
时间:1972~1973
地点:美国贝尔实验室
目的:UNIX操作系统
设计人: Ken.Thompson和Dennis.M.Ritchie
• C标准
–
–
–
–
标准C: K&R合著《The C Programming Language》
ANSI C: 1983年
87 ANSI C: 1987年
1990年国际标准的ANSI C
1.2 C语言特点
– 语言简洁、紧凑、灵活 > >
–运算符和数据类型丰富 > >
– 程序设计结构化、模块化 >
– 生成目标代码质量高
– 可移植性好
>
>
32个关键字:(由系统定义,不能重作其它定义)
auto
continue
enum
if
short
switch
volatile
<
break
default
extern
int
signed
typedef
while
case
do
float
long
sizeof
unsigned
char
const
double else
for
goto
register return
static
struct
union
void
9种控制语句:
• if( )~else~
• for( )~
• while( )~
• do~while( )
• continue
• break
• switch
• goto
• return
<
例 C语言与Pascal语言比较
C语言
{ }
if(e) s;
int i ;
int a[10];
int f( );
int *p;
i+= 2;
i++,++i;
Pascal语言
含义
BEGIN….END
复合语句
IF(e) THEN s
条件语句
VAR i:INTEGER
定义i为整型变量
VAR a:ARRAY[1..10] OF INTEGER 定义整型数组a
FUNCTION f( ):INTEGER 定义f为返值整型的函数
VAR p:INTEGER
定义p为指向整型变量的指针
i=i+2
赋值i+2i
i=i+1
i自增值
结论:C比 Pascal简练,源程序短。
<
34种运算符:
算术运算符:+ - * / % ++ -关系运算符:< <=
==
>
>=
!=
逻辑运算符:! && ||
位运算符 :<<
>>
~ | ^ &
赋值运算符:= 及其扩展
条件运算符:?:
逗号运算符:,
指针运算符:* &
求字节数
:sizeof
强制类型转换:(类型)
分量运算符:. ->
下标运算符:[]
其它
:( ) <
整 型
基本类型
C
数
据
类
型
<
构造类型
短整型short
整型int
数值类型
长整型long
单精度型float
实 型
字符类型char
双精度型double
数组
结构体struct
共用体union
枚举类型enum
指针类型
空类型void
定义类型typedef
程序设计结构化、模块化
结构化程序设计的三种基本结构:
•顺序结构:按语句的书写顺序依次执行
•分支结构:根据条件有选择地执行某部分语句
•循环结构 :循环条件+循环体
<
1.3 C程序格式和结构特点
例1.1 第一个程序,打印 Hello, How do you do!
注释
/* example1.1 The first C Program*/
#include <stdio.h>
编译预处理命令
main( )
主函数
{
输出语句
printf("Hello,How do you do! ");
}
输出:
Hello, How do you do!
例1.2 计算两个数的和,并在显示器上输出结果。
#include <stdio.h>
编译预处理命令
main( )
主函数
{ float x, y, sum ; /* 定义变量 */
注释
x=4.6, y=7.85 ;
赋值语句
sum=x+y ;
printf("x+y=%.2f",sum) ;
输出语句
}
输出:
x+y=12.45
例1.3
函数
/* example1.3 calculate the sum of a and b*/
#include <stdio.h>
编译预处理命令
/* This is the main program */
main( )
{ int a,b,sum;
注释
a=10;
运行结果:
语句
b=24;
sum=34
sum=add(a,b);
printf("sum= %d\n",sum);
}
/* This function calculates the sum of x and y */
int add(int x,int y)
{ int z;
z=x+y;
return(z);
}
•
•
#include预处理命令
预处理命令以“#”开头,一般放在最前面
注释/* */。
解析:
• 在“/”和“*”之间不能有空格,且“/*”和“*/”必须配对使用。
#include <stdio.h>
• 注释是供人阅读的,并不参与编译和运行。
stdio.h 表 示 标 准 输 入 输 出 头 文 件
例1.2• 注释可以出现在程序的任何地方。一个较长的注释可以单放一行,或
计算两个数的和,并在显示器上输出结果。
者是多行。
(standard input/output header)。
• 添加必要的注释可以提高程序的可读性。
#include
<stdio.h>
编译预处理命令
main( )
主函数
{ float x, y, sum ; /* 定义变量 */
注释
x=4.6, y=7.85 ;
赋值语句
sum=x+y ;
main( )函数
printf("x+y=%.2f",sum)
;
输出语句
•程序由一个或多个函数组成。函数是C程序的基本单位。
}
•
输出:
x+y=12.45
•必须有且只能有一个主函数main( )。
•程序执行从main开始,在main中结束,其它函数通过调
语句
用得以执行。
• C程序由语句组成,每一个语句用“;”作为终
止符。
• 花括号{…}
•
• 格式特点
• 习惯用小写字母,字母大小写不同。main( )
{
• 语句以分号(;)结束。
int i , j , sum;
• 程序的书写格式灵活。
sum=0;
• { }必须成对出现 。
for(i=1; i<10;i++)
• /* 注释信息 */
{
• 常用缩进(锯齿形)格式书写。
for(j=1;j<10;j++)
{
main( )
{ ……………….
sum+=i*j ;
………………
}
…………..
}
………
……….
printf("%d\n",sum);
……………
}
………………..
}
• 结构特点
•程序由一个或多个函数组成。
函数是C程序的基本单位。
•必须有且只能有一个主函数
main( )。
•程序执行从main开始,在main
中结束,其它函数通过调用得
以执行。
• main函数可以程序的放在任何
位置。
1.4 C程序的开发过程
一、C程序开发步骤
开
始
编
辑
编
有
源程序
File.c
译
有 错?
无
可执行
目标程序
file.exe
连
执
目标程序
file.obj
编辑
程序代码的录入,
生成源程序*.c
编译
语法分析查错,翻译
生成目标程序*.obj
链接
与其它目标程序或库
链接装配,生成可执行
程序*.exe
接
行
不正确
结果正确?
正确
结 束
库函数和其
它目标程序
执行
源程序
目标程序 可执行程序
内容
程序设计语言 机器语言 机器语言
可执行
不可以
不可以
可以
文件名后缀
.c
.obj
.exe
二、常见错误分析
• 语法错误(Syntax Error)
如何检测程序的语法错误:
• 编译前浏览程序的源代码看是否有明显的错误;
• 编译时,当编译程序发现语法错误时,会把这些错误
的位置指出,并告诉您错误的原因,即可以根据编译程
序所给予的信息更正错误。
注意:
•
某位置上一个真正的语法错误可能导致编译器误认为
它发现了其他错误。
例如,示例程序中未能正确声明n2, n3,当后面用到这些变量
时,编译器可能会发现更多错误。实际上不用立刻试图改正所有发
现的错误,只是修改前一个或前两个,然后重新编译,其余的某些
错误就可能会消失。一直这样做直到程序能够运行为止。
•
发现的错误位置比真正的错误要滞后一行。
例如,编译器要编译下一行时才发现上一行缺少了一个分号,
因此如果编译器指出某行少了一个分号请检查上一行。
二、常见错误分析
•语义错误(Semantic Error)
如何检测程序的语义错误:
• 比较程序实际得到的结果和你预期的结果;
• 按照程序的执行顺序通过手工方式一步一步跟踪程序,
并记录每个变量,从而可以监视程序状态以便发现是否存在
语义错误,但注意一定要按照你实际所写的代码去执行而不
要按照你期望的那样去执行。
当问题规模太大时,可以选择跟踪其中的一小部分
• 在程序的关键处加入额外的printf(
)语句以监视所选
的变量的值,使用完后再去掉printf( )语句;
• 利用调试器,调试器是一种程序,它能够运行另一个程
序并检查该程序的变量。
二、常见错误分析
• 编译器的警告消息
• 警告表明尽管代码正确,但有可能不是程序员所需要
的。警告不终止编译。
三、 Visual C++6.0集成开发环境及其使用
1.启动Visual C++6.0
Windows2000(/Windows xp)/开始/程序/ Microsoft
Visual Studio 6.0/ Microsoft Visual C++ 6.0
Visual C++6.0集成开发环境及其使用
1.启动Visual C++6.0
启动后
Visual C++6.0集成开发环境及其使用
2. 在指定位置D:\ 创建C源程序文件
文件\新建\“文件”选项卡\C++ source File \xxx.c与目录
Visual C++6.0集成开发环境及其使用
3.输入C源程序
Visual C++6.0集成开发环境及其使用
4. 编译,将C源程序文件翻译成目标文件.obj
编译\编译xxx.c
Visual C++6.0集成开发环境及其使用
4. 编译,将C源程序文件翻译成目标文件.obj
编译前提示是否创建默认的项目工作区(workspace)?
Visual C++6.0集成开发环境及其使用
4. 编译,将C源程序文件翻译成目标文件.obj
•每创建一个c程序, VC都会创建一个相应的工作区
(workspace)。
•所谓“工作区”是一种管理C程序的方法。一个C程序通
常包含源代码文件(.c)、工作区文件(.dsw)、工作区配置文
件(.opt)等,还有调试子文件夹(debug) 。
•程序员通常只需创建源代码文件,其他文件在编译期间自
动生成。
Visual C++6.0集成开发环境及其使用
4. 编译,将C源程序文件翻译成目标文件.obj
编译结果
Visual C++6.0集成开发环境及其使用
4. 编译,将C源程序文件翻译成目标文件.obj
编译通过时,可以在工作区视图中看到目前创建的模块和文件结构。
Visual C++6.0集成开发环境及其使用
5. 连接,将目标文件.obj与系统文件连接成可执行文件xxx.exe
编译\构件xxx.exe
Visual C++6.0集成开发环境及其使用
6. 执行,将可执行文件xxx.exe装载到内存并执行
编译\执行xxx.exe
Visual C++6.0集成开发环境及其使用
6. 执行,将可执行文件xxx.exe装载到内存并执行
执行的结果
Visual C++6.0集成开发环境及其使用
此时,在位置D:\创建了一个C程序
D:\
\debug
a.exe
a.dsw
a.c
······
Visual C++6.0集成开发环境及其使用
7. 关闭工作区,创建下一个C程序。
Visual C++6.0集成开发环境及其使用
如何运行之前创建的C程序?
文件\打开工作区 \***.dsw文件
D:\
\debug
a.exe
b.exe
a.dsw
a.c
······
b.dsw
b.c
······
四、Turbo C集成开发环境及其使用
Turbo C集成开发环境及其使用
(一)启动Turbo.c:有两种方法。
在WINDOS 下,双击我的电脑在c盘或其它盘上
找到Turbo C或TC图标并双击它,再双击TC.exe
文件。
在DOS提示符下键入:TC
(二)建立一个新文件
1. 按F10,进入主菜单,控制光标选中FILE
2. 回车,进入FILE的子菜单
3. 按光标控制键↓,选中“NEW”
4. 回车,进入编辑窗口,文件名被自动命名为
“noname.c”
(三)编辑源程序
1. 逐个输入字符
2. 删除一个字符:按delete键
3. 插入字符
4. 插入一行: Ctrl+n
5. 删除一行: Ctrl+y
6. 删除一个单词:Ctrl+t
7. 定义块首:Ctrl+kb; 定义块尾:Ctrl+kk
8. 删除一个块:Ctrl+ky
9. 复制一个块:Ctrl+kc
10. 移动一个块:Ctrl+kv
(四)存盘
1. 不改文件名:F10FILE Save ( F2 ) 回车
2. 改文件名:F10 FILE Write To 回车输入
新的文件名
(五)调入原有的文件
1. F10→FILE → Load (F3)
显示的是上次打开的文件名,在其中输入所
需的文件名即可。
2. 选择文件名
…Load(F3) → *.c→回车
3. 从本次用过的文件名中查找
FILE→ Pick: 显示的是本次上机刚刚调用过
的文件名,缩小了查找范围。
4. 不仅输入文件名,而且搜索所有类型文件。
*.*
(六)暂时脱离Turbo C,进入DOS环境
• F10→ File→ DOS Shell
• 在DOS下进行文件管理
• 在DOS提示符下输入exit返回Turbo C
(七)编译: 按 F9 键
(八)运行: Ctrl + F9
(九)看运行结果: Alt + F5
(十)程序调试:
F8---Step over
F7---Trace into
F4---Goto Cursor
Ctrl+F7---Add Watch
Ctrl+F8---Toggle Breakpoint Ctrl+F2---Program Reset
TC的使用的演示:
小结:
C语言历史/ 特点/ 格式和结构特点/ 开发过程
1.5* 程序设计与算法(选讲)
(一)程序设计
1.
对于较小的简单问题,一般采用下列步骤进行程序设计:
• 分析问题(已知,要解决的问题,解决问题的条件)
• 确定算法(一步步解决问题的过程)
• 编写程序
1.5* 程序设计与算法(选讲)
例如:计算矩形的周长和面积
1.分析问题:
为了计算矩形的周长和面积,需要知道矩形的长度和宽度,矩形的周长和面积
则由下面的算法给出:
Perimeter=2*(length+width)
Area=length*width
2. 确定算法:
•输入矩形的长度length、宽度width
•用下面的算法计算矩形的周长和面积
Perimeter=2*(length+width)
Area=length*width
•输出矩形的周长和面积(Perimeter和Area)
3.编写程序 :main(
{
}
)
int length,width ,perimeter,area;
scanf("%d%d",&length,&width);
perimeter=2*(length+width);
area=length*width;
printf("perimeter=%d,area=%d\n",perimeter,area);
1.5* 程序设计与算法(选讲)
(一)程序设计
2. 对于较大的复杂问题采用的是“模块化、自顶向下、
逐步细化”的程序设计方法 。
(以后讲解)
(二)算法
1. 什么是算法?简单地理解,算法是指为解决某个问题
所使用的操作步骤。
2. 算法的特性
正确的算法应该满足5个特性:
•有穷性
•确定性
•有效性
•有零个或多个输入
•有一个或多个输出
3. 算法的表示
用图框表示各种类型的操作,
用箭头表示这些操作的顺序。
开始框或结束框
流
程
图
符
号
数据输入框或输出框
数据处理框
判断框
流程线
连接点
例如
开始
定义标识符
x、y、sum为变量
x=4.6, y=7.85
sum=x+y
输出sum的值
结束
#include <stdio.h>
main( )
{ float x, y, sum ;
x=4.6, y=7.85 ;
sum=x+y ;
printf("x+y=%.2f",sum) ;
}
N-S图:去掉流程图中的流线,把整个算法描述在一个矩形框中。
分支结构
顺序结构
A操作
B操作
C操作
条件
是
A操作
否
B操作
循环结构
当条件满足
循环体
循环体
条件满足
例如
定义标识符x,y, sum为变量
x=4.6, y=7.85
sum=x+y
输出sum的值
#include <stdio.h>
main( )
{ float x, y, sum ;
x=4.6, y=7.85 ;
sum=x+y ;
printf("x+y=%.2f",sum) ;
}
谢谢同学们认真听讲!
作业和上机实验