C++教案1.docx
- 文档编号:5150868
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:29
- 大小:64.51KB
C++教案1.docx
《C++教案1.docx》由会员分享,可在线阅读,更多相关《C++教案1.docx(29页珍藏版)》请在冰豆网上搜索。
C++教案1
C语言教案
第一章C语言概述
1.1C语言出现的历声背景
●C语言是国际上广泛流行的、很有发展前途的计算机高级语言。
它适合于作为系统描述语言,既用来写系统软件,也可用来写应用软件。
●C语言是第三代语言(面向过程的高级语言,第一代:
机器语言;第二代:
汇编语言)
●以前的操作系统等系统软件主要是由汇编语言编写的(包括UNIX操作系统在内)。
由于汇编语言依赖于计算机硬件,程序的可读性和可移植性都比较差。
为了提高可读性和可移植性,最好改用高级语言,但一般高级语言难以实现汇编语言的某些功能(汇编语言可以直接对硬件进行操作,例如,对内存地址的操作、位操作等)。
人们设想能否找到一种既具有一般高级语言特性,又具有低级语言特性的语言,集它们的优点于一身。
于是,C语言就在这种情况下应运而生了。
●C语言是在B语言的基础上发展起来的,它的根源可以追溯到ALGOL60。
1960年出现的ALGOL60是一种面向问题的高级语言,它离硬件比较远,不宜用来编写系统程序。
1963年英国的剑桥大学推出了CPL(CombinedProgrammingLanguage)语言,CPL语言在ALGOL60的基础上接近硬件一些,但规模比较大,难以实现。
1967年英国剑桥大学的MatinRichards对CPL语言作了简化,推出了BCPL(BasicCombinedProgrammingLanguage)语言。
●1970年美国贝尔实验室的KenThompson以BCPL语言为基础,又作了进一步简化,设计出了很简单的而且很接近硬件的B语言(取BCPL的第一个字母),并用B语言写了第一个UNIX操作系统,在PDP-7上实现.1971年在PDP-11/20上实现了B语言,井写了Unix操作系统。
但B语言过于简单,功能有限。
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语言多次作了改进,但主要还是在贝尔实验室内部使用。
直到1975年UNIX第6版公布后,C语言的突出优点才引起人们普遍注意。
1977年出现了不依赖于具体机器的C语言编译文本《可移植C语言编译程序》,使C移植到其它机器时所需做的工作大大简化了,这也推动了UNIX操作系统迅速地在各种机器上实现。
例如,VAX等计算机系统都相继开发了UNIX。
随着UNIX的日益广泛使用,C语言也迅速得到推广,C语言和UNIX可以说是一对孪生兄弟,在发展过程中相辅相成。
1978年以后,C语言已先后移植到大、中、小、微型机上,已独立于UNIX和PDP了。
现在C语言已风靡全世界,成为世界上应用最广泛的几种计算机语言之一。
●以1978年发表的UNIX第7版中的C编译程序为基础,BrianW.kernighan和DennisM.Ritchie(合称K&R)合著了影响深远的名著《TheCprogramminglanguage》,Java,C++等面向对象语言(第四代语言)是在C语言的发展。
1.2C语言的特点
C语言的主要特点如下。
1.语言简洁、紧凑,使用方便、灵活。
C语言一共只有32个关键字(见附录II),9种控制语句,程序书写形式自由,主要用小写字母表示,压缩了一切不必要的成分
2·运算符丰富
C的运算符包含的范围很广泛,共有34种运算符(见附录III)。
C把括号、赋值、强制类型转换等都作为运算符处理。
从而使C的运算类型极其丰富,表达式类型多样化,灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。
3·数据结构丰富,具有现代化语言的各种数据结构
C的数据类型有:
整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。
能用来实现各种复杂的数据结构(如链表、树、栈等)的运算。
尤其是指针类型数据,使用起来比Pascal更为灵活、多样。
4·具有结构化的控制语句(如if...else语句、whi1e语句、do…whi1e语句、for语句)。
用函数作为程序模块以实现程序的模块化。
是结构化的理想语言,符合现代编程风格要求。
5。
语法限制不大严格,程序设计自由度大.
6.C语言允许直接访问物理地址
能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作,因此C既具有高级语言的功能,又具有低级语言的许多功能,可用来写系统软件。
C语言的这种双重性,使它既是成功的系统描述语言,又是通用的程序设计语言。
有人把C称为“高级语言中的低级语言”,也有人称它为“中级语言”意为兼有高级和低级语言的特点。
7.生成目标代码质量高,程序执行效率高。
一般只比汇编程序生成的目标代码效率低10~20%。
8.用C语言写的程序可移植性好(与汇编语言比)。
基本上不作修改就能用于各种型号的计算机和各种操作系统。
1.3简单的C程序介绍
下面先介绍几个简单的C程序,然后从中分析C程序的特性。
[例1.1]
/*Example1.1onpage4*/
main()
{
printf("ThisisaCprogram\n");
}
执行
本程序的作用是输出以下一行
ThisisaCprogram
其中main表示“主函数”,每一个C程序都必须有一个main函数。
函数体由大括弧{}
只有一个输出语句,printf是C语言中的输出函数(详见第三章);“\n”是换行符。
[例1.2]
/*Example1.2onpage4*/
main()
{inta,b,sum;
a=123;b=456;
sum=a+b;
printf("Sumofaplusbis%d\n",sum);
}
本程序的作用是求两个整数a和b之和sum
/*……*/表示注释部分,为便于理解,用汉字表示注释,当然也可以用英语或汉字拼音作注释。
注释只是给人看的,对编译和运行不起作用,注释可以加在程序中任何位置。
第二行是变量定义部分,说明a,b.sum是整型(int)变量。
第三行是两个赋值语句,使a和b的值分别为123和456。
第四行使sum的值为a+b
第五行中“%d”是输入输出“格式字符串”,用来指定输入输出时的数据类型和格式(详见第三章),“%d”表“十进制整数类型”。
在执行输出时,此位置上代以一个十进制整数,因此输出一行信息为:
Sumofaplusb
通过上例,可以看到:
1·C程序是由函数构成的。
一个C源程序至少包含一个函数(main函数),也可以包含一个main和若干其他函数。
C的函数相当于其它语言中的子程序。
用函数来实现特定的功能。
可以说C是函数式的语言。
程序全部工作都是由函数来完成的。
C的函数库十分丰富,
标准C提供一百多个库函数,TurboC和MSC4.0提供三百多个库函数。
C的这种特点使得容易实现程序的模块化。
2.一个函数由两部分组成:
(1)函数的说明部分。
包括函数名、函数类型、函数属性、函数参数(形参)名、形式参数类型。
例如例1.3中的max函数的说明部分为。
intmax(x,y)
函数类型函数名函数参数
intx,y;
形参类型形参
一个函数名后面必须跟一对圆括弧,函数参数可以没有,如main()。
(2)函数体,即函数说明部分下面的大括弧{…}内的部分。
如果一个函数内有多个大括弧,则最外层的一对{}为函数体的范围。
函数体一般包括:
①变量定义。
如例1.3中main函数中的“inta,b,c”。
②执行部分。
由若干个语句组成。
当然,在某些情况下也可以没有变量定义部分(例如例1.1)。
甚至可以既无变量定义也无执行部分。
如:
dump()
{}
它是一个空函数,什么也下干,但这是合法的。
3.一个C程序总是从main函数开始执行的,而不论main函数在整个程序中的位置如何(main函数可以放在程序最前头,也可以放在程序最后,或在一些函数之前在另一些函数之后)。
4.C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上人程序没有行号,也不象FORTRAN或CoBoL那样严格规定书写格式(语句必须从某一列开始书写)。
5.每个语句和数据定义的最后必须有一个分号。
分号是C语句的必要组成部分。
例如:
c=a十b;
分号不可少。
即使是程序中最后一个语句也应包含分号(这是和PAScAL语言不同的)。
6.C语言本身没有输入输出语句。
输入和输出的操作是由库函数scanf和printf等函数来完成.C对输入输出实行‘函数化'
7.可以用/*……*/对C程序中的任何部分作注释,一个好的,有使用价值的源程序都应当加上必要的注释,以增加程序的可读性。
1.4C程序的上机步骤
在了解了上述C语言的初步知识后,一定要上机运行一个C程序,以增加对C的认识。
在编好一个C源程序后,如何上机运行呢?
下面就TurboC的环境下运行C程序作一简单介绍。
用TurboC运行C程序的步骤
先将TurboC装人磁盘tc目录。
1.调用TurboC程序,进入MS-dos;只需打入:
cd\tc;tc
屏幕顶部出现一排“命令”行菜革:
2.编辑源文件。
根据需要输入或修改源程序。
File.c
3.编译源程序。
File.obj;file.exe
4。
执行程序。
按”F10”键,屏幕又出现命令行:
如果发现运行结果不对,要重新修改源程序,可以再按“Fl0”键,按回车键,即进入编辑状态,可以根据需要修改源程序,并重复上述2、3、4步,直到得到正确结果为止。
如果想再修改源程序,可以重新执行步骤1,并输入源程序文件名即可。
以上步骤只需上机试一下即可明白。
关于上机操作的详细说明可参阅《C语言上机指导》。
第二章数据类型、运算符与表达式
2.1C的数据类型
一个程序应包括两个方面的内容:
1.数据的描述。
2.操作步骤,即动作的描述。
数据是操作的对象,操作的结果会改变数据的状况。
打个比方,厨师做菜肴,需要有菜谱,菜谱上一般应包括:
①配料,指出应使用哪些原料:
②操作步骤,指出如何使用这些原料按规定的步骤加工成所需的菜肴,没有原料是无法加工成所需菜肴的。
面对同一些原料可以加工出不同风味的菜肴。
作为程序设计人员,必须认真考虑和设计数据结构和操作步骤(即算法)。
因此,著名计算机科学家沃思(NiklklausWirth)提出一个公式:
数据结构十算法=程序
实际上,一个程序除了以上两个主要要素之外,还应当采用结构化程序设计方法进行程序设计,并且用某一种计算机语言表示。
因此,可以这样表示。
程序=算法十数据结构十程序设计方法十语言工具和环境
也就是说,以上四个方面是一个程序设计人员所应具备的知识。
在本书中不可能全面介绍这些内容,它们都属于有关的专门课程范畴。
本书主要介绍C语言本身,而下拟深入介绍有关算法和数据结构等方面的知识。
C语言中数据有常量与变量之分,它们分别属于以上这些类型。
在本章中主要介绍基本数据类型。
2.2常量与变量
2.2.1常量和符号常量
在程序运行过程中,其值不能被改变的量称为常量。
常量区分为不同的类型,如12、0、-3等为整型常量,4.6,-1.23d等为实型常量,’a’,’d’为字符常量,一般从其字面形式即可判别,也可以用一个标识符代表一个常量。
「例2.1」
/*example2.1onpage11*/
#definePI3.1415926
main()
{floats,r,l;
r=10.;
l=2.*PI*r;
s=PI*r*r;
printf("l=%fs=%f\n",l,s);
printf("PI=%f\n",PI);
}
程序中用#define命令行定义PI代表常量3.1415926,此后凡在此文件中出现的PI都代表3.1415926,可以和常量一样进行运算.
有关#define命令行的详细用法参见第8章。
这种用一个标识符代表一个常量的,称为符号常量,即标识符形式的常量,注意符号常量不同于变量,它的值在其作用域(在本例中为主函数)内不能改变,也不能再被赋值。
如再用以下赋值语句给PI赋值:
PI=3.1416
是错误的。
习惯上,符号常量名用大写,变量用小写,以示区别
2.2.2变量
其值可以改变的量称为变量。
一个变量应该有一个名字,在内存中占据一定的存储单元。
在该存储单元中存放变量的值。
请注意区分变量名和变量值这两个不同的概念。
和其它高级语言一样,用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列称标识符(identifier),简单他说,标识符就是一个名字。
C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。
如
sum,average,class,day,month,student_name,
下面是不合法的标识符和变量名:
M.D,John,$123.#33,3D64,a>b
注意,大写字母和小写字母被认为是两个不同的字符。
因此,sum和SUM是两个不同的变量名。
习惯上,变量名用小写字母表示,以增加可读性。
C语言中标识符的长度(字符个数)取8个字符,假如程序中出现的变量名长度大于8个字符,则只有前面8个字符有效,后面的不被识别。
例如,有两个变量:
student_name和student_number,由于二者的前8个字符相同,系统认为这两个变量是一回事而不加区别。
可以将它们改为:
stud_name和stud_num以使之区别。
因此,在写程序时应了解所用系统对标识符长度的规定,以免出现上面的混淆,这种错误并不反映在编译过程中(即语法无错误),但运行结果显然不对。
在选择变量名和其它标识符时,应注意做到“见名知意”,即选有含意的英文单词(或其缩写)作标识符,如count,name,day,month,class,city,country等,除了数值计算程序外,一般不要用代数符号(如a,b,c,x1,y1等)作变量名,以增加程序的可读性。
这是结构化程序的一个特征。
本书在一些简单的举例中,为简单起见,仍用单字符的变量名(如a,b,c等),请读者注意不要在其它所有程序中都如此。
在C语言中,要求对所有用到的变量作强制定义,也就是“先定义,后使用”,否则,在编译时会指出有关“出错信息”。
下面各节分别介绍整型、实型(浮点型)、字符型数据。
2.3整型数据
2.3.1整型常量
整型常量即整常数。
C整常数可用以下三种形式表示:
1.十进制整数。
如123、一456、0。
2.八进制整数。
以0开头的数是八进制数。
如0123表示八进制数123,即(123)8等于十进制数83。
-011表示八进制数-11,即十进制数-9。
3.十六进制整数。
以0x开头的数是16进制数。
如0xl23,代表16进制数123,即(123)16=1XI62+2X161+3X160=256+32+3=291。
一0xl2等于十进制数一18。
main()
{inta=0123;b=ox123;
printf(“a=%d,b=%d”,a,b);
}
2.3.2整型变量
一、整型变量的分类
整型变量可分为:
基本型、短整型、长整型和无符号型四种。
1.基本型,以int表示。
2.短整型,以shortint表示,或以short表示。
3.长整型,以1ongint表示,或以1ong表示。
4.无符号型,存储单元中全部二进位(bit)用作存放数本身,而不包括符号。
无符号型中又分为无符号整型、无符号短整型和无符号长整型,分别以unsignedint,unsignedshortunsignedlong表示。
无符号型变量只能存放不带符号的整数,如123、4687等,而不能存放负数,如-123、-3,一个无符号整型变量中可以存放的数的范围比一般整型变量中数的范围扩大一倍。
如果整型量在内存中占2个字节(16位),则int型变量数的范围为:
-32768~32767.
1
1
1
1
1
0
0
0
0
1
1
1
1
1
1
1
表列出不同类型机器中对以上几种数据类型所分配的长度(以位(bit)表示)。
数据类型
位
数的范围
基本型
int
16
-32768-32767-215-(215-1)
短整型
short
16
-32768-32767-215-(215-1)
长整型
longint
32
-2147483648-2147483647-231-(231-1)
无符号整型
unsignedint
16
0-655350-(216-1)
无符号短整型
unsignedshort
16
0-655350-(216-1)
无符号长整型
unsignedlong
32
0-42949672950-(232-1)
二、整型变量的定义
前已提到,C规定在程序中所有用到的变量都必须在程序中指定其类型,即“定义”,这是和BASIC、FORTRAN不同的,而和PASCAL相类似。
例如:
inta,b;(指定变量a,b为整型)
unsignedshortc,d;(指定变量c,d为无符号短整型)
1onge,f;(指定变量e,f为长整型)
对变量的定义,一般是放在一个函数的开头部分(也可以放在程序中间,但作用域只限于某一分程序,这将在第七章介绍)。
例2.2
/*example2.2onpage14*/
main()
{inta,b,c,d;/*指定a,b,c,d为整型变量*/
unsignedu;/*指定u为无符号整型变量*/
a=12;b=-24;u=10;
c=a+u;d=b+u;
printf("c=%dd=%d",c,d);
}
运行结果为a十u=22.b+u=-14
可以看到不同种类的整型数据可以进行算术运算。
在本例中是int型数据与unsignedint型数据进行相加相减运算(有关运算的规则在本章2.7中介绍)。
三、整型常量的类型
我们已知整型变量可分为int、shortint、1ongint和unsignedint、unsignedshort、unsignedlong等类别。
那么常量是否也有这些类别?
在将一个整型常量赋值给上述几种类别的整型变量时如何做到类型匹配?
请注意以下几点:
1.一个整常量,如果其值在一32768~+32767范围内。
认为它是int型,它可以赋值给int型和1ongint型变量。
2.一个整常量,如果其值超过了上述范围,而在一2147483648~2147483647范围内,则认为它是1ongint型。
可以将它赋值给一个1ongint型变量。
3.如果某一计算机系统的C版本确定的shortint与int型数据在内存中占据的长度相同,则它的表数范围与int型相同,因此一个int型的常量也同时是一个shortint型常量,可人赋给int型或shortint型变量。
4.常量中无unsigned型。
但一个非负值的整常量可以赋值给unsigned型整变量,只要它的范围不超过变量的表数范围即可,例如,将50000赋给一个unsignedint型变量是可以的,而将70000赋给它是不行的(溢出)。
5.在一个整常量后面加一个字母l或L则认为是1ongint型常量。
例如123l、432L.这往往用于函数调用中。
如果函数的形参为1ongJnt型,则要求实参也为1ongint型,此时用123作实参不行,而要用123L作实参。
2.4实型数据
2.4.1实型常量
实数在C语言中又称俘点数,实数有两种表示形式:
1.十进制数形式。
它由数字和小数点组成(注意必须有小数点)。
0.123、.123、123.0、123.、0.0都是十进制数形式。
2.指数形式,如123e3或123E3都代表123X103但注意字母e(或E)之前必须有数
字。
且e后面指数必须为整数,如e3、2.1e3.5、e等都不是合法的指数形式。
2.4.2实型变量
C实型变量分为单精度(float型)和双精度(double型)两类,对每一个实型变量都应在使用前加以定义。
如:
floatx,y;(指定x,y为单精度实数)
double z;(指定z为双精度实数)
在一般系统中,一个float型数据在内存中占4个字节(32位)·一个double型数据占8个字节。
单精度实数提供7位有效数字,双精度实数提供15~16位有效数字,数值的范围随机器系统而异。
在1BM-PCMs-C中,单精度实数的数值范围约为10-38~1038,双精度实数范围约为10-308~10308。
应当说明,实型常量不分float型和double型。
一个实型常量可以赋给一个float型或double型变量。
根据变量的类型截取实型常量中相应的有效位数字,假如a已指定为单精度
实型变量:
floata;
a=1111.111;
由于float型变量只能接收7位有效数字,因此最后两位小数不起作用。
如果a改为double型,则能全部接收上述9位数字并存储在变量a中。
2.5字符型数据
2.5.1字符常量
C的字符常量是用单引号(即撇号)括起来的一个字符,如’a’,’x’,’D’,’?
’,’$’等都是字符常量,注意,’a’和’A’是不同的字符常量。
除了以上形式的字符常量外,C还允许用一种特殊形式的字符常量,就是以一个”\”开头的字符序列,例如,前面已经遇到过的,在printf函数中的’\n’,它代表一个“换行”’符。
这种非显示字符难以用一般形式的字符表示,故规定用这种特殊形式表示。
常用的以“\”开头的特殊字符见表。
字符形式
功能
\n
换行
\t
横向跳格(即跳到下一个输出区-占8列)
\v
竖向跳格
\b
退格(不换行)
\r
回车
\f
走纸换页
\\
反斜杠字符“\”
\’
单引号(撤号)字符
\ddd
l到3位8进制数所代表的字符
\xdd
1到2位16进制数所代表的字符
表中列出的字符称为“转义字符”,意思是将反斜杠(\)后面的字符转变成另外的意义。
如“\n”中的“n”不代表字母n而作为“换行”符。
表中最后第二行是用ASCII码(八进制数)表示的一个字符,例如'\101’代表字符‘A'。
'012'代表“换行”。
用‘\376’,代表图形字符‘▉’。
用表中的方法可以表示任何可输出的字母字符、专用字符、图形字符和控制字符。
请注意‘\0’或‘\000’是代表ASCII码为0的控制字符,即“空操作”字符。
它将用在字符串中。
「例2.3」
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 教案