C语言程序设计实践教程(第2版)(工业和信息化普通高等教育“十二五”规划立项项目)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-25 06:01:34

点击下载

作者:杨有安鲁丽曹惠雅陈维(编)

出版社:高等教育出版分社

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

C语言程序设计实践教程(第2版)(工业和信息化普通高等教育“十二五”规划立项项目)

C语言程序设计实践教程(第2版)(工业和信息化普通高等教育“十二五”规划立项项目)试读:

第2版前言

程序设计课程是高等院校计算机基础教育中的重要课程之一,其以程序编写语言为平台,让学生了解程序设计的思想和方法;学生通过学习能掌握高级语言程序设计的知识,培养问题求解和程序语言的应用能力。

全国高等学校计算机基础教育研究会发布的计算机基础教育的纲领性文件,对规范指导我国计算机基础教育有着重要的现实意义。本书以计算思维模式进行计算机类课程教学的形式作为编写指导思想,对《C 语言程序设计实践教程》一书进行修订。

本书是《C 语言程序设计教程(第 2 版)》(杨有安等编,人民邮电出版社出版)的配套辅导教材,两者互为补充,相辅相成,对读者掌握程序设计的基本知识,提高程序设计的应用能力十分有益。本书按照主教材的章节顺序,对各章重点及难点进行了总结,对重点难点题型进行了分析,并附有大量的练习,以此帮助读者加深对C语言程序设计基础知识的理解,另外,每章末附有参考答案,方便读者进行自测。

本书分为两部分。第一部分是主教材的辅导、实践,包括各章的知识要点,内容形式有重点与难点解析、测试题和习题解答。其中,习题解答部分为主教材各章习题提供了单数题号题的参考答案。第二部分是上机实践,提供了学习本课程应当进行的14个实验,均与教学内容相对应。每个实验包括实验目的与要求、操作步骤及实验内容,以此帮助读者提高实际程序设计编写的能力,养成良好的程序设计风格的习惯。

全书分为11章,其中第1章、第2章和第4章由曹惠雅编写,第3章、第8章和第10章由鲁丽编写,第7章、第9章和第11章由陈维编写,第5章和第 6 章由杨有安编写。各位编者在第二部分还编写了相应的上机实践。杨有安负责全书统稿工作。本书在编写的过程中得到华中科技大学文华学院各级领导的大力支持,在此表示衷心的感谢。

由于编者水平有限,书中难免存在疏漏和不足之处,敬请读者批评指正。编者2013年10月|第一部分|辅导、实践●第1章 C语言概述●第2章 基本数据类型和运算符●第3章 顺序和选择结构程序设计●第4章 循环结构程序设计●第5章 数组●第6章 函数和模块设计●第7章 指针●第8章 结构体与联合体●第9章 预处理和标准函数●第10章 文件●第11章 数据结构和数据抽象第1章C语言概述1.1 知识要点

1.了解C语言的发展及其特点。

2.理解C语言源程序的组成和结构特点。

3.掌握 Visual C++ 6.0 的安装、启动和退出方法。

4.熟悉 Visual C++ 6.0 的集成开发环境。

5.理解C语言中的一些基本概念。1.2 重点与难点解析【例题 1-1】 以下叙述错误的是( )。

A.一个C程序可以包含多个不同名的函数

B.一个C程序只能有一个主函数

C.C程序在书写时,有严格的缩进要求,否则不能编译通过

D.C程序的主函数必须用main作为函数名【解析】 一个 C 程序有且只有一个主函数 main()。一个 C 程序可以包含多个不同名字的子函数。C程序在书写时没有严格的缩进要求。【正确答案】 C【例题 1-2】 下面可以作为 C 语言用户标识符的一组是( )。

A.sum while world

B.a3_b a123 IF

C.sizeof a_b if

D.2a D0 for【解析】 在 C 语言中,合法的标识符可以由字母、数字和下画线组成,其中关键字不能作为用户的标识符,且开头的第一个字符必须为字母或下画线。选项A中while为关键字;选项C中sizeof和if为关键字;选项D中for为关键字。【正确答案】 B【例题 1-3】 以下叙述中正确的是( )。

A.预处理命令行必须位于C源程序的起始位置

B.在C语言中,预处理命令行都以“#”开头

C.每个C程序必须在开头包含预处理命令行:#include

D.C语言的预处理不能实现宏定义和条件编译的功能【解析】 预处理命令可以放在程序的任何位置,其有效范围是从定义开始到文件结束。预处理命令有宏定义、文件包含和条件编译3类。只是其中的一个文件,并不是说每次预处理命令都须用此文件。【正确答案】 B【例题 1-4】 下列各选项中,属于 C 语言程序中语句的是( )。

A.a=b+c

B.for

C./*c programe*/

D.a=100;【解析】 本题旨在考查对 C 语言中语句概念的理解。选项 A 中表达式的末尾没有分号,因此只能代表一个赋值表达式;选项B中for为关键字;选项C以/*开头并以*/结束,是C语言程序中的注释部分,是不会被执行的;只有选项D为一条正确的赋值语句。【正确答案】 D【例题 1-5】 以下说法中,不正确的是( )。

A.C语言程序中必须有一个main()函数,程序从main()函数的第一条语句开始执行

B.非主函数都是在执行主函数时,通过函数调用或嵌套调用而执行

C.C语言程序中的main()函数必须放在程序的开始位置

