饭饭TXT > 学习管理 > 《C语言程序设计》作者:谭浩强【完结】 > 【书香门第】C语言程序设计.txt

第 2 页

作者:谭浩强 当前章节:15299 字 更新时间:2026-6-23 04:45

? Warning stop after多少个警告错误时停止编译, 默认为100个。

? Display warning

? Portability warning移植性警告错误。

? ANSI Violations侵犯了ANSI关键字的警告错误。

? Common error常见的警告错误。

? Less common error少见的警告错误。

7) Names :用于改变段(segment)、组(group) 和类(class)的名字,默认值为CODE, DATA, BSS。

2. Linker:本菜单设置有关连接的选择项, 它有以下内容,如图所示:

1) Map file menu 选择是否产生.MAP文件。

2) Initialize segments是否在连接时初始化没有初始化的段。

3) Devault libraries是否在连接其它编译程序产生的目标文件时去寻找其缺省库。

4) Graphics library 是否连接graphics库中的函数。

5) Warn duplicate symbols当有重复符号时产生警告信息。

6) Stack warinig是否让连接程序产生No stack的警告信息。

7) Case-sensitive link是否区分大、小写字。

3. Environment:菜单规定是否对某些文件自动存盘及制表键和屏幕大小的设置,它有以下内容,如图所示:

1) Message tracking:

? Current file 跟踪在编辑窗口中的文件错误。

? All files跟踪所有文件错误。

? Off 不跟踪。

2) Keep message :编译前是否清除Message窗口中的信息。

3) Config auto save:选on时, 在Run, Shell或退出集成开发环境之前,如果Turbo C 2.0的配置被改过, 则所做的改动将存入配置文件中。选off时不存。

4) Edit auto save:是否在Run或Shell之前, 自动存储编辑的源文件。

5) Backup file:是否在源文件存盘时产生后备文件(.BAK文件)。

6) Tab size:设置制表键大小, 默认为8。

7) Zoomed windows:将现行活动窗口放大到整个屏幕, 其热键为F5。

8) Screen size设置屏幕文本大小。

4. Directories:规定编译、连接所需文件的路径, 有下列各项,如图所示:

(1) Include directories:包含文件的路径, 多个子目录用";"分开。

(2) Library directories:库文件路径, 多个子目录用";"分开。

(3) Output directoried:输出文件(.OBJ, .EXE, .MAP文件)的目录。

(4) Turbo C directoried:Turbo C 所在的目录。

(5) Pick file name:定义加载的pick文件名, 如不定义则从currentpick file中取。

5. Arguments:允许用户使用命令行参数。

6. Save options:保存所有选择的编译、连接、调试和项目到配置文件中, 缺省的配置文件为TCCONFIG.TC。

7. Retrive options装入一个配置文件到TC中, TC将使用该文件的选择项。

1.13.9 Debug菜单

按Alt+D可选择Debug菜单, 该菜单主要用于查错, 它包括以下内容,如图所示:

1. Evaluate

1) Expression要计算结果的表达式。

2) Result显示表达式的计算结果。

3) New value赋给新值。

2. Call stack:该项不可接触。而在Turbo C debuger 时用于检查堆栈情况。

3. Find function在运行Turbo C debugger时用于显示规定的函数。

4. Refresh display如果编辑窗口偶然被用户窗口重写了可用此恢复编辑窗口的内容。

1.13.10 Break/watch菜单

按Alt+B可进入Break/watch菜单, 该菜单有以下内容,如图所示:

1. Add watch: 向监视窗口插入一监视表达式。

2. Delete watch:从监视窗口中删除当前的监视表达式。

3. Edit watch:在监视窗口中编辑一个监视表达式。

4. Remove all :watches从监视窗口中删除所有的监视表达式。

5. Toggle breakpoint:对光标所在的行设置或清除断点。

6. Clear all breakpoints:清除所有断点。

7. View next breakpoint:将光标移动到下一个断点处。

1.13.11 Turbo C 2.0的配置文件

所谓配置文件是包含Turbo C 2.0有关信息的文件, 其中存有编译、连接的选择和路径等信息。可以用下述方法建立Turbo C 2.0的配置:

1. 建立用户自命名的配置文件:可以从Options菜单中选择Options/Save options命令, 将当前集成开发环境的所有配置存入一个由用户命名的配置文件中。下次启动TC时只要在DOS下键入:

tc/c<用户命名的配置文件名>

就会按这个配置文件中的内容作为Turbo C 2.0的选择。

