作者:刘映群 吴道君 孙涛
出版社:中国铁道出版社
格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT
C语言程序设计学习指导与习题解答试读:
前言
PREFACE
C语言作为一种广泛流行的结构化程序设计语言,已成为大多数高职高专理工类专业开设计算机语言课程的入门教学语言。C语言既适合于开发系统程序,又适合于开发应用程序;既具有高级语言功能强大、使用灵活的特点,又具有汇编语言适合编写底层应用程序的实用性。因此,学好C语言对于理工类专业的学生来说具有重要现实意义。
本书是与《C语言程序设计》(刘映群、吴道君、姜霞主编)配套的学习指导教材,但也自成体系,可单独使用。每章均给出了学习要求、基本知识点、习题解答、自我检测题及其参考答案。学习要求与基本知识点部分把每一章的学习要求和主要内容进行了全面、扼要的分析和总结;习题解答部分对主教材中的习题进行了解答;自我检测题及其参考答案部分增选了有关C语言学习的习题以及近年来计算机等级考试(二级C语言程序设计)试题,以选择题、编程题等形式给出,在习题选择方面力求形式多样、涵盖面广,便于学生练习与提高。通过本书的学习,可帮助学生扎实地掌握C语言程序设计知识和工程应用的基本方法,提高分析问题和解决问题的能力。
本书由刘映群、吴道君、孙涛任主编,秦琳媛任副主编。其中,孙涛编写了第1~2章,刘映群编写了第3~5章,吴道君编写了第6~7章,秦琳媛编写了第8~9章,全书由刘映群统稿。
在本书编写过程中,编者还参考了许多教材、文献及网络资料,在此一并向这些资料的作者深表感谢。
由于时间仓促,编者水平有限,书中难免存在疏漏与不妥之处,恳请广大读者批评指正。欢迎读者将建议和意见通过E-mail发给我们(E-mail:liulaoshi2014@foxmail.com),以便再版时进行修订。
编者2017年6月第1章C语言概述1.1学习要求
1.为什么要学习C语言
了解C语言的作用和地位。
2.C语言程序与算法
①熟悉程序与算法的概念。
②了解C语言的发展与特点。
③掌握C语言的基本符号与关键字。
3.Dev-C++集成环境与程序上机操作
①掌握Dev-C++集成环境安装方法。
②掌握C语言程序设计上机操作方法。1.2基本知识点
1.为什么要学习C语言(1)C语言通用性强
C语言语法简单精练、灵活方便、效率高、可移植性好,包含了基本的编程元素,对初学者来说,学习成本低、时间短,能够快速掌握其编程技术。
C语言是较早的一种编程语言,它是现代最流行的编程语言之一,它改变了编程世界,后来推出的很多语言都参照了C语言。
C语言应用广泛,可以用来开发桌面软件、硬件驱动程序、操作系统、单片机等,从微波炉到手机,从汽车到智能电视,都有C语言的影子。(2)编程语言使用排行榜
TIOBE编程语言社区排行榜是编程语言流行趋势的一个指标,每月更新,这份排行榜排名基于互联网上有经验的程序员、课程和第三方厂商的数量。排名使用著名的搜索引擎(如Google、Yahoo!、Wikipedia、YouTube、Baidu等)进行计算。
该指标可以用来检查程序员的编程技能是否仍然是最新的,或开始创建一个新的软件系统时,制定应采取什么编程语言的战略决策。
TIOBE编程语言排行榜中C语言长期排在所有计算机编程语言的前两位,可见其受欢迎的程度。
2.C语言程序与算法(1)程序
计算机程序(Program)是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合,是用汇编语言、高级语言等开发编制出来的可以运行的文件,在计算机中称为可执行文件(扩展名一般为.exe)。(2)算法和算法的基本性质
对于计算机程序应包含的内容,1976年,瑞士著名计算机科学家沃思(Nikilaus Wirth)提出过一个著名公式:
程序=数据结构+算法
他认为,程序就是在数据的某些特定表示方法和结构基础上对抽象算法的具体表述。一个程序应包括以下两部分内容:
①对数据的描述,在程序中要指定数据的类型和数据的组织形式,即数据结构。
②对操作的描述,即操作步骤,也就是算法。
根据算法,依据某种规则编写计算机可以执行的命令序列就是程序,而编写程序时所应遵守的规则就是某种语言的语法。
计算机算法可分为两大类:①数值运算算法,用于求解数值;②非数值运算算法,用于事务管理领域。
算法具有以下特性:
①有穷性。
②确定性。
③有零个或多个输入。
④有一个或多个输出。
⑤可行性。(3)算法的表示形式
算法可以使用多种工具描述,常用的有自然语言、流程图、N-S图、伪代码等。
①用自然语言表示算法。
②用流程图表示算法。
③用N-S图表示算法。
④用伪代码表示算法(常用于算法设计)。
3.C语言的发展与特点(1)C语言的发展历史
C语言的原型是ALGOL(ALGOrithmic Language,算法语言)60。1973年,美国贝尔实验室的D.M.Ritchie在B语言的基础上最终设计出了一种新的语言,他取了BCPL(Basic Combined Programming Language,基本组合程序语言)的第二个字母作为这种语言的名字,这就是C语言。(2)C语言的主要特点
如果用最简单的语言来概括,C语言的优点是简洁、灵活、表达能力强,产生的目标代码质量高、可移植性好。具体讲,有以下几点:
①C语言同时具备了高级语言和低级语言的特征。
②C语言是结构化程序设计语言,具有结构化程序设计所要求的控制语句。
③C语言支持模块化程序设计。
④C语言具有丰富的数据类型。
⑤C语言的运算符种类多,功能强大。
⑥C语言的基本组成部分紧凑、简洁,关键字少。
⑦C语言有大量标准化的库函数。
⑧生成代码质量高。C语言与汇编语言生成的代码相比,前者效率只比后者低10%~20%。
⑨具有特别良好的可移植性,应用性广。
任何事物都不是十全十美的,C语言也有一定的缺陷,了解C语言的缺点,有助于在编写程序时扬长避短。具体讲,有以下两点:
①C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查。从应用的角度,C语言比其他高级语言较难掌握。
②如果不加以特别注意,C程序的安全性将会降低。
4.C语言的基本符号与关键字(1)C语言的基本符号
对于高级程序设计语言来说,字符集是对应于某种高级语言的编译系统所能识别的字母、数字和特殊符号。每种高级语言都有自己特定的字符集合。C语言的字符集合包括:
①26个英文字母(大写和小写字母表示两种不同的符号)。
②10个阿拉伯数字:0、1、2、……、9。
③运算符:+、-、*、/、=、%、<、>、=、&、|、?、1、^、~。
④括号:( )、{ }、[ ]。
⑤标点符号:'、"、:、;。
⑥特殊符号:\、_、$、#。
⑦空白符:空格符、换行符、制表符。
字符集中的字符按照C语言语法组合起来,就能通过编译系统的语法和词法分析。不在字符集中的字符可以在两个双引号(称为字符串常量)或两个单引号(称为字符常量)之间出现,还可以出现在注释行中。(2)标识符
标识符是一种特定的字符序列,主要用来表示程序中使用的变量名、数组名、函数名和其他由用户自定义的数据类型名称等。
标识符的构成与书写规则:
①只能由英文字母、数字和下画线构成,长度为1~32。
②必须以字母或下画线开头。
③严格区分大小写字母。
④不能以关键字作为标识符。
⑤系统内部使用了一些下画线开头的标识符,为防止冲突,建议用户尽量避免使用下画线开头的标识符。
⑥标识符选用应尽量做到“见名知意”,即选用有含义的英文单词或缩写。(3)关键字
关键字又称保留字,是C语言的专用名字,共有32个。
根据关键字的作用分为4类:
①控制语句关键字(12个):break、case、continue、default、do、else、for、goto、if、return、switch、while。
②数据类型关键字(12个):char、enum、double、long、float、int、short、signed、struct、unsigned、union、void。
③存储类型关键字(4个):auto、extern、register、static。
④其他关键字(4个):const、sizeof、typedef、volatile。
5.Dev-C++集成开发环境与程序上机操作
Dev-C++是一个Windows环境下C/C++的集成开发环境(IDE),它是一款自由软件,遵守GPL许可协议分发源代码,它集合了MinGW等众多自由软件,并且可以取得最新版本的各种工具支持。其缺点是Debug功能弱。由于原开发公司在开发完4.9.9.2版本后停止开发,所以现在正由其他公司更新开发,但都基于4.9.9.2。目前Dev-C++较新版本为5.11。(1)Dev-C++集成开发环境的安装与基本设置
安装Dev-C++就像安装其他软件一样,双击安装包,语言默认选择English,初次安装完成后会选择中文简体的选项设置。出现软件版权许可界面后,单击I Agree按钮,出现安装组件选择界面,一般选择默认设置,单击Next按钮,出现安装路径选择界面。单击Browse按钮选择安装路径,之后单击Install按钮进入安装过程,等待片刻,则安装完成。单击Finish按钮,则可运行软件,出现语言设置界面,单击选中“简体中文/Chinese”,然后单击Next按钮,出现软件环境设置界面,接下来可以设置界面的模式和字体颜色大小等,然后单击Next按钮,出现软件环境设置完成界面,单击OK按钮,即完成整个安装和设置过程。(2)Dev-C++集成开发环境的程序上机操作
Dev-C++集成开发环境的程序上机操作步骤如下:
①启动Dev-C++。
②新建源代码文件。
③保存文件。
④编辑程序代码。
⑤编译、运行程序。1.3习题解答
1.以下不是C语言特点的是( )。
A.语言简洁紧凑 B.能够编制出功能复杂的程序
C.C语言可以直接对硬件操作 D.C语言移植性好
答:B
2.C语言是一种( )。
A.机器语言 B.汇编语言 C.高级语言 D.以上都不是
答:C
3.不是C语言提供的合法关键字的是( )。
A.switch B.begin C.case D.default
答:B
4.下列字符列中,能作为单个标识符的是( )。
A.?a B.a=2 C.a.3 D.a_3
答:D
5.下列字符串是标识符的是( )。
A._HJ B.9_student C.long D.LINE 1
答:A
6.下列4个叙述中正确的是( )。
A.C程序中的所有字母都必须小写
B.C程序中的关键字必须小写,其他标识符不区分大小写
C.C程序中的所有字母都不区分大小写
D.C语言中的所有关键字必须小写
答:D
7.目前编写计算机程序一般采用的是( )。
A.机器语言 B.汇编语言 C.高级语言 D.英语
答:C
8.设计一个计算机程序最基本的工作是( )。
A.制定正确的算法 B.选择合理的数据结构
C.制定正确的算法和选择合理的数据结构 D.以上都不是
答:C
9.算法具有5个特性,以下选项中不属于算法特性的是( )。
A.有穷性 B.简洁性 C.可行性 D.确定性
答:B
10.以下叙述中最准确的是( )。
A.计算机程序是处理某一问题所有指令的集合
B.计算机程序是处理某一问题所用到的所有数据的集合
C.计算机程序是处理某一问题的所有指令及其数据的集合
D.计算机程序是处理某一问题的所有指令及其数据的有序集合
答:D
11.C语言中的标识符只能由字母、数字和下画线3种字符组成,且第一个字符( )。
A.必须为字母 B.必须为下画线
C.必须为字母或下画线 D.可以是字母、数字和下画线中任一字符
答:C
12.为解决某一特定问题而设计的指令序列称为( )。
A.文档 B.语言 C.程序 D.系统
答:C
13.以下叙述中正确的是( )。
A.用C程序实现的算法必须要有输入和输出操作
B.用C程序实现的算法可以没有输出,但必须要输入
C.用C程序实现的算法可以没有输入,但必须要有输出
D.用C程序实现的算法可以既没有输入也没有输出
答:C
14.流程图是描述算法的很好的工具,一般流程图由几种基本图形组成。其中输入/输出框图形是( )。
A.平行四边形 B.长方形 C.椭圆形 D.菱形
答:A
15.C语言的主要特点是什么?
答:如果用最简单的语言来概括,C语言的优点是简洁、灵活、表达能力强,产生的目标代码质量高、可移植性好。具体讲,有以下几点:
①C语言同时具备了高级语言和低级语言的特征。高级语言应该具备的优点C语言都有,例如可读性好、容易记忆、再移植性强等,同时C语言还提供了某些接近于汇编程序的功能,如地址处理、二进制位运算以寄存器存放变量等。因此,有人认为C语言是中级语言。C语言适合编写系统程序和各种工具。
②C语言是结构化程序设计语言,具有结构化程序设计所要求的控制语句,如条件语句if,循环语句for、while、do…while等。
③C语言支持模块化程序设计。C语言的程序是由函数构成的,每个函数可以单独编写和调试。因此,遇到大型程序,程序员可以分别编写不同的模块,这使得管理和调试工作变得简单和方便,并且可以实现软件重用,即重复使用那些经常需要使用的程序模块。
④C语言具有丰富的数据类型。C语言支持各种高级语言普遍使用的基本数据类型,并允许用基本数据类型构造复杂数据类型。
⑤C语言的运算符种类多、功能强大。
⑥C语言的基本组成部分紧凑、简洁,关键字少。
⑦C语言有大量标准化的库函数。这些库函数不但包括了各种数学计算函数,还有用于输入/输出的库函数以及系统函数,给程序员编写程序带来了极大的方便。
⑧生成代码质量高。C语言与汇编语言生成的代码相比,前者只比后者低10%~20%。
⑨具有特别良好的可移植性,应用性广。可在许多软件平台和硬件平台上应用。
任何事物都不是十全十美的,C语言也有一定的缺陷,了解C语言的缺点,有助于在编写程序时扬长避短。具体讲,有以下两点:
①C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。
②如果不加以特别注意,C程序的安全性将会降低。例如,如果对指针的使用没有适当的限制,导致指针设置错误,可能引起内存中的信息被破坏,如果经常出现这种错误,极有可能导致系统崩溃。
16.模仿本章例题,编写一个C语言程序,输出以下信息。
答:参考程序如下:
17.算法的描述工具主要有哪些?各有什么优缺点?
答:算法可以使用多种工具描述,常用的有自然语言、流程图、N-S图、伪代码等。
①用自然语言表示算法。用自然语言表示的算法通俗易懂,但文字冗长,容易出现歧义。自然语言的含义往往不太严格,要根据上下文才能准确判断其含义。此外,用自然语言描述分支和循环的算法,不是很直观。因此,除了简单问题,一般不采用自然语言描述算法。
②用流程图表示算法。流程图用一些图框表示各种操作,用箭头表示算法流程。用图形表示算法直观形象,易于理解。
③用N-S图表示算法。在N-S图中,取消了带箭头的流程线。每种结构用一个矩形框表示。N-S图的符号比较简单,用N-S图描述的算法一定是结构化的,不会出现非结构化的现象,所以用N-S图描述算法特别适用于结构化的算法描述。
④用伪代码表示算法(常用于算法设计)。用传统流程图、N-S图表示算法直观易懂,但绘制比较麻烦。在设计一个算法时,可能要反复修改,而修改流程图也是比较麻烦的。因此,流程图适合表示算法,但在设计算法过程中使用不是很理想。为了设计算法方便,常使用伪代码。伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。伪代码不用图形符号,书写方便,格式紧凑,便于向计算机语言算法过渡。
18.(算法设计)求1+2+3+…+100。
答:参考算法描述如下。
S1:设i=1,sum=0;
S2:sum=sum+i,i=i+1;
S3:若i<=100,则返回S2;
S4:显示sum的结果。
19.(算法设计)依次输入10个数,打印其中最小者和最大者。
答:参考算法描述如下。
S1:设i=0,gi=0,gmax=0,gmin=0;
S2:输入gi,gmax=gi,gmin=gi;
S3:i的值加1;
S4:输入gi;
S5:如果gi>gmax,则gmax=gi,如果gi S6:若i<9,返回S3; S7:打印gmin、gmax。 20.(算法设计)有10个学生,要求将他们之中成绩在80分以上者打印出来。用g代表学生成绩,gi代表第i个学生成绩。 答:参考算法描述如下。 S1:设i=1; S2:如果gi≥80,则打印gi,否则不打印; S3:i的值加1; S4:若i≤10,返回S2,否则,结束。1.4自我检测题 1.下列选项中均不是C语言关键字的是( )。 2.下列字符串常量不正确的是( )。 A.'abc' B."12'12" C."0" D." " 3.下列用户标识符不合法的是( )。 A.abc.c B.file C.Main D.PRINT 4.下列C语言关键字合法的是( )。 A.swith B.cher C.Case D.default 5.下列用户标识符合法的是( )。 A._0123与ssiped B.del-word与signed C.list与*jer D.keep%与wind 6.下列用户标识符不合法的是( )。 A._123 B.Printf C.A$ D.Dim 7.下列在C语言程序中可以用作变量名的是( )。 A.1 B.a1 C.int D.*p 8.C语言提供的合法数据关键字是( )。 A.float B.Signed C.Integer D.Char 9.以下符号中不能用作用户标识符的是( )。 A.256 B.void C.scanf D.Struct 10.下面选项中均为不合法用户标识符的是( )。 11.下面可用作用户标识符的是( )。 12.下列用户标识符合法的是( )。 A.PAd与p#d B.Scanf与a10 C.void与max D.A*与temp 13.下列数据类型关键字合法的是( )。 A.Float B.signed C.integer D.Char 14.下列不能用作用户标识符的是( )。 A._256 B.void C.scanf D.Struct 15.以下C语言标识符不正确的是( )。 A.int B.a_1_2 C.ab1exe D._x 16.以下C语言标识符正确的是( )。 A.#define B._123 C.%d D.\n 17.下列可用作C语言标识符的是( )。 18.下列均是C语言关键字的是( )。 A.auto,enum,include B.switch,typedef,continue C.signed,union,scanf D.if,struct,type 19.下列不属于C语言关键字的是( )。 A.default B.register C.enum D.external 20.为了避免流程图在描述程序逻辑时的灵活性提出了用框图来代替传统的程序流程图,通常也把这种图称为( )。 A.PAD图 B.N-S图 C.结构图 D.数据流图 21.算法的有穷性是指( )。 A.算法程序的运行时间是有限的 B.算法程序所处理的数据量是有限的 C.算法程序的长度是有限的 D.算法只能被有限的用户使用 22.程序流程图中带有箭头的线段表示的是( )。 A.图元关系 B.数据流 C.控制流 D.调用关系 23.软件是指( )。 A.程序 B.程序和文档 C.算法加数据结构 D.程序、数据与相关文档的完整集合 24.C语言用户标识符的定义方式是什么? 25.说明算法可以采用哪几种控制结构组合。 26.程序有哪3种基本结构? 27.传统流程图与N-S图最大的区别是什么? 28.用N-S图表示求解以下问题的算法。(1)3个数a、b、c,要求按由大到小的顺序把它们输出。(2)依次将10个数输入,求出其中最大的数和最小的数并输出。(3)求1+2+3+…+100的值。(4)求1×2×3×…×10的值。(5)求下列分段函数的值。(6)求100~200之间的所有素数。(7)求一元二次方程:ax 2 +bx+c=0的根。分别考虑∆=b 2 -4ac大于0、等于0和小于0三种情况。1.5自我检测题参考答案 1.A 2.A 3.A 4.D 5.A 6.C 7.B 8.A 9.B 10.C 11.B 12.B 13.B 14.B 15.A 16.B 17.A 18.B 19.D 20.B 21.A 22.C 23.D 24.C语言规定标识符只能由字母、数字和下画线3种字符组成,且第一个字符必须为字母或下画线,同时C语言还规定标识符不能为C语言的关键字。 25.算法的控制结构给出了算法的基本框架,不仅决定了算法中各操作的执行顺序,也直接反映了算法的设计是否符合结构化原则。一个算法一般可以用顺序、选择、循环3种基本控制结构,通过顺序或嵌套组合而成。 26.3种基本结构是:顺序结构、选择结构和循环结构。 27.N-S图去掉了在传统流程图中常用的流程线,使得程序的结构显得更加清晰、简单。 28.(1)(2)(3)(4)(5)(6)(7)第2章数据类型、表达式及其运算2.1学习要求 1.常量与变量 ①掌握直接常量和符号常量的使用方法。 ②掌握变量的定义和初始化方法。 2.C语言的数据类型 ①熟悉C语言数据类型的种类。 ②掌握整型、实型及字符型数据类型的定义和使用方法。 ③掌握各种数据类型的转换方法。 3.运算符及表达式 ①熟悉C语言运算符的种类。 ②掌握算术、关系、逻辑、赋值及其他运算符和其对应表达式的表示方法及使用。2.2基本知识点 1.常量与变量(1)常量 常量是指在程序运行过程中其值不随程序的运行而改变的量。常量在程序中不需要进行任何说明就可以直接使用,常量本身就隐含了它的类型。常量区分为不同的类型,分为直接常量和符号常量。 ①直接常量。直接常量是直接写出来的,其书写形式决定了它的类型。直接常量包括整型常量、实型常量、字符型常量和字符串常量。 ②符号常量。符号常量是指用一个标识符代表一个常量。(2)变量 变量是指在程序运行过程中其值可以改变的量。程序中使用的变量名是用户根据需要而取名,变量名必须符合标识符的命名规则。 2.C语言的数据类型 本章只介绍数据类型的说明。所谓数据类型是按被定义变量的性质、表示形式、占据存储空间的多少、构造特点来划分的。在C语言中,数据类型可分为:基本数据类型、构造数据类型、指针类型、空类型四大类。这里介绍基本数据类型中的整型、实型、字符型,以及数据类型的转换。(1)整型 int是C语言中的基本整数类型,可以满足处理数据的一般需要。C语言还提供了可以修饰int的signed、unsigned、long、short四个关键字,可以定义具体的一些整型数据。 ①类型修饰符。除void类型外,基本数据类型之前都可以加各种修饰符。在基本数据类型前加类型修饰符可以更加准确地对类型进行声明。用于修饰基本类型的修饰符有4种: ● signed:有符号数,可以修饰如int、char类型。char类型默认无符号,当用signed修饰char类型时,表示有符号字符型。 ● unsigned:无符号数,可以修饰int、char类型。 ● long:长型,可以修饰int、double类型。 ● short:短型,可以修饰int类型。 当类型修饰符单独使用(即将其修饰的基本类型省略)时,则系统默认其为int型。 ②整型数据分类。C语言并未对数据类型统一规定必须占用多少字节,而由各种版本的C语言确定各自的长度。(2)实型 实型也称为浮点型。实型常量也称为实数或者浮点数。在C语言中,实数只采用十进制。它有两种形式:十进制小数形式、指数形式。 ①实型数据在内存中的存放形式。实型数据一般占4字节(32位)内存空间,按指数形式存储。 ②实型变量的分类。实型变量分为单精度(float型)、双精度(double型)和长双精度(long double型)三类。在Dev-C++中单精度型占4字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供7位有效数字。双精度型占8字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。 ③实型数据的舍入误差。由于实型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的。(3)字符型 ①字符常量。在C语言中,字符型数据用于表示一个字符值,但字符数据的内部表示是字符的ASCII代码,并非字符本身。 字符常量的书写方法是用单引号(' ')括起一个字符,例如:'b'、'r'等都是不同的字符常量。 一个字符常量在计算机存储中占1字节,字符常量中的单引号是定界符,不是字符常量的一部分。 由于字符型常量是以整型编码形式存放的,所以可以参与各种运算。 对于大多数可印刷的字符常量都能用以上方法来表示,但对于一些特殊字符,C语言约定用“\”开头的字符或字符列来标记,称为转义字符,主要用于控制信息。 ②字符串常量。字符串常量是一对双引号(" ")括起来的字符序列。字符的个数称为其长度,简称为字符串。(4)数据类型的转换 数据类型转换就是将数据(变量、表达式的结果)从一种类型转换到另一种类型。例如,为了保存小数可以将int类型的变量转换为double类型。 数据类型转换的一般格式为:(type_name)expression 其中,type_name为要转换到的数据类型,expression为表达式。 这种由程序员显式进行的转换称为强制类型转换。除了强制类型转换,在不同数据类型的混合运算中编译器也会隐式地进行数据类型转换,称为自动类型转换。 3.运算符及表达式 C语言中运算符和表达式数量之多,在高级语言中是少见的。正是丰富的运算符和表达式使C语言功能十分完善,这也是C语言的主要特点之一。 C语言的运算符不仅具有不同的优先级,而且还有一个特点,就是它的结合性。在表达式中,各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的制约,以便确定是自左向右进行运算还是自右向左进行运算。这种结合性是其他高级语言的运算符所没有的,因此也增加了C语言的复杂性。 C语言的运算符可分为以下几类: ①算术运算符:用于各类数值运算,包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。 ②关系运算符:用于比较运算,包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)6种。 ③逻辑运算符:用于逻辑运算,包括与(&&)、或(||)、非(!)3种。 ④位操作运算符:参与运算的量,按二进制位进行运算,包括位与(&)、位或(|)、位非(~)、位异或(A)、左移(<<)、右移(>>)6种。 ⑤赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=、-=、*=、/=、%=)和复合位运算赋值(&=、!=、^=、>>=、<<=)3类共11种。 ⑥条件运算符:这是一个三目运算符,用于条件求值(?:)。 ⑦逗号运算符:用于把若干表达式组合成一个表达式(,)。 ⑧指针运算符:用于取内容(*)和取地址(&)2种运算。 ⑨求字节数运算符:用于计算数据类型所占的字节数(sizeof)。 ⑩特殊运算符:有括号()、下标[]、成员(->、.)等几种。(1)算术运算符及算术表达式 ①基本的算术运算符: ● 加法运算符“+”:加法运算符为双目运算符,即应有两个量参与加法运算,如a+b、4+8等,具有右结合性。 ● 减法运算符“-”:减法运算符为双目运算符,如a-b、8-4,但“-”也可作负值运算符,此时为单目运算,如-x、-5等具有左结合性。 ● 乘法运算符“*”:双目运算,具有左结合性。 ● 除法运算符“/”:双目运算,具有左结合性。参与运算量均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型。 ②算术表达式、运算符的优先级和结合性: 表达式是由常量、变量、函数和运算符组合起来的式子。一个表达式有一个值及其类型,它们等于计算表达式所得结果的值和类型。表达式求值按运算符的优先级和结合性规定的顺序进行。单个的常量、变量、函数可以看作表达式的特例。 算术表达式是由算术运算符和括号连接起来的式子。 ● 算术表达式:用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子。 ● 运算符的优先级:C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。 ● 运算符的结合性:C语言中各运算符的结合性分为两种:左结合性(自左至右)和右结合性(自右至左)。例如,算术运算符的结合性是自左至右,即先左后右。例如,有表达式x–y+z,则y应先与“-”号结合,执行x-y运算,然后再执行+z的运算。这种自左至右的结合方向就称为“左结合性”,而自右至左的结合方向称为“右结合性”。最典型的右结合性运算符是赋值运算符,如x=y=z,由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算。C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。 ③强制类型转换运算符。其一般形式为:(类型说明符)(表达式) 其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。 ④自增、自减运算符: ● 自增1、自减1运算符:自增1运算符记为“++”,其功能是使变量的值自增1。 ● 自减1运算符记为“--”,其功能是使变量值自减1。 ● 自增1、自减1运算符均为单目运算,都具有右结合性,可有以下几种形式: ++i:i自增1后再参与其他运算。 --i:i自减1后再参与其他运算。 i++:i参与运算后,i的值再自增1。 i--:i参与运算后,i的值再自减1。(2)关系运算符及关系表达式 一个条件若成立,那么它是真的,否则为假,因此“真”和“假”是关系运算和逻辑运算的基础,也是其基本元素。C语言中,“真”就是非零值,“假”就是零值。关系运算或逻辑运算的返回结果若为真则用1表示,若为假则用0表示。 ①关系运算符和表达式。在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。比较两个量的运算符称为关系运算符。 ②关系运算符及其优先次序。在C语言中有以下关系运算符: ● <:小于。 ● <=:小于或等于。 ● >:大于。 ● >=:大于或等于。 ● ==:等于。 ● !=:不等于。 ③关系表达式。关系表达式的一般形式为: 表达式 关系运算符 表达式(3)逻辑运算符及逻辑表达式 逻辑运算表示两个数据或表达式之间的逻辑关系。C语言中提供了3种逻辑运算符: ● &&:与运算。 ● ||:或运算。 ● !:非运算。(4)赋值运算符和赋值表达式 ①赋值运算。“赋值”是根据实际应用给变量指定一个确定的值,它通过赋值运算符“=”实现。变量在定义类型之后,赋值之前,它的值是不确定的,如果不对它进行赋值而直接用该变量参加运算,将会产生一个无用的结果。 ②复合运算。赋值表达式有一种变形,称为复合赋值,它简化了一定类型的赋值操作的编码。例如,“x=x+10;”可以改写成“x+=10;”。其中,操作符“+=”告诉编译程序:x被赋值为“x加10”。类似的还有-=、*=、/=、%=,它们的使用方法完全一样。(5)其他运算符和表达式 ①逗号运算符和表达式。C语言提供一种特殊的运算符——逗号运算符,又称“顺序求值运算符”。用它将两个表达式连接起来,称为逗号表达式。逗号表达式的一般形式为: 表达式1,表达式2 逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。 ②指针运算符和表达式。在C语言中有两个关于指针的运算符: ● &运算符:取地址运算符,&m即是变量m的地址。 ● *运算符:指针运算符,*ptr表示其所指向的变量。 ③求字节数运算符和表达式。求字节数运算符sizeof是一个比较特殊的单目运算符,用它可以求各种数据类型所占的字节数。 ④特殊运算符和表达式。特殊运算符有括号( )、下标[ ]、成员(->、.)等几种。2.3习题解答 1.以下所列的C语言整型常量中,正确的是( )。 A.0*10 B.0976 C.076L D.01ff 答:C 2.C语言中下列运算符的操作数必须为整型的是( )。 A.% B.++ C./ D.= 答:A 3.设a和b均为int型变量,则执行以下语句后的输出为( )。 int a=20;int b=3;printf("%d\n",a+=(b%=2)); A.20 B.21 C.0 D.23 答:B 4.已知int i;,则执行语句i=2.6;后,i的值为( )。 A.2 B.3 C.2.6 D.不确定 答:A 5.以下合法的字符常量为( )。 A.'ab' B.'\482' C.'\' D.'\xaf' 答:C 6.以下不能定义为用户标识符的是( )。 A.scanf B.Void C._3com D.int 答:D 7.以下符合C语言语法的实型常量是( )。 A.1.2E0.5 B.3.14159E C..5E-3 D.E15 答:C 8.下列选项中可以作为C语言中合法整数的是( )。 A.10110B B.0386 C.0Xffa D.x2a2 答:C 9.设有以下定义: int a=0;double b=1.25;char c='A'; #define d 2 则下面语句中,错误是( )。 A.a++; B.b++; C.c++; D.d++; 答:D 10.下列关于C语言用户标识符的叙述中正确的是( )。 A.用户标识中可以出现下画线和中画线(减号) B.用户标识符中不可以出现中画线,但可以出现下画线 C.用户标识符中可以出现下画线,但不可以放在用户标识符的开头 D.用户标识符中可以出现下画线和数字,它们都可以放在用户标识符的开头 答:B 11.下列关于单目运算符++、--的叙述中正确的是( )。 A.它们的运算对象可以是任何变量和常量 B.它们的运算对象可以是char型变量和int型变量,但不能是float型变量 C.它们的运算对象可以是int型变量,但不能是double型变量和float型变量 D.它们的运算对象可以是char型变量、int型变量和float型变量 答:D 12.若变量已正确定义并赋值,则下面符合C语言语法的表达式是( )。 A.a:=b+1 B.a=b=c+2 C.int 18.5%3 D.a=a+7=c+b 答:B 13.假定有以下变量定义:int k=7,x=12;,则值为3的表达式是( )。 A.x%=(k%=5) B.x%=(k–k%5) C.x%=k–k%5 D.(x%=k)-(k%=5) 答:D 14.设x和y均为int型变量,则下列语句:x+=y;y=x-y;x-=y;的功能是( )。 A.把x和y按从大到小排列 B.把x和y按从小到大排列 C.无确定结果 D.交换x和y中的值 答:D 15.设x、y、z和k都是int型变量,则执行表达式:x=(y=4,z=16,k=32)后,x的值为( )。 A.4 B.16 C.32 D.52 答:C 16.设有以下的变量定义: 则以下符合C语言语法的表达式是( )。 A.a+=a-=(b=4)*(a=3) B.x%(-3) C.a=a*3=2 D.y=float(i) 答:A 17.设有语句int a=3;,则执行了语句a+=a-=a*a后,变量a的值是_______。 答:-12 18.设x为int型变量,描述“x是偶数”的表达式是_______。 答:x%2==0 19.判断变量a、b的值均不为0的逻辑表达式为_______。 答:a!=0&&b!=0 20.编写程序,提示从键盘上输入两个整数,计算并输出两数的和、差、积、商、余数。 答:参考代码如下:2.4自我检测题 1.下面4个选项中,均是合法整型常量的选项是( )。 2.下面4个选项中,均是不合法的转义符的选项是( )。 3.下面不正确的字符串常量是( )。 A.'abc' B."12'12" C."0" D." " 4.在C语言中,逻辑值“真”的表示是用( )。 A.true B.整型值0 C.非零整型值 D.T 5.若有以下定义 char s='\092'; 则该语句( ) A.使s的值包含一个字符 B.定义不合法,s的值不确定 C.使s的值包含4个字符 D.使s的值包含3个字符 6.设C语言中,int类型数据占2字节,则float类型数据占( )个字节。 A.1 B.2 C.8 D.4 7.已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='A'+'6'-'3'后,c2中的值为( )。 A.D B.68 C.不确定的值 D.C 8.逻辑运算符两侧运算对象的数据类型是( )。 A.只是0或1 B.只能是0或非0正数 C.只能是整型或字符型数据 D.可以是任何合法的类型数据 9.Turbo C中int类型变量所占字节数是( )。 A.1 B.2 C.3 D.4 10.在C语言中,char型数据在内存中的存储形式是( )。 A.补码 B.反码 C.原码 D.ASCII码 11.若有以下定义,则能使值为3的表达式是( )。 int k=7,x=12; A.x%=(k%=5) B.x%=(k-k%5) C.x%=k-k%5 D.(x%=k)-(k%=5) 12.判断char型变量c1是否为小写字母的正确表达式为( )。 A.'a'<=c1<='z' B.(c1>=A.&&(c1<='z') C.('a'>=c1)||('z'<=c1) D.(c1>='a')&&(c1<='z') 13.已知各变量的类型说明如下: 则以下不符合C语言语法的表达式是( )。 A.x%(-3) B.w+=-2 C.k=(a=2,b=3,a+b) D.a+=a-=(b=4)*(a=3) 14.若t为double类型,表达式t=1,t+5,t++的值是( )。 A.1 B.6.0 C.2.0 D.1.0 15.设n=10,i=4,则赋值运算n%=i+1执行后,n的值是( )。 A.0 B.3 C.2 D.1 16.设int n=3;则有表达式++n,n的结果是( )。 A.2 B.3 C.4 D.5 17.下面4个选项中,均是非法常量的选项是( )。 18.下面4个选项中,均是不合法整型常量的选项是( )。 19.下面正确的字符常量是( )。 A."c" B.'\\'' C.'W' D.' 20.以下每个选项都代表一个常量,其中正确的整型常量是( )。 A.1.2 B.-20 C.1,000 D.4 5 6 21.在下列C语言程序中,可以用作变量名的是( )。 A.1 B.a1 C.int D.*p 22.sizeof(float)是( )。 A.一个双精度表达式 B.一个整型表达式 C.一种函数调用 D.一个不合法的表达式 23.在C语言中,int、char和short三种类型数据在内存中所占用的字节数( )。 A.由用户自己定义 B.均为2个字节 C.是任意的 D.由所用机器的机器字长决定 24.以下叙述中正确的是( )。 A.a是实型变量,C语言允许进行以下赋值a=10,因此可以这样说:实型变量中允许存放整型值 B.在赋值表达式中,赋值号右边既可以是变量也可以是任意表达式 C.执行表达式a=b后,在内存中a和b存储单元中的原有值都将被改变,a的值已由原值改变为b的值,b的值由原值变为0 D.已有a=3,b=5当执行了表达式a=b,b=a之后,已使a中的值为5,b中的值为3 25.表达式18/4*sqrt(4.0)/8值的数据类型为( )。 A.int B.float C.double D.不确定 26.下列运算符中,不属于关系运算符的是( )。 A.< B.> = C.! D.!= 27.若希望当A的值为奇数时,表达式的值为真,A的值为偶数时,表达式的值为假,则以下不能满足要求的表达式是( )。 A.A%2==1 B.!(A%2==0) C.!(A%2) D.A%2 28.已知各变量的类型说明如下: 则以下符合C语言语法的表达式是( )。 A.a+=a-=(b=4)*(a=3) B.a=a*3=2 C.x%(-3) D.y=float(i) 29.若变量已正确定义并赋值,下面符合C语言语法的表达式是( )。 A.a=a+7; B.a=7+b+c,a++ C.int 12.3%4 D.a=a+7=a+b 30.逗号表达式(a=3*5,a*4),a+15的值为( )。 A.15 B.60 C.30 D.不确定 31.设int n=3;则n++的结果是( )。 A.2 B.3 C.4 D.5 32.下面4个选项中,均是不合法浮点数的选项是( )。 33.下面4个选项中,均是不正确的八进制或十六进制数的选项是( )。 34.以下每个选项都代表一个常量,其中不正确的实型常量是( )。 A.2.607E-1 B.0.8103e2 C.-77.77 D.45.6e-2 35.以下选项中正确的常量是( )。 A.012 B.-20 C.1,000 D.4 5 6 36.现已定义整型变量int i=1;执行循环语句while(i++<5);后,i的值为( )。 A.1 B.5 C.6 D.以上3个答案均不正确 37.设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为( )。 A.int B.float C.double D.不确定 38.若有说明语句:char c='\72';则变量c( )。 A.包含1个字符 B.包含2个字符 C.包含3个字符 D.说明不合法,c的值不确定 39.设x、y、z都是int整型变量,且x=2,y=3,z=4,则下面的表达式中,值为0的表达式是( )。 A.'x'&&'z' B.(!y==1)&&(!z= =0) C.(x 40.以下叙述中正确的是( )。 A.在C程序中无论是整数还是实数,只要在允许的范围内都能准确无误的表示 B.若在定义语句double a,b;之后,因为变量a、b已正确定义,因此立刻执行这样的表达式:a=b+9.381是正确的 C.在C程序中,常量、变量、函数调用,都是表达式的一种 D.在main()函数中,变量一经定义,系统将自动赋予初始值 41.设有说明:char w;int x;float y;double z;,则表达式w*x+z-y值的数据类型为( )。 A.float B.char C.int D.double 42.设a=2,b=3,c=4,则表达式a+b>c&&b= =c&&a||b+c&&b+c的值为( )。 A.5 B.8 C.0 D.1 43.以下不正确的叙述是( )。 A.在C程序中,逗号运算的优先级最低 B.在C程序中,APH和aph是两个不同的变量 C.若a和b类型相同,在计算了赋值表达式a=b后b中的值将放入a中,而b中的值不变 D.当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值 44.以下结果为整型的表达式(设有int i; char c; float f;)是( )。 A.i+f B.i*c C.c+f D.i+c+f 45.下面4个选项,均是合法转义字符的选项是( )。 46.下面4个选项中,均是正确的数值常量或字符常量的选项是( )。 47.在C语言中,下列哪个字符为合法的字符常量( )。 A.'\084′ B.'\x43′ C.'ab′ D.'\0′ 48.已知int x,y,z;执行语句x=(y=(z=10)+5)-5;后x、y、z的值是( )。 49.设a为整型变量,初值为12,执行完语句a+=a-=a*a后,a的值是( )。 A.552 B.144 C.264 D.-264 50.设x为int型变量,则执行以下语句段后,x的值为( )。 x=10; x += x -=x - x; A.10 B.20 C.40 D.30 51.若有定义,int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是( )。 A.2.500000 B.2.750000 C.3.500000 D.0.000000 52.下列运算符中优先级最高的是( )。 A.< B.+ C.&& D.!= 53.以下符合C语言语法的,赋值表达式是( )。 A.d=9+e+f=d+9 B.d=9+e,f=d+9 C.d=9+e,e++,d+9 D.d=9+e++=d+7 54.以下使i的运算结果为4的表达式是( )。 55.设int n=2;则有表达式++n+1==4,n的结果是( )。 A.1 B.2 C.3 D.4
试读结束[说明:试读内容隐藏了图片]