D.C语言程序中的main()函数位置可以任意指定【解析】 本题旨在考核 main()函数的作用,以及 main()函数在程序中出现的位置。一个完整的C语言程序有且仅有一个主函数(main()函数)。程序总是从main()函数的第一条语句开始执行,到main()函数的最后一条语句结束,其他函数都是在执行main()函数时,通过函数调用或嵌套调用而得以执行的。C语言规定,main()函数在程序中的位置可以是任意的。【正确答案】 C【例题 1-6】 C 语言中用于结构化程序设计的 3 种基本结构是( )。

A.顺序结构、选择结构、循环结构

B.if,switch,break

C.for,while,do-while

D.if,for,continue【解析】 结构化定理表明,任何一个复杂问题的程序设计都可以用顺序结构、选择结构和循环结构这3种基本结构组成,且它们都具有以下特点:只有一个入口;只有一个出口;结构中无死循环,且程序中3种基本结构之间形成顺序执行关系。【正确答案】 A【例题 1-7】 以下叙述中错误的是( )。

A.C语言源程序经编译后生成后缀为“.obj”的目标程序

B.C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件

C.用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中

D.C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令【解析】 并不是源程序中的所有行都参加编译。在条件编译形式下,相关内容只在满足一定条件时才进行编译。选项D中的非执行语句不在其范围内。【正确答案】 D【例题 1-8】 试分析以下 C 语言源程序的错误在于( )。

#include ;

void main( );

{ ;

printf("Good morning!\n");

};【解析】 C 语言规定,C 语言源程序中每一个说明和每一个语句都必须以分号结尾。但是预处理命令、函数头和花括号“{”、“}”之后不能加分号。【正确答案】 预处理命令、函数头和花括号“{”、“}”之后不能加分号【例题 1-9】 下列选项中不属于结构化程序设计方法的是( )。

A.自顶向下

B.逐步求精

C.模块化

D.可复用【解析】 结构化程序设计方法的主要原则是:自顶向下,逐步求精,模块化,限制使用 goto语句。可复用性是指软件元素不加修改或稍加修改便可在不同的软件开发过程中重复使用的性质。软件可复用性是软件工程追求的目标之一,是提高软件生产效率最主要的方法。面向对象的程序设计具有可复用性的优点。【正确答案】 D【例题 1-10】 以下 4 个程序中,完全正确的是( )。

A.#include

void main( );

{

/*programming*/

printf("programming!\n");

}

B.#include

void main( )

{

/*programming*/

printf("programming!\n");

}

C.#include

void main( )

{

*/*programming*/*

printf("programming!\n");

}

D.include

void main( )

{ /*programming*/

printf("programming!\n");

}【解析】 选项 A 中 void main()后的分号是多余的;选项 C 的注释语句多了两个*号;选项 D的include前面没有#。【正确答案】 B1.3 测试题

1.3.1 单项选择题

1.以下叙述中错误的是( )。

A.C语言的可执行程序是由一系列机器指令构成的

B.用C语言编写的源程序不能直接在计算机上运行

C.通过编译得到的二进制目标程序需要连接才可以运行

D.在没有安装C语言集成开发环境的机器上不能运行C源程序生成的.exe文件

2.程序调试的任务是( )。

A.设计测试用例

B.验证程序的正确性

C.发现程序中的错误

D.诊断和改正程序中的错误

3.下面说法正确的是( )。

A.在对C语言程序进行编译时,可以发现注释行中的拼写错误

B.一个C语言的函数只允许有一对花括号

C.C语言程序的书写格式是自由的,一个语句可以写在一行内,也可以写在多行内

D.一个C语言程序可以有多个主函数

4.以下叙述中正确的是( )。

A.构成C程序的基本单位是函数

B.可以在一个函数中定义另一个函数

C.main( )函数必须放在其他函数之前

D.所有被调用的函数一定要在调用之前进行定义

5.一个完整的C语言源程序是( )。

A.由一个主函数(或)一个以上的非主函数构成

B.由一个且仅有一个主函数和零个以上(含零)的非主函数构成

C.由一个主函数和一个以上的非主函数构成

D.由一个且只有一个主函数或多个非主函数构成

6.( )不是 C 语言的特点。

A.数据结构类型丰富

B.语法定义严格

C.语言的表达能力强

D.控制流程结构化

7.以下描述错误的是( )。

A.在程序中凡是以“#”开始的语句行都是预处理命令行

B.预处理命令行的最后不能以分号表示结束

C.#define PI 是合法的宏定义命令行

D.C语言对预处理命令行的处理是在程序执行的过程中进行的

8.以下叙述中正确的是( )。

A.C语言比其他语言高级

B.C语言可以不用编译就能被计算机识别执行

C.C语言以接近英语国家的自然语言和数学语言作为语言的表达形式

D.C语言出现的最晚,具有其他语言的一切优点

9.以下叙述中,正确的是( )。

A.在对一个C语言程序进行编译的过程中,可发现注释中的拼写错误

B.C语言源程序不必通过编译就可以直接运行

C.C语言源程序经编译形成的二进制代码可以直接运行

D.在对C语言程序进行编译和连接的过程中都可能发现错误

10.以下说法不正确的是( )。

A.C语言程序是以函数为基本单位的,整个程序由函数组成

B.C语言程序的一条语句可以写在不同的行上

C.C语言程序的注释行对程序的运行功能不起作用,所以注释应尽可能少写

D.C语言程序的每个语句都以分号结束

11.结构化程序所要求的基本结构不包括( )。