2. 若设置Options/Environment/Config auto save 为on, 则退出集成开发环境时, 当前的设置会自动存放到Turbo C 2.0配置文件TCCONFIG.TC中。Turbo C 在启动时会自动寻找这个配置文件。

3. 用TCINST设置Turbo C的有关配置, 并将结果存入TC.EXE中。Turbo C 在启动时, 若没有找到配置文件, 则取TC.EXE中的缺省值。

c语言 2

2 程序的灵魂—算法

2.1 算法的概念

2.2 简单算法举例

2.3 算法的特性

2.4 怎样表示一个算法

2.4.1 用自然语言表示算法

2.4.2 用流程图表示算法

2.4.3 三种基本结构和改进的流程图

2.4.4 用N-S流程图表示算法

2.4.5 用伪代码表示算法

2.4.6 用计算机语言表示算法

2.5 结构化程序设计方法

2 程序的灵魂—算法

一个程序应包括:

? 对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构(data structure)。

? 对操作的描述。即操作步骤,也就是算法(algorithm)。

Nikiklaus Wirth提出的公式:

数据结构+算法=程序

教材认为:

程序=算法+数据结构+程序设计方法+语言工具和环境

这4个方面是一个程序涉及人员所应具备的知识。

本课程的目的是使同学知道怎样编写一个C程序,进行编写程序的初步训练,因此,只介绍算法的初步知识。

2.1 算法的概念

做任何事情都有一定的步骤。为解决一个问题而采取的方法和步骤,就称为算法。

? 计算机算法:计算机能够执行的算法。

? 计算机算法可分为两大类:

? 数值运算算法:求解数值;

? 非数值运算算法:事务管理领域。

2.2 简单算法举例

【例2.1】求1×2×3×4×5。

最原始方法:

步骤1:先求1×2,得到结果2。

步骤2:将步骤1得到的乘积2乘以3,得到结果6。

步骤3:将6再乘以4,得24。

步骤4:将24再乘以5,得120。

这样的算法虽然正确,但太繁。

改进的算法:

S1: 使t=1

S2: 使i=2

S3: 使t×i, 乘积仍然放在在变量t中,可表示为t×i→t

S4: 使i的值+1,即i+1→i

S5: 如果i≤5, 返回重新执行步骤S3以及其后的S4和S5;否则,算法结束。

如果计算100!只需将S5:若i≤5改成i≤100即可。

如果该求1×3×5×7×9×11,算法也只需做很少的改动:

S1: 1→t

S2: 3→i

S3: t×i→t

S4: i+2→t

S5:若i≤11, 返回S3,否则,结束。

该算法不仅正确,而且是计算机较好的算法,因为计算机是高速运算的自动机器,实现循环轻而易举。

思考:若将 S5写成:S5:若i<11, 返回S3;否则,结束。

【例2.2】有50个学生,要求将他们之中成绩在80分以上者打印出来。

如果,n表示学生学号,ni表示第个学生学号;g表示学生成绩,gi表示第个学生成绩;

则算法可表示如下:

S1: 1→i

S2: 如果gi≥80,则打印ni和gi,否则不打印

S3: i+1→i

S4:若i≤50, 返回S2,否则,结束。

【例2.3】判定2000 — 2500年中的每一年是否闰年,将结果输出。

润年的条件:

1) 能被4整除,但不能被100整除的年份;

2) 能被100整除,又能被400整除的年份;

设y为被检测的年份,则算法可表示如下:

S1: 2000→y

S2:若y不能被4整除,则输出y“不是闰年”,然后转到S6

S3:若y能被4整除,不能被100整除,则输出y“是闰年”,然后转到S6

S4:若y能被100整除,又能被400整除,输出y“是闰年” 否则输出y“不是闰年”,然后转到S6

S5:输出y“不是闰年”。

S6:y+1→y

S7:当y≤2500时, 返回S2继续执行,否则,结束。

【例2.4】求 。

算法可表示如下:

S1: sigh=1

S2: sum=1

S3: deno=2

S4: sigh=(-1)×sigh

S5: term= sigh×(1/deno )

S6: term=sum+term

S7: deno= deno +1

S8:若deno≤100,返回S4;否则,结束。

【例2.5】对一个大于或等于3的正整数,判断它是不是一个素数。

算法可表示如下:

S1: 输入n的值

S2: i=2

S3: n被i除,得余数r

S4:如果r=0,表示n能被i整除,则打印n“不是素数”,算法结束;否则执行S5

S5: i+1→i

