C语言程序设计同步训练与上机指导(第三版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-02 16:32:58

点击下载

作者:时景荣,李立春

出版社:中国铁道出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

C语言程序设计同步训练与上机指导(第三版)

C语言程序设计同步训练与上机指导(第三版)试读:

版权信息书名:C语言程序设计同步训练与上机指导(第三版)作者:时景荣,李立春出版社:中国铁道出版社出版时间:2015.02ISBN:9787113199241本书由中国铁道出版社授权北京当当科文电子商务有限公司制作与发行。— · 版权所有 侵权必究 · —内容简介

本书是《C语言程序设计(第三版)》(时景荣、李鑫主编,中国铁道出版社)的配套教材。编写时突出了基本概念、基本方法和基本技能,尽量做到少而精,重点放在“常用、实用”的内容上,习题和实验内容丰富,具有启发性和综合性,可有效训练学生的程序设计能力。

全书分三部分。第一部分为C语言程序设计同步训练,每章中都包含“要点难点阐述”“例题分析”“同步练习”“参考答案”四个环节。第二部分为C语言程序设计上机指南,介绍了Turbo C 2.0集成环境下的上机过程及程序调试和测试的基本知识和常用方法,以及Visual C++6.0集成开发的使用方法。第三部分为C语言程序设计上机实验,结合理论教学精选内容,安排了15个实验(每个实验都包含实验目的、预习内容、实验内容、课外任务);其中实验15为综合程序设计,便于学生综合应用所学程序设计知识,进一步提高程序设计的能力。

本书既可作为高等学校各专业C语言程序设计课程的配套教材,也可以作为自学C语言程序设计者的参考书。第三版前言

本书是《C语言程序设计(第三版)》(时景荣、李鑫主编,中国铁道出版社)的配套教材。编写时突出了基本概念、基本方法和基本技能,尽量做到少而精,重点放在“常用、实用”的内容上,习题和实验内容丰富,具有启发性和综合性,可有效训练学生的程序设计能力。

全书分三部分。

第一部分为C语言程序设计同步训练。每章中都包含“要点难点阐述”“例题分析”“同步练习”“参考答案”四个环节。“要点难点阐述”力图用简洁准确的语言给出本章的脉络,突出重点、难点,便于读者把握。“例题分析”以实例进一步解析本章要点、难点,分析可能的出错及原因,读者可以从中学习阅读程序和分析问题的方法。“同步练习”以选择题、填空题、编程题(5~11章)三种形式,帮助读者消化理解和应用本章内容。编程题程序前有算法分析,程序中有注释,程序后有测试;有的题目给出多种方法,以开拓读者思维。习题的选择既考虑了知识点的覆盖面,以培养程序设计能力为主线,又兼顾了计算机等级考试的能力训练。

第二部分为C语言程序设计上机指南,介绍了Turbo C 2.0集成环境下的上机过程,程序调试和测试的基本知识和常用方法,以及Visual C++6.0集成开发环境的使用方法。

第三部分为C语言程序设计上机实验。给出了上机实验的目的和要求,结合理论教学精选内容,安排了15个实验(每个实验都包含:实验目的、预习内容、实验内容、课外任务),对于有一定难度的实验题目给出提示,便于进行实验教学。特别在实验15中安排了综合程序设计,便于学生综合应用所学程序设计知识,独立完成相对完整且有一定难度的题目,进一步提高程序设计能力。

本书既可以用作本科、专科教学的配套教材,又可以作为计算机等级考试培训辅导用书,也可以作为自学C语言程序设计者的参考书。

本书由时景荣、李立春任主编,金红娇、金炳涛任副主编,张晓东、赵岩参与了编写。第1~4章由赵岩编写,第5~8章由金红娇编写,第9~11章由金炳涛编写,第12~13章由张晓东编写,第14、15章由李立春编写。全书由时景荣统稿,王立国主审。

在本书的编写过程中,有许多老师和同学提出了宝贵的意见和建议,有的还参加了书中部分程序的调试,在此表示衷心感谢。

限于时间,书中难免有疏漏和不妥之处,敬请读者给予指正。编 者2014年12月第一部分C语言程序设计同步训练第1章程序设计概述1.1要点难点阐述

1.程序设计的过程(1)任务分析

任务分析即弄清楚任务中数据与数据之间的逻辑关系、具体的操作要求(如需要输入哪些数据,要对数据进行哪些处理,要求输出哪些数据等),也就是弄清楚要计算机“做什么”。(2)算法设计

算法设计是设计解决问题的方法和步骤,对问题处理过程进行细化,即明确要计算机“怎么做”。(3)程序编制

首先编码,即选择一种程序设计语言,根据算法写出源程序;然后编辑,即将编写好的源程序通过编辑器输入到计算机内,并以纯文本文件的形式保存。(4)调试运行

计算机不能直接执行源程序,需通过编译和连接生成计算机能够执行的可执行文件。调试运行过程如下:

①编译:将源程序翻译成目标程序,翻译时编译器对源程序进行语法检查,给出编译信息。若有语法错误,通过编辑器修改,再编译直到编译成功,生成目标程序。

②连接:将目标程序和程序中所需的目标程序模块(如调用的标准函数、执行的输入/输出模块等)连接后生成可执行文件。

③运行并分析结果:如需输入数据,应设计能涵盖各种情况的测试数据,然后运行程序,检查结果是否符合问题要求,是否正确。即使程序能正常运行并得到了运行结果,也有可能存在逻辑错误,而计算机是无法检查出这些错误的。若存在逻辑错误,如果是算法有错,则应先修改算法,再修改程序;如果算法正确而程序写得不对,则直接修改程序。(5)编写程序文档

程序文档就是程序的使用说明书和技术说明书,它记录了程序设计的全过程。程序文档对于开发、维护时间较长的软件来说至关重要,尤其是对软件进行二次开发时更离不开程序文档。

2.数据结构与算法(1)数据结构

数据结构包括三个方面的内容:

①数据的逻辑结构:描述数据与数据之间的逻辑关系。

②数据的存储结构:描述数据和数据之间的关系在计算机中存储的方式。

③数据的运算集合:对数据进行的所有操作(如输入、查找、更新、排序、输出等)。

确定了数据的逻辑结构,就明确了数据运算的集合。确定了如何存储数据,就可以设计算法了。(2)算法

算法是为解决一个问题而采取的方法和步骤。算法定义了一个操作序列,描述怎样从给定的数据经过有限步骤的处理后产生所求的输出结果。算法一般包括3个部分:

①初始化(包括输入原始数据和为数据处理所做的准备)。

②数据处理(实现具体的功能)。

③输出处理结果。

描述算法有多种方法,常用的有流程图和N-S图。

3.结构化程序设计方法

结构化程序设计也称面向过程的程序设计,如C语言就是结构化的程序设计语言。

结构化程序设计方法的基本思想是把一个复杂的问题分解成若干个功能独立的模块,分而治之。具体地说就是:

①在软件设计和实现的过程中,采用自顶向下、逐步细化的模块化设计原则。

②在代码编写时,每一个模块内可以采用3种基本结构。

上述3种基本结构即顺序结构、选择结构和循环结构。

①顺序结构:按顺序依次执行。

②选择结构(又称分支结构):根据条件判断,选择某分支执行。

③循环结构:只要循环条件成立,就重复执行一组语句(这组语句通常称为循环体)。循环结构分为两种类型。

·当型循环(先判断):当循环条件为真时重复执行循环体,为假时循环结束。

·直到型循环(后判断):重复执行循环体,直到循环条件为假时,循环结束。

4.C语言概述(1)C语言程序的结构

①C语言程序是由函数组成的,函数是C语言程序的基本单位。C语言中有3种函数:main()函数、系统提供的库函数、用户自定义的函数。

②一个函数由两部分组成:

·函数首部:包括函数类型、函数名、函数形式参数及类型说明等。

·函数体:即函数首部下面最外层大括号内的部分。函数体又可以分为声明部分和执行部分。

③一个C语言的源程序有且只有一个main()函数,有若干个(包括零个)其他函数。

④main()函数的位置没有限制,可以位于程序的任何地方,但是C程序总是从main()函数开始执行,并且结束于main()函数。

⑤C语言程序书写格式自由。一行可以写多个语句,一个语句也可以写在多行上。用分号“;”标识语句结束。

⑥C语言源程序中可以在任何可以插入空格的地方插入注释,格式为:

/*注释内容*/

注释内容可以是中文或英文,也可以是任何可显示的符号。

⑦C语言中没有输入和输出语句。C语言程序中的输入和输出操作是通过调用库函数scanf()、printf()和其他输入/输出函数来完成的。(2)C语言的标识符

标识符是一个作为名字的字符序列,用来标识变量名、类型名、数组名、函数名和文件名等。C语言的标识符可分为用户标识符、保留字和预定义标识符3类。

①用户标识符:就是程序设计者根据编程需要自己定义的名字,用来作为变量名、符号常量名、数组名、函数名、类型名和文件名等。

标识符命名规则:可以是单个字母;也可以由字母、数字和下画线组成,但必须以字母或下画线开头。

注意: 在C语言中,大小写字母是不同的字符。例如,SUM、Sum、sum是3个不同的标识符。

②保留字(又称关键字):C语言专门用来描述类型和语句的标识符,共有32个。

注意: 在C语言中,每个保留字都用小写英文字母表示,在C语言中各自代表固定的含义,不允许作为用户标识符使用。

③预定义标识符:除了上述保留字外,还有一类具有特殊意义的标识符,它们被用作编译预处理命令或库函数的名字,如define、include、scanf、printf等。这类标识符称为预定义标识符。最好不要用它们作为用户标识符。1.2例题分析【例1.1】  下列选项中不是结构化程序基本结构的是。

A.顺序结构   B.跳转分支结构   C.选择结构   D.循环结构

解题知识点: 结构化程序设计方法。

解: 答案为B。本题的解题要点是:结构化程序设计方法中的三种基本结构。【例1.2】  下面每组3个标识符,可以用做C语言用户标识符的一组是。

A.void word FOR   B.a1_b1_123IF

C.Case -abc xyz   D.case5Liti2ab

解题知识点: C语言的标识符。

解: 答案为B。本题的解题要点是:C语言的标识符命名规则,即可以是单个字母,也可以由字母、数字和下画线组成,但必须是以字母或下画线开头,用户标识符不能是C语言的关键字。选项A中void是C语言的关键字不可以,选项C中第二个有减号不可以,选项D中第三个以数字开头不可以。【例1.3】  下列选项中,不是C语言提供的合法关键字的是。

A.switch   B.default   C.Case   D.if

解题知识点: C语言的关键字。

解: 答案为C。本题的解题要点是:C语言的关键字都用小写英文字母表示。1.3同步练习

一、选择题

1.编辑程序就是_____。

A.调试程序   B.建立并修改源程序文件

C.将源程序变成目标程序   D.命令计算机执行程序

2.C语言程序的基本单位是_____。

A.函数   B.语句   C.字符   D.程序行

3.在一个源程序中,main()函数的位置_____。

A.必须在最前面   B.可以在程序的任何位置

C.必须在最后面   D.必须在系统提供的库函数调用之后

4.系统默认的C语言源程序的扩展名是_____。

A..exe   B..c   C..obj   D..doc

5.C语言用标志语句结束_____。

A.逗号   B.分号   C.句号   D.冒号

6.下面可以用作C语言用户标识符的一组标识符是_____。

A.void word FOR   B.a1_b1_123 IF

C.Case-abc xyz   D.case5 liti2ab

7.下面的标识符中,不合法的用户标识符为_____。

A.Pad   B._intC.   C.AR   D.a#b

8.下面的标识符中,合法的用户标识符为_____。

A.day1   B.long   C.3AB   D.a+b

二、填空题

1.软件包括程序和_____。

2.程序的错误一般分为两种: (1) 和 (2) ,前者编译器可以发现,后者编译器无法发现。

3.C语言程序是由函数构成的,其中_____main()函数。

4.C语言程序的执行总是由_____函数开始,并且在_____函数中结束。

5.C语言程序的注释可以出现在程序中_____。

6.计算机不能直接执行C语言的源程序,必须经过 (1) 和 (2) ,形成可执行文件。1.4参考答案

一、选择题

1.B  2.A  3.B  4.B  5.B  6.B  7.D  8.A

二、填空题

1.程序文档  2.(1)语法错误 (2)逻辑错误  3.有且只有一个

4.main(),main()  5.任何空格可以出现的位置  6.(1)编译 (2)连接第2章数据类型与数据运算2.1要点难点阐述

1.数据类型(1)基本类型

·枚举型。(用户自定义的)(2)构造类型

·文件:当输入/输出的对象是磁盘时,使用文件类型(FILE)。(系统提供的)(3)指针类型

指针类型是某种类型数据的地址类型。(用户自定义的)(4)空类型

不需要数据类型时,使用空类型(void)。(系统提供的)

2.常量

常量是指在程序运行过程中其值不能改变的量。基本类型常量说明如表2-1所示。表2-1 基本类型常量说明

3.变量

变量是内存的一个存储单元,存储单元内的当前值就是变量的值。其值在程序运行过程中可以改变,所以称为变量。变量必须先定义其数据类型,才能使用。基本类型变量的取值范围如表2-2所示。表2-2 基本类型变量的取值范围

变量定义的一般格式为:

数据类型名 变量表;

其中,变量表中可以含多个变量,各变量之间用逗号分隔,分号标志着定义结束。例如:

int a,b,c;

变量可以在定义的同时初始化(即赋初值)。例如:

int a=1,b=2,c=3;

也可以对部分变量初始化。例如:

int a,b,c=5;

注意: 在程序设计时,要根据使用数据的范围定义适合的数据类型的变量。若定义过大会浪费计算机资源,定义过小可能产生“溢出”或导致数据不精确。

4.数据运算

C语言规定了运算符的优先级别和结合性。在表达式求值时,先按运算符的优先级别高低次序进行运算,同级则按规定的“结合方向”处理。(1)赋值运算

赋值运算符“=”的左侧必须是变量名,右侧是任意类型的表达式。

赋值表达式的求解过程:将赋值运算符右侧表达式的值送到左侧变量所代表的存储单元中。结合方向是右结合,优先级别较低,只高于逗号运算符。

做赋值运算时,系统对不同类型的数据自动进行类型转换。

①把实型数据赋给整型变量时,小数部分截去。

②长的数据给短的变量赋值,低位对齐赋值,高位丢失,有可能造成溢出。

③短的数据赋给长的变量,低位对齐赋值。对无符号数高位补0;对有符号数要进行“符号扩展”:即符号位为“0”,高位全补“0”;符号位为“1”,高位全补“1”。(2)算术运算

①除法运算中,当两个操作数都是整型时,结果为整型,如1/4结果为0。

②求余运算中,两个操作数必须都是整型。

③自增/自减运算符的操作数只能是变量。在Turbo C中,若表达式中有自增/自减运算符,则应先扫描每一个变量的当前值,然后再计算表达式的值。例如:

int a=2,b=3,c;c=(++a)*(b--);先扫描表达式(++a)*(b--),变量a先自增1,即当前值为3,b的当前值为3,所以c的值为3*3=9,然后b自减为2。所以,语句执行结束时a=3,b=2,c=9。

④数学表达式转换成C语言表达式要注意两点:一是乘法的乘号不能省略;二是恰当地使用圆括号以保证原来的逻辑关系不变。(3)关系运算和逻辑运算

①关系运算和逻辑运算的结果都是一个逻辑值,即“真”或“假”。C语言没有逻辑数据,用“1”代表“真”,用“0”代表“假”。当进行运算时,非0即“真”,0即“假”。

②要注意关系表达式、逻辑表达式的书写,如数学中的不等式00&&x<10。

③在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。

如a=0;b=1;c=a++&&b++;,其结果为a=1,b=1,c=0。最后一个赋值语句中赋值号右侧的逻辑表达式的求解过程为:逻辑与运算符左侧的表达式a++的当前值为0,则整个逻辑表达式值即为0,因此无须继续计算右侧的表达式,a自身增1,0赋给c,运算结束。

再如a=0;b=1;c=++a||++b;,其结果为a=1,b=1,c=1。最后一个赋值语句中赋值号右侧的逻辑表达式的求解过程为:逻辑或运算符左侧的表达式++a的值为1,则整个逻辑表达式值即为1,因此无须继续计算右侧的表达式,1赋给c,运算结束。

注意: 当需要判断两个量是否相等时,运算符是由两个等号“==”组成的“等于”。注意一个等号“=”表示赋值。(4)位运算

所谓位运算是指二进制位的运算,即运算的单位是二进制的一个位(bit)。

在程序中,若进行位运算的数据不是用二进制表示的,要先转换成二进制补码形式再运算,运算后的结果再转换成要求的进制。位运算有如下几种:

①按位与运算“&”:两个对应位均为1时该位结果为1,否则为0。运算的特点:与0相与对应位清零;与1相与对应位保留原值。

②按位或运算“|”:两个对应位均为0时该位结果为0,否则为1。运算的特点:与1相或对应位置1;与0相或对应位保留原值。

③按位异或运算“^”:两个对应位不同为1,相同为0。运算的特点:与1相异或对应位翻转;与0相异或对应位保留原值。

④按位取反运算“~”:就是0变1,1变0。

⑤左移运算“<<”:用来将一个数的各二进制位全部左移若干位,高位溢出舍弃,低位补0。操作数每左移一位,相当于乘以2。

⑥右移运算“>>”:用来将一个数的各二进制位全部右移若干位,低位舍弃。若无论操作数是正还是负都高位补0,称为“逻辑右移”;若操作数为正高位补0,为负高位补1,称为“算术右移”。操作数每右移一位,相当于除以2。2.2例题分析【例2.1】  有变量定义语句int a=3;b=4;,则_______。

A.定义了a、b两个变量   B.定义了a、b两个变量,并均已初始化

C.程序编译时出错   D.程序运行时出错

解题知识点: 变量定义语句规则。

解: 答案为C。本题的解题要点是:变量定义语句以分号表示结束。b前面的分号标志着int型变量定义结束,则变量b未被定义。所以编译时出错:“Undefined symbol'b'in function...”。【例2.2】  表达式3.5+5%2*(int)(1.5+1.3)/4的值为_______。

A.4.5   B.4.0   C.3.5   D.4.2

解题知识点: 强制类型转换;算术运算。

解: 答案为C。本题的解题要点是:做除法运算,当两个操作数都是整型时,结果为整型。因为5%2为1,(int)(1.5+1.3)为2,2/4为0,所以结果为3.5。【例2.3】  有变量说明语句float a,b;int k=0;,合法的C语言赋值语句是_______。

A.a=b=8.5   B.a=8.5,b=8.5   C.k=int(a+b);   D.k++;

解题知识点: 强制类型转换;赋值语句的书写规则。

解: 答案为D。赋值语句的一般格式为:变量名=表达式;,语句以分号作为结束标志。选项A是赋值表达式,不是语句;选项B是逗号表达式;选项C使用了强制类型转换,应将类型符用圆括号括起来,即k=(int)(a+b);;选项D相当于k=k+1;,所以是合法的赋值语句。【例2.4】  有变量说明语句int a=9;,则执行完语句a+=a-=a*a;后,a的值是_______。

A.9   B.144   C.0   D.-144

解题知识点: 复合赋值语句的运算规则。

解: 答案为D。赋值语句的结合性为“自右至左”,复合赋值语句可以分解进行。将语句a+=a-=a*a;分解成如下两条语句:a-=a*a;a+=a;,由第一条语句可以算出a的值为-72,由第二条语句算出a的值为-144。【例2.5】  有下面程序段:

int i,j;

j=(i=32767,i+1);

printf("i=%d,j=%d\n",i,j);

则运行结果是_______。

A.i=32767,j=32768   B.i=32768,j=32768

C.i=32767,j=-32768   D.i=32767,j=32767

解题知识点: 逗号表达式;整型变量的取值范围。

解: 答案为C。题中赋值语句j=(i=32767,i+1);,赋值号右侧的括号内是逗号表达式,执行过程为:先用32767为i赋值,再计算i+1的值,并用i+1的值作为逗号表达式的值为j赋值。在内存中的表示形式为:

可见,i+1的值为-32 768。原因是整型变量在内存中占2个字节,最大可表示32 767,再加1则产生溢出。【例2.6】  下面程序段的运行结果是_______。

int x=5,y=5,z=5;

printf("x=%d,y=%d\n",x++,++y);

z++;++z;

printf("x=%d,y=%d,z=%d\n",x,y,z);

A.x=6,y=6   B.x=5,y=5

 x=6,y=6,z=6  x=6,y=6,z=7

C.x=6,y=5   D.x=5,y=6

 x=6,y=6,z=6  x=6,y=6,z=7

解题知识点: 自增/自减运算符。

解: 答案为D。第一个输出语句中的两个输出项都是表达式。x是后加操作,是先用变量的当前值作为表达式的值,然后变量的值加1;y是前加操作,是先为变量的值加1,加1后的值作为当前表达式的值;所以输出为x=5,y=6。z++;和++z;都是独立的语句,都是完成加1的操作,所以在第二个输出语句中输出时x、y各做一次加1操作,z做了两次加1操作。【例2.7】  若有变量定义int x=6;,则下面语句的运行结果是_______。

printf("x1=%d,x2=%d\n",++x,x++);

A.x1=7,x2=7   B.x1=8,x2=6   C.x1=8,x2=8   D.x1=7,x2=8

解题知识点: 自增/自减运算符;系统对函数参数的求值顺序。

解: 答案为B。本题的解题要点是:在Turbo C中系统对函数参数的求值顺序是自右而左。printf中要输出两个表达式的值(++x和x++),先求右边的表达式x++的值为6(先使用当前值,后加1),x自增1为7;再求左边的表达式++x的值为8(先加1,再使用),所以输出x1=8,x2=6。可能出现的错误是从左到右计算表达式而选择选项A。【例2.8】  在下列选项中,不合法的赋值语句是_______。

A.n1=n2=n3=0;   B.k=i==j;   C.k=i&&j   D.a=b+c=1;

解题知识点: 赋值语句的书写规则。

解: 答案为D。选项A相当于n3=0;n2=n3;n1=n2;,所以合法;选项B相当于k=(i==j);,即赋值号右侧是关系表达式,当i和j相等时,k赋值为1,否则k赋值为0,合法;选项C中赋值号右侧是逻辑表达式,当i和j均非零时k赋值为1,否则k赋值为0,也合法;选项D相当于a=((b+c)=1);,可见右边的赋值号的左侧不是变量名,而是表达式,所以不合法。【例2.9】  设有如下表达式:

<c+d||~c&d

则表达式中运算符的优先顺序是_______。

A.~、+、<<、>、&、||   B.~、+、>、<<、&、||

C.~、+、<<、&、>、||   D.~、+、&、||、>、<<

解题知识点: 位运算及其优先级。

解: 答案为A。优先级顺序是:单目运算符“~”优先级最高,然后依次是算术运算符“+”、移位运算符“<<”、关系运算符“>”、按位与运算符“&”,最后是逻辑运算符“||”。【例2.10】  设有如下定义:

unsigned x=0x6937;

int n=8;

则表达式(x&~(~0<

A.x左移8位   B.对x的低位字节清零

C.对x的高位字节置1   D.对x的高位字节清零,保留低位字节

解题知识点: 位运算及其优先级。

解: 答案为D。因为x是无符号整型,占16个二进位,~(~0<<8)为0000000011111111,由于与0相与对应位被清零,与1相与保留对应位,所以x的高位字节被清零,低位字节被保留。【例2.11】  已知小写字母a的ASCII码值为97,有如下程序:

则运行结果是_______。

A.a   B.b   C.d   D.100

解题知识点: 按位或运算;字符的存储形式。

解: 答案为C。本题的解题要点是:先将操作数转换成二进制,再进行按位或运算,结果作为一个字符的ASCII码值,输出对应的字符。a和b用二进制数表示分别为:a=00100000,b=01000100。a|b=01100100转换为十进制是100,ASCII码值100对应的字符是小写字母d。【例2.12】  以下叙述中不正确的是_______。

A.表达式a&=b等价于a=a&b   B.表达式a<<=b等价于a=a<

C.表达式a%=b等价于a=a%b   D.表达式a!=b等价于a=a!b

解题知识点: 复合运算符。

解: 答案为D。本题的解题要点是:只有算术运算符和位运算符中的双目运算符才可以和赋值运算符组成复合赋值运算符。“&”、“<<”、“%”可以和“=”组成复合赋值运算符,但是“!”是逻辑非运算符,是单目运算符,不能与赋值运算符组合。而“!=”是关系运算符,含义是不等于,是不可分割的一个整体。【例2.13】  已知大写字母A的ASCII码值为65,设有如下程序:

void main()

{char c='A';int b=-8;

printf("%d\n",c^b>>2);

}

则运行结果是_______。

A.-18   B.-65   C.65   D.57

解题知识点: 按位异或运算、右移运算及其优先级。

解: 答案为B。本题解题要点:①注意“>>”的优先级高于“^”;②在Turbo C中右移位采用的是算术移位;③若位运算的两个操作数长度不同,应先以长的为基准,右端对齐,短的是正数则左边补0,是负数则左边补1,然后再运算。先将b转换成二进制为1111111111111000,计算b>>2得1111111111111110;字符'A'的二进制形式为01000001,高8位补0后,再与b作异或运算得1111111110111110;最高位为1是负数,转换成原码为1000000001000001,转换成十进制数为-65。可能出现的错误是优先级搞错,若先做异或运算后做右移位,则会选择选项A。2.3同步练习

一、选择题

1.在C语言中,int、char、short三种类型的数据所占用的内存_______。

A.均为2字节   B.由用户自定义

C.由所用机器的机器字长决定   D.是任意的

2.设int类型的数据占2个字节,则unsigned int类型数据的取值范围是_______。

A.0~255   B.0~65 535

C.-32 768~32 767   D.-256~255

3.以下_______是不正确的转义字符。

A.'\\'   B.'\''   C.'\08a'   D.'\0'

4.设有说明语句:char a='\72';,则变量a_______。

A.包含1个字符   B.包含2个字符   C.包含3个字符   D.说明不合法

5.在C语言中,char型数据在内存中是以_______形式存储的。

A.原码   B.补码C.AS   C.I码   D.反码

6.以下选项中合法的字符常量是_______。

A."B"   B.'\010'   C.68   D.D

7.在C语言中,要求操作数必须是整型的运算符是_______。

A.%   B./   C.<   D.!

8.以下的选择中,正确的赋值语句是_______。

A.a=1,b=2;   B.i++;   C.a+b=5;   D.y=int(x);

9.以下不正确的叙述是_______。

A.在C程序中所有的变量必须先定义后使用

B.在程序中,APH和aph是两个不同的变量

C.若a和b类型相同,执行a=b;后b中的值放入a中,b中的值不变

D.当输入数据时,对整型变量只能输入整型值,对实型变量只能输入实型值

10.若变量已正确定义并赋值,下面符合C语言语法的表达式是_______。

A.a:=b+1   B.a=b=c+2   C.int 18.5%3   D.a=a+7=c+b

11.若x为int型变量,则执行以下语句后,x的值为_______。

x=6;x+=x-=x*x;

A.36   B.–60   C.60   D.–24

12.若有定义int x;,则逗号表达式(x=4*5,x*5),x+25的结果为 (1) ,x的值为 (2) 。(1)A.20   B.100   C.表达式不合法   D.45(2)A.20   B.100   C.125   D.45

13.若已定义x和y是double类型,则表达式x=1,y=x+3/2的值是_______。

A.1   B.2   C.2.0   D.2.5

14.设x和y均为int型变量,则执行以下语句后的结果为_______。

x=15;y=5;printf("%d\n",x%=(y%=2));

A.0   B.1   C.6   D.12

15.若有以下程序段:

int c1=1,c2=2,c3;

c3=1.0/c2*c1;

则执行后,c3的值是_______。

A.0   B.0.5   C.1   D.2

16.若x、y、z均为int型变量,m为long型变量,则在16位PC上执行下述语句后,y值的十六进制形式为 (1) ,x值为 (2) ,z值为 (3) ,m值为 (4) 。

y=(x=32767,x+1);z=m=0xFFFF;(1)A.FFFF   B.7FFF   C.7FFE   D.8000(2)A.-32768   B.0   C.32768   D.32767(3)A.0   B.32768   C.-1   D.65535(4)A.0   B.32768   C.-1   D.65535

17.以下叙述不正确的是_______。

A.一个好的程序应该有详尽的注释

B.C程序中的#include和#define均不是C语句

C.在C程序中,赋值运算符的优先级最低

D.在C程序中,j++;是一条赋值语句

18.若有,其错误的C语言表达式是_______。

A.a*e/b*c   B.a/b/c*e   C.a*e/b/c   D.(a*e)/(b*c)

19.设a和b均为int型变量,且a值为15,b值为240,则表达式(a&b)&&b的结果为_______。

A.0   B.1   C.true   D.false

20.在位运算中,操作数每右移一位,其结果相当于_______。

A.操作数乘2   B.操作数除以2

C.操作数除以16   D.操作数乘以16

21.若有以下定义和语句,则执行语句后a和b的值分别是_______。

int a=3,b=4;

a=a^b;b=b^a;a=a^b;

A.a=3,b=4   B.a=4,b=3   C.a=3,b=3   D.a=4,b=4

22.设有以下语句,则c的二进制值是_______。

char a=3,b=6,c;

c=a^b<<2;

A.00011011   B.00010100   C.00011100   D.00011000

23.已知char a=15,则~a、-a和!a的整数值分别为_______。

A.240、-15、0   B.0、-15、240   C.-16、-15、0   D.0、-15、0

二、填空题

1.字符常量'a'在内存中应占 (1) 字节,字符串"a"应占 (2) 字节。

2.在16位PC环境下,int类型数据应占 (1) 字节,short类型数据应占 (2) 字节,long类型数据应占 (3) 字节,double类型数据应占 (4) 字节。

3.在16位PC环境下,short类型数据的取值范围是 (1) ,unsigned int类型数据的取值范围是 (2) 。

4.若采用十进制数的表示方法,则077是 (1) ,0111是 (2) ,0x29是 (3) ,0xAB是 (4) 。

5.若有说明char s1='\077',s2='\'';,则s1中包含 (1) 个字符,s2中包含 (2) 个字符。

6.设x为float型变量,y为double型变量,a为int型变量,b为long型变量,c为char型变量,则表达式x+y*a/x+b/y+c的结果为_______类型。

7.定义如下变量:

float x=2.5,y=4.7;int a=7;

表达式x+a%3*(int)(x+y)%2/4的值为_______。

8.设a,c,x,y,z均为int型变量,在下面对应的横线上写出各表达式的结果。(1)a=(c=5,c+5,c/2) (1)(2)x=(y=(z=6)+2)/5 (2)(3)18+(x=4)*3 (3)

9.下列程序的运行结果为_______。

10.下列程序的运行结果是_______。

11.写出实现以下计算的C语言赋值语句_______。

12.下列程序的运行结果为_______。

13.下列程序的运行结果为_______。

14.下列程序的运行结果为_______。

15.下列程序的运行结果为_______。

16.表达式5&7的值为 (1) ,5|7的值为 (2) ,5^7的值为$UnderLine text="(3)"^。

17.二进制数a值为00101101,若想通过异或运算a^b使a的高4位取反,低4位不变,则二进制数b值为_______。

18.二进制数a值为01100101,若想通过a&b运算使a的低4位清零,高4位不变,则二进制数b值为_______。

19.在C语言中,“&”作为双目运算符时表示的是 (1) ,而作为单目运算符时表示的是 (2) 。2.4参考答案

一、选择题

1.C  2.B  3.C  4.A  5.C

6.B  7.A  8.B  9.D  10.B

11.B  12.(1)D (2)A  13.C  14.A  15.A

16.(1)D (2)D (3)C (4)D  17.C  18.A  19.A

20.B  21.B  22.A  23.C

二、填空题

1.(1)1  (2)2

2.(1)2  (2)2  (3)4  (4)8

3.(1)–32 768~32 767 (2)0~65 535

4.(1)63  (2)73  (3)41  (4)171

5.(1)1  (2)1

6.double

7.2.5

8.(1)2 (2)1 (3)30

9.11,1,0,1

10.a=A,b=d,c=D

11.z=sin(75*3.14/180)/(x*y)

12.65535

13.dqz

14.14,a=9

15.24,20,36

16.(1)5 (2)7 (3)2

17.11110000

18.11110000

19.(1)按位与  (2)取地址第3章顺序结构的程序设计3.1要点难点阐述

1.C语言的语句

①控制语句。用来控制程序走向的语句,如if语句、switch语句、for语句、while语句、do…while语句、break语句、continue语句、return语句等。

②函数调用语句。一般格式为:

函数名(实参表);

例如:printf("%d\n",a);。

③表达式语句。一般格式为:

表达式;

如赋值语句:k=i+j;,再如k++;。

④复合语句。多条语句组合而成,作用相当于一条语句。一般格式为:

{语句1;语句2;…;}

2.输入/输出和头文件的概念

C语言没有提供输入/输出语句,其输入/输出依靠系统提供的库函数来实现。使用系统提供的库函数时,要用预编译命令#include将有关的“头文件”包含到用户的源文件中。

注意: 每条#include命令只能包含一个头文件。当需要包含多个头文件时,每条#include命令都独占一行。

3.字符数据的输入/输出

getchar()和putchar()是单个字符的输入和输出函数,它们包含在头文件stdio.h中。(1)字符的输入函数

字符的输入函数的调用格式为:

getchar()

函数getchar()的调用结果是得到从键盘上输入的字符,通常将其赋给字符型变量。例如:

ch=getchar();

注意: 回车、退格、空格等控制键也是字符。(2)字符的输出函数

字符的输出函数的调用格式为:

putchar(参数);

当函数的参数是字符变量或常量时,输出该字符;是整型变量或常量时,输出与它等值的ASCII码对应的字符;是转义字符时,按其含义起到控制输出的功能。

例如,putchar('\n');用来换行,putchar('\t');用来跳格等。

4.数据的格式输入和格式输出

scanf()和printf()函数可以一次输入和输出若干个任意类型的数据。(1)格式输入函数

scanf()函数的一般调用格式为:

scanf(格式控制字符串,变量地址表);

其中,“格式控制字符串”包含两类符号:格式说明符和普通字符。

在程序运行过程中,执行到scanf()函数调用语句时,用户必须从键盘上按格式控制字符串从左到右依次输入,即普通字符原样输入、格式说明符处输入对应变量的值。

注意:

①当两个数值型的格式说明符之间没有普通字符时,输入的两个数据之间需要用分隔符分隔。分隔符可以是一个或多个空格,也可以是【Tab】键或【Enter】键。例如:

scanf("%d%d",&a,&b);

若a,b分别为5和6,则输入应为:

5 6↙

②在两个格式说明符之间加入普通字符,可以起分隔符的作用。例如:

scanf("%d,%d",&a,&b);

若a,b分别为5和6,则输入应为:

5,6↙

③在用"%c"格式输入字符时,空格字符和转义字符都作为有效的字符输入。例如:

scanf("%d%c",&a,&c);

若a为5,c为字符'A',则输入应为:

5A↙ (中间不能有空格,否则会把空格赋给变量c)(2)格式输出函数

printf()函数的一般调用格式为:

printf(格式控制字符串,输出项表);

其中,“格式控制字符串”包含3类符号,即格式说明符、转义字符和普通字符。

执行printf()函数调用语句时,按格式控制字符串从左到右依次输出,即普通字符原样输出、转义字符按含义输出、格式说明符处按指定格式输出对应的输出项的值。

注意: 格式控制字符串中的格式说明符与输出项应该类型匹配,否则可能导致输出结果不正确。3.2例题分析【例3.1】  下列程序执行后的运行结果是_______。

A.666.006.00      B.666.676.67

C.666.006.67      D.666.676.00

解题知识点: 各种类型数据之间的混合运算。

解: 答案为A。本题中的赋值语句相当于d=20/3;k=d;f=k;i=f;,因为20和3都是整数,所以20/3的结果仍为整数,即6;d是双精度浮点型,按输出两位小数的格式有d=6.00,又因为k是长整型变量,因此k=6;类似的,f=6.00,i=6。本题中的输出语句中4个格式符之间没有普通字符,所以输出结果连在一起。【例3.2】  下列程序执行后的输出结果是_______。

A.i=1.5,j=1.0   B.i=1,j=1   C.i=1,j=0   D.i=1,j=0

 f=5.8       f=5.8     f=5.8     f=0

解题知识点: 各种类型数据之间的混合运算;格式输出。

解: 答案为D。由于i是整型变量,所以i=1.5;的赋值结果是i的值为1;同理j的值为0;因为f是浮点型变量,而输出格式符为%d,格式不匹配导致输出结果不正确。注意:凡是float类型和double类型的变量,用格式符%d输出结果都为0。凡是int类型和long类型的变量,用格式符%f输出都会出现“floating point formats not linked.Abnormal program termination.”错误信息。【例3.3】  语句printf("a\bc:\\dos\\\b\\\"file.c\"\n");的输出结果是。

A.a\bc:\\dos\\\b\\\"file.c\"\n   B.abc:dosb"file.c"n

C.a\bc:\\dos\\\b\\\"file.c\"   D.c:\dos\"file.c"

解题知识点: 转义字符。

解: 答案为D。本题中第一个转义字符就是'\b',因此,前面的字符'a'被删除,第二个转义字符是'\\',输出\,第三个转义字符'\\'被第四个转义字符'\b'删除,第五个转义字符是'\\',输出\,第六个转义字符是'\"',输出",第七个转义字符还是'\"',输出",第八个转义字符是'\n',换行。【例3.4】  若有int x=100,y=200;的定义,且有语句:

printf("%d,%d",(x,y));

则语句的输出结果是_______。

A.100,200      B.100

C.200      D.输出格式符多,输出不确定的值

解题知识点: 格式输出;逗号表达式。

解: 答案为D。输出表列中只有一个逗号表达式,值为200,对应着第一个%d输出,而对应着第二个%d会输出一个不确定的值。

注意: 当格式符多于输出项时会输出不确定的值。【例3.5】  若有int a=100,b=200;的定义,且有语句:

printf("%d",a,b);

则语句的输出结果是_______。

A.100,200      B.100

C.200      D.输出格式符不够,输出不确定的值

解题知识点: 格式输出。

解: 答案为B。对应着输出格式符%d,输出第一个输出项x的值。注意:输出格式符不够,后面的输出项不能输出。【例3.6】  读下列程序:

若运行时从键盘上输入 987654321↙ ,则上面程序的输出结果是_______。

A.a=1,b=23,c=456      B.a=9,b=87,c=654

C.a=9,b=87.000000,c=654.000000      D.a=987,b=654.000000,c=321.000000

解题知识点: 格式输入中带有数字限制的格式控制符;格式输出。

解: 答案为C。scanf语句中的%1d限定了变量a获取数据的宽度为1,因此系统会将9赋给变量a。同理,自动截取两位数87、三位数654为b、c赋值。printf语句格式符中没有指定数据的输出宽度,所以系统用默认的宽度(float型输出6位小数)进行输出。【例3.7】  读下列程序:

若运行时从键盘上输入 1 2 A↙ ,则上面程序的输出结果是_______。

A.a=1,b=2,c=A      B.a=1,b=2,c=65

C.a=1,b=2,c=      D.a=1,b=2,c=32

解题知识点: 格式输入中格式控制字符%c;字符型数据的输入/输出。

解: 答案为D。在scanf()函数中前两个格式符连在一起,且都是数值数据,所以输入时两个数据之间要用分隔符(空格、【Tab】、回车均可)表示第一个数据结束;第二、第三个格式符虽然也连在一起,但是后一个是字符型数据,遇见非数字字符就表示前面的数据结束,而在用"%c"格式输入字符时,空格字符和转义字符都作为有效的字符输入,所以输入的2后面的空格字符赋给变量c。在printf()函数中字符变量c按整型格式%d输出,所以输出空格字符的ASCII码值32。【例3.8】  读下列程序:

若想运行时从键盘上输入:

但第一行输入结束,程序就已经运行,输出结果是_______。

A.a=1,b=2,c=A      B.a=1,b=2,c=65      C.a=1,b=2,c=      D.a=1,b=2,c=10

解题知识点: 字符型数据的输入/输出。

解: 答案为D。与上题类似,两个整型数据输入结束时的回车符被作为有效字符,由getchar()函数读取并赋给字符变量c,所以变量c用%d输出,是输出换行符(LF)的ASCII码值10。若输入不变,还希望将字符'A'赋给变量c,可以在scanf语句后加语句getchar();,用这个函数语句“空读”换行符。若输出语句中后一个格式符用%c,则输出结果为选项C,因为换行符是控制字符,不可显示。【例3.9】  读下列程序:

则上面程序的输出结果是_______。

A.65535,65535,65535,65535      B.-1,-77777,-7fff,65535

C.-32767,-32767,-32767,-32767      D.-1,177777,ffff,65535

解题知识点: 格式输出中格式控制字符%o和%x。

解: 答案为D。i=65535;在内存中的表示形式为:

当输出语句中的格式控制符为%d时,即按十进制整数格式输出,最高位的符号位为1,表示是负数,内存中是-1的补码;当输出语句中的格式控制符为%o和%x时,即按八进制整数格式和十六进制整数格式输出,此时符号位也作为数的一部分输出,3位二进制数是1位八进制数,4位二进制数是1位十六进制数,所以八进制形式为177777,十六进制形式为ffff。【例3.10】  读下列程序:

则上面程序的输出结果是_______。

A.12,101   B.10,65   C.a,145   D.10,145

解题知识点: 格式输出中格式控制字符%o和%x;数据进制的转换。

解: 答案为C。a=011;是八进制整数,++a后,变量a的值是012,是十进制的10,按%x输出,即转换成十六进制数值是a;b++是输出b的当前值,前有赋值b=101;,然后b自增1,按%o输出十进制数的101,即转换成八进制数值是145。3.3同步练习

一、选择题

1.若m为float型变量,则执行以下语句后的输出结果是_______。

m=1234.123;

printf("%-8.3f\n",m);

printf("%10.3f\n",m);

A.1234.123   B.1234.123   C.1234.123   D.-1234.123

 1234.123    1234.123    1234.12300   001234.123

2.若有类型定义int k,g;,则下列语句的输出结果是_______。

k=017;g=111;

printf("%d,",++k);

printf("%x\n",g++);

A.15,6f   B.16,70   C.15,71   D.16,6f

3.若x为unsigned int型变量,则执行以下语句后x的值为_______。

x=65535;

printf("%d\n",x);

A.65 535   B.1   C.无定值   D.-1

4.若x、y均为int型变量,则执行以下语句后的输出结果是_______。

x=015;

y=0x15;

printf("%2d%2o\n",x,y);

A.1515   B.1521   C.1321   D.1325

5.若x是int型变量,y是float型变量,所用的scanf调用语句格式为:

scanf("x=%d,y=%f",&x,&y);

则为了将数据10和66.6分别赋值给x和y,正确的输入应是_______。

A.x=10,y=66.6↙      B.10 66.6↙

C.10↙66.6↙      D.x=10↙y=66.6↙

6.若有定义int x,y;double z;,则以下不合法的scanf()函数调用语句为_______。

A.scanf("%d,%x,%le",&x,&y,&z);      B.scanf("%2d%d%lf",&x,&y,&z);

C.scanf("%x%o%lg",&x,&y,&z);      D.scanf("%x%o%6.2lf",&x,&y,&z);

7.若有变量定义:float a;,以下输入语句中不合法的是_______。

A.scanf("%g",&a);      B.scanf("%f",&a);

C.scanf("%6.2f",&a);      D.scanf("%e",&a);

8.若有变量定义:unsigned a;,以下输入语句中不合法的是_______。

A.scanf("%d",&a);   B.scanf("%o",&a);

C.scanf("%f",&a);   D.scanf("%x",&a);

9.下列程序正确的输出结果是_______。

A.9.3   B.9.300000   C.8.500000   D.9.80000

10.下面程序的输出结果是_______。

A.x/y&z=0   B.x/y&z=1   C.s= x/y&z=0   D.s=x/y&z=1

11.下面程序的输出结果是_______。

A.-1,-1,1,0,1   B.1,1,0,1,-1   C.1,-1,0,-1,0   D.-1,-1,0,1,-1

12.以下程序段的输出结果是_______。

char a=222;

a&=052;

printf("%d,%o\n",a,a);

A.222,336   B.10,12   C.244,364   D.254,376

13.以下程序的输出结果是_______。

A.-1 0   B.0 0   C.0 4   D.-1 2

二、填空题

1.若有说明int x=10,y=20;,请在下面对应的横线上写出各printf语句的输出结果。(1)printf("%3x\n",x+y); (1)(2)printf("%3o\n",x*y); (2)(3)printf("%3o\n",x%y,x,y); (3)(4)printf("%3x\n",(x%y,x-y,x+y)); (4)

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载