A.顺序结构

B.GOTO跳转

C.选择(分支)结构

D.重复(循环)结构

12.下列关于C语言的说法不正确的是( )。

A.命令行后面不能加分号,命令行不是C语言的语句

B.注释/* */可以出现在程序中任意合适的地方

C.C语言中的每一条执行语句都必须用分号结束,分号不是C语言的一部分,是语句之间的分隔符号

D.C语言既具有高级语言的一切功能,也具有低级语言的一些功能

13.下面各选项中,均是C语言合法标识符的选项组是( )。

A.33 we auto

B._23 me _3ew

C._43 3e_ else

D.ER-DF 32

14.C语言的程序在一行写不下时,可以( )。

A.用逗号换行

B.用分号换行

C.任意一个空格处换行

D.用回车符换行

15.在C语言源程序中,main()函数的位置( )。

A.可以放在任意位置

B.必须放在它所调用的函数之前

C.必须作为第一个函数

D.必须放在它所调用的函数之后

16.下面说法正确的是( )。

A.分号和回车符都可以作为一个语句的结束标记

B.主函数名可以由程序员自定

C.在程序的任何地方都可以插入一个或多个空格符号

D.一个C语言源程序中只允许有一对花括号

17.一个C语言源程序中( )。

A.可以没有主函数

B.必须有且只能有一个主函数

C.必须有主函数和其他函数

D.可以有多个主函数

18.下面属于合法的用户标识符的是( )。

A.define

B.for

C.int

D.sum

19.一个C语言程序由( )。

A.一个主程序和若干子程序组成

B.函数组成

C.若干过程组成

D.若干子程序组成

20.以下叙述中正确的是( )。

A.C程序中注释部分可以出现在程序中任意合适的地方

B.花括号“{“和”}”只能作为函数体的定界符

C.构成C程序的基本单位是函数,所有函数名都可以由用户命名

D.分号是C语句之间的分隔符,不是语句的一部分

21.以下不正确的C语言自定义标识符是( )。

A.2a_b

B.abc123

C.abc

D.ab_123

22.以下说法错误的是( )。

A.高级语言都是用接近人们习惯的自然语言和数学语言作为语言的表达形式

B.计算机只能处理由0和1的代码构成的二进制指令或数据

C.C语言源程序经过C语言编译程序编译之后生成一个后缀为.EXE的二进制文件

D.每一种高级语言都有它对应的编译程序

23.在C语言中,以下错误的常数表示是( )。

A.0x5b

B.123

C.'a'

D.'ab'

24 .计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是( )。

A.C语言程序仅可以编译执行

B.C语言程序仅可以解释执行

C.C语言程序既可以编译执行又可以解释执行

D.以上说法都不对

1.3.2 填空题

1.C语言中的可用字符由______、______和______组成。

2.C语言源程序的基本结构单位是______。

3.函数由______和______两部分组成

4.组成C语言源程序的各个函数是______的。

5.______是C语句的结束标志;编译命令总是以______开头;______是注释符起解释作用,函数体开始于______,结束于______;程序总是从开始执行,在______处结束运行。

6.C语言源程序中的注释部分以______开始,以______结束。

7.printf函数的功能是______,scanf函数的功能是______。

8.将二进制数110101转换成十进制数是______。

9.用C语言编写的程序称为______。

10.Visual C++ 6.0 集成开发环境是一个基于______操作系统的可视化、面向对象的集成开发环境。

11.C语言源程序必须通过______和______后才可投入运行。

1.3.3 编程题

编写一个C语言源程序,输出以下信息:

* * * * * * * * * *

I like c program!

* * * * * * * * * *

1.3.4 测试题参考答案【1.3.1单项选择题参考答案】

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

11.B 12.C 13.B 14.C 15.A 16.C 17.B 18.D 19.B 20.A

21.A 22.C 23.D 24.A【1.3.2填空题参考答案】

1.英文字母 下画线 数字

2.函数

3.函数头 函数体

4.独立

5.; # /*…*/ { } main main

6./* */

7.将输出的内容送到显示器显示 通过键盘实现数据输入

8.53

9.C语言源程序或C源程序或C程序

10.Windows

11.编译 连接【1.3.3编程参考答案】

程序如下:

#include

void main( )

{

printf("* * * * * * * * * *\n");

printf("I like c program!\n");

printf("* * * * * * * * * *\n");

}1.4 部分习题解答【习题 1.1】 简述 C 语言的特点。

答:C语言简洁、紧凑,使用灵活、方便;运算符丰富;数据结构丰富;C语言是结构式语言;C语言语法限制不太严格,程序设计自由度大;C语言允许直接访问物理地址;C语言程序生成代码质量高;C语言适用范围大,可移植性好。【习题 1.2】 请从以下 4 个选项中选择 1 个正确答案。(1)C (2)C (3)A (4)B (5)C【习题 1.3】 填空。(1)主 主(2);(3)英文字母或下画线(4).cpp .obj .exe【习题 1.4】 请指出以下哪些是合法的标识符,哪些又是合法的用户标识符。

合法的标识符: int x_1  count Xy  if while Abc name

x break  for

合法的用户标识符: x_1  count Xy Abc name x【习题 1.5】 简述上机调试运行 C 程序的操作步骤。

答:上机运行 C 程序的操作步骤为:启动 Visual C++ 6.0→建立工程→创建源程序文件→输入(编辑)源程序内容→保存源程序文件→编译源程序文件→连接目标程序→执行程序→开始另一个程序。【习题 1.6】 参照本章例题,编写一个 C 语言源程序,输出以下信息:

**************

How do you do!

**************

编写程序如下:

#include

void main( )

{

printf("**************\n");

printf("How do you do! \n");

printf("**************\n");

}第2章基本数据类型和运算符2.1 知识要点

1.理解常量和变量的概念。

2.掌握C语言中变量的定义方法及其初始化。

3.学会使用C语言的算术运算符,熟练掌握C语言算术表达式的书写方法及其运算。

4.了解关系表达式、逻辑表达式和逗号表达式及其运算。

5.理解不同类型数据间运算时的数据类型转换原则。

6.进一步熟悉 Visual C++ 6.0 上机环境。2.2 重点与难点解析【例题 2-1】 以下选项中可作为 C 语言合法常量的是( )。

A.−80

B.−080

C.−8e1.0

D.−80.0e【解析】 选项 B 中,以 0 开头表示是一个八进制数,而八进制数的取值范围是 0~7,所以−080是不合法的;选项C和D中,e后面的指数必须是整数,所以也不合法。【正确答案】 A【例题 2-2】 以下选项中非法的字符常量是( )。

A.'\102'

B.'\65'’

C.'\xff'

D.'\019'【解析】 字符常量有两种表示方法。一种是用该字符的图形符号,如'b','y','*'。另外还可以用字符的ASCII码表示,即用反斜符(\)开头,后跟字符的ASCII码,这种方法也称为转义序列表示法。具体有两种形式:一种是用字符的八进制ASCII码,表示为\odd,这里的ddd是八进制值(o可以省略);另一种使用字符的十六进制ASCII码值,表示为\0xhh或0Xhh这里的hh是两位十六进制值。本题中D选项'\019'是用八进制表示,不应该出现9,所以错误。【正确答案】 D【例题 2-3】 已知 a 为 int 型,b 为 double 型,c 为 float 型,d 为 char 型,则表达式 a+b*c-d/a结果的类型为( )。

A.int型

B.float型

C.double型

D.char型【解析】 不同类型数据混合运算的转换规律是:运算前 float 型数据会自动转换为 double型, char型数据会自动转换为int型。运算时int型数据和double型数据要先转化为相同类型,即double型,故最终的运算结果也为double型。【正确答案】 C【例题 2-4】 以下定义语句中正确的是( )。

A.int a=b=0;

B.char A=65+1,b='b';

C.float a=3.14;int a;

D.double a=2.0;b=1.1;【解析】 本题考查变量的定义方法。如果要一次进行多个变量的定义,则它们之间要用逗号隔开,因此选项A和D错误。C语言中规定,同一变量在程序的同一处不可声明为不同类型,所以选项C错误。【正确答案】 B【例题 2-5】 有以下程序段:

char ch;

int k;

ch=′a′;

k=12;

printf("%c,%d,",ch,ch,k);

printf("k=%d\n",k);

已知字符a的ASCII码值为97,则执行上述程序段后输出的结果是( )。

A.因变量类型与格式描述符的类型不匹配输出无定值

B.输出项与格式描述符个数不符输出为零值或不定值

C.a,97,12k=12

D.a,97,k=12【解析】 输出格式控制符%c 表示将变量以字符的形式输出;输出格式控制符%d 表示将变量以带符号的十进制整型数输出,所以第一条输出语句输出的结果为 a,97;第二条输出语句输出的结果为k=12。【正确答案】 D【例题 2-6】 当变量 c 的值不为 2、4、6 时,值也为“真”的表达式是( )。

A.(c==2)||(c==4)||(c==6)

B.(c>=2&& c<=6)||(c!=3)||(c!=5)

C.(c>=2&&c<=6)&&!(c%2)

D.(c>=2&& c<=6)&&(c%2!=1)【解析】 满足表达式(c>=2&&c<=6)的整型变量 c 的值是 2,3,4,5,6。当变量 c 的值不为2,4,6时,其值只能为3或5,所以表达式c!=3和c!=5中至少有一个为真,即不论c为何值,选项B中的表达式都为“真”。【正确答案】 B【例题 2-7】 设变量 a 和 b 已定义为 int 类型,若要通过 scanf("a=%d,b=%d",&a,&b);语句分别给a和b输入1和2,则正确的数据输入内容是( )。【解析】 scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息,其调用格式为:scanf("<格式化字符串>",<地址表>),scanf("a=%d,b=%d",&a,&b)中a=%d,b=%d之间有逗号,在输入数据时也要加逗号,如果去掉逗号,输入时就不用逗号,而用空格,tab键或回车键将各个数据隔开。【正确答案】 a=1,b=2【例题 2-8】 设有以下语句:

char ch1,ch2, scanf("%c%c",&ch1,&ch2);

若要为变量ch1和ch2分别输入字符A和B,正确的输入形式应该是()。

A.A和B之间用逗号间隔

B.A和B之间不能有任何间隔符

C.A和B之间可以用回车间隔

D.A和B之间用空格间隔【解析】 考察 C 语言中的输入格式,因为在输入格式中定义好了"%c%c",其中没有任何符号,所以中间不能加任何字符,包含不能加逗号、回车和空格,因为这些也算是字符。所以在输入时也不可以有任何间隔符号。【正确答案】 B【例题 2-9】 有以下程序:

#include

void main()

{

int A=0,B=0,C=0;

C=(A-=A-5);(A=B,B+=4);

printf("%d,%d,%d\n",A,B,C);

}