S6:如果i≤n-1,返回S3;否则打印n“是素数”;然后算法结束。

改进:

S6:如果i≤ ,返回S3;否则打印n“是素数”;然后算法结束。

2.3 算法的特性

? 有穷性:一个算法应包含有限的操作步骤而不能是无限的。

? 确定性:算法中每一个步骤应当是确定的,而不能应当是含糊的、模棱两可的。

? 有零个或多个输入。

? 有一个或多个输出。

? 有效性:算法中每一个步骤应当能有效地执行,并得到确定的结果。

对于程序设计人员,必须会设计算法,并根据算法写出程序。

2.4 怎样表示一个算法

2.4.1 用自然语言表示算法

除了很简单的问题,一般不用自然语言表示算法。

2.4.2 用流程图表示算法

流程图表示算法,直观形象,易于理解。

【例2.6】将例2.1求5!的算用流程图表示。

【例2.7】将例2.2的算用流程图表示。

【例2.8】将例2.3判定闰年的算用流程图表示。

【例2.9】将例2.4求 的算用流程图表示。

一个流程图包括:

1. 表示相应操作的框;

2. 带箭头的流程线;

3. 框内外必要的文字说明。

2.4.3 三种基本结构和改进的流程图

1. 顺序结构:

2. 选择结构:

3. 循环结构

三种基本结构的共同特点:

? 只有一个入口;

? 只有一个出口;

? 结构内的每一部分都有机会被执行到;

? 结构内不存在“死循环”。

2.4.4 用N-S流程图表示算法

1973年美国学者提出了一种新型流程图:N-S流程图。

顺序结构:

选择结构:

循环结构:

2.4.5 用伪代码表示算法

伪代码使用介于自然语言和计算机语言之间的文字和符号来描述算法。

2.4.6 用计算机语言表示算法

? 我们的任务是用计算机解题,就是用计算机实现算法;

? 用计算机语言表示算法必须严格遵循所用语言的语法规则。

【例2.20】求1×2×3×4×5用C语言表示。

main()

{int i,t;

t=1;

i=2;

while(i<=5)

{t=t*i;

i=i+1;

}

printf(“%d”,t);

}

【例2.21】求级数的值。

main()

{

int sigh=1;

floatdeno=2.0,sum=1.0,term;

while(deno<=100)

{ sigh= -sigh;

term= sigh/ deno;

sum=sum+term;

deno=deno+1;

}

printf(“%f”,sum);

}

2.5 结构化程序设计方法

自顶向下;

逐步细化;

模块化设计;

结构化编码。

谭浩强c语言 3

3 数据类型、运算符与表达式

3.1 C语言的数据类型

3.2 常量与变量

3.2.1 常量和符号常量

3.2.2 变量

3.3 整型数据

3.3.1 整型常量的表示方法

3.3.2 整型变量

3.4 实型数据

3.4.1 实型常量的表示方法

3.4.2 实型变量

3.4.3 实型常数的类型

3.5 字符型数据

3.5.1 字符常量

3.5.2 转义字符

3.5.3 字符变量

3.5.4 字符数据在内存中的存储形式及使用方法

3.5.5 字符串常量

3.5.6 符号常量

3.6 变量赋初值

3.7 各类数值型数据之间的混合运算

3.8 算术运算符和算术表达式

3.8.1 C运算符简介

3.8.2 算术运算符和算术表达式

3.9 赋值运算符和赋值表达式

3.10 逗号运算符和逗号表达式

3.11 小结

3.11.1 C的数据类型

3.11.2 基本类型的分类及特点

3.11.3 常量后缀

3.11.4 常量类型

3.11.5 数据类型转换

3.11.6 运算符优先级和结合性

3.11.7 表达式

3 数据类型、运算符与表达式

3.1 C语言的数据类型

在第一章中,我们已经看到程序中使用的各种变量都应预先加以定义,即先定义,后使用。对变量的定义可以包括三个方面:

?数据类型

?存储类型

?作用域

在本章中,我们只介绍数据类型的说明。其它说明在以后各章中陆续介绍。所谓数据类型是按被定义变量的性质,表示形式,占据存储空间的多少,构造特点来划分的。在C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。

1. 基本数据类型:基本数据类型最主要的特点是,其值不可以再分解为其它类型。也就是说,基本数据类型是自我说明的。

2. 构造数据类型:构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造类型的值可以分解成若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或又是一个构造类型。在C语言中,构造类型有以下几种:

?数组类型

?结构体类型

?共用体(联合)类型

