第一章 C语言概述.docx
- 文档编号:29804906
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:15
- 大小:41.18KB
第一章 C语言概述.docx
《第一章 C语言概述.docx》由会员分享,可在线阅读,更多相关《第一章 C语言概述.docx(15页珍藏版)》请在冰豆网上搜索。
第一章C语言概述
第一章C语言概述
1、1C语言出现的历史背景
1、C语言是国际上流行的、很有发展前途的计算机高级语言。
C语言适合于作为“系统描述语言”。
它既可以用来编写系统软件,也可以用来编写应用程序。
以前操作系统等系统软件主要采用汇编语言编写。
汇编语言依赖于计算机硬件,程序的可读性、可移植性都比较差。
为了提高可读性和可移植性,人们希望采用高级语言编写这些软件,但是一般的高级语言难以实现汇编语言的某些操作,特别是针对硬件的一些操作(如:
内存地址的读写-直接硬件、二进制位的操作)。
人们设法寻找一种既具有一般高级语言特性,又具有低级语言特性的语言,C语言就在这种情况下应运而生。
2、C语言的发展见下图:
ALGOL60->CPL->BCPC->B->C->标准C->ANSIC->ISOC
●ALGOL60:
一种面向问题的高级语言。
ALGOL60离硬件较远,不适合编写系统程序。
●CPL(CombinedProgramminglanguage,组合编程语言):
CPL是一种在ALGOL60基础上更接近硬件的一种语言。
CPL规模大,实现困难。
●BCPL(BasicCombinedProgramminglanguage,基本的组合编程语言):
BCPL是对CPL进行简化后的一种语言。
●B语言:
是对BCPL进一步简化所得到的一种很简单接近硬件的语言。
B语言取BCPL语言的第一个字母。
B语言精练、接近硬件,但过于简单,数据无类型。
B语言诞生后,Unix开始用B语言改写。
●C语言:
是在B语言基础上增加数据类型而设计出的一种语言。
C语言取BCPL的第二个字母。
C语言诞生后,Unix很快用C语言改写,并被移植到其它计算机系统。
●标准C、ANSIC、ISOC:
C语言的标准化。
注:
最初Unix操作系统是采用汇编语言编写的,B语言版本的Unix是第一个用高级语言编写的Unix。
在C语言诞生后,Unix很快用C语言改写,C语言良好的可移植性很快使Unix从PDP计算机移植到其它计算机平台,随着Unix的广泛应用,C语言也得到推广。
从此C语言和Unix像一对孪生兄弟,在发展中相辅相成,Unix和C很快风靡全球。
3、从C语言的发展历史可以看出,C语言是一种既具有一般高级语言特性(ALGOL60带来的高级语言特性),又具有低级语言特性(BCPL带来的接近硬件的低级语言特性)的程序设计语言。
C语言从一开始就是用于编写大型、复杂系统软件的,当然C语言也可以用来编写一般的应用程序。
也就是说:
C语言是程序员的语言!
IBMPC微机DOS、Windows平台上常见的C语言版本有:
●Borland公司:
TurboC,TurboC++,BorlandC++
C++Builder(Windows版本)
●Microsoft公司:
MicrosoftC
VisualC++(Windows版本)
1、2C语言的特点
C语言是从“组合编程语言”CPL发展而来,C语言既具有一般高级语言特性(ALGOL60带来的高级语言特性),又具有低级语言特性(BCPL带来的接近硬件的低级语言特性)。
C语言具有下面特点(其中1-6属于高级语言特性,7,8属于低级语言特性)
1、C语言的语言成分简洁,紧凑,书写形式自由
例:
将C语言程序段与实现同样功能的PASCAL语言程序段进行比较。
C语言
PASCAL语言
含义
说明
1
{…}
BEGIN…END
复合语句
(或:
语句块)
PASCAL显得罗嗦
2
if(e)S;
IF(e)THENS;
条件语句
PASCAL至少多了一个THEN关键词
3
inti;
VARi:
INTEGER
定义i为整型变量
PASCAL至少多了一个VAR关键词
4
inta[10];
VARa:
ARRAY[1..10]OFINTEGER
定义a为整型一维数组,10个元素
PASCAL多了VAR、ARRAY、OF等关键词
5
intf();
FUNCTIONf():
INTEGER
定义f为返回值为整型的函数
PASCAL至少多了一个FUNCTION关键词
6
int*p;
VARp:
^INTEGER
定义p为指向整型变量的指针变量
PASCAL至少多了一个VAR关键词
7
i+=2;
i:
=i+2
赋值语句
C中如果将一个变量与另外一个操作数运算后赋值给原来的变量,使用复合的运算符可以不要重复书写此变量。
C形式上更加简洁。
8
I++
I=I+1
I自增1
C定义了常用的自增1、自减1运算符。
形式上显得相当简洁
2、C语言拥有丰富的数据类型
C语言具有整型、实型、字符型、数组类型、指针类型、结构体类型、共同体类型等数据类型。
能方便地构造更加复杂的数据结构(如:
使用指针构造链表、树、栈)。
3、C语言的运算符丰富、功能更强大
例如:
(1)C语言具有复合的赋值运算符“+[-*/%]=”(加等、减等、乘等、除等),“>>=”“<<=”(右移等、左移等),“&[^|]=”(与等、或等、非等)。
x+=5等价于x=x+5
(2)C语言有条件运算符“?
:
”可代替简单的if/else语句。
如果需要表示:
“如果x小于或等于0,y为0;否则y为1”可以采用:
y=x<=0?
0:
1;
如果用一般的程序设计语言表示就应该像下面这样表示:
if(x<=0)y=0;
elsey=1;
C语言避免了一切可能的罗嗦,
(3)C语言中连赋值这种操作都定义为运算符,也就是说赋值操作本身可以作为表达式的一部分,参与运算。
如:
if((p=malloc(sizeof(int)))==NULL){printf(“Error!
”);exit
(1);}
如果改写为一般形式:
p=malloc(sizeof(int));
if(p==NULL){printf(“Error!
”);exit
(1);}
又如下面算式是正确的:
x=y=z=6;
如果改写为一般形式:
z=6;y=6;x=6;
4、C语言是结构化的程序设计语言
●C语言具有结构化的控制语句(if/else,switch/case,for,while,do…while)
●函数是C语言程序的模块单位。
5、C语言对语法限制不严格,程序设计灵活
C语言不检查数组下标越界,C语言不限制对各种数据转化(编译系统可能对不合适的转化进行警告,但不限制),不限制指针的使用,程序正确性由程序员保证。
实践中,C语言程序编译时会提示:
“警告错”“严重错误”。
警告错误表示你使用的语法可能有问题,但是你有时可以忽略,你的程序仍然可以完成编译工作,然后运行。
(但是一般情况下警告错,往往意味着程序真的有问题,你应该认真地检查)“严重错”是不能忽略的,编译系统发现严重错误,就不会产生目标代码。
灵活和安全是一对矛盾,对语法限制的不严格可能也是C语言的一个缺点,比如:
黑客可能使用越界的数组攻击你的计算机系统。
JAVA语言是优秀的网络应用程序开发语言,它必须保证安全性,它绝对不允许数组越界。
此外JAVA不使用指针,不能直接操作客户计算机上的文件,语法检查相当严格,程序正确性容易保证,但是JAVA在编程时却缺乏灵活。
6、C语言编写的程序具有良好的可移植性
编制的程序基本上不需要修改或只需要少量修改就可以移植到其它的计算机系统或其它的操作系统。
7、C语言可以实现汇编语言的大部分功能
●C语言可以直接操作计算机硬件如寄存器,各种外设I/O端口等。
●C语言的指针可以直接访问内存物理地址。
●C语言类似汇编语言的位操作可以方便地检查系统硬件的状态。
C语言适合编写系统软件。
8、C语言编译后生成的目标代码小,质量高,程序的执行效率高
有资料显示只比汇编代码效率低10%-20%。
1、3C语言基本语法成分
1、C语言字符集:
字符是C语言的最基本的元素,C语言字符集由字母、数字、空白、标点和特殊字符组成(在字符串常量和注释中还可以使用汉字等其它图形符号)。
由字符集中的字符可以构成C语言进一步的语法成分(如,标识符,关键词,运算符等)。
(1)字母:
A-Z,a-z
(2)数字:
0-9
(3)空白符:
空格,制表符(跳格),换行符(空行)的总称。
空白符除了在字符,字符串中有意义外,编译系统忽略其它位置的空白。
空白符在程序中只是起到间隔作用。
在程序的恰当位置使用空白将使程序更加清晰,增强程序的可读性。
(4)标点符号、特殊字符:
!
#
%
^
&
+
-
*
/
=
~
<
>
\
|
.
;
:
?
‘
“
(
)
[
]
{
}
2、标识符(名字):
用来标识变量名、符号常量名、函数名、数组名、类型名等实体(程序对象)的有效字符序列。
标识符由用户自定义(取名字)。
C语言标识符定义规则:
1)标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。
例如:
合法的标识符:
sum,average,_total,Class,day,stu_name,p4050
不合法的标识符:
M.D.John,$123,#33,3D64,a>b
2)大小写敏感。
C程序员习惯:
变量名小写,常量名大写,但不绝对,如windows编程,应当使用匈牙利表示法(大小写混用,每个单词词首第一个大写,其余小写,如WinMain)。
例如:
sum不同Sum。
BOOK不同book。
3)ANSIC没有限制标识符长度,但各个编译系统都有自己的规定和限制(TC32个字符,MSC8个字符)。
例如:
student_name,student_number如果取8个,这两个标识符是相同的。
4)标识符不能与“关键词”同名,也不与系统预先定义的“标准标识符”同名。
5)建议:
标识符命名应当有一定的意义,做到见名知义。
3、关键词(保留字):
C语言规定的具有特定意义的字符串。
参阅P234附录V。
4、运算符:
运算符将常量、变量、函数连接起来组成表达式,表示各种运算。
运算符可以由一个或多个字符组成。
参阅P233附录IV。
运算符根据参与运算的操作数的个数分为:
单目、双目、三目运算符。
5、分隔符:
逗号,空格。
起分隔、间隔作用。
6、注释符:
“/*”和“*/”构成一组注释符。
编译系统将/*...*/之间的所有内容看作为注释,编译时编译系统忽略注释。
●注释在程序中作用:
提示、解释作用。
注释与软件的文档同等重要,要养成使用注释的良好习惯,这对软件的维护相当重要。
记住:
程序是要给别人看的,自己也许还会看自己几年前编制的程序(相当别人看你的程序),清晰的注释有助于他人理解您的程序、算法的思路。
●在软件开发过程中,还可以将注释用于程序的调试-暂时屏蔽一些语句。
例如,在调式程序时暂时不需要运行某段语句,而你又不希望立即从程序中删除它们,可以使用注释符将这段程序框起来,暂时屏蔽这段程序,以后可以方便地恢复。
1、4C程序结构
1、4、1简单的C程序介绍
例1.1:
main()
{
printf(“ThisisaCprogram.\n”);
}
说明:
本程序的功能是输出一行信息:
ThisisaCprogram.
其中:
1、main表示“主函数”。
每个C语言程序都必须有一个main函数,它是每一个C语言程序的执行起始点(入口点)。
main()表示“主函数”main的函数头。
2、用{}括起来的是“主函数”main的函数体。
main函数中的所有操作(或:
语句)都在这一对{}之间。
也就是说main函数的所有操作都在main函数体中。
3、“主函数”main中只有一条语句,它是C语言的库函数,功能是用于程序的输出(显示在屏幕上),本例用于将一个字符串“ThisisaCprogram.\n”的内容输出。
即在屏幕上显示:
ThisisaCprogram.
_(回车/换行)
4、注意:
每条语句用“;”号结束语句。
例1.2:
main()/*计算两数之和*/
{
inta,b,sum;/*这是定义变量*/
a=123;b=456;/*以下3行为C语句*/
sum=a+b;
printf(“sum=%d\n”,sum);
}
说明:
本程序计算两数之和,并输出结果。
1、同样此程序也必须包含一个main函数作为程序执行的起点。
{}之间为main函数的函数体,main函数所有操作均在main函数体中。
2、/**/括起来的部分是一段注释,注释只是为了改善程序的可读性,在编译、运行时不起作用(事实上编译时会跳过注释,目标代码中不会包含注释)。
注释可以放在程序任何位置,并允许占用多行,只是需要注意“/*”、“*/”匹配,一般不要嵌套注释。
3、inta,b,sum;是变量声明。
声明了三个具有整数类型的变量a,b,sum。
C语言的变量必须先声明再使用。
4、a=123;b=456;是两条赋值语句。
将整数123赋给整型变量a,将整数456赋给整型变量b。
a,b两个变量分别为123,456。
注意这是两条赋值语句,每条语句均用“;”结束。
也可以将两条语句写成两行,即:
a=123;
b=456;
由此可见C语言程序的书写可以相当随意,但是为了保证容易阅读要遵循一定的规范。
5、sum=a+b;是将a,b两变量内容相加,然后将结果赋值给整型变量sum。
此时sum的内容为579。
6、printf(“sum=%d\n”,sum);是调用库函数输出sum的结果。
%d为格式控制表示sum的值以十进制整数形式输出。
程序运行后,输出(显示):
sum=579
_(回车/换行)
例1.3
main()/*主函数*/
{/*main函数体开始*/
inta,b,c;/*声明部分定义变量*/
scanf(“%d,%d”,&a,&b);
/*调用max,将调用结果赋给c*/
c=max(a,b);
printf(“max=%d”,c);
}/*main函数体结束*/
intmax(intx,inty)/*计算两数中较大的数*/
{/*max函数体开始*/
intz;/*声明部分,定义变量*/
if(x>y)z=x;
elsez=y;
returnz;/*将z值返回,通过max带回调用处*/
}/*max函数体结束*/
说明:
输入两个整数,计算两者较大的数,并输出。
1、本程序包括两个函数。
其中主函数main仍然是整个程序执行的起点。
函数max计算两数中较大的数。
2、主函数main调用scanf函数获得两个整数,存入a,b两个变量,然后调用函数max获得两个数字中较大的值,并赋给变量c。
最后输出变量c的值(结果)。
3、intmax(intx,inty)是函数max的函数头,函数max的函数头表明此函数获得两个整数,返回一个整数。
4、函数max同样也用{}将函数体括起来。
max的函数体是函数max的具体实现。
从参数表获得数据,处理后得到结果z,然后将z返回调用函数main。
5、本例还表明函数除了调用库函数外,还可以调用用户自己定义,编制的函数。
1、4、2C程序结构
综合上述三个例子,我们对C语言程序的基本组成和形式(程序结构)有了一个初步了解:
1、C程序由函数构成(C是函数式的语言,函数是C程序的基本单位)(以例1.3说明)
●一个C源程序至少包含一个main函数,也可以包含一个main函数和若干个其它函数。
函数是C程序的基本单位。
●被调用的函数可以是系统提供的库函数,也可以是用户根据需要自己编写设计的函数。
C是函数式的语言,程序的全部工作都是由各个函数完成。
编写C程序就是编写一个个函数。
●C函数库非常丰富,ANSIC提供100多个库函数,TurboC提供300多个库函数。
2、main函数(主函数)是每个程序执行的起始点(以例1.3说明)
一个C程序总是从main函数开始执行,而不论main函数在程序中的位置。
可以将main函数放在整个程序的最前面,也可以放在整个程序的最后,或者放在其它函数之间。
3、一个函数由函数首部和函数体两部分组成(以例1.3的max函数说明)
(1)函数首部:
一个函数的第一行。
返回值类型函数名([函数参数类型1函数参数名1][,…,函数参数类型2,函数参数名2])
注意:
函数可以没有参数,但是后面的一对()不能省略,这是格式的规定。
(2)函数体:
函数首部下用一对{}括起来的部分。
如果函数体内有多个{},最外层是函数体的范围。
函数体一般包括声明部分、执行部分两部分。
{
[声明部分]:
在这部分定义本函数所使用的变量。
[执行部分]:
由若干条语句组成命令序列(可以在其中调用其它函数)。
}
4、C程序书写格式自由
●一行可以写几个语句,一个语句也可以写在多行上。
●C程序没有行号,也没有FORTRAN,COBOL那样严格规定书写格式(语句必须从某一列开始)。
●每条语句的最后必须有一个分号“;”表示语句的结束。
5、可以使用/**/对C程序中的任何部分作注释
注释可以提高程序可读性,使用注释是编程人员的良好习惯。
实践中,
●编写好的程序往往需要修改、完善,事实上没有一个应用系统是不需要修改、完善的。
很多人会发现自己编写的程序在经历了一些时间以后,由于缺乏必要的文档、必要的注释,最后连自己都很难再读懂。
需要花费大量时间重新思考、理解原来的程序。
这浪费了大量的时间。
如果一开始编程就对程序进行注释,刚开始麻烦一些,但日后可以节省大量的时间。
●一个实际的系统往往是多人合作开发,程序文档、注释是其中重要的交流工具。
6、C语言本身不提供输入/输出语句,输入/输出的操作是通过调用库函数(scanf,printf)完成。
输入/输出操作涉及具体计算机硬件,把输入/输出操作放在函数中处理,可以简化C语言和C的编译系统,便于C语言在各种计算机上实现。
不同的计算机系统需要对函数库中的函数做不同的处理,以便实现同样或类似的功能。
不同的计算机系统除了提供函数库中的标准函数外,还按照硬件的情况提供一些专门的函数。
因此不同计算机系统提供的函数数量、功能会有一定差异。
1、5C语言程序的编辑、编译、运行(C程序的上机步骤)
1、源程序、目标程序、可执行程序的概念(补充)
●程序:
为了使计算机能按照人们的意志工作,就要根据问题的要求,编写相应的程序。
程序是一组计算机可以识别和执行的指令,每一条指令使计算机执行特定的操作。
●源程序:
程序可以用高级语言或汇编语言编写,用高级语言或汇编语言编写的程序称为源程序。
C程序源程序的扩展名为“.c”
事实上我们编写的程序,不管采用什么计算机语言,都是源程序,有几个人还会用机器语言去编程!
源程序不能直接在计算机上执行,需要用“编译程序”将源程序翻译为二进制形式的代码。
●目标程序:
源程序经过“编译程序”翻译所得到的二进制代码称为目标程序。
目标程序的扩展名为“.obj”
目标代码尽管已经是机器指令,但是还不能运行,因为目标程序还没有解决函数调用问题,需要将各个目标程序与库函数连接,才能形成完整的可执行的程序。
●可执行程序:
目标程序与库函数连接,形成的完整的可在操作系统下独立执行的程序称为可执行程序。
可执行程序的扩展名为“.exe”(在dos/windows环境下)
2、C语言程序的上机步骤
输入与编辑源程序->编译源程序,产生目标代码->
连接各个目标代码、库函数,产生可执行程序->运行程序。
3、TurboC的使用(DOS环境)
TurboC2.0是Borland公司开发的微机上一个C语言集成开发环境。
可以在TurboC中完成C语言程序的编辑、编译、连接、运行、调试。
具体操作上机时演示(重点:
启动,退出,重要的菜单项)
重点菜单项:
File->new,load,save,writeto
Compile->compiletoobj,makeexefile,buildall
Run->run,gotocursor,traceinto,stepover,userscreen,programreset
Debug->Evaluate
4.VisualC的使用(Windows环境)
VisualC是windows环境下的C应用程序,C++应用程序,Windows应用程序集成开发环境。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第一章 C语言概述 语言 概述