最近很多朋友喜欢上设计,但是大家却不知道如何去做,别担心有给你解答,史上最全最棒的详细解说让你一看就懂。
本文是TC的第一部分,主要介绍一些TC相关的基础知识,并着重针对循环、变量等TC基本概念中的易混的淆部分加以辨析,即是一份编程初学者的指南,也可算作是对《C how to program》的一些补充。 在正式进入编程部分之前,让我们先详细了解一下Turbo C的编译环境,以便在编程时可以更加得心应手。
File菜单
Pick--快速读取最近的9个文件。(真的是很方便的功能,特别是在DOS时代 ^-^)
Write to--把文件内容换名存盘,支持DOS通配符。(相当于现在的Save as...)
OS shell--暂时离开Turbo C回到DOS环境执行DOS命令,输入命令EXIT即可回到Turbo C.(DOS时代的DOS窗口?)
Run菜单
Program reset--清楚内存中的调试信息,释放内存空间。(中断点和变量信息不会被清除)
Go to cursor--运行程序到光标所在位置。
Trace into--以单步方式执行当前程序,当前执行行会以高亮显示。(此操作可进入被调用函数)
Step over--功能同Trace into,但不会进入被调用函数。
Compile菜单
Make EXE file--编译、连接程序,生成可执行文件。
Link EXE file--只连接不编译程序,生成可执行文件。(需要有目标程序即.OBJ文件)
Build all--重新编译项目里的所有文件(见project菜单部分),但不进行过时检查。(即如果源文件的日期比目标文件日期更早,则不对源文件进行编译)
Project菜单
Project name--选择一个包含待编译源文件名的项目文件。(读者如果给这部分内容比较困惑,可以把问题贴到放飞网的论坛上,将由本人或其它放飞网技术人员给予解答)
Auto dependencies--如果将开关打开,编译时将检查源文件与对应的.OBJ文件日期和时间,如时间不同则重新进行编译。
Options菜单
请参见本站lzc、小壮的《Turbo C 2.0 设置详解》,这里不再赘述。
Debug菜单
Evaluate--当程序运行时,这个命令可以查看并修改内存中的变量和其它一些类似的项目。
Call stack--程序运行时用于检查堆栈情况。
Find function--程序运行时用来显示指定的函数。
Refresh display--如果编辑窗口偶然被用户窗口重写了,可用此命令恢复编辑窗口的内容。
Display swapping--用于控制编辑窗口和用户窗口的交换条件,有smart, always, none三种模式。
Break/watch菜单
用来控制断点及监视表达式
看完上面的简介,相信你已经对TC的功能感到惊讶了,想当初在十几年以前的DOS时代,能够拥有一个功能如此强大的编译器可是众多程序员梦寐以求的事情呢。所以现在的同学大可不必嫌弃TC界面简陋,功能有限,着急去碰什么VC,还是先静下心来,把TC学好吧。
对TC有了进一步的了解之后,下面让我们进入C语言本身的部分。
了解了执行过程,现在让我们来说说语句。语句是组成程序的基本单位,它能完成特定的操作,语句的有机组合序列能实现指定的计算处理功能。比较难于掌握的是流程控制语句,下面我们就对流程控制语句中易混淆的部分进行一下说明。
选择语句(If和Switch)
一般情况下,用if语句实现简单分支结构程序,用switch和break实现多分支结构程序。虽然用嵌套if语句也能实现多分支结构程序,但用switch和break实现的多分支结构程序更简洁明了,这一点初学者应当多加注意。还应注意的是由于表达式的值非0为真,0为假,所以具有值的表达式也可做为if语句的控制条件。
循环语句(for、while和do-while)
首先,读者应了解一点,一般用某种循环语句写的程序段,也能用另外两种循环语句实现。当然,在实际应用中,for语句多用于循环次数明确的问题,而无法确定循环次数的问题采用while语句或do-while语句比较自然。读者还应注意掌握for语句三个表达式的多种变化,例如省略部分表达式或全部表达式,甚至把循环体也写入表达式当中,而循环体本身成为了空语句,以满足循环语句的语法要求。
转移语句(break、continue、return、goto)
对于break和continue,这里提醒读者一下break除了用在switch语句中外,还常被用在循环语句中强制结束循环,而continue则只用于跳过某次循坏。如果某个switch语句存在于循环之中,而switch中又包含了continue语句,则这个continue将跳过整次循环,而非switch中的某个case。return语句请详见函数部分。goto语句可以方便的在程序的执行流程中进行跳转,但goto语句会搅乱程序的流程,降低程序的可读性,在结构化的程序设计之中,不提倡使用goto语句,ANSI C的作者曾说;Formally, the goto is never necessary, and in practice it is almost always easy to write code without it.所以在这里就不对goto语句做更多地介绍了。如果实在想玩一玩的话,就用它来退出深层嵌套吧,例如:
for (...)
for (...){
...
if (disaster)
goto error;
}
...
error: ...
最后,让我们来讨论一下变量,变量是对程序中数据所占用内存空间的一种抽象。我们先来了解一下变量的类型。
ANSI标准规定整形变量属性表
数据类型
占用字节数
二进制位
取值范围
int
2
16
-32768--32767
short[int]
2
16
-32768--32767
long[int]
4
32
-2147483648--2147483647
unsigned[int]
2
16
0--65535
unsigned long[int]
4
32
0--4294967295
实数基本类型表
实数类型
存储字节数
最小数值范围
有效位
float
4
10^-38--10^38
6-7
double
8
10^-308--10^308
15-16
long double
16
10^-4932--10^4932
18-19
在C中,我们还可以设置变量的存储属性,已确定变量的存储位置,C中定义了4种存储属性:auto register extern和static 。
TC中默认的是auto型,作用域为当前函数,在函数结束时存储空间被释放。
register型变量直接存于CPU的寄存器中,其特点是大大加快了运算速度,register变量只能是int型或char型,且存在个数限制(TC中为2个),因此register型变量多用来充当计数器变量使用。由于变量储存在寄存器中,所以无法对其进行地址操作,例如无法使用取地址运算符"&"求register变量的地址。顺便提一下,TC会自动把访问频繁的变量存入寄存器中(需将相关选项设为on)。
external型变量必须定义在所有函数的外部,为变量开辟存储空间。在函数中如果要访问这个变量,需要用extern进行声明。当然,如果external型变量定义在函数调用之前,extern可以省略。由于extern变量可以方便的随时调用,所以有人趋向于把大多数变量定义为extern型变量,但是extern变量总是存在于内存之中,不仅占用了大量的存储空间,而且变量数值容易在无意中被改变,引起不可预见性的错误,且使程序难于修改。
对于一些初学者来说,static变量可能比较难于理解,这里举个例子来说明static与auto的区别。例如定义变量a分别为static型和auto型,且设其值为1。"int x=1;"的含义是对变量赋初值,等价于下列两个语句"int x; x=1;",而"static int x=1;"的含义是说明一个static型变量并对其进行初始化,初始化是在程序执行之前,由编译程序一次性为变量赋的初值"x=1",而在实际运行时不再对变量进行赋值操作。
为了便于理解,特对四种存储变量总结如下:
四种存储变量的特征
性能
auto
extern
static
register
外部
内部
记忆能力
no
yes
yes
yes
no
多个函数共享
no
yes
yes
no
no
不同文件共享
no
yes
no
no
no
初始化赋值
random
0
0
0
random
作用域
当前函数
整个程序
当前文件
当前函数
当前函数
搞清楚了变量之后,对TC的基本介绍到此也算告一段落,如果您觉得本文确实为您学习TC提供了一些帮助的话,那么敬请您关注TC编程手册之二---函数和数组。
如果觉得《TC编程手册之一》对你有帮助,请点赞、收藏,并留下你的观点哦!