3. 指针类型:指针是一种特殊的,同时又是具有重要作用的数据类型。其值用来表示某个变量在内存储器中的地址。虽然指针变量的取值类似于整型量,但这是两个类型完全不同的量,因此不能混为一谈。

4. 空类型:在调用函数值时,通常应向调用者返回一个函数值。这个返回的函数值是具有一定的数据类型的,应在函数定义及函数说明中给以说明,例如在例题中给出的max函数定义中,函数头为:int max(int a,int b);其中“int ”类型说明符即表示该函数的返回值为整型量。又如在例题中,使用了库函数sin,由于系统规定其函数返回值为双精度浮点型,因此在赋值语句s=sin (x);中,s 也必须是双精度浮点型,以便与sin函数的返回值一致。所以在说明部分,把s说明为双精度浮点型。但是,也有一类函数,调用后并不需要向调用者返回函数值,这种函数可以定义为“空类型”。其类型说明符为void。在后面函数中还要详细介绍。

在本章中,我们先介绍基本数据类型中的整型、浮点型和字符型。其余类型在以后各章中陆续介绍。

3.2 常量与变量

对于基本数据类型量,按其取值是否可改变又分为常量和变量两种。在程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量。它们可与数据类型结合起来分类。例如,可分为整型常量、整型变量、浮点常量、浮点变量、字符常量、字符变量、枚举常量、枚举变量。在程序中,常量是可以不经说明而直接引用的,而变量则必须先定义后使用。

整型量包括整型常量、整型变量。

3.2.1 常量和符号常量

在程序执行过程中,其值不发生改变的量称为常量。

? 直接常量(字面常量):

? 整型常量:12、0、-3;

? 实型常量:4.6、-1.23;

? 字符常量:‘a’、‘b’。

? 标识符:用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。

? 符号常量:用标示符代表一个常量。在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。

符号常量在使用之前必须先定义,其一般形式为:

#define 标识符 常量

其中#define也是一条预处理命令(预处理命令都以"#"开头),称为宏定义命令(在后面预处理程序中将进一步介绍),其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。

? 习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。

【例3.1】符号常量的使用。

#define PRICE 30

main()

{

int num,total;

num=10;

total=num* PRICE;

printf(“total=%d”,total);

}

? 用标识符代表一个常量,称为符号常量。

? 符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。

? 使用符号常量的好处是:

? 含义清楚;

? 能做到“一改全改”。

3.2.2 变量

其值可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储单元。变量定义必须放在变量使用之前。一般放在函数体的开头部分。要区分变量名和变量值是两个不同的概念。

3.3 整型数据

3.3.1 整型常量的表示方法

整型常量就是整常数。在C语言中,使用的整常数有八进制、十六进制和十进制三种。

1) 十进制整常数:十进制整常数没有前缀。其数码为0~9。

以下各数是合法的十进制整常数:

237、-568、65535、1627;

以下各数不是合法的十进制整常数:

023 (不能有前导0)、23D (含有非十进制数码)。

在程序中是根据前缀来区分各种进制数的。因此在书写常数时不要把前缀弄错造成结果不正确。

2) 八进制整常数:八进制整常数必须以0开头,即以0作为八进制数的前缀。数码取值为0~7。八进制数通常是无符号数。

以下各数是合法的八进制数:

015(十进制为13)、0101(十进制为65)、0177777(十进制为65535);

以下各数不是合法的八进制数:

256(无前缀0)、03A2(包含了非八进制数码)、-0127(出现了负号)。

3) 十六进制整常数:十六进制整常数的前缀为0X或0x。其数码取值为0~9,A~F或a~f。

以下各数是合法的十六进制整常数:

0X2A(十进制为42)、0XA0 (十进制为160)、0XFFFF (十进制为65535);

以下各数不是合法的十六进制整常数:

5A (无前缀0X)、0X3H (含有非十六进制数码)。

4) 整型常数的后缀:在16位字长的机器上,基本整型的长度也为16位,因此表示的数的范围也是有限定的。十进制无符号整常数的范围为0~65535,有符号数为-32768~+32767。八进制无符号数的表示范围为0~0177777。十六进制无符号数的表示范围为0X0~0XFFFF或0x0~0xFFFF。如果使用的数超过了上述范围,就必须用长整型数来表示。长整型数是用后缀“L”或“l”来表示的。

例如:

十进制长整常数:

158L (十进制为158)、358000L (十进制为358000);

八进制长整常数:

012L (十进制为10)、077L (十进制为63)、0200000L (十进制为65536);

十六进制长整常数:

0X15L (十进制为21)、0XA5L (十进制为165)、0X10000L (十进制为65536)。

长整数158L和基本整常数158 在数值上并无区别。但对158L,因为是长整型量,C编译系统将为它分配4个字节存储空间。而对158,因为是基本整型,只分配2 个字节的存储空间。因此在运算和输出格式上要予以注意,避免出错。

无符号数也可用后缀表示,整型常数的无符号数的后缀为“U”或“u”。

例如:

358u,0x38Au,235Lu均为无符号数。

前缀,后缀可同时使用以表示各种类型的数。如0XA5Lu表示十六进制无符号长整数A5,其十进制为165。

3.3.2 整型变量

1. 整型数据在内存中的存放形式

如果定义了一个整型变量i:

int i;

i=10;

i 10

0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0

数值是以补码表示的:

? 正数的补码和原码相同;

? 负数的补码:将该数的绝对值的二进制形式按位取反再加1。

例如:

求-10的补码:

10的原码:

0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0

取反:

1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1

再加1,得-10的补码:

1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0

由此可知,左面的第一位是表示符号的。

2. 整型变量的分类

1) 基本型:类型说明符为int,在内存中占2个字节。

2) 短整量:类型说明符为short int或short。所占字节和取值范围均与基本型相同。

3) 长整型:类型说明符为long int或long,在内存中占4个字节。

4) 无符号型:类型说明符为unsigned。

无符号型又可与上述三种类型匹配而构成:

? 无符号基本型:类型说明符为unsigned int或unsigned。

? 无符号短整型:类型说明符为unsigned short。

? 无符号长整型:类型说明符为unsigned long。

各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同。但由于省去了符号位,故不能表示负数。

有符号整型变量:最大表示32767

0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

无符号整型变量:最大表示65535

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

下表列出了Turbo C中各类整型量所分配的内存字节数及数的表示范围。

类型说明符 数的范围 字节数

int -32768~32767 即-215~(215-1) 2

unsigned int 0~65535 即0~(216-1) 2

short int -32768~32767 即-215~(215-1) 2

unsigned short int 0~65535 即0~(216-1) 2

long int -2147483648~2147483647即-231~(231-1) 4

unsigned long 0~4294967295 即0~(232-1) 4

以13为例:

int型:

00 00 00 00 00 00 11 01

short int型:

00 00 00 00 00 00 11 01

long int型:

00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 01

unsigned int型:

00 00 00 00 00 00 11 01

unsigned short int型:

00 00 00 00 00 00 11 01

unsigned long int型:

00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 01

3. 整型变量的定义

变量定义的一般形式为:

类型说明符 变量名标识符,变量名标识符,...;

例如:

int a,b,c; (a,b,c为整型变量)

long x,y; (x,y为长整型变量)

unsigned p,q; (p,q为无符号整型变量)

在书写变量定义时,应注意以下几点:

? 允许在一个类型说明符后,定义多个相同类型的变量。各变量名之间用逗号间隔。类型说明符与变量名之间至少用一个空格间隔。

? 最后一个变量名之后必须以“;”号结尾。

? 变量定义必须放在变量使用之前。一般放在函数体的开头部分。

【例3.2】整型变量的定义与使用。

main()

{

int a,b,c,d;

unsigned u;

a=12;b=-24;u=10;

c=a+u;d=b+u;

printf(“a+u=%d,b+u=%d\n”,c,d);

}

4. 整型数据的溢出

【例3.3】整型数据的溢出。

main()

{

int a,b;

a=32767;

b=a+1;

printf("%d,%d\n",a,b);

}

32767:

0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

-32768

1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

【例3.4】

main(){

long x,y;

int a,b,c,d;

x=5;

y=6;

a=7;

b=8;

c=x+a;

d=y+b;

printf("c=x+a=%d,d=y+b=%d\n",c,d);

}

从程序中可以看到:x, y是长整型变量,a, b是基本整型变量。它们之间允许进行运算,运算结果为长整型。但c,d被定义为基本整型,因此最后结果为基本整型。本例说明,不同类型的量可以参与运算并相互赋值。其中的类型转换是由编译系统自动完成的。有关类型转换的规则将在以后介绍。

目录
设置
设置
阅读主题
字体风格
雅黑 宋体 楷书 卡通
字体大小
适中 偏大 超大
保存设置
恢复默认
手机
手机阅读
扫码获取链接,使用浏览器打开
书架同步,随时随地,手机阅读
首 页 < 上一章 章节列表 下一章 > 尾 页