程序运行后输出的结果是( )。

A.0,4,5

B.4,4,5

C.4,4,4

D.0,0,0【解析】 考察 C 语言中关于赋值的应用,首先执行 A-=A-5,即 A=A-(A-5),使得 A 的值为5,然后执行C=(A-=A-5),即将A的值5赋给变量C,使得C的值也5。然后执行下句逗号表达式中的A=B,把B的值0赋给A,此时A的值为0,然后执行B=B+4,使得B的值为4。【正确答案】 A【例题 2-10】 设变量均已正确定义并且赋值,以下与其他三组输出结构不同的一组语句是( )。

A.x++; printf("%d\n",x);

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

C.++x; printf("%d\n",x);

D.n=x++; printf("%d\n",n);【解析】 本题考察自增运算符,++x 表示先将 x 值加 1 后再用,x++表示先使用 x 值,用后加1,所以本题中ABC选项都会输出x+1的值,只有D选项会输出x值。【正确答案】 D2.3 测试题

2.3.1 单项选择题

1.下列关于字符串的说法中错误的是( )。

A.在C语言中,字符串的结束标志是'\0'

B.'\0'作为字符串的结束标志占用存储空间,并计入串的实际长度

C.在表示字符串常量的时候不需要在其末尾人为加入'\0'

D.在C语言中,字符串常量隐含处理成以'\0'结尾

2.以下描述不正确的是( )。

A.C语言中的常量包含整型常量、实型常量、字符常量和字符串常量

B.整型常量在C语言中有十进制、八进制和十六进制3种不同的形式

C.在C语言中,所有变量使用前都必须先定义

D.变量被定义后,变量名是固定的,变量的值在程序运行过程中也是不可改变的

3.在C语言中,要求运算对象必须是整型的运算符是( )。

A.=

B.%

C.||

D.&

4.已有定义:int a=6,b=7,c=8;,则执行语句 c=(a/4)+(b=5);后,变量 b 的值是( )。

A.7

B.3

C.4

D.5

5.下面4个选项中,属于合法实数的选项是( )。

A.3.14e−4.2

B.−0.50

C.0.25e−.5

D.−e3

6.下面能正确表示八进制数的是( )。

A.0x16

B.029

C.114

D.033

7.下列各选项中可以作为合法的赋值语句的是( )。

A.a=2,b=5

B.a=b=c=5

C.a++;

D.a=int(b)

8.以下选项中关于C语言常量的叙述错误的是( )。

A.常量是指在程序运行过程中,其值不能被改变的量

B.常量分为整型常量、实型常量、字符常量和字符串常量

C.常量可分为数值常量和非数值常量

D.经常被使用的变量可以定义成常量

9.若有定义语句 int a=10; double b=3.14;,则表达式'A'+a+b 的值的类型是( )。

A.char

B.int

C.double

D.float

10.若有定义语句 int x=12, y=8, z; ,在其后执行语句 z=0.9+x/y;,则 z 的值为( )。

A.1.9

B.1

C.2

D.2.4

11.若有定义 int a,b;,通过语 scanf("%d;%d",&a,&b);,能把整数 3 赋给变量 a, 5 赋给变量 b的输入数据是( )。

A.3 5

B.3,5

C.3;5

D.35

12.若有定义语句 int k1=10, k2=20;,执行表达式(k1=k1>k2) && (k2=k2>k1)后,k1 和 k2的值分别为( )。

A.0和1

B.0和20

C.10和1

D.10和20

13.以下不能输出字符A的语句是(注,字符A的ASCII码值为65,字符a的ASCII码值为97)( )。

A.printf("%c\n",'a'-32);

B.printf("%d\n",'A')

C.printf("%c\n",65);

D.printf("%c\n",'B'-1);

14.已知 int i,a;,执行语句 i=(a=2*4,a*3),a+5;后,变量 i 的值为( )。

A.13

B.24

C.8

D.29

15.将整型变量a,b中的较大数赋值于整型变量c,下列赋值语句中正确的是( )。

A.(a>b)?c=a:c=b;

B.c=(a>b)?a:b;

C.c=a>b,a

