C程序设计
南京师范大学
地图学与地理信息系统 04级
专业选修课
主讲教师, 汪闽
为什么要学习 C语言
?C语言是一门功能强大的语言
?C语言是一门很好的教学和考试语言
?计算机专业,GIS专业的许多硕士点均把 C作
为考试语言
?学好 C语言基础,更有利于其他语言的学习
学习本课程的目的
? 掌握 C语言的基础知识
? 掌握程序设计中常用的算法
? 能够用 C语言编写简单的程序
? 提高分析问题和解决问题的能力
? 为考研作准备
本课程的内容安排
? 课时安排,3节 /周 ?15周
? 内容:见教材目录
? 3,4,5,6,7,8,9,10,11,13 (详细讲解学习 )
? 1,2(概要性学习 )
? 12,14,15(有条件时可以讲解,考试不做要求 )
? 重难点:数组、函数、指针 (特色 )
防止与 VB混淆
? 实验安排,2节 /周 ?15周
使用教材, C程序设计 (第二版 )
谭浩强
清华大学出版社
上机环境, VC++6.0
本课程的教材和上机环境
本课程的参考书
?谭浩强, C程序设计题解与上机指导,
?严蔚敏 吴伟民, 数据结构, C语言版
?The C programming Language( C程序设计语言)第 2版及其习
题解答 【 中译本 】
?其他与 C语言相关的纸本及电子书籍
本课程的考评方法
? 平时作业,10%
? 上机实验,20%
? 期中测验,10%
? 期末考试,60%
1.1 C语言发展历史
1.2 C语言特点
1.3 C程序格式和结构特点
1.4 C程序上机步骤
第一章 C语言概述
1.1.1 程序设计语言的发展
机
器
语
言
汇
编
语
言
高
级
语
言
面向过程
面向对象
CPU指令系统,由 0,1序列构成的指令码组成
如,10000000 加
10010000 减
用助记符号描述的指令系统
如 ADD A,B
面向机器的语言
程序设计是数据被加工的过程
客观世界可以分类,对象是类的实例
对象是数据和方法的封装
对象间通过发送和接受消息发生联系程序设计关键是定义类,并由类派生对象
1.1 C语言发展历史
*产生背景 *
应用需求,界于汇编和高级语言之间的中级语言
*产生过程 *
时间,1972~1973
地点,美国贝尔实验室
目的,UNIX操作系统
设计人, Ken.Thompson和 Dennis.M.Ritchie
*C标准 *
标准 C,K&R合著, The C Programming Language,(Brian
W,Kernighan和 Dennis M,Rithchie) 1978年
ANSI C,1983年
87 ANSI C,1987年
1990年国际标准的 ANSI C
1.1.2 C语言发展过程
… 见框图
<
1960:ALGOL 语言 离开硬件远,不适合编写系统软件
1963:CPL 语言 (剑桥大学 )
接近硬件
1967:BCPL 语言 (剑桥大学 )
简化
1970:B语言 (Bell实验室 )
1973:C语言 (Bell实验室 )
改进
进一步简化
1978:传统 C语言
1990:ANSI C语言
规模庞大
K&R著作
ISO修订
?语言简洁、紧凑、灵活
?运算符和数据类型丰富
?程序设计结构化、模块化
?生成目标代码质量高
?可移植性好(较之汇编语言)
?可以直接操纵硬件
<
> >
>>
1.2 C语言特点
,(由系统定义,不能重作其它定义的字符串 )
1类型说明符
auto char const
double enum extern float int long
register short signed sizeof static struct
unsigned union void volatile
2 语句定义符
break case continue default do else for
goto if return switch typedef while
3 预处理命令字 (*)
define include <
32个关键字
if( )~else~
for( )~
while( )~
do~while( )
continue
break
switch
goto
return
<
9种控制语句
算术运算符,+ - * / % ++ --
关系运算符,< <= == > >= !=
逻辑运算符:! && ||
位运算符, << >> ~ | ^ &
赋值运算符,= 及其扩展
条件运算符,?:
逗号运算符:,
指针运算符,* &
求字节数, sizeof
强制类型转换,(类型)
分量运算符,,->
下标运算符,[]
其它, ( ) - (负号 )<
34种运算符
基本类型
构造类型
指针类型
空类型 void
定义类型 typedef
数值类型
字符类型 char
枚举类型 enum
整 型
浮点型
单精度型 float
双精度型 double
短整型 short
长整型 long
整型 int
数组
结构体 struct
共用体 union
<
C 数据类型:
例 1.1 第一个程序 Hello,World!
/* example1.1 The first C Program*/
#include <stdio.h>
main()
{
printf(“Hello,World!”);
}
注释
编译预处理
函数
语句
输出:
Hello,World!
1.3 C程序格式和结构特点
/* example1.1 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=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);
} 运行结果:sum=34
函数
语句
预处理命令
注释
例 1.2
? 习惯用小写字母,大小写敏感
? 不使用行号,无程序行概念
? 可使用空行和空格
? 常用锯齿形书写格式
main( )
{ ……………….
………………
…………..
…………..
………
……….
……………
…………….
……………….
………………..
}
main( )
{
int i,j,sum;
sum=0;
for(i=1; i<10;i++)
{
for(j=1;j<10;j++)
{
sum+=i*j ;
}
}
printf(“%d\n”,sum);
}
优秀程序员的素质之一,
?使用 TAB缩进
?{}对齐
?有足够的注释
?有合适的空行
1.3.1 C程序格式特点
? 函数与主函数
? 函数是C语言的基本单位
? 程序由一个或多个函数组成
? 必须有且只能有一个主函数 main()
? 程序执行从 main开始,在 main中结束,其它函数通过
嵌套调用得以执行。(习惯上把 main()函数放在最前面)
? 程序语句
? C程序由语句组成
? 用, ;”作为语句终止符
? 注释
? /* */为注释,不能嵌套
? 不产生编译代码
例,/*This is the main /* of example1.1*/ */
非法
1.3.2 结构特点
任何函数(包括主函数 main())都是由函数说明和
函数体两部分组成。其一般结构如下:
[函数类型 ] 函数名 (函数参数表 )
{
说明语句部分;
执行语句部分;
}
函数体部分
函数说明部分 (函数的首
部 )
1.3.3 函数的一般结构
… 见后面实例
1.3.3.1 函数说明
例如, 某个函数,max(),其函数说明各部分如下所示 。
函数类型 函数名 函数参数表
↓ ↓ ↓
int max ( int x,int y )
1.3.3.2 函数体
在函数说明部分的下面, 大括号 ( 必须配对使用 ) 内的部分 。
函数体一般由说明语句和可执行语句两部分构成:
? 说明语句部分
说明语句部分由变量定义, 自定义类型定义, 自定义函数说明, 外部变量
说明等组成 。
? 可执行语句
一般由若干条可执行语句构成 。
/*主函数 main()*/
main()
{
int num1,num2;
printf(“Input the first integer number:,);
scanf(“%d”,&num1);
printf(“Input the second integer number:,);
scanf(“%d”,&num2);
printf(“max=%d\n”,max(num1,num2));
}
函数体结构示意图
… 续函数体
main()
{ int x,y; /*变量定义语句:定义 2个整型变量 x、
y*/
x=3; /*可执行的赋值语句:将 3赋值给变量
x*/
y=6; /*可执行的赋值语句:将 6赋值给变量 y*/
int max; /*变量定义语句:出现在可执行的
赋值语句, x=3;”和, y=6;”之后,
非法 ! */
max=x>y?x:y;
printf(“max=%d\n”,max);
}
解决办法很简单, 请读者自己思考 。
?说明语句部分需要放在可执行语句的前面
<
… 续函数体
编辑
链接
编译
执行
?C程序开发步骤
<
开 始
编 辑
编 译
连 接
执 行
有错?
结果正确?
结 束
有
源程序
f i l e,c
目标程
序
f i l e, obj
库函数和
其它目标
程序
可执行
目标程
序
无
正确
不正确
file.exe
程序代码的录入,
生成源程序 *.c
语法分析查错,翻译
生成目标程序 *.obj
与其它目标程序或库
链接装配,生成可执行
程序 *.exe
?′ 3ì Dò ?? ±ê 3ì Dò ?é ?′ D 3ì Dò
?ú èY 3ì Dò éè ?? ó? ?? ?ú ?? ó? ?? ?ú ?? ó? ??
?é ?′ D 2? ?é ò? 2? ?é ò? ?é ò?
?? ?t ?? oó ×,c, o b j, e x e
1.4 C程序的上机步骤
南京师范大学
地图学与地理信息系统 04级
专业选修课
主讲教师, 汪闽
为什么要学习 C语言
?C语言是一门功能强大的语言
?C语言是一门很好的教学和考试语言
?计算机专业,GIS专业的许多硕士点均把 C作
为考试语言
?学好 C语言基础,更有利于其他语言的学习
学习本课程的目的
? 掌握 C语言的基础知识
? 掌握程序设计中常用的算法
? 能够用 C语言编写简单的程序
? 提高分析问题和解决问题的能力
? 为考研作准备
本课程的内容安排
? 课时安排,3节 /周 ?15周
? 内容:见教材目录
? 3,4,5,6,7,8,9,10,11,13 (详细讲解学习 )
? 1,2(概要性学习 )
? 12,14,15(有条件时可以讲解,考试不做要求 )
? 重难点:数组、函数、指针 (特色 )
防止与 VB混淆
? 实验安排,2节 /周 ?15周
使用教材, C程序设计 (第二版 )
谭浩强
清华大学出版社
上机环境, VC++6.0
本课程的教材和上机环境
本课程的参考书
?谭浩强, C程序设计题解与上机指导,
?严蔚敏 吴伟民, 数据结构, C语言版
?The C programming Language( C程序设计语言)第 2版及其习
题解答 【 中译本 】
?其他与 C语言相关的纸本及电子书籍
本课程的考评方法
? 平时作业,10%
? 上机实验,20%
? 期中测验,10%
? 期末考试,60%
1.1 C语言发展历史
1.2 C语言特点
1.3 C程序格式和结构特点
1.4 C程序上机步骤
第一章 C语言概述
1.1.1 程序设计语言的发展
机
器
语
言
汇
编
语
言
高
级
语
言
面向过程
面向对象
CPU指令系统,由 0,1序列构成的指令码组成
如,10000000 加
10010000 减
用助记符号描述的指令系统
如 ADD A,B
面向机器的语言
程序设计是数据被加工的过程
客观世界可以分类,对象是类的实例
对象是数据和方法的封装
对象间通过发送和接受消息发生联系程序设计关键是定义类,并由类派生对象
1.1 C语言发展历史
*产生背景 *
应用需求,界于汇编和高级语言之间的中级语言
*产生过程 *
时间,1972~1973
地点,美国贝尔实验室
目的,UNIX操作系统
设计人, Ken.Thompson和 Dennis.M.Ritchie
*C标准 *
标准 C,K&R合著, The C Programming Language,(Brian
W,Kernighan和 Dennis M,Rithchie) 1978年
ANSI C,1983年
87 ANSI C,1987年
1990年国际标准的 ANSI C
1.1.2 C语言发展过程
… 见框图
<
1960:ALGOL 语言 离开硬件远,不适合编写系统软件
1963:CPL 语言 (剑桥大学 )
接近硬件
1967:BCPL 语言 (剑桥大学 )
简化
1970:B语言 (Bell实验室 )
1973:C语言 (Bell实验室 )
改进
进一步简化
1978:传统 C语言
1990:ANSI C语言
规模庞大
K&R著作
ISO修订
?语言简洁、紧凑、灵活
?运算符和数据类型丰富
?程序设计结构化、模块化
?生成目标代码质量高
?可移植性好(较之汇编语言)
?可以直接操纵硬件
<
> >
>>
1.2 C语言特点
,(由系统定义,不能重作其它定义的字符串 )
1类型说明符
auto char const
double enum extern float int long
register short signed sizeof static struct
unsigned union void volatile
2 语句定义符
break case continue default do else for
goto if return switch typedef while
3 预处理命令字 (*)
define include <
32个关键字
if( )~else~
for( )~
while( )~
do~while( )
continue
break
switch
goto
return
<
9种控制语句
算术运算符,+ - * / % ++ --
关系运算符,< <= == > >= !=
逻辑运算符:! && ||
位运算符, << >> ~ | ^ &
赋值运算符,= 及其扩展
条件运算符,?:
逗号运算符:,
指针运算符,* &
求字节数, sizeof
强制类型转换,(类型)
分量运算符,,->
下标运算符,[]
其它, ( ) - (负号 )<
34种运算符
基本类型
构造类型
指针类型
空类型 void
定义类型 typedef
数值类型
字符类型 char
枚举类型 enum
整 型
浮点型
单精度型 float
双精度型 double
短整型 short
长整型 long
整型 int
数组
结构体 struct
共用体 union
<
C 数据类型:
例 1.1 第一个程序 Hello,World!
/* example1.1 The first C Program*/
#include <stdio.h>
main()
{
printf(“Hello,World!”);
}
注释
编译预处理
函数
语句
输出:
Hello,World!
1.3 C程序格式和结构特点
/* example1.1 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=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);
} 运行结果:sum=34
函数
语句
预处理命令
注释
例 1.2
? 习惯用小写字母,大小写敏感
? 不使用行号,无程序行概念
? 可使用空行和空格
? 常用锯齿形书写格式
main( )
{ ……………….
………………
…………..
…………..
………
……….
……………
…………….
……………….
………………..
}
main( )
{
int i,j,sum;
sum=0;
for(i=1; i<10;i++)
{
for(j=1;j<10;j++)
{
sum+=i*j ;
}
}
printf(“%d\n”,sum);
}
优秀程序员的素质之一,
?使用 TAB缩进
?{}对齐
?有足够的注释
?有合适的空行
1.3.1 C程序格式特点
? 函数与主函数
? 函数是C语言的基本单位
? 程序由一个或多个函数组成
? 必须有且只能有一个主函数 main()
? 程序执行从 main开始,在 main中结束,其它函数通过
嵌套调用得以执行。(习惯上把 main()函数放在最前面)
? 程序语句
? C程序由语句组成
? 用, ;”作为语句终止符
? 注释
? /* */为注释,不能嵌套
? 不产生编译代码
例,/*This is the main /* of example1.1*/ */
非法
1.3.2 结构特点
任何函数(包括主函数 main())都是由函数说明和
函数体两部分组成。其一般结构如下:
[函数类型 ] 函数名 (函数参数表 )
{
说明语句部分;
执行语句部分;
}
函数体部分
函数说明部分 (函数的首
部 )
1.3.3 函数的一般结构
… 见后面实例
1.3.3.1 函数说明
例如, 某个函数,max(),其函数说明各部分如下所示 。
函数类型 函数名 函数参数表
↓ ↓ ↓
int max ( int x,int y )
1.3.3.2 函数体
在函数说明部分的下面, 大括号 ( 必须配对使用 ) 内的部分 。
函数体一般由说明语句和可执行语句两部分构成:
? 说明语句部分
说明语句部分由变量定义, 自定义类型定义, 自定义函数说明, 外部变量
说明等组成 。
? 可执行语句
一般由若干条可执行语句构成 。
/*主函数 main()*/
main()
{
int num1,num2;
printf(“Input the first integer number:,);
scanf(“%d”,&num1);
printf(“Input the second integer number:,);
scanf(“%d”,&num2);
printf(“max=%d\n”,max(num1,num2));
}
函数体结构示意图
… 续函数体
main()
{ int x,y; /*变量定义语句:定义 2个整型变量 x、
y*/
x=3; /*可执行的赋值语句:将 3赋值给变量
x*/
y=6; /*可执行的赋值语句:将 6赋值给变量 y*/
int max; /*变量定义语句:出现在可执行的
赋值语句, x=3;”和, y=6;”之后,
非法 ! */
max=x>y?x:y;
printf(“max=%d\n”,max);
}
解决办法很简单, 请读者自己思考 。
?说明语句部分需要放在可执行语句的前面
<
… 续函数体
编辑
链接
编译
执行
?C程序开发步骤
<
开 始
编 辑
编 译
连 接
执 行
有错?
结果正确?
结 束
有
源程序
f i l e,c
目标程
序
f i l e, obj
库函数和
其它目标
程序
可执行
目标程
序
无
正确
不正确
file.exe
程序代码的录入,
生成源程序 *.c
语法分析查错,翻译
生成目标程序 *.obj
与其它目标程序或库
链接装配,生成可执行
程序 *.exe
?′ 3ì Dò ?? ±ê 3ì Dò ?é ?′ D 3ì Dò
?ú èY 3ì Dò éè ?? ó? ?? ?ú ?? ó? ?? ?ú ?? ó? ??
?é ?′ D 2? ?é ò? 2? ?é ò? ?é ò?
?? ?t ?? oó ×,c, o b j, e x e
1.4 C程序的上机步骤