第1章C语言概述.docx
《第1章C语言概述.docx》由会员分享,可在线阅读,更多相关《第1章C语言概述.docx(11页珍藏版)》请在冰豆网上搜索。
![第1章C语言概述.docx](https://file1.bdocx.com/fileroot1/2023-1/22/9b3bac2d-8f4d-4e7a-9c31-2599c512bc61/9b3bac2d-8f4d-4e7a-9c31-2599c512bc611.gif)
第1章C语言概述
第1章C语言概述
1.1本章讲述的内容
本章讲述如下内容:
(1)C语言的由来和发展。
(2)C语言的特点和应用。
(3)C语言程序在结构上的特点和书写格式上的要求。
(4)C语言程序中出现的键盘输入操作和屏幕输出操作的方法。
(5)使用VisualC++ 6.0编译系统来实现的单文件程序和多文件程序的操作步骤。
本章是本书的第1章,通过讲述本章内容,实际上是给学生回答下述一些问题:
(1)什么是C语言?
它为什么使用较为普遍?
(2)C语言与其他语言有何不同?
(3)C语言程序是什么样子的?
在结构上有哪些特点?
(4)编写的C语言程序如何获得其输出结果?
如何学好C语言?
通过对本章内容的讲述让学生得到如下收获:
(1)激发学生学习C语言的兴趣,使学生一开始就下定决心学好C语言编程。
(2)增强学生学好C语言的信心。
通过课堂上认真听讲,课后看书复习完成作业,加强上机实践,存在的问题及时解决,并不难学好这门功课。
(3)掌握好上机实践这一重要环节。
从一开始就要重视上机实践,学会通过上机实践来解决疑难问题,培养自学能力和动手能力。
1.2重点内容
本章的重点内容有如下3点。
1.2.1C语言的特点
讲述C语言的特点时,一定要一分为二:
既要讲述C语言吸取其他语言的经验和教训,使C语言超越其他语言特点,这些特点作为C语言的优点受到许多编程者的赞许,又要讲述C语言由于过于强调它的某些特点而带来的一些不足,或者说是“隐患”,而被后来的C++语言进行了改进。
总之,讲述C语言要实事求是,让学生对C语言有个全面的正确的认识,从而会对任何事物总要用一分为二的观点来认识。
1.C语言的优点
讲述C语言特点时,主要讲述它的优点,即它吸引编程者的魅力所在。
(1)C语言语句简练、书写方便
在这一点上,很多语言难以与C语言相比,主要表现在以下几个方面。
∙使用缩写的类型说明符,使得书写方便。
特别是对最常用的类型,如整型用int,字符型char,只用英文单词的前边一部分,而不像有的语言使用全部英文单词。
∙运算符比较多,有的运算符功能很强。
运算符大多可将许多操作使用表达式来表示,而不必用函数实现,这样做不仅书写简单,而且可读性也好。
C语言中引进一个三目运算符,这是其他语言少有的,这个三目运算符功能强,具有简单条件语句(if-else语句)的功能。
自然,使用条件表达式语句比用条件语句简练。
∙采用花括号作定界符,比用语句或其他方法更为方便。
C语言中,函数体的定界符、条件语句的if体、elseif体和else体的定界符以及循环语句的循环体的定界符都用一对花括号({}),这样做既简练,又方便。
这比有些语言使用begin和end等标识符要简单得多。
特别是又规定了如果if体、循环体是一条语句就不用定界符了。
∙讲到书写方便,不得不讲讲预处理功能。
特别是该功能的文件包含命令,将多个程序中相重复的部分提取出来,写在一个被包含的文件中,只要在需要这部分内容的程序中包含该文件就可以了,而不必重复写一遍。
此外,符号常量的引入也在某种程度为书写带来一定方便。
(2)C语言的功能特强
C语言功能强主要表现在它既具有高级语言的特性,又具有低级语言的特性。
有人说它是一种中级语言,但是这种讲法反映不出它的功能之强大。
C语言功能强表现在如下几个方面。
∙C语言具有高级语言的所有功能,此外,在字符处理方面采用了字符指针等措施,更加便于字符处理。
∙C语言具有地址操作和位操作以及寄存器操作等功能,这是功能是一般高级语言所不具有的,这是兼容了汇编语言的功能。
∙C语言引进指针的概念,为地址操作带来了方便,同时指针又为数组元素的表示及作为函数的参数带来了操作上的方便和功能上的增强。
例如,传址调用可实现函数之间信息的传递等。
∙C语言还具有丰富的数据类型和存储类。
在数据类型方面,除了基本数据类型外,还提供了数组、结构、联合和枚举等构造类型,使C语言程序可以方便地实现各种复杂数据类型的操作,多种的存储类也为C语言适应不同情况的需要提供方便,进一步增强了该语言的功能。
(3)C语言是一种结构化的程序设计语言
结构化程序设计语言的出现是编程史上的一个里程碑。
结构化程序设计语言要具备构成结构化程序设计的三种基本结构模式的语句。
这三种基本结构模式分别是:
∙顺序结构模式。
∙分支结构模式。
∙循环结构模式。
C语言具有构成上述三种结构模式的语句,所以C语言是人们比较喜欢的一种结构化程序设计语言,因为它具有前边讲述的两大特点。
但是,还应该看到,C语言是一种不完全的结构化程序设计语言。
它的不完全性表现在如下两点:
∙C语言允许使用goto语句,但是对它的goto范围进行限制只允许在函数体内进行转向。
因此,C语言中最小的模块是函数。
∙完全的结构化程序设计语言要求一个模块只有一个入口和一个出口。
不过,C语言中函数作为最小模块,它虽然有一个入口,但是可以有两个或两个以上的出口。
因为函数内允许有多个return语句。
(4)C语言的移植性好
移植性好是C语言的另一个优点,这也是C语言能够广泛用于各种型号机器上去的原因。
C语言移植性好的原因是因为该语言的编译系统较小,再加上它具有若干预处理命令,可在编译前就处理一些命令,这都给C语言的移植带来了方便。
2.C语言的不足
C语言过于强调它的某些特点,即灵活和简洁,也由此带来了一些不足。
(1)运算符过多,优先级较繁杂,使用者觉得难用难记
运算符共有44个,优先级有15种,结合性还有两类。
这无疑对数据运算带来方便,但是,对编程者带来了难记和难用的不便。
例如,运算符星号(*)具有两个功能,作为单目运算符表示取内容,作为双目运算符表示相乘运算等等。
(2)C语言是一种弱类型的语言
C语言为了类型转换的方便,对类型的要求很不严格,在许多情况下不做类型检查。
在有些情况下,C语言要求类型一致,由于不做类型检查,出现不一致时也不报错,结果造成了运算结果的错误。
因此,在编程中对类型处理一定要慎重,应尽量避免因类型不一致造成的差错。
(3)对数组进行动态赋值时不做越界检查
这样,当给某个数组进行动态赋值时,若赋值个数超过了数组元素的个数,就可能造成数据上的混乱。
指针的使用上也要特别注意,只有给指针赋以确定值时才可以使用。
由于字符指针被赋值后它所指向新的字符串大小被确定,当用该指针再指向新的字符串时,要注意字符串长度可能引起的越界。
因此,在有些情况下,使用字符指针不合适时,应使用字符数组。
(4)产生二义性
C语言出于优化的考虑,允许不同的编译系统对表达式或参数表中的操作数或数据项的计算顺序有所不同,即有的编译系统规定计算顺序从左至右,有的编译系统规定计算顺序从右至左。
这对于有副作用运算符组成的操作数或数据项来讲,有可能产生二义性,编程时应尽量避免。
1.2.2C语言程序在结构上的特点
从C语言的具体程序实例中可以看到,C语言程序在结构上的特点如下:
∙C语言程序是由一个或多个文件组成的。
∙组成C语言程序的每个文件是由一个或多个函数组成的。
因此,可以说C语言程序是函数串,即C语言程序是由放在不同文件中的若干个函数组成的,函数是组成C语言程序的最小模块。
∙组成C语言程序的若干个函数中,有且仅有一个主函数main( )。
主函数所在的文件称为主文件。
执行一个C语言程序时,先从主函数开始执行,程序中其他的函数都是被主函和主函数来调用的函数来调用。
程序中若干个函数先后顺序基本无关。
∙函数是由函数头和函数体组成。
函数头给出了函数名字、函数类型、函数参数的个数和类型。
函数体由一对花括号括起的若干条语句组成。
语句是由若干个单词组成的。
另外,由于C语言程序的可读性较差,因此,在书写上要求遵循着如下的约定。
∙一行通常写一条语句。
有些语句可以写成多行。
分行书写时不得将一个单词分开。
∙每条语句末尾加分号(;),不是语句结束不应加分号。
∙花括号的书写按规定的格式。
本书规定:
每个括号占一行,左右花括号都与使用它们的语句对齐,花括号内语句向右缩进。
∙语句书写时要按约定进行缩进,以便提高可读性。
∙适当使用注释信息,可提高可读性。
1.2.3C语言程序的实现
C语言程序的实现指的是如何使编写的C语言程序获得正确的输出结果。
C语言程序的实现方法与其他高级语言的实现方法相同,通常都是通过编辑、编译和运行三个步骤来实现。
本书选用了VisualC++6.0集成工具软件系统来实现C语言程序。
这是一个C++语言的编译系统,也能用来编译C语言的程序。
使用该系统实现C语言程序时,与使用TC2.0AK3.0系统等其他C语言编译系统有如下几点不同。
∙每个C语言程序文件存盘时应加 .C后缀,不应默认扩展名。
∙每个C语言程序开头都加如下命令:
#include
∙C程序中所有函数都不可省略类型说明,无返回值的函数加void,返回值为int型的函数加int。
∙函数说明应用原型,即在简单说明的基础上加上函数参数和个数的说明。
∙定义函数时,函数参数类型说明放在圆括号内,而不再另起一行进行说明。
上述几点都是C++语言程序所要求的。
一开始就让学生学会在VisualC++6.0系统上运行C语言程序的方法。
下面分别讲述单文件程序和多文件程序的实现方法。
1.单文件C语言程序的实现方法
单文件C语言程序的实现方法如下。
(1)运行VisualC++6.0系统,出现该系统的主窗口。
(2)选择菜单栏中的File菜单项,在下拉菜单中选择New选项,出现New对话框。
(3)在New对话框中,选择Files选项卡,出现Files选项卡的内容。
在其中双击C++SourceFile选项,出现文本编辑窗口。
(4)将C语言程序逐行输入到计算机中,并可以进行全屏幕编辑。
使用File菜单中的save选项存盘。
在“另存为”对话框的“文件名”文本框内输入文件名,并以 .c作扩展名。
在输入文件前应先选好存放 .c文件的文件夹。
(5)选择菜单栏中的Build菜单项,在该下拉菜单中,选择Build选项,这时系统对工作区中的当前文件进行编译、连接,生成可执行文件。
如果有编译错和连接错误,错误信息将自动出现在屏幕下方窗口中,用户双击某条编译错误信息后,系统将在编辑窗口中使用右箭头指出出错的行。
这时用户可根据出错信息修改错误,修改后再继续编译,直到没错为止。
最终生成可执行文件。
(6)选择Build菜单项中的Execute命令运行该程序,将输出结果显示在一个DOS窗口中。
查看完毕后,按任意键返回原窗口。
编译运行后第一个程序后,在编辑下一个新程序前,应将工作区内的文件清除掉,其方法如下:
选择File下拉菜单中CloseWorkspace选项,出现一个对话框,选择“是”时,将清除工作压中的所有文件,选择“否”时,保留当前文件,清除其他文件。
开始上机时,最好让学生先不清除原来文件就进行运行,看一个会出现什么现象?
这样可使学生记住以后出现这种现象应该如何处理。
初次上机的学生多遇到一些错误对他们有好处,他们可从错误中学会解决方法,逐渐积累调试程序的经验。
2.多文件C语言程序的实现方法
多文件C语言程序的实现方法如下。
(1)将多个C语言程序的文件依次编辑后,存放在指定的文件夹中。
(2)选择File菜单项中New选项,出现new对话框,单击Projects选项卡,在出现的选项中,单击Win32ConsoleApplication选项,在Projectname文本框中输入项目文件名,并在Location选框中输入项目文件所需的源文件所在的路径,选择单选按钮Createnewworkspace后,单击OK按钮。
(3)出现Win32ConsoleApplication对话框,选择Anemptyproject按钮(默认值),单击Finish按钮。
(4)出现NewProjectInformation对话框,单击OK按钮。
完成了创建一个空项目文件的任务。
下面接着的操作是在向空项目文件中加入文件。
(5)选择菜单项Project的下拉菜单中的AddToProject选项,再在它的级联菜单中单击Files选项,出现打开文件对话框。
在该对话框中,把要添加的文件加到该项目中。
(6)选择Build菜单项,对创建的项目文件进行编译连接,生成可执行文件。
再使用运行命令Execute运行该命令,输出结果出现在DOS窗口中。
关于单文件和多文件的C语言程序的实现,教科书中都有较详细的描述,请参看。
多文件程序还可以通过文件包含命令将某个或某些文件包含在文件中,运行主文件便可以,有关这方面的操作请参考第4章“预处理功能”。
1.3重要概念
本章讲述3个重要概念。
1.程序和文件
C语言程序是由文件组成的。
一个C语言的程序可以是一个文件,也可以是多个文件。
在多个文件的程序中只有一个主文件,即含有主函数的文件。
要求学生把C语言程序和文件这两个概念区分开来。
初学者容易把文件和程序看成是一回事。
认为文件就是程序,程序就是文件,这是不对的。
一定要让学生牢固树立程序是由文件组成的这个概念。
由于我们多数情况下认为C语言是由一个文件组成的,于是容易造成误解,认为C语言程序就是一个文件。
因此,需要在第1章中就让学生运行一个多文件的程序,尽管学生对该程序可能不太理解,这没有关系,关键要让学生知道C语言程序可由多个文件组成。
2.输入语句和输出语句
在C语言程序中,总会出现输入语句和输出语句,特别是输出语句,几乎每个程序中都要出现,因为通过它才会把程序的结果输出显示出来。
输入语句用来实现输入操作,最方便的输入操作是从计算机的键盘上输入信息。
实现键盘输入操作的常用函数是标准格式输入函数scanf( )。
该函数又称为读函数,从标准设备键盘上向计算机读入信息。
因此,输入语句从外部向计算机程序中的变量读入信息,它是通过读函数来实现的。
输出语句用来实现输出操作,最常用的输出操作是将计算出结果输出到计算机显示器的屏幕上去进行显示,实现这一操作的常用函数是标准格式输出函数printf( )。
该函数又称为写函数,它将计算机内部的信息写到输出设备屏幕上去。
因此,输出语句从计算机中将信息传递到输出设备上,它是通过写函数来实现的。
由于在C语言程序中,经常出现读函数scanf( )和写函数printf( ),因此要将C语言程序的输入输出操作搞清楚。
3.源文件和可执行文件
使用高级语言编写的程序文件称为源文件,源文件名是由主文件名和扩展名组成的,不同高级语言的源文件扩展名不同。
C语言源文件的扩展名为.C。
计算机对源文件不能直接识别。
源文件需要经过编译和连接后生成可执行文件,可执行文件可由计算机直接识别,运行可执行文件后便可获得该程序的结果。
对于初学高级语言编程的学生,一定要让他们搞清楚源文件和可执行文件的关系。
1.4常用语法和算法
本章着重讲述了标准设备的输入操作方法和输出操作方法。
1.4.1键盘输入操作方法
键盘是计算机标准输入设备。
使用键盘向计算机输入数据的读函数有如下3种。
1.读取一个字符的函数getchar( )
该函数是从输入数据缓冲区中一次读取一个字符,并可将它赋予一个int型变量,因为该函数的返回值是读取字符的ASCII值。
该函数被包含在stdio.h文件中。
2.读取一个字符串的函数gets( )
该函数是从缓冲区中一次读取一个字符串,字符串以换行符为结束符。
该函数有一个参数,用来存放读取的字符串,它通常是一个字符数组。
该函数格式如下:
char*gets(s)
chars[];
该函数返回值是字符型指针。
3.格式输入函数scanf( )
该函数是程序中最常使用的读函数,它可以从键盘上读取数据,按指定的格式给若干个变量赋值。
该函数格式如下:
intscanf("<控制串>",<参数表>)
由于该函数经常使用,需要比较详细地讲述清楚,让学生一次搞懂。
该函数的参数可分为两大部分:
<控制串>和<参数表>。
下面分别讲述。
(1)<控制串>
<控制串>是用一对双撇号括起来的一个串。
该串中包含格式符和一般字符。
格式符由格式标识符(%)和格式说明符组成。
格式说明符是用一个小写字母表示的某种输入格式,常用的有如下几种:
d——十进制整数。
o——八进制整数。
x——十六进制整数。
u——无符号十进制整数。
f——小数型单精度浮点数。
e——指数型单精度浮点数。
c——单个字符。
s——字符串。
格式符中,%和格式说明符之间可以出现修饰符。
常用的修饰符有如下两种:
l——用在d、o、x之前表示长整型数,用在f、e之前表示双精度浮点数。
<数字>——使用整型数字表示接收输入数据的最大宽度。
一般字符用作匹配符。
控制串中出现的一般字符应与输入流中键入的相同字符进行匹配,用来确定输入流中的输入数据项,在输入流中与匹配符相同的字符作为输入项的分隔符。
如果控制串中无匹配符,输入流中默认的分隔符为空白符(包括空格符、换行符和水平制表符等),通常用空格符作分隔符。
(2)<参数表>
<参数表>中可有一个或多个参数,多个参数用逗号分隔。
要求每个参数都是一个地址值。
一般来说,变量地址值表示为在变量名左边加上一个运算符&。
要求<参数表>中参数的个数与<控制串>中格式符的个数相等,并要求<参数表>中各参数的类型与<控制串>中对应的格式符的类型相同。
1.4.2屏幕输出操作方法
显示器屏幕是计算机标准输出设备。
使用屏幕显示计算机输出结果的写函数有如下3种。
1.输出一个字符的函数putchar( )
该函数是将一个指定的字符输出显示到屏幕上。
该函数格式如下:
intputchar(c)
charc;
该函数有一个参数,用来给出输出显示的字符,该函数的返回值是int型数,即为输出显示的字符的ASCII码值。
该函数被放在stdio.h文件中。
2.输出一个字符串的函数puts( )
该函数将一个指定的字符串输出显示到屏幕的当前光标处。
该函数格式如下:
intputs(s)
chars[];
该函数有一个参数,该参数给出输出显示的字符串,该函返回一个int型值。
3.格式输出函数printf( )
该函数是程序中最常用的一个输出函数,它将该函数参数表中若干个表达式的值按指定的格式和顺序逐一显示在屏幕上。
该函数格式如下:
intprintf("<控制串>",<参数表>)
该函数的参数分为两大部分:
<控制串>和<参数表>,之间用逗号分隔。
<控制器>是由一对双撇号括起来的一个串。
该串中可包含格式符和一般字符。
格式符由格式标识符(%)和格式说明符组成。
格式说明符是由一个小写字母表示的某种输出格式,常用的有如下几种:
d——十进制整数。
o——八进制整数。
x——十六进制整数。
u——无符号十进制数。
c——单个字符。
s——字符串。
f——小数型单精度浮点数。
e——指数型单精度浮点数。
g——f和e两个格式中输出宽度短的一种。
格式符中%和格式说明符之间可以出现修饰符。
常用的修饰有如下几种:
l——用在d,o,x之前表示长整型数,用在f,e,g之前表示双精度浮点数。
<数字>.<数字>——小数点(.)前的<数字>表示输出数据项的最小宽度。
当输出数据项的实际宽度小于最小宽度时,按最小宽度输出;当输出数据项的实际宽度大于宽度时,按实际宽度输出。
小数点后边的<数字>用来表示数据精度,对浮点数来讲表示小数点后的位数,对字符串来讲表示输出最多的字符个数。
— ——表示输出数据在域宽内左对齐。
无此修饰符时,表示右对齐。
通常默认的填补字符为空格符。
一般字符照样输出。
在一般字符中,具有图形符号的可打印字符,将输出显示该字符对应的图形符号。
对一些不可打印字符,可用转义字符表示。
常用的转义字符见教材中的转义字符表。
关于这里讲述的标准设备的输入输出操作中的有关函数,可让学生通过教材中的例子搞清楚用法。
一开始就掌握了它们的用法,对于阅读程序是很有益处的。
特别是scanf( )和printf( )函数,它们较为复杂,而应用很多,一定要尽快掌握它们。
1.5典型例子
由于学生刚接触C语言程序,程序中很多语句都没见过,这里只能列举简单例子,让学生对C语言程序有个初步印象,以后再逐步理解。
下面是一个文件的程序,该程序中有2个函数。
【例1.1】了解下列程序的功能,熟悉C语言程序在结构上的特点和书写上的约定,学会对函数scanf( ) 和printf( ) 的使用。
程序内容如下:
#include
voidmain()
{
inta,b,sum;
intadd(int,int);
printf("输入两个int型数:
");
scanf("%d%d",&a,&b);
sum=add(a,b);
printf("sum=%d\n",sum);
}
intadd(intx,inty)
{
returnx+y;
}
结合这个例子要求学生做下述事情:
(1)熟悉C语言程序在结构上的特点。
该例中程序是由一个文件组成的,该文件由两个函数组成。
其中一个是主函数main( ),另一个是被主函数调用的函数add( )。
该程序是两个函数的串。
(2)从该例程序上可看出:
为了提高可读性,在程序中各条语句书写时采用缩进的方法,该对齐的地方要对齐。
(3)使用VisualC++6.0系统实现该单文件程序。
通过编辑、编译连接和运行获得该程序的输出结果。
运行该程序后,屏幕上显示如下信息:
输入两个int型数:
2528↙
在提示信息后面键入两个int型数:
25和18,中间用空格符分隔,用回车键结束。
输出结果显示如下:
sum=43
(4)分析该程序功能如下:
程序开始包含一个头文件stdio.h,该文件是系统提供的,包含有C语言程序所有标准输入输出操作的文件。
凡是程序中带有输入输出操作的都应包含该文件。
该文件是通过一条文件包含命令来实现包含的。
#include