D.c=(a

16.若变量a,i已正确定义,且i已正确赋值,合法的语句是( )。

A.a==1

B.++i;

C.a=a++=5;

D.a=i

17.在C语言中,退格符是( )。

A.\n

B.\t

C.\f

D.\b

18.以下选项中,能表示逻辑值“假”的是( )。

A 1

B 0.000001

C 0

D 100.0

19.若有定义 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

20.设有定义 int x=10,y=3,z;,则语句 printf("%d\n",z=(x%y,x/y));的输出结果是( )。

A.1

B.0

C.4

D.3

21.设变量a是int型,f是float型,i是double型,则表达式10+'a'+i*f值的数据类型为( )。

A.int

B.float

C.double

D.不确定

22.能正确表示逻辑关系:“a≥10或a≤0”的C语言表达式是( )。

A.a>=10 or a<=0

B.a>=0|a<=10

C.a>=10 &&a<=0

D.a>=10‖a<=0

23.设以下变量均为int类型,表达式的值不为7的是( )。

A.(x=y=6,x+y,x+1)

B.(x=y=6,x+y,y+1)

C.(x=6,x+1,y=6,x+y)

D.(y=6,y+1,x=y,x+1)

24.设 x、y 均为整型变量,且 x=8;y=3;,则语句 printf("%d,%d\n",x−−,−−y);的输出结果是( )。

A.8,3

B.7,3

C.7,2

D.8,2

25.设有 int a=1,b=2,c=3,d=4,m=2,n=2;,则执行语句(m=a>b)&&(n=c>d);后 n 的值是( )。

A.1

B.2

C.3

D.4

26.已知 int a=6;,则执行 a+=a−=a*a;语句后,a 的值为( )。

A.36

B.0

C.24

D.−60

27.已知 x、y、z 均为整型变量,且值均为 1,则执行语句++x||++y&&++z;后,表达式 x+y的值为( )。

A.1

B.2

C.3

D.4

28.若变量已正确说明为float型,要通过语句scanf("%f%f%f",&a,&b,&c);给a赋值10.0,b赋值22.0,c赋值33.0,下列不正确的输入形式是( )。

A.10<回车>22<回车>33<回车>

B.10.0,22.0,33.0<回车>

C.10.0<回车>22.0 33.0<回车>

D.10 22<回车>33<回车>

29.以下不正确的叙述是( )。

A.在C程序中,逗号运算符的优先级最低

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

C.设a和b为相同类型变量,在执行赋值表达式a=b后,b的值将放入变量a的存储空间,而b的值不变

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

30.对下面程序的语法分析,正确的说法是( )。

#include

void main( )

{

int a,b=1,c=2;

a=b+c,a+b,c+3;

c=(c)?a++:b--;

printf("c=%d/n",(a+b,c));

}

A.第5行有语法错误

B.第6行有语法错误

C.第7行有语法错误

D.无语法错误

2.3.2 填空题

1.定义整型变量的关键字是______,定义实型变量的关键字是______,定义字符型变量的关键字是______。

2.定义语句 double x=2.5,y=4.6;,则表达式(int)x*0.5 的值是______,表达式y+=x++的值是______。

3.定义语句 int i=3,j=4;,则表达式 i=(i=7,j=3,i−j)的值是______。

4.已有定义:char c=' ';int a=1,b;(此处 c 的初值为空格字符),执行 b=!c&&a后 b 的值为______。

5.若变量a、b已定义为int类型并分别赋值为25和65,现要求用printf函数以a=25,b=A的形式输出,请写出完整的输出语句______。

6.假设整型变量x=100,那么表达式(!x)==(x!=0)的值为______。

7.请写出定义整型变量a、b、c,并为这3个变量均赋初值为2的语句是______。

8.若已有定义 int i; float x; char ch1;,为使变量 i=5,x=18.25,ch1='A',则对应 scanf 函数调用语句的数据输入语句是______。

9.设 float i;,由键盘输入:123.4,能正确读入数据的输入语句是______。

10.以下程序的输出结果是______。

#include

void main()

{ int a=37;

a+=a%=9; printf("%d\n",a);

}

11.设a、b、c都是整型变量,如果a的值为1,b的值为2,则执行c=a++||b++;语句后,变量b的值是______。

12.执行下面程序段后变量k的值为______。

int a=1,b=2,c=3,d=4,k;;

k=a>b?a:c>d?c:d;

13.下面程序段的功能是输出大写字母对应的小写字母的ASCII码,请填空。

char ch;

scanf("%c",&ch);

ch=(ch>='A'&&ch<='Z')?( ):ch

printf("______\n",ch);

14.要求执行下面程序后输出为1,请填空。

#include

void main( )

{

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

printf("%d\n",(a

}

2.3.3 编程题

1.将小写字母a转换成大写字母A输出。

2.通过键盘输入一实数,求其正弦值并输出。

3.已知圆的半径为r(r是一个可变的量),求圆的面积和周长。

2.3.4 测试题参考答案【2.3.1单项选择题参考答案】

1.B 2.D 3.B 4.D 5.B 6.D 7.C 8.D 9.C 10.B

11.C 12.B 13.B 14.B 15.B 16.B 17.D 18.C 19.A 20.D

21.C 22.D 23.C 24.D 25.B 26.D 27.C 28.B 29.D 30.D【2.3.2填空题参考答案】

1.int  float char

2.1.000000 7.100000

3.4

4.0

5.printf("a=%d,b=%c",a,b);

6.0

7.int a=5,b=5,c=5;

8.scanf("%d%f%c",&i,&x,&ch1);

9.scanf("%f",&i);

10.2

11.2

12.4

13.ch+32 %d

14.d或1【2.3.3编程题参考答案】

1.程序如下:

#include

void main( )

{

char ch1;

ch1='a';

printf("%c->%c\n",ch1,ch1-32);

}

2.程序如下:

#include

#include

void main( )

{

double x,s;

printf("Input a angle:");

scanf("%lf",&x);

s=sin(x*3.14159/180.0);

printf("sine of %lf is %lf\n",x,s);

}

3.程序如下:

#include

#define PI 3.14159

void main( )

{

float r,area,s;

printf("请输入圆的半径r=");

scanf("%f",&r);

area=PI*r*r;

s=2*PI*r;

printf("圆面积=%f,圆周长=%f \n",area,s);

}2.4 部分习题解答【习题 2.1】 上机编辑并调试本章所有例题。

答:略。【习题 2.3】 下面的变量名中哪些是合法的?

&a abc123 123abc A_C int  long a%c

char a?b,c double  'a'bc abc a*bc float

答:合法的变量名有:abc123 A_C a_bc【习题 2.5】 填空题。(1)整型 实型 字符型(2)ASCII码(3)1 2(4)f(5)j【习题 2.7】 C 语言中为什么要引入转义字符?

答:在字符集中,有一类字符具有这样的特性:当从键盘上输入这个字符时,显示器就可以显示这个字符,即输入什么就显示什么,这类字符称为可显示字符。例如,a、b、$等。但另一类字符却没有这种特性。它们或者在键盘上找不到对应的一个键,或者当按键以后不能显示键面上的字符,为了解决这一问题,在C语言中引入了转义字符。【习题 2.9】 字符常量和字符串常量有什么区别?

答:字符常量和字符串常量的区别主要有两点。(1)从形式上看,字符常量使用单引号,而字符串常量使用双引号。(2)从内部存储来看,编译程序在每个字符串的尾部自动加上了一个空字符 NULL(即'\0')作为字符串的结束标志,而字符常量则不存在这种情况。【习题 2.11】 写出下面程序运行后的结果。(1)程序运行结果:

1(2)程序运行结果:

8,10(3)程序运行结果:

y=5.000000(4)程序运行结果:

A,8,3.140000(5)程序运行结果:

0,48(6)程序运行结果:

a=16(7)程序运行结果:

0

1,6

0,15,15(8)程序运行结果:

2,2,0

1,2,0

0,1,0

1,1,0(9)程序运行结果:

3

2

4(10)程序运行结果:

3

3

2,2

4

2,3,4

0

1第3章顺序和选择结构程序设计3.1 知识要点

1.程序设计方法包括3个基本步骤:分析问题,画出程序的基本轮廓,实现该程序。

2.良好的程序编写风格,可以增强程序的可读性、可移植性和可维护性。初学者要养成良好的程序编写风格,在书写程序时应遵循以下规则。(1)一个说明或一条语句占一行。(2)用{}括起来的部分,通常表示程序的某一层次结构。{}一般与该结构语句的第一个字母对齐,并单独占一行。(3)低一层次的语句或说明可比高一层次的语句或说明缩进若干格后书写,以便看起来更加清晰,增加程序的可读性。

3.复合语句可以将多个语句组成一个可执行的单元。一个复合语句在语法上等同于一个语句,即(1)复合语句可以出现在一条语句所允许出现的任何地方;(2)花括号中的所有语句是一个整体,在程序中共同进退,要么语句全部执行,要么一条语句都不执行。

4.掌握 4 个最基本的标准文件输入/输出函数:getchar、putchar、printf、scanf;其余输入/输出函数详见后续章节。

5.if语句的3种结构:单分支结构、双分支结构和多路分支结构。

在if语句中可以嵌套另一个if语句,这种形式可以使if语句嵌套到任意深度。

嵌套原则:嵌套时else与其前面最靠近的if配对。

6.switch语句用于多路分支结构,它使得程序更加简明清晰。

在switch语句中与break语句的正确配合。

7.本章介绍的一个重要算法之一是变量值的交换算法。变量值的交换必须使用一个中间变量。3.2 重点与难点解析【例题 3-1】 从键盘上输入一个小写英文字母,编程输出该字母所对应的大写字母。【解析】 大写英文字母 A~Z 的 ASCII 码值为 65~90,小写字母 a~z 的 ASCII 码值为97~122。每对字母的ASCII码值差都是32,即'a'−'A'、'b'−'B'、'c'−'C'、…'z'−'Z'都等于32。

程序如下:

#include

void main( )

{

char c1,c2;

c1=getchar();

c2=c1-32;

printf("%d,%d,%c,%c\n",c1,c2,c1,c2);

}【例题 3-2】 当 a=1,b=3,c=5,d=4 时,执行以下程序段后 x 的值是( )。【解析】 嵌套 if 语句在使用时一定要掌握其基本原则:else 与之前面最近(未曾配对)的 if配对。根据此原则可以确定此例程中的4层嵌套关系的配对如括号所示(注意,若在程序设计中有3个以上的缩进,就要考虑修改程序结构或者使用函数。太多的缩进嵌套格式对于程序的执行效率和易读性都是致命的)。【例题 3-3】 输入 3 个整数 x、y、z,请把这 3 个数按由小到大顺序输出。【解析】 想办法把最小的数放到 x 上,先将 x 与 y 进行比较,如果 x>y 则将 x 与 y 的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小,然后将y与z进行比较,将最大的数放到z上,如果y>z,将y与z的值进行交换。

程序如下:

#include

void main( )

{

int x,y,z,t;

scanf("%d%d%d",&x,&y,&z);

if (x>y)

{ t=x;x=y;y=t; }   /*交换x,y的值*/

if(x>z)

{ t=z;z=x;x=t; }   /*交换x,z的值*/

if(y>z)

{ t=y;y=z;z=t; }   /*交换z,y的值*/

printf("small to big: %d %d %d\n",x,y,z);

}【例题 3-4】 某服装店经营套服且单件出售。若一次购买不少于 100 套,则每套 88 元;若不足100套,则每套98元;只买上衣每件66元;只买裤子每条48元。请编程读入所买上衣c和裤子t的件数,计算应付款数m。【解析】 由题目可知,根据裤子和衣服的购买数量可知需分 3 种情况进行讨论,即对应外层嵌套语句,每种情况又可以按照成套和非成套价格进行细分。对于嵌套在内层的if语句可以不用花括号括起来。但为了使结构更清晰,建议嵌套在内层的if语句最好加上花括号。

程序如下:

#include

void main( )

{

int c,t,m;

printf("input the number of coat and trousers you want to buy:\n");

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

if(c==t)

{

if(c>=100)

m=c*88;

else

m=c*98;

}

else if(c>=t)

{

if(t>=100)

m=t*88+(c-t) *66;

else

m=t*98+(c-t) *66;

}

else

{

if(c>=100)

m=c*88+(t-c) *48;

else

m=c*98+(t-c) *48;

}

printf("%d",m);

}【例题 3-5】 输入某年某月某日,判断这一天是这一年的第几天?【解析】 以 3 月 5 日为例,应该先把前两个月的天数加起来,然后再加上 5 天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。

程序如下:

#include

void main( )

{

int day,month,year,sum,leap;

printf("\nplease input year,month,day\n");

scanf("%d,%d,%d",&year,&month,&day);

switch(month)              /*先计算某月以前月份的总天数*/

{

case 1:sum=0;break;

case 2:sum=31;break;

case 3:sum=59;break;

case 4:sum=90;break;

case 5:sum=120;break;

case 6:sum=151;break;

case 7:sum=181;break;

case 8:sum=212;break;

case 9:sum=243;break;

case 10:sum=273;break;

case 11:sum=304;break;

case 12:sum=334;break;

default:printf("data error");break;

}

sum=sum+day;                 /*再加上某天的天数*/

if(year%400==0||(year%4==0&&year%100!=0)) /*判断是不是闰年*/

leap=1;

else

leap=0;

if(leap==1&&month>2)             /*如果是闰年且月份大于2,总天数应该加一天*/

sum++;

printf("It is the %dth day:",sum);

}【例题 3-6】 执行以下程序段后的运行结果是( )。

#include

void main( )

{

int a=3,b=4,c=5,t=99;

if(a

printf("%d,%d,%d\n",a,b,c);

}【解析】 在学习程序语言和进行程序设计的时候,经常需要交换两个变量的值。

通常的做法:定义一个新的变量,借助它完成交换。这种算法易于理解,特别适合帮助初学者了解计算机程序的特点,是赋值语句的经典应用。

在实际软件开发中,此算法简单明了,不会产生歧义,便于程序员之间的交流,一般情况下碰到交换变量值的问题,都应采用此算法,即为标准算法。

使用时要注意交换的3条语句需写入大括号变成一条复合语句,否则程序的执行会得出意外的结果,如上例所示,当a

3.3.1 单项选择题

1.以下程序的输出结果是( )。

# include

void main( )

{ printf("%d\n",NULL); }

A.不确定的(因变量无定义)

B.0

C.−1

D.1

2.以下程序的输出结果是( )。

# include

void main( )

{

int a=2,c=5;

printf("a=%%d,b=%%d\n",a,c);

}

A.a=%2,b=%5

B.a=2,b=5

C.a=%%d,b=%%d

D.a=%d,b=%d

3.以下程序的输出结果是( )。

#include

void main( )

{ int a,b,d=241;

a=d/100%9;

b=(-1)&&(-1);

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

}

A.6,1

B.2,1

C.6,0

D.2,0

4.若x和y都是int型变量,x=100,y=200,且有程序片段:printf("%d",(x,y));,其输出结果是( )。

A.200

B.100

C.100 200

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

5.请读以下程序:

#include

void main( )

{

int a; float b,c;

scanf("%2d%3f%4f",&a,&b,&c);

printf("\na=%d,b=%f,c=%f\n",a,b,c);

}

若程序运行时从键盘上输入 9876543210表示回车),则上面程序的输出结果是( )。

A.a=98,b=765,c=4321

B.a=10,b=432,c=8765

C.a=98,b=765.000000,c=4321.000000

D.a=98,b=765.0,c=4321.0

6.执行下面程序后,输出结果是( )。

void main( )

{

int a;

printf("%d\n",(a=3*5,a*4,a+5));

}

A.65

B.20

C.15

D.10

7.以下程序输出结果,描述正确的是( )。

A.有语法错不能通过编译

B.可以通过编译但不能通过链接

C.输出***

D.输出$$$

8.以下程序的输出是( )。

#include

void main( )

{

int x=2,y=-1,z=2;

if(x

if(y<0)

z=0;

else

z+=1;

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

}

A.3

B.2

C.1

D.0

9.若变量都已正确定义,则以下程序段的输出是( )。

a=10;b=50;c=30;

if(a>b) a=b,b=c;

c=a;

printf("a=%db=%dc=%d\n",a,b,c);

A.a=10 b=30 c=10

B.a=10 b=50 c=10

C.a=50 b=30 c=10

D.a=50 b=30 c=50

10.设有说明语句 int a=1,b=2,c=3,d=4,m=2,n=2;,则执行(m=a>b)&&(n=c>d)后 n 的值为( )。

A.1

B.2

C.3

D.4

3.3.2 填空题

1.当a=3,b=2,c=1时,表达式f=a>b>c的值是______。

2.满足以下要求1的逻辑表达式是______。

要求1:判断坐标为(x,y)的点,在内径为a、外径为b、中心在0点上的圆环内的表达式。满足以下要求2的逻辑表达式是______。

要求2:写出x的值必须是2、4、6、7、8的判断表达式。

3.为了使以下程序的输出结果为t=4,输入值a和b应满足的条件是______。

#include

void main( )

{

int s,t,a,b;

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

s=1;

t=1;

if(a>0) s=s+1;

if(a>b)

t=s+t;

else if(a==b)

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

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载