谭浩强C语言ppt
合集下载
C语言程序设计(第四版) 谭浩强 课件 PPT 完整版
语句
printf语句中的“\n‖是换行
符
<
>
C语言程序设计
第/* example1.1 calculate the sum of a and b*/ #include <stdio.h> 预处理命令 /* This is the main program */ void main() 注释 { int a,b,sum; /*定义变量*/ 函数 a=10; b=24; 语句 sum=add(a,b); printf(”sum= %d\n",sum); } printf语句中的“ %d ‖是表
C语言程序设计
第一章 C语言概述
C语言结构特点
函数与主函数
程序由一个或多个函数组成 必须有且只能有一个主函数main(),可以放在程序中任一 位臵 程序执行从main开始,在main中结束,其它函数通过嵌 套调用得以执行。
程序语句
C程序由语句组成 用‚;‛作为语句终止符
注释
C语言程序设计
第一章 C语言概述
Turbo C集成开发环境
配臵要求
UNIX,PC-DOS,MS-DOS,UCDOS操作系统 硬盘容量约2M,448K RAM运行空间
安装Turbo C
创建子目录 Install 若不是可安装盘,将文件拷贝到对应的目录下
TC
*.* *.*
INCLUDE SYS
Alt +x Alt+F ,Q
帮助Help
F1 Ctrl+F1
<
>
C语言程序设计
第一章 C语言概述
常用热键 基本操作:
F10-----调用主菜单 F2------存盘 F3------打开 F1------帮助信息 Alt+F9------Compile Ctrl+F9------Run Alt+F5------User Screen Alt+X ------退出Tc
C语言程序设计第四版PPT 谭浩强
case '9' : y="A";
case '8' : y="B"; case '7' : y="C"; case '6' : y="D"; default : y="E"; } printf("Level:%c\n",y);
注意: 同前;case后的数据类型; 每个case后的break语句; 使用相同语句的分支合并。
printf("It's a positive number\n");
else
printf("less than zero\n");
关系运算符
< <= == !=
> >= 优先级高 优先级低
关系运算符
算术运算→关系运算→赋值运算
优
优
先
先
于
于
例:P.92 L.8
关系表达式
➢用关系运算符连接算术表达式(或 字符/关系/逻辑/赋值表达式)形成
选择结构(分支结构)流程
Y
语句组1
条件
N
语句组2
循环结构流程
条件
N
Y
语句组
第4章 选择结构
选择结构(分支结构)流程YΒιβλιοθήκη 语句组1条件N
语句组2
选择结构实例
P.66 例3.5 一元二次方程 程序存在的问题:用户输入的数据必 须保证b2-4ac≥0,否则调用sqrt函数 会出错。 改进:P.86 例4.1 是否还有不完善之处?
文件名
尽信书,则不如无书
算法在程序中的重要性
case '8' : y="B"; case '7' : y="C"; case '6' : y="D"; default : y="E"; } printf("Level:%c\n",y);
注意: 同前;case后的数据类型; 每个case后的break语句; 使用相同语句的分支合并。
printf("It's a positive number\n");
else
printf("less than zero\n");
关系运算符
< <= == !=
> >= 优先级高 优先级低
关系运算符
算术运算→关系运算→赋值运算
优
优
先
先
于
于
例:P.92 L.8
关系表达式
➢用关系运算符连接算术表达式(或 字符/关系/逻辑/赋值表达式)形成
选择结构(分支结构)流程
Y
语句组1
条件
N
语句组2
循环结构流程
条件
N
Y
语句组
第4章 选择结构
选择结构(分支结构)流程YΒιβλιοθήκη 语句组1条件N
语句组2
选择结构实例
P.66 例3.5 一元二次方程 程序存在的问题:用户输入的数据必 须保证b2-4ac≥0,否则调用sqrt函数 会出错。 改进:P.86 例4.1 是否还有不完善之处?
文件名
尽信书,则不如无书
算法在程序中的重要性
C语言程序设计第四版PPT-谭浩强
文件f2的 文件信息区
文件f3的 文件信息区
文件的基本知识——文件的操作 写文件:打开-写-关闭 读文件:打开-读-关闭
文件的打开
功能:为文件建立相应的信息区(存放 文件信息)和文件缓冲区(暂时存放输入 输出的数据) 函数: fopen(文件名,使用文件方式); 例: fopen("a1.dat","r");
第10章 文件
本章内容
10.1 文件的基本知识 10.2 打开与关闭文件 10.3 顺序读写数据文件 10.4 随机读写数据文件 10.5 文件读写的出错检测
文件的基本知识——输入输出
之前各章中处理的数据 ➢输入:键盘->内存 ➢输出:内存->显示器 实际上也可能是 ➢输入:外部设备->内存(读文件) ➢输出:内存->外部设备(写文件) 操作系统把各种设备都统一作为文件处理
文件
顺序文件的读写——读写字符串
例10.3 从键盘输入3个字符串,排序,把排
序后的字符串写入文件(P.342-343) 读上面写好的文件(P.344)
顺序文件的读写——格式化读写
fprintf(文件指针,格式字符串,输出表列); fscanf (文件指针,格式字符串,输入表列);
例: fprintf (fp,"%d,%6.2f",i,f); fscanf (fp,"%d,%f",&i,&f);
用文件扩展名”
文件的基本知识——流式文件
C语言把文件看作是字符(或字 节)的序列。
文件以“流”的形式在程序与操 作系统间流动。
文件的基本知识——数据的形式
根据数据的组织形式,数据文件可分为 ASCII文件:数据逐个字符的ASCII码 输出到外存,也称文本文件 二进制文件:内存中二进制形式的数据 直接输出到外存
C语言程序设计第四版谭浩强-PPT课件
例: printf("%d",sizeof(int));
浮点型数据(Floating point,即实型) 浮点型常量
两种表示形式 十进制小数:例如 3.14159 指数形式:例如 1.72e3
main( ) { float x; x=23456.789; printf("x=%e",x); }
25string26string字符串结束符占一个字节由系统自动加上源代码中china27字符常量字符串常量定界符非负整数存储要求单个字符的ascii码有效字符和结束标志0的ascii码2829整型intshortlong浮点型floatdoublelongdouble字符型char数据可混合运算运算前先自动转换成同一类型必定转换floatdoublecharint运算对象类型不同时由较低精度向较高精度转换成相同类型精度
常变量
C99新增 存储方式和用法都是变量,但只能在 定义时赋值一次
C语言的数据类型
1.基本类型 整型、浮点型、字符型 2.派生类型 数组,结构体,共用体 3.指针类型 4.空类型 5.枚举型
整型数据(Integer) 整型常量
三种数制的表示形式
十进制(Decimal):例如 八进制(Octal):例如
上周实验题讲解
P.6例1.1 P15习题5 教材例1.3
——增加输入提示,便于用户操作
——也可以不用函数
——多次运行,测试各种顺序的组合
P15习题6
——三个数比较:用max函数比较两次
第3章
顺序程序设计
3.1 最简单的程序结构——顺序结构
数据输入 运算处理
结果输出
顺序结构流程
步骤1 步骤2 步骤3
10 + 'a' – 10.1 * 'b'
浮点型数据(Floating point,即实型) 浮点型常量
两种表示形式 十进制小数:例如 3.14159 指数形式:例如 1.72e3
main( ) { float x; x=23456.789; printf("x=%e",x); }
25string26string字符串结束符占一个字节由系统自动加上源代码中china27字符常量字符串常量定界符非负整数存储要求单个字符的ascii码有效字符和结束标志0的ascii码2829整型intshortlong浮点型floatdoublelongdouble字符型char数据可混合运算运算前先自动转换成同一类型必定转换floatdoublecharint运算对象类型不同时由较低精度向较高精度转换成相同类型精度
常变量
C99新增 存储方式和用法都是变量,但只能在 定义时赋值一次
C语言的数据类型
1.基本类型 整型、浮点型、字符型 2.派生类型 数组,结构体,共用体 3.指针类型 4.空类型 5.枚举型
整型数据(Integer) 整型常量
三种数制的表示形式
十进制(Decimal):例如 八进制(Octal):例如
上周实验题讲解
P.6例1.1 P15习题5 教材例1.3
——增加输入提示,便于用户操作
——也可以不用函数
——多次运行,测试各种顺序的组合
P15习题6
——三个数比较:用max函数比较两次
第3章
顺序程序设计
3.1 最简单的程序结构——顺序结构
数据输入 运算处理
结果输出
顺序结构流程
步骤1 步骤2 步骤3
10 + 'a' – 10.1 * 'b'
第1章谭浩强CPPT课件
5
[例1.2]求两数之和。
main() { int a, b, sum; /* 定义三个整型变量 */
a = 123; b = 456; sum = a + b; printf("sum is %d\n", sum); } 本程序的作用:求两整数a、b之和sum, 并在屏幕上输出sum。
6
[例1.3]从键盘输入两个整数,在屏幕上输出它们的 最大值。
8
2、一个函数由两部分构成:
(1)函数的说明部分, 包括:函数名、函数类型(返回值类型)、函 数属性(前面的例子中未使用函数的属性。属 性包括near和far)、形式参数名、形式参数 类型。 (2)函数体, 大括号{ }中的部分。函数体中包含变量定义部 分和执行部分。
9
例:
int max (int x,int y) {
}
10
3、一个C程序总是从main( )处开始执行,而不管main() 在源程序中的位置。
4、C程序书写格式自由,一个语句可以占多行,一行也 可以有多个语句。
5、语句和数据定义后必须要有分号。例、c = a + b ; 6、C语言用函数进行输入输出,如scanf()、printf()。 7、C语言用/* */作注释。
8、可移植性好。基本不作修改就可以在不同型号计算 机、不同操作系统上执行。 9、C语言难学
4
§1.3 简单的C程序
[例1.1] main() {
printf("This is a C program.\n"); } 该程序的作用:在屏幕上输出一行信息: This is a C program.
7
从以上三个例子中,可以看到
1、C程序主要由函数构成, C程序中有三种类型的函数: main():主函数,开发系统提供的特殊函数,每一
[例1.2]求两数之和。
main() { int a, b, sum; /* 定义三个整型变量 */
a = 123; b = 456; sum = a + b; printf("sum is %d\n", sum); } 本程序的作用:求两整数a、b之和sum, 并在屏幕上输出sum。
6
[例1.3]从键盘输入两个整数,在屏幕上输出它们的 最大值。
8
2、一个函数由两部分构成:
(1)函数的说明部分, 包括:函数名、函数类型(返回值类型)、函 数属性(前面的例子中未使用函数的属性。属 性包括near和far)、形式参数名、形式参数 类型。 (2)函数体, 大括号{ }中的部分。函数体中包含变量定义部 分和执行部分。
9
例:
int max (int x,int y) {
}
10
3、一个C程序总是从main( )处开始执行,而不管main() 在源程序中的位置。
4、C程序书写格式自由,一个语句可以占多行,一行也 可以有多个语句。
5、语句和数据定义后必须要有分号。例、c = a + b ; 6、C语言用函数进行输入输出,如scanf()、printf()。 7、C语言用/* */作注释。
8、可移植性好。基本不作修改就可以在不同型号计算 机、不同操作系统上执行。 9、C语言难学
4
§1.3 简单的C程序
[例1.1] main() {
printf("This is a C program.\n"); } 该程序的作用:在屏幕上输出一行信息: This is a C program.
7
从以上三个例子中,可以看到
1、C程序主要由函数构成, C程序中有三种类型的函数: main():主函数,开发系统提供的特殊函数,每一
C语言谭浩强完整课件
着广泛的应用。
计算机系统基本概念
计算机系统的组成
计算机系统由硬件系统和软件系统两大部分组成,硬件系统包括运算器、控制器、存储器 、输入设备和输出设备等五大部分;软件系统包括系统软件和应用软件两大类。
计算机的工作原理
计算机的工作原理可以概括为存储程序控制和程序控制流,即计算机通过执行存储在内存 中的程序来控制各部件协调工作。
在定义数组时,可以直接 对数组进行初始化,也可 以定义后再进行赋值。
一维数组的使用
通过下标访问数组元素, 下标从0开始,最大下标为 数组长度减1。
二维数组与多维数组
二维数组的定义
二维数组可以看作是一个 表格,由行和列组成,每 个元素都有两个下标。
二维数组的初始化
在定义二维数组时,可以 直接对数组进行初始化, 也可以定义后再进行赋值 。
scanf和printf函数都支持 格式化输入输出,可以通 过格式控制符指定输入输 出数据的类型和格式。
格式化输入
格式控制符
C语言提供了一组格式控制符,用于 指定输入输出数据的类型和格式,如 %d表示输入输出整数,%f表示输入 输出浮点数等。
格式化输入
格式化输出
使用printf函数进行格式化输出时, 可以指定输出数据的格式和显示方式 ,如控制小数位数、显示宽度等。
类型。
枚举常量的说明
在枚举类型定义中,可以列 出多个枚举常量,每个常量 对应一个整数值。默认情况 下,第一个枚举常量的值为0 ,后续常量的值依次递增1。
枚举变量的使用
声明枚举类型的变量后,可 以为其赋值。枚举变量的值 只能是枚举常量中定义的值 。使用枚举类型可以提高代 码的可读性和可维护性。
08
文件操作与数据处理
C语言PPT谭浩强教材配套版
stud1.display( );
这就是向对象stud1发出旳一种“消息”,告知它执 行display“措施”(即display函数)。在这里一 种语句中涉及到3个术语:对象、措施和消息。
归纳以上对类型旳申明,能够得到其一般形式:
class 类名
{private : 私有旳数据和组员函数;
public: 公用旳数据和组员函数;
stud(int n,char nam[],char s ) //定义构造函数,有形 参
{num=n; strcpy(name, nam);
sex=s;
}
此时数据旳值不由构造函数stud拟定,而是在调用 此函数时由实参传来。但应注意构造函数不同于 一般旳组员函数,不能这么调用:
stud1.stud(10010,“Wang-li”,′f′); //企图用调用一般组 员函数旳措施来调用构造函数
}; C++增长了class类型后,仍保存了构造体类型(struct)
和共用体类型(union),而且把它们旳功能也扩展 了,允许在申明旳构造体和共用体类型中涉及组 员函数,也就是能够用struct和union来申明一种类 型。但它们和class申明旳类有所区别。
用struct申明旳类,假如不作private或public申明, 系统将其组员默认定为public(公用旳),在需要 时能够自己用显式申明重新指定为private或public。
用union申明旳类,假如不作private或public申明, 系统将其组员默认定为public(公用旳),且不能 变化。
用class申明旳类,假如不作private或public申明,系 统将其组员默认定为private(私有旳),在需要 时能够自己用显式申明变化。
这就是向对象stud1发出旳一种“消息”,告知它执 行display“措施”(即display函数)。在这里一 种语句中涉及到3个术语:对象、措施和消息。
归纳以上对类型旳申明,能够得到其一般形式:
class 类名
{private : 私有旳数据和组员函数;
public: 公用旳数据和组员函数;
stud(int n,char nam[],char s ) //定义构造函数,有形 参
{num=n; strcpy(name, nam);
sex=s;
}
此时数据旳值不由构造函数stud拟定,而是在调用 此函数时由实参传来。但应注意构造函数不同于 一般旳组员函数,不能这么调用:
stud1.stud(10010,“Wang-li”,′f′); //企图用调用一般组 员函数旳措施来调用构造函数
}; C++增长了class类型后,仍保存了构造体类型(struct)
和共用体类型(union),而且把它们旳功能也扩展 了,允许在申明旳构造体和共用体类型中涉及组 员函数,也就是能够用struct和union来申明一种类 型。但它们和class申明旳类有所区别。
用struct申明旳类,假如不作private或public申明, 系统将其组员默认定为public(公用旳),在需要 时能够自己用显式申明重新指定为private或public。
用union申明旳类,假如不作private或public申明, 系统将其组员默认定为public(公用旳),且不能 变化。
用class申明旳类,假如不作private或public申明,系 统将其组员默认定为private(私有旳),在需要 时能够自己用显式申明变化。
谭浩强C语言PPT
此外,还要告诉TC:Turbo C的“包含文件”和库函数在哪 个子目录中。在安装Turbo c时,如果用户不作另外的指定,系 统会按照默认的方案建立一个目录用来存放Turbo C的系统文件 ,同时在主目录下建立一个INCLUDE子目录用来存放“包含
文件”,另外建立一个LIB子目录用来存放库函数。如果在安 装Turbo C时,用户不采用系统提供的子目录名和安排,而自己 另外指定了子目录名,则应当通知Turbo C系统,以免它找不到 。
允许访问物理地址,能进行位操作,实 现汇编语言的大部分功能,可以直接对 硬件进行操作。所以说C语言既有高级语 言的特征又有低级语言的特征,有人把C 称为“高级语言中的低级语言”或“中 级语言”
生成目标代码质量高,程序执行效率高
一般只比汇编程序生成的目标代码效率 低10%~20%。
可移植性好(与汇编语言比)。基本上 不做修改就能用于各种型号的计算机和 各种操作系统。
编译
有 有错? 无 连接 执行 不正确 结果 正确? 正确 结束
目标程序 .exe
用Turbo C运行C程序的步骤
Turbo C向用户提供一个集成环境,把程序的编 辑、编译、连接和运行等操作全部集中在一个界面 上进行。 Turbo C运行在DOS环境下。 安装Turbo C 在使用Turbo C之前,一般将Turbo C安装在硬盘 上的某一个子目录下。如c:\TC 安装完成后,在安装的子目录下将会增加两个子 目录: ..include子目录:其中包括stdio.h,math.h等头文件 ..lib子目录:其中包括maths.lib, mathl.lib, graphics.lib等库函数文件。
Make EXE file(F9):编译连接同时进行得到.EXE, 如果有project 文件,则对project文件中的所有列 出的源程序进行编译连接,产生.EXE。
谭浩强C语言PPT
struct packed_data1 {unsigned a:2; unsigned b:6; unsigned c:4; unsigned d:4; int i; }data1; data1 data2 15 struct packed_data2 {unsigned a:2; unsigned b:6; unsigned c:4; int i; }data2;
| 按位或
• 两个相应的二进制位只要有一个为1,则 结果为1。 000000011 | 000000101 000000111
• 某些位置1 main() {int a=0x2cac,c; c=a|0x00ff; printf("\n%04x",c); } 输出 2cff
^ 按位异或
• 两个相应的二进制位相同 ,则结果为0, 不同为1。 000000011 ^ 000000101 000000110
~ 取反
• 按位取反 00001010
11110101
<< 左移
•用来将一个数的各二进位全部左移若干位。 a=a<<2
00001111 00111100
高位左移后溢出, 不起作用
• 左移一位相当于乘2,两位则22=4(舍 弃的高位不含1)
>>
右移
• 用来将一个数的各二进位全部右移若干 位。 a>>2 对于无符号数:移到右端的低位被舍弃, 高位补0。 对于有符号数:移到右端的低位被舍弃, 高位补符号位视该数的符号位而定。
main() {struct packed_data data; data.a=3; data.b=8; data.c=12; data.d=15; printf( "%x%d%x%o",dat a.a,data.b,data.c,data.d); } 输出38c17
| 按位或
• 两个相应的二进制位只要有一个为1,则 结果为1。 000000011 | 000000101 000000111
• 某些位置1 main() {int a=0x2cac,c; c=a|0x00ff; printf("\n%04x",c); } 输出 2cff
^ 按位异或
• 两个相应的二进制位相同 ,则结果为0, 不同为1。 000000011 ^ 000000101 000000110
~ 取反
• 按位取反 00001010
11110101
<< 左移
•用来将一个数的各二进位全部左移若干位。 a=a<<2
00001111 00111100
高位左移后溢出, 不起作用
• 左移一位相当于乘2,两位则22=4(舍 弃的高位不含1)
>>
右移
• 用来将一个数的各二进位全部右移若干 位。 a>>2 对于无符号数:移到右端的低位被舍弃, 高位补0。 对于有符号数:移到右端的低位被舍弃, 高位补符号位视该数的符号位而定。
main() {struct packed_data data; data.a=3; data.b=8; data.c=12; data.d=15; printf( "%x%d%x%o",dat a.a,data.b,data.c,data.d); } 输出38c17
谭浩强C语言PPT
if((fpw=fopen(argv[2],”w”))==NULL)
{printf(“\n不能打开源文件%s\n”,argv[2]); exit(0);}
while((c=fgetc(fpr))!=EOF) fputc(c,fpw);
fclose(fpr), fclose(fpw);
}
• 注:若改while((c=fgetc(fpr))!=EOF)句为 while(!eof(fpr)), 则此程序也可用于复制非文本文件.
viod save() {file *fp; int i; if((fp=fopen(“stu_list”,”wb”))= =null) {printf(“cannot open file\n”); return; } for(i=0;i<=size;i++) if(fwrite(&stud[i],sizeof(struct
13.4文件的读写
㈠非设备文件的非格式化读写.所谓非格
式化读写,是指读写字符和字符串,不 指定输出格式,使用fputc,fgetc等函数 实现,这些函数的原型都在stdio.h中。
设备文件:C语言把输入、输出设备视为逻辑文件,所 谓输入,即读设备文件;所谓输出,即写输出设备文 件.这样,把应用设备输入、输出与一般文件的读写 统一起来.
– 打开的文件只能用于向该文件写数据,若原来不 存在该文件,则新建立一个;若已存在一个,原 有文件将被覆盖。
• “a”(追加)
– 向已存在的文件末尾添加数据(不删除原有数 据),打开文件时,文件指针自动移到文件末尾。
• 用“r+”,”w+”,”a+”方式打开的文件 既可以读,又可以写 “r+”方式,为读写打开一个文本文件 ——该文件已存在,以便向计算机输入数据;
第3章谭浩强版C程序设计 教学PPT
OS屏蔽了计算机中几 乎所有物理设备的技术 细节,为使用、开发和 运行其他软件提供了一 个高效、可靠的平台。
虚拟计算机
计算机硬件
OS非常庞大和复杂, 它由许多程序模块组成
24
3.1 计算机软件概述
为什么需要操作系统?
分配系统中 的资源
管理存储器 空间
控制基本的输入 /输出操作
监测计算机 运行和故障
“单任务处理”与“多任务处理”
单任务处理:前一个任务完成后才能启动后一个任务的运行,任 务是顺序执行的
多任务处理(Multitasking):允许计算机同时执行多个任务,任 务是并发执行的 编辑PPT讲稿 + 播放音乐 + 收发邮件
多任务处理举例:
多任务处理的优点:
大大提高了用户的工作效率
① 用于完成某一确定的信息处理任务
② 使用某种计算机语言描述如何完成该任务
③ 预先存储在计算机中,启动运行后才能完成任务
7
3.1 计算机软件概述
程序与数据的关系
程序所处理的对象和处
程序
理后得到的结果统称为
输入数据
计算机
输出数据
数据(分别称为输入数 据和输出数据)
程序必须处理合理的输
2,5,人,8,3
有一个,称为活动窗口,它所对应的任务称为前台任务
后台任务:除前台任务外,所有其它任务均为后台任务 前台任务与后台任务的区别:
前台任务对应的窗口(活动窗口)位于其它窗口的前面 活动窗口的标题栏比非活动窗口颜色更深(深蓝色)
前台任务与后台任务的共同点:都在计算机中运行 前台任务与后台任务的切换:
显示初始界面
虚拟计算机
计算机硬件
OS非常庞大和复杂, 它由许多程序模块组成
24
3.1 计算机软件概述
为什么需要操作系统?
分配系统中 的资源
管理存储器 空间
控制基本的输入 /输出操作
监测计算机 运行和故障
“单任务处理”与“多任务处理”
单任务处理:前一个任务完成后才能启动后一个任务的运行,任 务是顺序执行的
多任务处理(Multitasking):允许计算机同时执行多个任务,任 务是并发执行的 编辑PPT讲稿 + 播放音乐 + 收发邮件
多任务处理举例:
多任务处理的优点:
大大提高了用户的工作效率
① 用于完成某一确定的信息处理任务
② 使用某种计算机语言描述如何完成该任务
③ 预先存储在计算机中,启动运行后才能完成任务
7
3.1 计算机软件概述
程序与数据的关系
程序所处理的对象和处
程序
理后得到的结果统称为
输入数据
计算机
输出数据
数据(分别称为输入数 据和输出数据)
程序必须处理合理的输
2,5,人,8,3
有一个,称为活动窗口,它所对应的任务称为前台任务
后台任务:除前台任务外,所有其它任务均为后台任务 前台任务与后台任务的区别:
前台任务对应的窗口(活动窗口)位于其它窗口的前面 活动窗口的标题栏比非活动窗口颜色更深(深蓝色)
前台任务与后台任务的共同点:都在计算机中运行 前台任务与后台任务的切换:
显示初始界面
C语言谭浩强完整课件
这种双重性,使它既是成功的系统描述 语言,又是通用的程序设计语言
1.3 C语言的发展及其特点
C语言主要特点:
用C语言编写的程序可移植性好。
C的编译系统简洁,很容易移植到新系统
在新系统上运行时,可直接编译“标准链接 库”中的大部分功能,不需要修改源代码
几乎所有计算机系统都可以使用C语言
1.4.1 最简单的C语言程序举例
#include <stdio.h>
int main( )
{ printf (”This is a C program.\n”); return 0; }
当main函数执行结束前 将整数0作为函数值
1.4.1 最简单的C语言程序举例
#include <stdio.h>
#include <stdio.h> int main( ) { int a,b,sum; a = 123; b = 456; 用sum的值替代 sum = a + b; printf(”sum is %d\n”,sum); return 0; 希望输出的字符 }
例1.3求两个整数中的较大者。 解题思路: 用一个函数实现求两个整数中的较大者 在主函数中调用此函数并输出结果
#include <stdio.h> int main( ) { 因max函数的定义在main函数之后,需声明 int max(int x,int y); int max(int x,int y) int a,b,c; scanf(”%d,%d”,&a,&b); { int z; c = max(a,b); printf("max=%d\n",c); if (x > y) z = x; else z = y; return 0; return(z); } }
1.3 C语言的发展及其特点
C语言主要特点:
用C语言编写的程序可移植性好。
C的编译系统简洁,很容易移植到新系统
在新系统上运行时,可直接编译“标准链接 库”中的大部分功能,不需要修改源代码
几乎所有计算机系统都可以使用C语言
1.4.1 最简单的C语言程序举例
#include <stdio.h>
int main( )
{ printf (”This is a C program.\n”); return 0; }
当main函数执行结束前 将整数0作为函数值
1.4.1 最简单的C语言程序举例
#include <stdio.h>
#include <stdio.h> int main( ) { int a,b,sum; a = 123; b = 456; 用sum的值替代 sum = a + b; printf(”sum is %d\n”,sum); return 0; 希望输出的字符 }
例1.3求两个整数中的较大者。 解题思路: 用一个函数实现求两个整数中的较大者 在主函数中调用此函数并输出结果
#include <stdio.h> int main( ) { 因max函数的定义在main函数之后,需声明 int max(int x,int y); int max(int x,int y) int a,b,c; scanf(”%d,%d”,&a,&b); { int z; c = max(a,b); printf("max=%d\n",c); if (x > y) z = x; else z = y; return 0; return(z); } }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(3) 数据结构丰富,具有现代化语言的各种数据结 构。C的数据类型有整型、实型、字符型、数组 类型、指针类型、结构体类型、共用体类型等。 能用来实现各种复杂的数据结构(如链表、树、 栈等)的运算。尤其是指针类型数据,使用起来 比PASCAL更为灵活、多样。 (4) 具有结构化的控制语句(如if…else语句、while 语句、do…while语句、switch语句、for语句)。 用函数作为程序的模块单位,便于实现程序的模 块化。C是良好的结构化语言, 符合现代编程风 格的要求。
456。第4行使sum的值为a+b,第5行中“%d”是输入输 出的“格式字符串”,用来指定输入输出时的数据类型 和格式(详见第4章),“%d”表示“以十进制整数形式输 出”。在执行输出时,此位置上代以一个十进制整数值。 printf函数中括弧内最右端sum是要输出的变量,现在它
的值为579(即123+456之值)。因此输出一行信息为sum is
高级: BASIC,FORTRAN,COBOL,PASCAL,Ada,Modula-2;
中级: C,FORTH,宏汇编;
低级: 汇编语言 一般仍习惯将C语言称为高级语言,因为C程序也要通过编译、 连接才能得到可执行的目标程序,这是和其他高级语言相 同的。
C的以上特点,读者现在也许还不能深刻理解,待学完C以后
应用最广泛的几种计算机语言之一。以1978年发表的
UNIX第7版中的C编译程序为基础,Brian W.Kernighan
和Dennis M.Ritchie (合称K&R)合著了影响深远的名著 《The C Programming Language》,这本书中介绍的C
语言成为后来广泛使用的C语言版本的基础,它被称为标
能有较大的自由度,以适应宽广的应用面。总之,C语言
对程序员要求较高。程序员使用C语言编写程序会感到限 制少,灵活性大,功能强,可以编写出任何类型的程序。
现在,C语言已不仅用来编写系统软件,也用来编写应用
软件。学习和使用C的人已越来越多。
1.3 简单的C程序介绍
下面先介绍几个简单的C程序,然后从中分析C程序的特性。 例 1.1 main ( ) { printf ("This is a C program.\n"); } 本程序的作用是输出以下一行信息: This is a c program. 其中 main 表示“主函数”。每一个C程序都必须有一个 main 函数。函数体由大括弧{}括起来。本例中主函数内只有一个输 出语句,printf是C语言中的输出函数(详见第4章)。双引号 (双括号)内的字符串原样输出。“\n”是换行符,即在输出 “This is a c program.”后回车换行。语句最后有一分号。
1972年至1973年间,贝尔实验室的D.M.Ritchie 在B语言的基础 上设计出了C语言(取BCPL的第二个字母)。C语言既保持了
BCPL和B语言的优点(精练,接近硬件),又克服了它们的缺
点(过于简单,数据无类型等)。最初的C语言只是为描述和 实现UNIX操作系统提供一种工作语言而设计的。1973年, K.Thompson和D.M.Ritchie两人合作把UNIX的90%以上用C 改写,即UNIX第5版。原来的UNIX 操作系统是1969年由美
(6) C语言能进行位(bit)操作,能实现汇编语言的大 部分功能,可以直接对硬件进行操作。因此C既 具有高级语言的功能,又具有低级语言的许多功 能,可用来写系统软件。C语言的这种双重性, 使它既是成功的系统描述语言,又是通用的程序 设计语言。 有人把C称为“高级语言中的低级语言” 或“中级 语言”,意为兼有高级和低级语言的特点。按此 观点可将各语言分类如下:
再回顾一下,就会有比较深的体会。我们从应用的角度出 发对C语言和其他传统的高级语言作一简单比较。
从掌握语言的难易程度来看,C语言比其他语言难一些。
BASIC是初学者入门的较好的语言,FORTRAN也比较 好掌握。对科学计算多用FORTRAN或PL/Ⅰ;对商业和管 理等数据处理领域,用COBOL为宜。C语言虽然也可用 于科学计算和管理领域,但并不理想,C的特长不在这里。 对操作系统和系统实用程序以及需要对硬件进行操作的 场合,用C语言明显地优越于其他高级语言,有的大型应 用软件也用C语言编写。从教学角度,由于PASCAL是世 界上第一个结构化语言,而曾被认为是计算机专业的比 较理想的教学语言。目前在数据结构等课程中一般用 PASCAL语言举例。但PASCAL语言难以推广到各实际 应用领域,
1990年,国际标准化组织ISO(International Standard Organization) 接受87 ANSI C为ISO C 的标准(ISO 9899—
1990)。目前流行的C编译系统都是以它为基础的。本书的
叙述基本上以ANSI C 为基础。目前广泛流行的各种版本 C语言编译系统虽然基本部分是相同的,但也有一些不同。 在微型机上使用的有Microsoft C、 Turbo C、 Quick C、 BORLAND C等,它们的不同版本又略有差异。因此,读
Ken Thompson 以BCPL语言为基础, 又做了进 一步简化, 设计出了很简单的而且很接近硬件的 B语言 (取BCPL的第一个字母), 并用B语言写了 第一个UNIX操作系统,在PDP7上实现。1971 年在PDP11/20上实现了B语言,并写了UNIX 操作系统。但B语言过于简单,功能有限。
到目前为止基本上只是教学语言。C语言也是理想的结构 化语言, 且描述能力强, 同样适于教学。 操作系统课程 多结合UNIX讲解,而UNIX与C不可分,因此,C语言已 经成为被广泛使用的教学语言。C除了能用于教学外,还
有广泛的应用领域,因此更有生命力。PASCAL和其他
高级语言的设计目标是通过严格的语法定义和检查来保 证程序的正确性,而C则是强调灵活性,使程序设计人员
UNIX操作系统迅速地在各种机器上实现。例如VAX、
AT&T等计算机系统都相继开发了UNIX。随着UNIX的日 益广泛使用,C语言也迅速得到推广。C语言和UNIX可以
说是一对孪生兄弟,在发展过程中相辅相成。1978年以后,
C语言已先后移植到大、中、小、微型机上,已独立于 UNIX和PDP了。现在C语言已风靡全世界,成为世界上
国的贝尔实验室的K.Thompson和D.M.Ritchie开发成功的,
是用汇编语言写的。
后来,C语言多次做了改进,但主要还是在贝尔实验室内部 使用。直到1975年UNIX第6版公布后,C语言的突出优点 才引起人们的普遍注意。1977年出现了不依赖于具体机器 的C语言编译文本《可移植C语言编译程序》,使C移植 到其他机器时所需做的工作大大简化了,这也推动了
准C。1983年,美国国家标准化协会(ANSI)根据C语言问 世以来各种版本对C的发展和扩充,制定了新的标准,称 为ANSI C。 ANSI C比原来的标准C有了很大的发展。K & R在1988年修改了他们的经典著作《The C Programming Language》,按照 ANSI C 标准重新写了 该书。1987年,ANSI又公布了新标准——87 ANSIC。
579 例1.3 main ( )/* 主函数*/ { int a, b, c; /*声明部分,定义变量*/
scanf ("%d,%d",&a,&b);
/*输入变量a和b的值*/
c=max (a,b); /*调用max函数,将得到的值赋给c*/ printf ("max=%d",c); /*输出c的值*/ } int max(int x,int y) /* 定义max函数,函数值为整 型, 形式参数x,y为整型*/ {int z; /* max函数中的声明部分,定义本函数中用 到的变量z为整型*/ if (x>y) z=x; else z=y; return (z); /*将z的值返回,通过max带回调用处*/ }
(5) 语法限制不太严格,程序设计自由度大。例如对数 组下标越界不做检查,由程序编写者自己保证程序的 正确。对变量的类型使用比较灵活,例如整型数据与 字符型数据可以通用。一般的高级语言语法检查比较 严,能检查出几乎所有的语法错误。而C语言允许程 序编写者有较大的自由度,因此,放宽了语法检查。 程序员应当仔细检查程序,保证其正确,而不要过分 依赖C编译程序去查错。“限制”与“灵活”是一对 矛盾。限制严格,就失去灵活性;而强调灵活,就必然 放松限制。一个不熟练的编程人员,编一个正确的C 程序可能会比编一个其他高级语言程序难一些。也就ห้องสมุดไป่ตู้是说,对用C语言的人,要求对程序设计更熟练一些。
1972年至1973年间,贝尔实验室的D.M.Ritchie 在B语言的 基础上设计出了C语言(取BCPL的第二个字母)。C语言既 保持了BCPL和B语言的优点(精练,接近硬件),又克服了 它们的缺点(过于简单,数据无类型等)。最初的C语言只
是为描述和实现UNIX操作系统提供一种工作语言而设计
的。1973年,K.Thompson和D.M.Ritchie两人合作把 UNIX的90%以上用C改写,即UNIX第5版。原来的UNIX 操作系统是1969年由美国的贝尔实验室的K.Thompson和 D.M.Ritchie开发成功的,是用汇编语言写的。
者应了解所用的计算机系统所配置的C编译系统的特点和
规定 (可以参阅有关手册)。
1.2 C语言的特点
一种语言之所以能存在和发展,并具有生命力,总是有其不 同于(或优于)其他语言的特点。C语言的主要特点如下。 (1) 语言简洁、紧凑,使用方便、灵活。C语言一共只有32 个关键字,9种控制语句,程序书写形式自由,主要用小写 字母表示,压缩了一切不必要的成分。下面将C与 PASCAL语言做一比较。 (2) 运算符丰富。C的运算符包含的范围很广泛,共有34种 运算符。C把括号、赋值、强制类型转换等都作为运算符 处理,从而使C的运算类型极其丰富,表达式类型多样化。 灵活使用各种运算符可以实现在其他高级语言中难以实现 的运算。