61阅读

c语言程序设计谭浩强-C语言程序设计(第三版)-谭浩强【清晰完整版】

发布时间:2018-03-02 所属栏目:c程序设计谭浩强

一 : C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

扩展:谭浩强c语言第三版 / 谭浩强c语言第三版pdf / 谭浩强第三版答案

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

扩展:谭浩强c语言第三版 / 谭浩强c语言第三版pdf / 谭浩强第三版答案

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

扩展:谭浩强c语言第三版 / 谭浩强c语言第三版pdf / 谭浩强第三版答案

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

c语言程序设计 C语言程序设计(第三版)-谭浩强【清晰完整版】

(www.61k.com)

扩展:谭浩强c语言第三版 / 谭浩强c语言第三版pdf / 谭浩强第三版答案

二 : C语言程序设计谭浩强(第四版)期末复习重点

第一章 程序设计和C语言

1.1.什么是计算机程序

程序:一组计算机能识别和执行的指令。[www.61k.com]只要让计算机执行这个程序,计算机就会自动地、有条不紊地进行工作 ..

计算机的一切操作都是由程序控制的,离开程序,计算机将一事无成。

1.2什么是计算机语言

计算机语言:人和计算机交流信息的、计算机和人都能识别的语言。

计算机语言发展阶段:机器语言(由0和1组成的指令)

符号语言(用英文字母和数字表示指令)

高级语言(接近于人的自然语言和数学语言)

面向过程的语言(非结构化的语言、结构化语言);面向对象的语言

1.3C语言的发展及其特点

C语言是一种用途广泛、功能强大、使用灵活的过程性编程语言,既可用于编写应用软件,又能用于编写系统软件。因此C语言问世以后得到迅速推广。

C语言主要特点:

语言简洁、紧凑,使用方便、灵活。(只有37个关键字、9种控制语句;程序书写形式自由,源程序短) 运算符丰富。(34种运算符;把括号、赋值、强制类型转换等都作为运算符处理;表达式类型多样化)

数据类型丰富。(包括:整型、浮点型、字符型、数组类型、指针类型、结构体类型、共用体类型;C99又扩充了复数浮点类型、超长整型、布尔类型;指针类型数据,能用来实现各种复杂的数据结构的运算。)

具有结构化的控制语句。(如if?else语句、while语句、do?while语句、switch语句、for语句用函数作为程序的模块单位,便于实现程序的模块化;C语言是完全模块化和结构化的语言)

语法限制不太严格,程序设计自由度大。(对数组下标越界不做检查;对变量的类型使用比较灵活,例如,整型量与字符型数据可以通用;C语言允许程序编写者有较大的自由度,因此放宽了语法检查)

允许直接访问物理地址,能进行位操作,可以直接对硬件进行操作。(C语言具有高级语言的功能和低级语言的许多功能,可用来编写系统软件;这种双重性,使它既是成功的系统描述语言,又是通用的程序设计语言) 用C语言编写的程序可移植性好。(C的编译系统简洁,很容易移植到新系统;在新系统上运行时,可直接编译“标准链接库”中的大部分功能,不需要修改源代码;几乎所有计算机系统都可以使用C语言)

生成目标代码质量高,程序执行效率高。

1.4.1最简单的C语言程序举例

C语言允许用两种注释方式://:单行注释,可单独占一行,可出现在一行中其他内容的右侧。

/*??*/:块式注释,可包含多行。

1.4.2 C语言程序的结构

C语言程序的结构特点:

1个部分:预处理指令、全局声明、函数定义。)

2C程序是由一个或多个函数组成的;必须包含一个main函数(只能有一个);每个函数都用来实现一个或几个特定功能;被调用的函数可以是库函数,也可以是自己编制设计的函数。)

3、一个函数包括两个部分(函数首部、函数体(声明部分、执行部分))

4

5、C程序书写格式是比较自由的:一行内可以写几个语句;一个语句可以分写在多行上。)

6 7、 8

1.6 程序设计的任务

1.问题分析 2.设计算法 3.编写程序 4.对源程序进行编辑、编译和连接 5.运行程序,分析结 6.编写程序文档

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

第二章 算法——程序的灵魂

一个程序主要包括以下两方面的信息:

(1) 对数据的描述。(www.61k.com)在程序中要指定用到哪些数据以及这些数据的类型和数据的组织形式,这就是数据结构。

(2) 对操作的描述。即要求计算机进行操作的步骤,也就是算法。

数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。

著名计算机科学家沃思(Nikiklaus Wirth)提出一个公式:算法 + 数据结构 = 程序

一个程序除了算法和数据结构这主要要素外,还应当采用结构化程序设计方法进行程序设计,并且用某一种计算机语言表示。

算法、数据结构、程序设计方法和语言工具是一个程序设计人员应具备的知识。

2.1什么是算法

广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。计算机算法可分为两大类别:数值运算算法(目的是求数值解);非数值运算算法(包括面十分广泛,常见的是用于事务管理领域)

2.3 算法的特性

一个有效算法应该具有以下特点:

(1) 有穷性。一个算法应包含有限的操作步骤,而不能是无限的。

(2)

(3)

(4) “解” 就是输出。没有输出的算法是没有意义的。

(5)

流程图是表示算法的较好的工具。

2.4.3 三种基本结构和改进的流程图

三种基本结构:(1)顺序结构 (2)选择结构 (3)循环结构 ①当型循环结构 ②直到型循环结构

2.4.5用伪代码表示算法

伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。用伪代码写算法并无固定的、严格的语法规则,可以用英文,也可以中英文混用。

2.4.6 用计算机语言表示算法

要完成一项工作,包括设计算法和实现算法两个部分。设计算法的目的是为了实现算法。

11111例2.19 将例2.17表示的算法(求多项式的值)用C语言表示。 1???????23499100 #include <stdio.h>

int main( )

{ int sign=1;

double deno = 2.0,sum = 1.0, term;

while (deno <= 100)

{ sign = -sign;

term = sign/deno;

sum = sum+term;

deno = deno+1;

}

printf ("%f\n",sum);

return 0;

}

2.5 结构化程序设计方法

采取以下方法保证得到结构化的程序:(1)自顶向下;(2)逐步细化;(3)模块化设计;(4)结构化编码。

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

第三章 最简单的C程序设计

3.1 顺序程序设计举例

例3.1 有人用温度计测量出用华氏法表示的温度(如 F,今要求把它转换为以摄氏法表示的温度(如 C) 。(www.61k.com)

5c?(f?32) 解题思路:找到二者间的转换公式代表华氏温度,c代表摄氏温度 9

扩展:谭浩强c语言第四版 / 谭浩强c语言第四版pdf / 谭浩强c语言第四版ppt

c?

算法:5(f?32)9(N-S图)

#include <stdio.h>

int main ( )

{

float f,c; 定义f和c为单精度浮点型变量

f=64.0; 指定f的值

c=(5.0/9)*(f-32); 计算c的值

printf("f=%f\nc=%f\n",f,c); 输出f和c的值

return 0;

}

例3.2 计算存款利息。有1000元,想存一年。有三种方法可选:(1)活期,年利率为r1 (2)一年期定期,年利

率为r2 (3)存两次半年定期,年利率为r3,请分别计算出一年后按三种方法所得到的本息和。

解题思路:确定计算本息和的公式。从数学知识可知:若存款额为p0,则:活期存款一年后本息和为: p1=p0(1+r1);一年期定期存款,一年后本息和为:p2=p0(1+r2);两次半年定期存款,一年后

本息和为:p3=p0(1+r3/2)(1+r3/2)

算法:

#include <stdio.h>

int main ( )

{float p0=1000, r1=0.0036,r2=0.0225,r3=0.0198, p1, p2, p3;

p1 = p0 * (1 + r1);

p2 = p0 * (1 + r2);

p3 = p0 * (1 + r3/2) * (1 + r3/2);

printf(”%f\n%f\n%f\n”,p1, p2, p3);

return 0;

}

3.2.1 常量与变量

1.常量:在程序运行过程中,其值不能被改变的量。整型常量:如1000,12345,0,-345;实型常量:十进制小

数形式:如0.34 -56.79 0.0,指数形式:如12.34e3 (代表12.34103);字符常量:如’?’,转义字符:如’\n’;字符串常量:如”boy”;符号常量:#define PI 3.1416

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

2.变量:在程序运行期间,变量的值是可以改变的。(www.61k.com]变量必须先定义,后使用,定义变量时指定该变量的名字和

类型。变量名和变量值是两个不同的概念,变量名实际上是以一个名字代表的一个存储地址。

从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。

3.常变量:const int a=3;

4.标识符:一个对象的名字。C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为

字母或下划线

合法的标识符:如sum,average, _total, Class, day, BASIC, li_ling

不合法的标识符:M.D.John,¥123,#33,3D64,a>b

3.2.2 数据类型

所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式。不同的类型分配不同的长度和存储形式。

C语言允许使用的数据类型:

整型类型:基本整型(int型):占2个或4个字节

短整型(short int):VC++6.0中占2个字节

长整型(long int):VC++6.0中占4个字节

基本类型 双长整型(long long int):C99新增的

字符型

布尔型

浮点类型(单精度浮点型、双精度浮点型、复数浮点型)

枚举类型

空类型

派生类型(指针类型、数组类型、结构体类型、共用体类型、函数类型)

3.2.3 整型数据

整型变量的符号属性:整型变量的值的范围包括负数到正数;可以将变量定义为“无符号”类型;

扩充的整形类型:

有符号基本整型 [signed] int;

无符号基本整型 unsigned int;

有符号短整型 [signed] short [int];

无符号短整型 unsigned short [int];

有符号长整型 [signed] long [int];

无符号长整型 unsigned long [int]

有符号双长整型 [signed] long long [int];

无符号双长整型 unsigned long long [int]

3.2.3 字符数据类型

字符是按其代码(整数)形式存储的,C99把字符型数据作为整数类型的一种。

1.字符与字符代码:大多数系统采用ASCII字符集

字母:A ~Z,a ~z

数字:0~9

专门符号:29个:! ” # & ‘ ( ) *等

空格符:空格、水平制表符、换行等

不能显示的字符:空(null)字符(以‘\0’表示)、警告(以‘\a’表示)、退格(以‘\b’表

示)、回车(以‘\r’表示)等

字符’1’和整数1是不同的概念:

字符’1’只是代表一个形状为’1’的符号,在需要时按原样输出,在内存中以ASCII码形式存储,占1个

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

字节[0 0 1 1 0 0 0 1];

整数1是以整数存储方式(二进制补码方式)存储的,占2个或4个字节[0 0 0 0 0 0 0 0 |0 0 0 0 0 0 0 1]

2.字符变量:用类型符char定义字符变量

3.2.5 浮点型数据

浮点型数据是用来表示具有小数点的实数。[www.61k.com)

float型(单精度浮点型):编译系统为float型变量分配4个字节;数值以规范化的二进制数指数形式存放。 double型(双精度浮点型):编译系统为double型变量分配8个字节;15位有效数字

long double(长双精度)型

3.2.6 怎样确定常量的类型

字符常量:由单撇号括起来的单个字符或转义字符。

整型常量:不带小数点的数值。系统根据数值的大小确定int型还是long型等。

浮点型常量:凡以小数形式或指数形式出现的实数。C编译系统把浮点型常量都按双精度处理;分配8个字节

3.2.7 运算符和表达式

3、算术表达式和运算符的优先级与结合性:

用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子,称为C算术表达式 运算对象包括常量、变量、函数等

C语言规定了运算符的优先级和结合性

4、不同类型数据间的混合运算:

(1)+、-、*、/ 运算的两个数中有一个数为float或double型,结果是double型。系统将float型数据都先

转换为double型,然后进行运算

(2)如果int型与float或double型数据进行运算,先把int型和float型数据转换为double型,然后进行

扩展:谭浩强c语言第四版 / 谭浩强c语言第四版pdf / 谭浩强c语言第四版ppt

运算,结果是double型

(3)字符型数据与整型数据进行运算,就是把字符的ASCII代码与整型数据进行运算

例3.3 给定一个大写字母,要求用小写字母输出。

#include <stdio.h>

int main ( )

{

char c1,c2;

c1=’A’;

c2=c1+32;

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

printf(”%d\n”,c2);

return 0;

}

5、强制类型转换运算符

强制类型转换运算符的一般形式为:(类型名)(表达式)

(double)a (将a转换成double类型)

(int) (x+y) (将x+y的值转换成int型)

(float)(5%3)(将5%3的值转换成float型)

有两种类型转换:系统自动进行的类型转换;强制类型转换

3.3.1 C语句的作用与分类

C语句分为以下5类:

(1) 控制语句: if、switch、for、while、do?while、continue、break、return、goto等

(2) 函数调用语句 (3)表达式语句 (4)空语句 (5)复合语句

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

在C程序中,最常用的语句是:赋值语句;输入输出语句。[www.61k.com)其中最基本的是赋值语句。

例3.4 给出三角形的三边长,求三角形面积。

#include <stdio.h>

#include <math.h>

int main ( )

{ double a,b,c,s,area;

a=3.67;

b=5.43;

c=6.21;

s=(a+b+c)/2;

area=sqrt(s*(s-a)*(s-b)*(s-c));

printf("a=%f\tb=%f\t%f\n",a,b,c);

printf("area=%f\n",area);

return 0;

}

3.4.1 数据的输入输出举例

例3.5 求ax + bx + c = 0方程的根。a、b、c由键盘输入,设 b-4ac>0

#include <stdio.h>

#include <math.h>

int main ( )

{double a,b,c,disc,x1,x2,p,q;

scanf("%lf%lf%lf",&a,&b,&c);

disc=b*b-4*a*c;

p=-b/(2.0*a);

q=sqrt(disc)/(2.0*a);

x1=p+q; x2=p-q;

printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);

return 0;

} 22

3.4.2 有关数据输入输出的概念

几乎每一个C程序都包含输入输出,输入输出是程序中最基本的操作之一。

(1) 所谓输入输出是以计算机主机为主体而言的:

从计算机向输出设备(如显示器、打印机等)输出数据称为输出

从输入设备(如键盘、磁盘、光盘、扫描仪等)向计算机输入数据称为输入

(2) C语言本身不提供输入输出语句,输入和输出操作是由C标准函数库中的函数来实现的。printf和scanf不

是C语言的关键字,而只是库函数的名字

(3) 在使用输入输出函数时,要在程序文件的开头用预编译指令#include <stdio.h> 或#include ″stdio.h″

3.4.3 用printf函数输出数据

在C程序中用来实现输出和输入的,主要是printf函数和scanf函数。这两个函数是格式输入输出函数,用这两个函数时,必须指定格式。

1.printf函数的一般格式,printf(格式控制,输出表列)例如:printf(”i=%d,c=%c\n”,i,c);

2.常用格式字符:d格式符:用来输出一个有符号的十进制整数。可以在格式声明中指定输出数据的域宽

printf(”%5d%5d\n”,12,-345);%d输出int型数据;%ld输出long型数据。

c格式符。用来输出一个字符,char ch=’a’;printf(”%c”,ch);或printf(”%5c”,ch)

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

s格式符。(www.61k.com]用来输出一个字符串,printf(”%s”,”CHINA”);

f格式符。用来输出实数,以小数形式输出。

①不指定数据宽度和小数位数,用%f;

②指定数据宽度和小数位数。用%m.nf;

③输出的数据向左对齐,用%-m.nf

e格式符。指定以指数形式输出实数。%e,VC++给出小数位数为6位,指数部分占5列,小数

点前必须有而且只有1位非零数字。printf(”%e”,123.456);输出:1.234560

e+002。%m.ne,printf(”%13.2e”,123.456);输出: 1.23e+002 (前面有4

个空格)

3.4.4 用scanf函数输入数据

1. scanf 函数的一般形式:scanf(格式控制,地址表列)

2. scanf函数中的格式声明:与printf函数中的格式声明相似;以%开始,以一个格式字符结束,中间可以插入附加的字符,scanf("a=%f,b=%f,c=%f",&a,&b,&c);

3. 使用scanf函数时应注意的问题

3.4.5 字符数据的输入输出

1.用putchar函数输出一个字符,从计算机向显示器输出一个字符,putchar函数的一般形式为:putchar(c) 例3.8 先后输出BOY三个字符。

#include <stdio.h>

int main ( )

{

char a='B',b='O',c='Y';

putchar(a);

putchar(b);

putchar(c);

putchar ('\n');

return 0;

}

2.用getchar函数输入一个字符,向计算机输入一个字符,getchar函数的一般形式为:getchar( ) 例3.9 从键盘输入BOY三个字符,然后把它们输出到屏幕。

#include <stdio.h>

int main ( )

{ char a,b,c;

a=getchar();

b=getchar();

c=getchar();

putchar(a); putchar(b); putchar(c);

putchar('\n');

return 0;

}

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

第四章 选择结构程序设计

4.1 选择结构和条件判断

C语言有两种选择语句:(1)if语句,实现两个分支的选择结构;(2)switch语句,实现多分支的选择结构

2 例4.1 在例3.5的基础上对程序进行改进。(www.61k.com]题目要求是求 ax+ bx + c = 0方程的根。

22由键盘输入a,b,c。假设a,b,c的值任意,并不保证 b - 4ac ≥ 0。需要在程序中进行判别,如果b - 4ac

≥ 0,就计算并输出方程的两个实根,否则就输出“方程无实根”的信息。

#include <stdio.h>

扩展:谭浩强c语言第四版 / 谭浩强c语言第四版pdf / 谭浩强c语言第四版ppt

#include <math.h>

int main ( )

{

double a,b,c,disc,x1,x2,p,q;

scanf("%lf%lf%lf",&a,&b,&c);

disc=b*b-4*a*c;

if (disc<0)

printf(“has not real roots\n”);

else

{ p=-b/(2.0*a);

q=sqrt(disc)/(2.0*a);

x1=p+q;

x2=p-q;

printf(“real roots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);

}

return 0;

}

4.2.1 用if语句处理选择结构举例

例4.2 输入两个实数,按代数值由小到大的顺序输出这两个数。

#include <stdio.h>

int main()

{ float a,b,t;

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

if(a>b)

{ t=a;

a=b;

b=t;

}

printf("%5.2f,%5.2f\n",a,b);

return 0;

}

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

例4.3 输入3个数a,b,c,要求按由小到大的顺序输出。(www.61k.com]

#include <stdio.h>

int main()

{ float a,b,c,t;

scanf("%f,%f,%f",&a,&b,&c);

if(a>b)

{ t=a; a=b; b=t; }

if(a>c)

{ t=a; a=c; c=t; }

if(b>c)

{ t=b; b=c; c=t; }

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

return 0;

}

4.2.2 if语句的一般形式

if (表达式) 语句1

[ else 语句2 ]

最常用的3种if语句形式:

1. if (表达式) 语句1 (没有else子句)

2. if (表达式) 语句1

else 语句2 (有else子句)

3. if(表达式1) 语句1

else if(表达式2) 语句2

else if(表达式3) 语句3

else if(表达式m) 语句m

else 语句m+1 (在else部分又嵌套了多层的if语句)

说明:(1)整个if语句可写在多行上,也可写在一行上,但都是一个整体,属于同一个语句;

(2)“语句1”?“语句m”是if中的内嵌语句,内嵌语句也可以是一个if语句;

(3)“语句1”?“语句m”可以是简单的语句,也可以是复合语句。

4.3.1 关系运算符及其优先次序

关系运算符:用来对两个数值进行比较的比较运算符

C语言提供6种关系运算符:①<(小于) ②<=(小于或等于) ③>大于) ④>=大于或等于)【优先级相同(高)】 ⑤ == (等于) ⑥ != (不等于)【优先级相同(低)】

关系、算术、赋值运算符的优先级:算数运算符 > 关系运算符 > 赋值运算符

4.3.2 关系表达式

关系表达式:用关系运算符将两个数值或数值表达式连接起来的式子;关系表达式的值是一个逻辑值,即“真”

或“假”;在C的逻辑运算中,以“1”代表“真”,以“0”代表“假”

4.4.1 逻辑运算符及其优先次序

3种逻辑运算符:&&(逻辑与) ||(逻辑或) !(逻辑非)

&&和||是双目(元)运算符

!是一目(元)运算符

逻辑表达式(用逻辑运算符将关系表达式或其他逻辑量连接起来的式子)

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

逻辑运算的真值表

逻辑运算符的优先次序:! → && → || (!为三者中最高)

与其他运算符的优先次序:赋值运算符 < &&和|| < 关系运算符 < 算数运算符 < !

4.4.2 逻辑表达式

逻辑表达式的值应该是逻辑量“真”或“假”

编译系统在表示逻辑运算结果时,以数值1代表“真”,以0代表“假”

但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”

注意:将一个非零的数值认作为“真” 修改后的逻辑运算真值表

4.4.3 逻辑型变量

这是C99所增加的一种数据类型,可以将关系运算和逻辑运算的结果存到一个逻辑型变量中,以便于分析和运算

4.5 条件运算符和条件表达式

有一种if语句,当被判别的表达式的值为“真”或“假” 时,都执行一个赋值语句且向同一个变量赋值 如:if (a>b)

max=a;

else

max=b;

条件运算符的执行顺序:①求解表达式1;②若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件

表达式的值;③若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值 条件运算符优先于赋值运算符;条件运算符的结合方向为“自右至左”。(www.61k.com]

例4.4 输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。#include <stdio.h>

int main()

{

char ch;

scanf("%c",&ch);

ch=(ch>='A' && ch<='Z‘)?(ch+32):ch;

printf("%c\n",ch);

return 0;

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

}

4.6 选择结构的嵌套

在if语句中又包含一个或多个if语句称为if语句的嵌套。(www.61k.com]一般形式:

if( ) else总是与它上面最 if() 语句近的未配对的if配对

语句()语句内嵌if

else 内嵌}

语句语句2 {}限定了内嵌if范围 语句(x < 0)

例4.5有一函数(x = 0)编一程序,输入一个x值,要求输出相应的y值。 (x > 0)

解题思路:方法1 (1) 先后用3个独立的if语句处理:

输入x scanf("%d",&x);

若 x < 0, 则y =-1 if(x<0) y = -1;

若 x = 0, 则y = 0 if(x==0) y = 0;

若 x > 0, 则y = 1 if(x>0) y = 1;

输出x和y printf("x=%d,y=%d\n",x,y); 方法2 (2) 用一个嵌套的if语句处理:

扩展:谭浩强c语言第四版 / 谭浩强c语言第四版pdf / 谭浩强c语言第四版ppt

输入x scanf("%d",&x);

若x < 0, 则y = -1 if(x<0) y=-1;

否则 else

若 x = 0, 则y = 0 if(x==0) y=0;

否则 y = 1 else y=1;

输出x和y printf("x=%d,y=%d\n",x,y);

4.7 用switch语句实现多分支选择结构

例4.6 、例4.7

switch语句的作用是根据表达式的值,使流程跳转到不同的语句.switch语句的一般形式

4.8 选择结构程序综合举例

例4.8 写一程序,判断某一年是否闰年。

#include <stdio.h>

int main()

{ int year,leap;

printf("enter year:"); scanf("%d",&year);

if (year%4==0)

if(year%100==0)

if(year%400==0) leap=1;

else leap=0;

else leap=1;

else leap=0;

if (leap) printf("%d is ",year);

else printf("%d is not ",year);

printf("a leap year.\n");

return 0;

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

}

2例4.9 求ax + bx + c = 0方程的解。[www.61k.com]

#include <stdio.h>

#include <math.h>

int main()

{

double a,b,c,disc,x1,x2,realpart,imagpart;

scanf("%lf,%lf,%lf",&a,&b,&c);

printf("The equation ");

if(fabs(a)<=1e-6)

printf("is not a quadratic\n");

else

{disc=b*b-4*a*c;

if(fabs(disc)<=1e-6)

printf("has two equal roots:%8.4f\n",-b/(2*a));

else

if(disc>1e-6)

{x1=(-b+sqrt(disc))/(2*a);

x2=(-b-sqrt(disc))/(2*a);

printf("has distinct real roots:%8.4fand %8.4f\n",x1,x2);

}

else

{ realpart=-b/(2*a);

imagpart=sqrt(-disc)/(2*a);

printf(" has complex roots:\n");

printf("%8.4f+%8.4fi\n“,realpart,imagpart);

printf("%8.4f-%8.4fi\n",realpart,imagpart);

}

}

return 0;

}

例4.10 运输公司对用户计算运输费用。路程(s km)越远,每吨·千米运费越低。 标准如下: #include <stdio.h>

s < 250 没有折扣 int main()

250≤s < 500 2%折扣 {

500≤s < 1000 5%折扣 int c,s;

1000≤s < 2000 8%折扣 float p,w,d,f;

2000≤s < 3000 10%折扣 printf("please enter price,weight,discount:"); 3000≤s 15%折扣 scanf("%f,%f,%d",&p,&w,&s);

“freight=%10.2f\n”,f);

return 0; }

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

第五章 循环结构程序设计

大多数的应用程序都会包含循环结构。[www.61k.com)循环结构和顺序结构、选择结构是结构化程序设计的三种基本结构,它们是各种复杂程序的基本构造单元。

5.2 用while语句实现循环

while语句的一般形式如下:表达式 ) 语句 循环体

“真”时执行循环体语句

“假”时不执行

while循环的特点是:先判断条件表达式,后执行循环体语句。

例5.1求1+2+3+?+100,即 ?100

#include <stdio.h> n

n?1

int main()

{

int i=1,sum=0;

while (i<=100)

{ sum=sum+i;

i++;

}

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

return 0;

}

5.3用do——while语句实现循环

do---while语句的特点:先无条件地执行循环体,然后判断循环条件是否成立。一般形式为:

例5.2 用do?while语句求: 1+2+3+?+100

#include <stdio.h>

int main()

{ int i=1,sum=0;

do

{

sum=sum+i;

i++;

}while(i<=100);

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

return 0;

}

do 语句 while (表达式);

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

例5.3 while和do---while循环的比较。[www.61k.com)

int i,sum=0; 当while后面 int i,sum=0;

printf(“i=?”); 的表达式的 printf(“i=?”);

scanf(“%d”,&i); 第一次的值 scanf(“%d”,&i);

while(i<=10) 为“真”时, do

{ 两种循环得到 {

sum=sum+i; 的结果相同; sum=sum+i;

i++; 否则不相同。 i++;

} }while(i<=10);

printf(“sum=%d\n",sum); printf(“sum=%d\n",sum);

5.4用for语句实现循环

for语句不仅可以用于循环次数已经确定的情况,还可以用于循环次数不确定而只给出循环结束条件的情况。 (1) 先求解表达式1

(2) 求解表达式2,若其值为真,执行循环体,然后执行下面第(3)步。若为假,则结束循环,转到第(5)步

(3) 求解表达式3

(4) 转回上面步骤(2)继续执行

(5) 循环结束,执行for语句下面的一个语句

5.5 循环的嵌套

一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。 3种循环(while循环、do?while循环和for循环)可以互相嵌套。

5.7 用break语句提前终止循环

break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句

扩展:谭浩强c语言第四版 / 谭浩强c语言第四版pdf / 谭浩强c语言第四版ppt

例5.4 在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目。

#include <stdio.h>

#define SUM 100000

int main()

{ float amount,aver,total; int i;

for (i=1,total=0;i<=1000;i++)

{ printf("please enter amount:");

scanf("%f",&amount);

total= total+amount;

if (total>=SUM) break;

}

aver=total / i ; printf(“num=%d\naver=%10.2f\n”,i,aver);

return 0;

}

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

5.7.2 用continue语句提前结束本次循环

有时不希望终止整个循环的操作,而只希望提前结束本次循环,而接着执行下次循环。[www.61k.com)这时可以用continue语句。 例5.5 要求输出100~200之间的不能被3整除的数。

for(n=100;n<=200;n++)

{ if (n%3==0)

continue;

printf("%d ",n);

}

5.7.3 break语句和continue语句的区别

continue语句只结束本次循环,而不是终止整个循环的执行

break语句结束整个循环过程,不再判断执行循环的条件是否成立

例5.6 输出以下4*5的矩阵。

1 2 3 4 5

2 4 6 8 10

3 6 9 12 15

4 8 12 16 20

#include <stdio.h>

int main()

{ int i,j,n=0;

for (i=1;i<=4;i++) 控制输出4行

for (j=1;j<=5;j++,n++) 控制每行中输出5个数据

{ if (n%5==0) printf (“\n”);

printf ("%d\t",i*j);

}

printf("\n");

return 0;

}

5.8 循环程序举例

例5.7用 /4 ≈ 1-1/3 +1/5-1/7+`````` 公式求 的近似值,直到发现某一项的绝对值小于10-6为止(该项不累计加)。 ??

#include <stdio.h>

#include <math.h>

int main()

{ int sign=1; double pi=0,n=1,term=1;

while(fabs(term)>=1e-6)

{ pi=pi+term;

n=n+2;

sign=-sign;

term=sign/n;

}

pi=pi*4;

printf("pi=%10.8f\n",pi);

return 0;

}

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

例5.8 求费波那西(Fibonacci)数列的前40个数。[www.61k.com]这个数列有如下特点:第1、2两个数为1、1。从第3个数开始,该数是其前面两个数之和。即:

F1 =1 (n=1)

F2 =1 (n=2)

Fn =Fn-1 + Fn-2 (n≥3)

这是一个有趣的古典数学问题:有一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假设所有兔子都不死,问每个月的兔子总数为多少?

#include <stdio.h> #include <stdio.h>

int main() int main()

{ int f1=1,f2=1,f3; int i; { int f1=1,f2=1; int i;

printf("%12d\n%12d\n",f1,f2); for(i=1; i<=20; i++)

for(i=1; i<=38; i++) { printf("%12d %12d ",f1,f2);

{ f3=f1+f2; if(i%2==0) printf("\n");

printf("%12d\n",f3); f1=f1+f2;

f1=f2; f2=f2+f1;

f2=f3; }

} return 0;

return 0; }

}

例5.9输入一个大于3的整数n,判定它是否素数(prime,又称质数)。

#include <stdio.h>

int main()

{ int n,i;

printf(“n=?"); scanf("%d",&n);

for (i=2;i<=n-1;i++)

if(n%i==0) break;

if(i<n) printf("%d is not\n",n);

else printf("%d is\n",n);

return 0;

}

例5.10 求100~200间的全部素数。

??

for(n=101;n<=200;n=n+2)

{ k=sqrt(n);

for (i=2;i<=k;i++)

if (n%i==0) break;

if (i>=k+1)

{ printf("%d ",n);

m=m+1;

}

if(m%10==0) printf(“\n”);

}

??

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

例5.11 译密码。[www.61k.com]为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。 解题思路:问题的关键有两个:

(1) 决定哪些字符不需要改变,哪些字符需要改变,如果需要改变,应改为哪个字符

处理的方法是:输入一个字符给字符变量c,先判定它是否字母(包括大小写),若不是字母,不改变c的值;若是字母,则还要检查它是否’W’到’Z’的范围内(包括大小写字母)。如不在此范围内,则使变量c的值改变为其后第4个字母。如果在’W’到’Z’的范围内,则应将它转换为A~D(或a~d)之一的字母。

(2) 怎样使c改变为所指定的字母?办法是改变它的ASCII值

例如字符变量c的原值是大写字母’A’,想使c的值改变为’E’,只需执行“c=c+4”即可,因为’A’的ASCII值为65,而’E’ 的ASCII值为69,二者相差4

char c;

c=getchar();

while(c!=‘\n’)

{ if((c>=‘a’ && c<=‘z’) || (c>=‘A’ && c<=‘Z’))

{ if(c>='W' && c<='Z' || c>='w' && c<='z')

c=c-22;

else c=c+4;

}

printf("%c",c);

c=getchar();

}

char c;

while((c=getchar())!=‘\n’)

{ if((c>=‘A’ && c<=‘Z’) || (c>=‘a’ && c<=‘z’))

{ c=c+4;

if(c>=‘Z’ && c<=‘Z’+4 || c>‘z’)

扩展:谭浩强c语言第四版 / 谭浩强c语言第四版pdf / 谭浩强c语言第四版ppt

c=c-26;

}

printf("%c",c); }

第六章利用数组处理批量数据

数组是一组有序数据的集合。数组中各数据的排列是有一定规律的,下标代表数据在数组中的序号。用一个数组名和下标惟一确定数组中的元素。数组中的每一个元素都属于同一个数据类型

6.1.1怎样定义一维数组

一维数组是数组中最简单的。它的元素只需要用数组名加一个下标,就能惟一确定。要使用数组,必须在程序中先定义数组

定义一维数组的一般形式为:类型符 数组名[常量表达式];

数组名的命名规则和变量名相同,如 int a[10];

6.1.2怎样引用一维数组元素

在定义数组并对其中各元素赋值后,就可以引用数组中的元素。注意:只能引用数组元素而不能一次整体调用整个数组全部元素的值。

引用数组元素的表示形式为:数组名[下标],如a[0]=a[5]+a[7]-a[2*3] 合法

例6.1:对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出。

解题思路:定义一个长度为10的数组,数组定义为整型。要赋的值是从0到9,可 以用循环来赋值。

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

用循环按下标从大到小输出这10个元素

#include <stdio.h>

int main()

{ int i,a[10];

for (i=0; i<=9;i++)

a[i]=i;

for(i=9;i>=0; i--)

printf("%d ",a[i]);

printf("\n");

return 0;

}

6.1.3一维数组的初始化

6.1.4一维数组程序举例

例6.2:用数组处理求Fibonacci数列问题

解题思路:例5.8中用简单变量处理的,缺点不能在内存中保存这些数。(www.61k.com]假如想直接输出数列中第25个

数,是很困难的。如果用数组处理,每一个数组元素代表数列中的一个数,依次求出各数并存

放在相应的数组元素中。

#include <stdio.h>

int main()

{ int i; int f[20]={1,1};

for(i=2;i<20;i++)

f[i]=f[i-2]+f[i-1];

for(i=0;i<20;i++)

{ if(i%5==0) printf(“\n”);

printf(“%12d”,f[i]);

}

printf("\n");

return 0;

}

例6.3:有10个地区的面积,要求对它们按由小到大的顺序排列。

解题思路:排序的规律有两种:一种是“升序”,从小到大;另一种是“降序”,从大到小。把题目抽象

为:“对n个数按升序排序”。采用起泡法排序。

int a[10]; int i,j,t;

printf("input 10 numbers :\n");

for (i=0;i<10;i++) scanf("%d",&a[i]);

printf("\n");

for(j=0;j<9;j++)

for(i=0;i<9-j;i++)

if (a[i]>a[i+1])

{t=a[i];a[i]=a[i+1];a[i+1]=t;}

printf("the sorted numbers :\n");

for(i=0;i<10;i++) printf("%d ",a[i]);

printf("\n");

6.2.1怎样定义二维数组

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

二维数组定义的一般形式为:类型符 数组名[常量表达式][常量表达式];如:float a[3][4],b[5][10];;二维数组可被看作是一种特殊的一维数组:它的元素又是一个一维数组。(www.61k.com)例如,把a看作是一个一维数组,它有3个元素:a[0]、a[1]、a[2],每个元素又是一个包含4个元素的一维数组

6.2.2怎样引用二维数组的元素 二维数组元素的表示形式为:数组名[下标][下标]

6.2.4二维数组程序举例

例6.4 ;将一个二维数组行和列的元素互换,存到另一个二维数组中。

解题思路:可以定义两个数组:数组a为2行3列,存放指定的6个数,数组b为3行2列,开始时未

赋值;将a数组中的元素a[i][j]存放到b数组中的b[j][i]元素中,用嵌套的for循环完成。

#include <stdio.h>

int main()

{ int a[2][3]={{1,2,3},{4,5,6}};

int b[3][2],i,j;

printf("array a:\n");

for (i=0;i<=1;i++)

{ for (j=0;j<=2;j++)

{ printf("%5d",a[i][j]);

b[j][i]=a[i][j];

} ?14? printf("\n"); ?25??1

23?b? } a????456???? printf("array b:\n"); ?36?? for (i=0;i<=2;i++)

{ for(j=0;j<=1;j++)

printf("%5d",b[i][j]);

printf("\n");

}

return 0;

}

例6.5:有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。

解题思路:采用“打擂台算法”;先找出任一人站在台上,第2人上去与之比武,胜者留在台上;第3人

与台上的人比武,胜者留台上,败者下台;以后每一个人都是与当时留在台上的人比武,直

到所有人都上台比为止,最后留在台上的是冠军。

先把a[0][0]的值赋给变量max;max用来存放当前已知的最大值;a[0][1]与max比较,如果

a[0][1]>max,则表示a[0][1]是已经比过的数据中值最大的,把它的值赋给max,取代了max

的原值;以后依此处理,最后max就是最大的值。

??

int i,j,row=0,colum=0,max;

int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};

max=a[0][0];

for (i=0;i<=2;i++)

for (j=0;j<=3;j++)

if (a[i][j]>max)

{ max=a[i][j]; row=i; colum=j; }

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

printf("max=%d\nrow=%d\ncolum=%d\n",max,row,colum);

??

6.3.1怎样定义字符数组

用来存放字符数据的数组是字符数组。[www.61k.com)字符数组中的一个元素存放一个字符。定义字符数组的方法与定义数值型数组的方法类似。

扩展:谭浩强c语言第四版 / 谭浩强c语言第四版pdf / 谭浩强c语言第四版ppt

例6.6 输出一个已知的字符串。

解题思路:定义一个字符数组,并用“初始化列表”对其赋以初值;用循环逐个输出此字符数组中的字符 #include <stdio.h>

int main()

{ char c[15]={'I',' ','a','m',' ','a',' ','s','t','u','d','e','n','t','.'};

int i;

for(i=0;i<15;i++)

printf("%c",c[i]);

printf("\n");

return 0;

}

例6.7:输出一个菱形图。

解题思路:定义一个字符型的二维数组,用“初始化列表”进行初始化;用嵌套的for循环输出字符数组中的所有元素。

#include <stdio.h>

int main()

{ char diamond[][5]={{' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},{' ','*',' ','*'},{' ',' ','*'}};

int i,j;

for (i=0;i<5;i++)

{for (j=0;j<5;j++)

printf("%c",diamond[i][j]);

printf("\n");

}

return 0;

6.3.4字符串和字符串结束标志

在C语言中,是将字符串作为字符数组来处理的;关心的是字符串的有效长度而不是字符数组的长度;为了测定字符串的实际长度,C语言规定了字符串结束标志’\0’。(’\0’代表ASCII码为0的字符,从ASCII码表可以查到,ASCII码为0的字符不是一个可以显示的字符,而是一个“空操作符”,即它什么也不做;用它作为字符串结束标志不会产生附加的操作或增加有效字符,只起一个供辨别的标志。)

6.3.5字符数组的输入输出

字符数组的输入输出可以有两种方法:逐个字符输入输出(%c);整个字符串一次输入输出(%s)。

输出的字符中不包括结束符’\0’;用%s输出字符串时,printf函数中的输出项是字符数组名,不是数组元素名。 如果一个字符数组中包含多个’\0’,则遇第一个’\0’时输出就结束。可以用scanf函数输入一个字符串。scanf函数中的输入项c是已定义的字符数组名,输入的字符串应短于已定义的字符数组的长度。

6.3.6善于使用字符串处理函数

在C函数库中提供了一些用来专门处理字符串的函数,使用方便

1.puts函数----输出字符串的函数,其一般形式为:puts (字符数组),作用是将一个字符串输出到终端。

2. gets函数----输入字符串的函数,其一般形式为:gets(字符数组),作用是输入一个字符串到字符数组

3. strcat函数----字符串连接函数,其一般形式为:strcat(字符数组1,字符数组2),其作用是把两个字符串连接起

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

来,把字符串2接到字符串1的后面,结果放在字符数组1中。(www.61k.com)

使用字符串函数时,在程序开头用#include <string.h>

4. strcpy和strncpy函数-字符串复制,strcpy一般形式为:strcpy(字符数组1,字符串2),作用是将字符串2复制到字符数组1中去。

可以用strncpy函数将字符串2中前面n个字符复制到字符数组1中去;

strncpy(str1,str2,2):作用是将str2中最前面2个字符复制到str1中,取代str1中原有的最前面2个字符;复

制的字符个数n不应多于str1中原有的字符。

5. strcmp函数----字符串比较函数,其一般形式为:strcmp(字符串1,字符串2),作用是比较字符串1和字符串2。

6. strlen函数----测字符串长度的函数,其一般形式为:strlen (字符数组),它是测试字符串长度的函数,函数的值

为字符串中的实际长度。

7. strlwr函数----转换为小写的函数,其一般形式为:strlwr (字符串),函数的作用是将字符串中大写字母换成小写

字母。

8. strupr函数----转换为大写的函数,其一般形式为:strupr (字符串),函数的作用是将字符串中小写字母换成大写

字母。

6.3.7字符数组应用举例

例6.8 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。

??

char string[81],c; int i,num=0,word=0;

gets(string);

for (i=0;(c=string[i])!=‘\0’;i++)

if(c==‘ ’) word=0;

else if(word==0)

{ word=1;

num++;

}

printf(“%d words\n”,num);

??

例6.9 有3个字符串,要求找出其中最大者。

#include<stdio.h>

#include<string.h>

int main ( )

{char str[3][10]; char string[10]; int i;

for (i=0;i<3;i++) gets (str[i]);

if (strcmp(str[0],str[1])>0)

strcpy(string,str[0]);

else

strcpy(string,str[1]);

if (strcmp(str[2],string)>0)

strcpy(string,str[2]);

printf("\nthe largest:\n%s\n",string);

return 0;

}

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

第七章 用函数实现模块化程序设计

7.1 为什么要用函数

问题:

如果程序的功能比较多,规模比较大,把所有代码都写在main函数中,就会使主函数变得庞杂、头绪不清,阅读和维护变得困难。(www.61k.com)

有时程序中要多次实现某一功能,就需要多次重复编写实现此功能的程序代码,这使程序冗长,不精炼 解决的方法:用模块化程序设计的思路

采用“组装”的办法简化程序设计的过程;事先编好一批实现各种不同功能的函数;把它们保存在函数库中,需要时直接用。函数就是功能;每一个函数用来实现一个特定的功能;函数的名字应反映其代表的功能。

在设计一个较大的程序时,往往把它分为若干个程序模块,每一个模块包括一个或多个函数,每个函数实现一个特定的功能。C程序可由一个主函数和若干个其他函数构成;主函数调用其他函数,其他函数也可以互相调用;同一个函数可以被一个或多个函数调用任意多次。

扩展:谭浩强c语言第四版 / 谭浩强c语言第四版pdf / 谭浩强c语言第四版ppt

可以使用库函数;可以使用自己编写的函数;在程序设计中要善于利用函数,可以减少重复编写程序段的工作量,同时可以方便地实现模块化的程序设计。

例7.1 输出以下的结果,用函数调用实现。

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

How do you do!

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

解题思路:在输出的文字上下分别有一行“*”号,显然不必重复写这段代码,用一个函数print_star来实

现输出一行“*”号的功能。再写一个print_message函数来输出中间一行文字信息,用主函数

分别调用这两个函数。

#include <stdio.h>

声明函数

print_star();

return 0;

定义函数

说明:

(1) 一个C程序由一个或多个程序模块组成,每一个程序模块作为一个源程序文件。对较大的程序,

一般不希望把所有内容全放在一个文件中,而是将它们分别放在若干个源文件中,由若干个源程序文件组成一个C程序。这样便于分别编写、分别编译,提高调试效率。一个源程序文件可以为多个C程序共用。

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

(2) 一个源程序文件由一个或多个函数以及其他有关内容(如预处理指令、数据声明与定义等)组成。[www.61k.com]

一个源程序文件是一个编译单位,在程序编译时是以源程序文件为单位进行编译的,而不是以函

数为单位进行编译的。

(3) C程序的执行是从main函数开始的,如果在main函数中调用其他函数,在调用后流程返回到

main函数,在main函数中结束整个程序的运行。

(4) 所有函数都是平行的,即在定义函数时是分别进行的,是互相独立的。一个函数并不从属于另一

个函数,即函数不能嵌套定义。函数间可以互相调用,但不能调用main函数。main函数是被操

作系统调用的。

(5) 从用户使用的角度看,函数有两种。

库函数,它是由系统提供的,用户不必自己定义而直接使用它们。应该说明,不同的C语言编译

系统提供的库函数的数量和功能会有一些不同,当然许多基本的函数是共同的。

用户自己定义的函数。它是用以解决用户专门需要的函数。

(6) 从函数的形式看,函数分两类。

①无参函数。无参函数一般用来执行指定的一组操作。无参函数可以带回或不带回函数值,但一

般以不带回函数值的居多。

②有参函数。在调用函数时,主调函数在调用被调用函数时,通过参数向被调用函数传递数据,

一般情况下,执行被调用函数时会得到一个函数值,供主调函数使用。

7.2.1 为什么要定义函数

C语言要求,在程序中用到的所有函数,必须“先定义,后使用”

指定函数名字、函数返回值类型、函数实现的功能以及参数的个数与类型,将这些信息通知编译系统。 指定函数的名字,以便以后按名调用

指定函数类型,即函数返回值的类型

指定函数参数的名字和类型,以便在调用函数时向它们传递数据

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

指定函数的功能。(www.61k.com)这是最重要的,这是在函数体中解决的

对于库函数,程序设计者只需用#include指令把有关的头文件包含到本文件模块中即可。

程序设计者需要在程序中自己定义想用的而库函数并没有提供的函数。

7.2.2 定义函数的方法

1.定义无参函数,定义无参函数的一般形式为:

2.定义有参函数,定义有参函数的一般形式为:

类型名 函数名(形式参数表列)

函数体

3. 定义空函数,定义空函数的一般形式为:

类型名 函数名( )

{ }

用空函数占一个位置,以后逐步扩充。好处:程序结构清楚,可读性好,扩充新功能方便,对程序结构影响不大。

7.3.1函数调用的形式

函数调用的一般形式为:函数名(实参表列)

如调用无参函数,则“实参表列”可以没有,但括号不能省略;如实参表列含多个实参,则各参数间用逗号隔开。 按函数调用在程序中出现的形式和位置来分,可以有以下3种函数调用方式:

第四章 函数调用语句:把函数调用单独作为一个语句,如printf_star();这时不要求函数带回值,只要求函数完成一定的操作。

第五章 函数表达式:函数调用出现在另一个表达式中,如c=max(a,b);这时要求函数带回一个确定的值以参加表达式的运算。

第六章 函数参数:函数调用作为另一函数调用时的实参,如m=max(a,max(b,c));其中max(b,c)是一次函数调用,它的值作为max另一次调用的实参。

7.3.2 函数调用时的数据传递

1.形式参数和实际参数

在调用有参函数时,主调函数和被调用函数之间有数据传递关系

定义函数时函数名后面的变量名称为“形式参数”(简称“形参”)

主调函数中调用一个函数时,函数名后面参数称为“实际参数”(简称“实参”),实际参数可以是常量、变量或表达式

2. 实参和形参间的数据传递

在调用函数过程中,系统会把实参的值传递给被调用函数的形参;或者说,形参从实参得到一个值,该值在函

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

数调用期间有效,可以参加被调函数中的运算

例7.2 输入两个整数,要求输出其中值较大者。(www.61k.com]要求用函数来找到大数。

解题思路:(1)函数名应是见名知意,今定名为max

(2)由于给定的两个数是整数,返回主调函数的值(即较大数)应该是整型

(3)max函数应当有两个参数,以便从主函数接收两个整数,因此参数的类型应当是整型 先编写max函数:

int max(int x,int y)

{

int z;

扩展:谭浩强c语言第四版 / 谭浩强c语言第四版pdf / 谭浩强c语言第四版ppt

z=x>y?x:y;

return(z);

}

在max函数上面,再编写主函数

int main()

printf(“ scanf(“%d,%d” c=; printf(“max is %d\n” }

7.3.3 函数调用的过程

在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元。在发生函数调用时,函数max的形参被临时分配内存单元。

调用结束,形参单元被释放;实参单元仍保留并维持原值,没有改变。如果在执行一个被调用函数时,形参的值发生改变,不会改变主调函数的实参的值。

7.3.4. 函数的返回值

通常,希望通过函数调用使主调函数能得到一个确定的值,这就是函数值(函数的返回值)

2.函数的返回值是通过函数中的return语句获得的。一个函数中可以有一个以上的return语句,执行到哪一个

return语句,哪一个就起作用;return语句后面的括号可以不要。

3.函数值的类型。应当在定义函数时指定函数值的类型。

4.在定义函数时指定的函数类型一般应该和return语句中的表达式类型一致。如果函数值的类型和return语句

中表达式的值不一致,则以函数类型为准。

例7.3将例7.2稍作改动,将在max函数中定义的变量z改为float型。函数返回值的类型与指定的函数类型不

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

同,分析其处理方法。[www.61k.com]

解题思路:如果函数返回值的类型与指定的函数类型不同,按照赋值规则处理。

#include <stdio.h>

int main()

{ int max(float x,float y);

float a,b; int c;

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

c=max(a,b);

printf("max is %d\n",c);

return 0;

}

int max(float x,float y)

{ float z;

z=x>y?x:y;

return( z ) ;

}

7.4对被调用函数的声明和函数原型

在一个函数中调用另一个函数需要具备如下条件:

(1) 被调用函数必须是已经定义的函数(是库函数或用户自己定义的函数)

(2) 如果使用库函数,应该在本文件开头加相应的#include指令

(3) 如果使用自己定义的函数,而该函数的位置在调用它的函数后面,应该声明

例7.4 输入两个实数,用一个函数求出它们之和。

解题思路:用add函数实现。首先要定义add函数,它为float型,它应有两个参数,也应为float型。特

别要注意的是:要对add函数进行声明。

#include <stdio.h>

int main()

{ float add(float x, float y);

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

float a,b,c;

printf("Please enter a and b:");

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

c=add(a,b);

printf("sum is %f\n",c);

return 0;

}

float add(float x,float y)

{ float z;

z=x+y;

return(z);

}

函数原型的一般形式有两种:

如 float add(float x, float y);

float add(float, float);

原型说明可以放在文件的开头,这时所有函数都可以使用此函数

7.5 函数的嵌套调用

C语言的函数定义是互相平行、独立的,即函数不能嵌套定义,但可以嵌套调用函数,即调用一个函数的过程中,又可以调用另一个函数。[www.61k.com] main函数 a函数 b函数 ①②③ ④

调用a函数 调用b函数⑤

⑨⑦

⑧⑥

结束

例7.5 输入4个整数,找出其中最大的数。用函数的嵌套调用来处理。

解题思路:main中调用max4函数,找4个数中最大者

max4中再调用max2,找两个数中的大者

max4中多次调用max2,可找4个数中的大者,然后把它作为函数值返回main函数 main函数中输出结果

主函数

#include <stdio.h>

int main()

{ int max4(int a,int b,int c,int d);

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

int a,b,c,d,max;

printf(“4 interger numbers:");

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

max=max4(a,b,c,d);

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

return 0;

}

max4函数 max2函数

int max4(int a,int b,int c,int d) int max2(int a,int b)

{ int max2(int a,int b); { if(a>=b)

int m; return a;

m=max2(a,b); else

m=max2(m,c); return b;

m=max2(m,d); }

return(m);

}

int max2(int a,int b)

{ return(a>b?a:b); }

7.6 函数的递归调用

在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。[www.61k.com)

C语言的特点之一就在于允许函数的递归调用。

例7.6 有5个学生坐在一起。问第5个学生多少岁?他说比第4个学生大2岁;问第4个学生岁数,他说比第3个学生大2岁;问第3个学生,又说比第2个学生大2岁;问第2个学生,说比第1个学生大2岁;最后问第1个学生,他说是10岁。请问第5个学生多大?

#include <stdio.h>

int main()

{ int age(int n);

printf("NO.5,age:%d\n",age(5));

return 0;

}

int age(int n)

{ int c;

if(n==1) c=10;

else c=age(n-1)+2;

return(c);

}

例7.7 用递归方法求n!。

解题思路:求n!可以用递推方法:即从1开始,乘2,再乘3……一直乘到n。

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

递推法的特点是从一个已知的事实(如1!=1)出发,按一定规律推出下一个事实(如2!=1!*2),

扩展:谭浩强c语言第四版 / 谭浩强c语言第四版pdf / 谭浩强c语言第四版ppt

再从这个新的已知的事实出发,再向下推出一个新的事实(3!=3*2!)。(www.61k.com]n!=n*(n-1)!。

求n!也可以用递归方法,即5!等于4!×5,而4!=3!×4…,1!=1 可用下面的递归公式表示:

#include <stdio.h> int fac(int n)

int main() {

{int fac(int n); int f;

int n; int y; if(n<0)

printf("input an integer number:"); printf("n<0,data error!");

scanf("%d",&n); else if(n==0 | | n==1)

y=fac(n); f=1;

printf("%d!=%d\n",n,y); else f=fac(n-1)*n;

return 0; return(f);

} }

例7.8 Hanoi(汉诺)塔问题。古代有一个梵塔,塔内有3个座A、B、C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但规定每次只允许移动一个盘,且在移动过程中在3个座上都始终保持大盘在下,小盘在上。在移动过程中可以利用B座。要求编程序输出移动一盘子的步骤。

#include <stdio.h>

int main()

{ void hanoi(int n,char one,char two,char three);

int m;

printf(“the number of diskes:");

scanf("%d",&m);

printf("move %d diskes:\n",m);

hanoi(m,'A','B','C');

}

void hanoi(int n,char one,char two,char three)

{ void move(char x,char y);

if(n==1)

move(one,three);

else

{ hanoi(n-1,one,three,two);

move(one,three);

hanoi(n-1,two,one,three);

}

}

void move(char x,char y)

{ (n?0,1)?n!?1n!???n?(n?1)(n?1)

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

printf("%c-->%c\n",x,y);

}

7.7.1数组元素作函数实参

例7.9 输入10个数,要求输出其中值最大的元素和该数是第几个数。[www.61k.com)

#include <stdio.h>

int main()

{ int max(int x,int y); int max(int x,int y)

int a[10],m,n,i; { return(x>y?x:y); }

printf(“10 integer numbers:\n");

for(i=0;i<10;i++)

scanf("%d",&a[i]);

printf("\n");

for(i=1,m=a[0],n=0;i<10;i++)

{ if (max(m,a[i])>m)

{ m=max(m,a[i]);

n=i;

}

}

printf(“largest number is %d\n",m);

printf(“%dth number.\n“,n+1);

}

7.7.2数组名作函数参数

除了可以用数组元素作为函数参数外,还可以用数组名作函数参数(包括实参和形参)。用数组元素作实参时,向形参变量传递的是数组元素的值;用数组名作函数实参时,向形参传递的是数组首元素的地址。

例7.10 有一个一维数组score,内放10个学生成绩,求平均成绩。

#include <stdio.h>

int main()

{ float average(float array[10]);

float score[10],aver; int i;

printf("input 10 scores:\n");

for(i=0;i<10;i++)

scanf("%f",&score[i]);

printf("\n");

aver=average(score);

printf("%5.2f\n",aver);

return 0;

}

float average(float array[10])

{ int i;

float aver,sum=array[0];

for(i=1;i<10;i++)

sum=sum+array[i];

aver=sum/10;

return(aver);

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

}

例7.11 有两个班级,分别有35名和30名学生,调用一个average函数,分别求这两个班的学生的平均成绩。(www.61k.com] #include <stdio.h>

int main()

{ float average(float array[ ],int n);

float score1[5]={98.5,97,91.5,60,55};

float score2[10]={67.5,89.5,99,69.5,

77,89.5,76.5,54,60,99.5};

printf(“%6.2f\n”,average(score1,5));

printf(“%6.2f\n”,average(score2,10));

return 0;

}

调用形式为average(score1,5)时 调用形式为average(score2,10)时

float average(float array[ ],int n) float average(float array[ ],int n)

{ int i; { int i;

float aver,sum=array[0]; float aver,sum=array[0];

for(i=1;i<n;i++) for(i=1;i<n;i++)

sum=sum+array[i]; sum=sum+array[i];

aver=sum/n; aver=sum/n;

return(aver); return(aver);

} }

例7.12用选择法对数组中10个整数按由小到大排序。

#include <stdio.h>

int main()

{ void sort(int array[],int n);

int a[10],i;

printf("enter array:\n");

for(i=0;i<10;i++) scanf("%d",&a[i]);

sort(a,10);

printf("The sorted array:\n");

for(i=0;i<10;i++) printf("%d ",a[i]);

printf("\n");

return 0; }

{ int i,j,k,t;

for(i=0;i<n-1;i++)

{ k=i;

for(j=i+1;j<n;j++)

if(array[j]<array[k]) k=j;

t=array[k];

array[k]=array[i];

array[i]=t;

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

扩展:谭浩强c语言第四版 / 谭浩强c语言第四版pdf / 谭浩强c语言第四版ppt

}

}

7.7.3多维数组名作函数参数

例7.13 有一个3×4的矩阵,求所有元素中的最大值。[www.61k.com)

#include <stdio.h> int max_value(int array[][4])

int main() { int i,j,max;

{ int max_value(int array[][4]); max = array[0][0];

int a[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}}; for (i=0;i<3;i++)

printf(“Max value is %d\n”,max_value(a)); for(j=0;j<4;j++)

return 0; if (array[i][j]>max)

} max = array[i][j];

return (max);

7.8.1 局部变量

定义变量可能有三种情况:在函数的开头定义;在函数内的复合语句内定义;在函数的外部定义。

在一个函数内部定义的变量只在本函数范围内有效;在复合语句内定义的变量只在本复合语句范围内有效;在函数内部或复合语句内部定义的变量称为“局部变量”。

7.8.2全局变量

在函数内定义的变量是局部变量,而在函数之外定义的变量称为外部变量,外部变量是全局变量(也称全程变量)。 全局变量可以为本文件中其他函数所共用,有效范围为从定义变量的位置开始到本源文件结束。

例7.14 有一个一维数组,内放10个学生成绩,写一个函数,当主函数调用此函数后,能求出平均分、最高分和最低分。

#include <stdio.h>

float Max=0,Min=0;

int main()

{ float average(float array[ ],int n);

float ave,score[10]; int i;

printf("Please enter 10 scores:\n");

for(i=0;i<10;i++)

scanf("%f",&score[i]);

ave=average(score,10);

printf("max=%6.2f\nmin=%6.2f\n

average=%6.2f\n",Max,Min,ave);

return 0;

float average(float array[ ],int n)

{ int i; float aver,sum=array[0];

Max=Min=array[0];

for(i=1;i<n;i++)

{ if(array[i]>Max) Max=array[i];

else if(array[i]<Min) Min=array[i];

sum=sum+array[i];

}

aver=sum/n;

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

return(aver);

}

例7.15 若外部变量与局部变量同名,分析结果。[www.61k.com]

#include <stdio.h>

int a=3,b=5;

int main()

{ int max(int a,int b);

int a=8;

printf(“max=%d\n”,max(a,b));

return 0;

}

int max(int a,int b)

{ int c;

c=a>b?a:b;

return(c);

}

7.9.1动态存储方式与静态存储方式

从变量的作用域的角度来观察,变量可以分为全局变量和局部变量。

从变量值存在的时间(即生存期)观察,变量的存储有两种不同的方式:静态存储方式和动态存储方式 静态存储方式是指在程序运行期间由系统分配固定的存储空间的方式。

动态存储方式是在程序运行期间根据需要进行动态的分配存储空间的方式。

用户区

③函数调用时的现场保护和返回地址等存放在动态存储区

函数调用开始时分配,函数结束时释放。在程序执行过程中,这种分配和释放是动态的每一个变量和函数都有两个属性:数据类型和数据的存储类别

(如静态存储和动态存储)

存储类别包括:自动的、静态的、寄存器的、外部的;根据变量的存储类别,可以知道变量的作用域和生存期。

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

7.9.2 局部变量的存储类别

1.自动变量(auto变量)

局部变量,如果不专门声明存储类别,都是动态地分配存储空间的。(www.61k.com]调用函数时,系统会给局部变量分配存储空间,调用结束时就自动释放空间。因此这类局部变量称为自动变量。自动变量用关键字auto作存储类别的声明。 int f(int a)

}

2.静态局部变量(static局部变量)

希望函数中的局部变量在函数调用结束后不消失而继续保留原值,即其占用的存储单元不释放,在下一次再调用该函数时,该变量已有值(就是上一次函数调用结束时的值),这时就应该指定该局部变量为“静态局部变量”,用关键字static进行声明。

例7.16 考察静态局部变量的值。

#include <stdio.h> int f(int a)

int main() { auto int b=0;

{ int f(int); static c=3;

int a=2,i; b=b+1;

for(i=0;i<3;i++) c=c+1;

printf(“%d\n”,f(a)); return(a+b+c);

return 0; }

}

例7.17 输出1到5的阶乘值。

#include <stdio.h>

int main()

{ int fac(int n);

int i;

for(i=1;i<=5;i++)

printf(“%d!=%d\n”,i,fac(i));

return 0;

}

int fac(int n)

{ static int f=1;

f=f*n;

return(f);

}

3. 寄存器变量(register变量)

一般情况下,变量(包括静态存储方式和动态存储方式)的值是存放在内存中的。

寄存器变量允许将局部变量的值放在CPU中的寄存器中。

现在的计算机能够识别使用频繁的变量,从而自动地将这些变量放在寄存器中,而不需要程序设计者指定。

扩展:谭浩强c语言第四版 / 谭浩强c语言第四版pdf / 谭浩强c语言第四版ppt

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

7.9.3 全局变量的存储类别

全局变量都是存放在静态存储区中的。(www.61k.com)因此它们的生存期是固定的,存在于程序的整个运行过程。

一般来说,外部变量是在函数的外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的末尾。在此作用域内,全局变量可以为程序中各个函数所引用。

1. 在一个文件内扩展外部变量的作用域

外部变量有效的作用范围只限于定义处到本文件结束。

如果用关键字extern对某变量作“外部变量声明”,则可以从“声明”处起,合法地使用该外部变量。

例7.18 调用函数,求3个整数中的大者。

#include <stdio.h>

int main()

{ int max( );

extern int A,B,C;

scanf(“%d %d %d”,&A,&B,&C);

printf("max is %d\n",max());

return 0;

}

int A ,B ,C;

int max( )

{ int m;

m=A>B?A:B;

if (C>m) m=C;

return(m);

}

2. 将外部变量的作用域扩展到其他文件

如果一个程序包含两个文件,在两个文件中都要用到同一个外部变量Num,不能分别在两个文件中各自定义一个外部变量Num

应在任一个文件中定义外部变量Num,而在另一文件中用extern对Num作“外部变量声明”

在编译和连接时,系统会由此知道Num有“外部链接”,可以从别处找到已定义的外部变量Num,并将在另一文件中定义的外部变量num的作用域扩展到本文件

例7.19 给定b的值,输入a和m,求a*b和am的值。

文件file1.c:

#include <stdio.h>

int A;

int main()

{ int power(int);

int b=3,c,d,m; scanf("%d,%d",&A,&m);

c=A*b;

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

d=power(m);

printf("%d**%d=%d\n",A,m,d);

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

return 0;

}

文件file2.c:

extern A;

int power(int n)

{ int i,y=1;

for(i=1;i<=n;i++)

y*=A;

return(y);

}

3.将外部变量的作用域限制在本文件中

有时在程序设计中希望某些外部变量只限于被本文件引用。[www.61k.com]这时可以在定义外部变量时加一个static声明。 file2.c

static int A; extern A;

int main ( ) 只能用于 void fun (int n) 本文件仍

{ 本文件 { ?? 然不能用

…… A=A*n;

} ??

说明:

不要误认为对外部变量加static声明后才采取静态存储方式,而不加static的是采取动态存储。

声明局部变量的存储类型和声明全局变量的存储类型的含义是不同的:对于局部变量来说,声明存储类型的作用是指定变量存储的区域以及由此产生的生存期的问题,而对于全局变量来说,声明存储类型的作用是变量作用域的扩展问题。

用static

(1) 对局部变量用static声明,把它分配在静态存储区,该变量在整个程序执行期间不释放,其所分配的空间

(2) 对全局变量用static声明,则该变量的作用域只限于本文件模块(即被声明的文件中)。

7.9.4 存储类别小结

对一个数据的定义,需要指定两种属性:数据类型和存储类别,分别使用两个关键字,例如:

static int a;

auto char c; 自动变量,在函数内定义

register int d; 寄存器变量,在函数内定义

可以用extern声明已定义的外部变量,例如:

extern b; 将已定义的外部变量b的作用域扩展至此

(1)从作用域角度分,有局部变量和全局变量。它们采用的存储类别如下:

自动变量

局部变量静态局部变量

按作用域角度分寄存器变量

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

全局变量静态外部变量 外部变量

第二章 从变量存在的时间区分,有动态存储和静态存储两种类型。[www.61k.com]静态存储是程序整个运行时间都存在,而动态存储则是在调用函数时临时分配单元。

自动变量

动态存储寄存器变量

形式参数

按生存期分静态局部变量

静态存储静态外部变量

外部变量

第三章 从变量值存放的位置来区分,可分为:

(4) 关于作用域和生存期的概念

对一个变量的属性可以从两个方面分析:

作用域:如果一个变量在某个文件或函数范围内是有效的,就称该范围为该变量的作用域

生存期:如果一个变量值在某一时刻是存在的,则认为这一时刻属于该变量的生存期

作用域是从空间的角度,生存期是从时间的角度

二者有联系但不是同一回事

(5) static对局部变量和全局变量的作用不同

局部变量使变量由动态存储方式改变为静态存储方式;全局变量使变量局部化(局部于本文件),但仍为静态存储方式。从作用域角度看,凡有static声明的,其作用域都是局限的,或者是局限于本函数内(静态局部变量),或者局限于本文件内(静态外部变量)。

7.10 关于变量的声明和定义

一般为了叙述方便,把建立存储空间的变量声明称定义,而把不需要建立存储空间的声明称为声明

函数中出现的对变量的声明(除了用extern声明的以外)都是定义,函数中对其他函数的声明不是函数的定义。

7.11.1 内部函数

如果一个函数只能被本文件中其他函数所调用,它称为内部函数。在定义内部函数时,在函数名和函数类型的前面加static,即:static 类型名 函数名(形参表)

内部函数又称静态函数,因为它是用static声明的。通常把只能由本文件使用的函数和外部变量放在文件的开头,前面都冠以static使之局部化,其他文件不能引用。提高了程序的可靠性。

扩展:谭浩强c语言第四版 / 谭浩强c语言第四版pdf / 谭浩强c语言第四版ppt

7.11.2 外部函数

如果在定义函数时,在函数首部的最左端加关键字extern,则此函数是外部函数,可供其他文件调用。如函数首部可以为extern int fun (int a, int b) 如果在定义函数时省略extern,则默认为外部函数。

例7.20 有一个字符串,内有若干个字符,今输入一个字符,要求程序将字符串中该字符删去。用外部函数实现。 #include <stdio.h>

int main()

{ extern void enter_string(char str[]);

extern void delete_string(char str[],char ch);

extern void print_string(char str[]);

char c,str[80];

enter_string(str);

c语言程序设计谭浩强 C语言程序设计谭浩强(第四版)期末复习重点

scanf(“%c”,&c);

delete_string(str,c);

print_string(str);

return 0;

}

{ gets(str); } file2(文件2) void delete_string(char str[],char ch)

{ int i,j;

for(i=j=0;str[i]!='\0';i++)

if(str[i]!=ch) str[j++]=str[i];

str[j]='\0';

}

void print_string(char str[])

{ printf("%s\n",str); }

file3(文件3)file4(文件4)

扩展:谭浩强c语言第四版 / 谭浩强c语言第四版pdf / 谭浩强c语言第四版ppt

三 : 谭浩强c语言程序设计习题集 36

目录

重要 次重要 重复或欲删除 基础

第一章 C语言概述

第二章 数据类型、运算符与表达式

第三章 最简单的C程序设计

第四章 逻辑运算和判断选取控制

第五章 循环控制

第六章 数组

第七章 函数

第八章 编译预处理

8.1 选择题

8.2 填空题

8.3 编程题

第九章 指针

9.3 编程题

第十章 结构体和共用体

10.1 选择题

10.2 填空题

10.3 编程题

第十一章 位运算

11.1 选择题

11.2 填空题

11.3 编程题

第十二章 文件

12.1 选择题

12.2 填空题

12.3 编程题

第一章 C语言概述

1.1 选择题

*1.1一个C程序的执行是从

A)本程序的main函数开始,到main函数结束

B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束

C)本程序的main函数开始,到本程序文件的最后一个函数结束

D)本程序文件的第一个函数开始,到本程序main函数结束

参考答案:A

参考分析:C语言总是从main函数开始,main函数结束。但是C语言中存在一个exit(0)函数,它可以使得程序在任何时候、任何位置结束程序的运行。如果不考虑exit(0)等函数的特殊作用,C则总是在main函数结束。

*1.2以下叙述正确的是。

A)在C程序中,main函数必须位于程序的最前面

B)在C程序的每一行只能写一条语句

C)C语言本身没有输入输出语句

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

参考答案:C

参考分析:C程序对main函数的位置没有任何要求;其书写格式自由,一行可以写多条语句,一条语句(多关键字语句)可以写在多行;C语言忽略注释,把注释看作是一个空格,不会对注释中的内容进行语法检查。因此,如果注释中存在错误,系统是不可能发现的。另外,C语言的I/O操作均通过函数实现,系统本身未提供相应的语句。

1.3以下叙述不正确的是。

A)一个C源程序可由一个或多个函数组成

B)一个C源程序必须包含一个main函数

C)C程序的基本组成单位是函数

D)在C程序中,注释说明只能位于一条语句的后面

参考答案:D

参考分析:C语言中,注释语句的位置是任意的,当然,它不能破坏标识符的完整性。C语言只是将一个注释看作是一个空格,因此对注释内的任何错误都不作检查。

1.4 C语言规定:在一个源程序中,main函数的位臵。

A)必须在最开始 B)必须在系统调用的库函数的后面

C)可以任意 D)必须在最后 参考答案:C

*1.5一个C语言程序是由

A)一个主程序和若干个子程序组成 B)若干函数组成

C)若干过程组成 D)若干子程序组成

参考答案:B

参考分析:通常许多语言程序由主程序和子程序构成,但是C语言是函数式语言,整个程序由众多函数组成。尽管有时习惯上称main函数为主程序,显然,严格地讲还是B更为符合C语言的规则。

1.2 填空题

1.6C源程序的基本单位是【 】。

参考答案:函数

1.7一个C源程序中至少应包括一个【 】。

参考答案:main()函数

1.8在一个C源程序中,注释部分两侧的分界符分别为【1】和【2】。

参考答案:【1】/* 【2】*/

1.9在C语言中,输入操作是由库函数【1】完成的,输出操作是由库函数【2】完成的。 参考答案:【1】scanf 【2】printf

第二章 数据类型、运算符与表达式

2.1 选择题

**2.1C语言中(以16位PC机为例),各数据类型的存储空间长度的排列顺序为

A)char<int<long<=float<double B)char=int<long<=float<double

C)char<int<long=float=double D)char=int=long<=float<double

参考答案:A

分析:在不同的计算机系统中,不同的C语言系统中,其各种数据类型所占据的存储空间是不同的,但是有一个总的原则,即:char<=short<=int<=long<= float<=double,只有A符合16位PC机中的具体环境。

*2.2若x、i、j和k都是int型变量,则计算下面表达式后,x的值为。

x=(i=4,j=16,k=32)

A)4 B)16 C)32 D)52

参考答案:C

参考分析:逗号表达式的计算结果是最后一个表达式的值。k=23是括号内最后一个表达式,因此x变量的值来自k变量的值。

**2.3假设所有变量均为整型,则表达式(a=2,b=5,a+b++,a+b)的值是。

A)7 B)8 C)5 D)2

参考答案:B

参考分析:逗号表达式的计算结果是最后一个表达式的值。b++在所在表达式参与运算时的值是5,该表达式计算完成后,b进行自增运算,故a+b的值为2+6=8。

2.4下列四组选项中,均不是C语言关键字的选项是。

A)define B)getc C)include D)while

IF char scanf go

type printf case pow

参考答案:A

参考分析:是关键字的有:char、case、while。

2.5下列四组选项中,均是C语言关键字的选项是。

A)auto B)switch C)signed D)if

enum typedef union struct

include continue scanf type

参考答案:B

参考分析:不是关键字的:include、scanf、type

*2.6下面四个选项中,均是不合法的用户标识符的选项是。

A)A B)float C)b-a D)_123

P_0 la0 goto temp

do _A int INT

参考答案:C

参考分析:合法的有:A、P_0、la0、_A、_123、temp、INT。

**2.7 C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符 。

A)必须为字母 B)必须为下划线 C)必须为字母或下划线

D)可以是字母、数字和下划线中的任一种字符

参考答案:C

参考分析:教材中只是强调首字符必须为字母,我们应当知道,在语言系统中,下划线和字母具有同等的―法律效力‖。

*2.8 下面四个选项中,均是合法整型常量的选项是。

A)160 B)-0xcdf C)-01 D)-0x48a

-0xffff 01a 986,012 2e5

011 0xe 0668 0x

参考答案:A

参考分析:不合法的B2,C2,C3,D2。解释:A2:-0xffff十六进制数本身已经包含了符号位,一般不前面加符号位,但加上符号位也不错误;C3:0668在有些C系统中,八进制数中允许出现8,但是通常不允许使用8;D3:0x显然后面缺少数值,但在TC中是允许的。 *2.9下面四个选项中,均是不合法的整型常量的选项是。

A)--0f1 B)-0Xcdf C)-018 D)-0x48eg

-0xffff 017 999 -068

0011 12,456 5e2 03f

参考答案:D

参考分析:不合法的A1,B3,C1,C3,D。解释:A1:--0f1十六进制数没有0x,显然不合法,这里需要讨论的是常量前面允许不允许加上--号,是否可以负负得正,显然不可以,--在C中是自减运算,它只适用于变量;B1:0Xcdf X大写也可以!C3:5e2是个实型数。 *2.10下面四个选项中,均是不合法的浮点数的选项是。

A)160. B)123 C)-.18 D)-e3

0.12 2e4.2 123e4 .234

e3 .e5 0.0 1e3

参考答案:B

参考分析:不合法的有A3,B,D1。部分解释:A1,D2:C语言中小数点前面或后面的0可以省略。但是不能只有小数点自身;A3,B3,D1:e的前后必须有合法数字。1.e2 .1e2合法,.e2不合法;B1:123是整型数,不是浮点数。

*2.11下面四个选项中,均是合法的浮点数的选项是。

A)+1e+1 B)-.60 C)123e D)-e3

5e-9.4 12e-4 1.2e-.4 .8e-4

03e2 -8e5 +2e-1 5.e-0

参考答案:B

参考分析:不合法的有A2:阶码不能为小数;A3:浮点数的尾数及阶码不能用八进制数表示;C1:e后必须有整数,C2:阶码不能为小数;D1:缺少尾数。

*2.12下面四个选项中,均是合法转义符的选项是

A)'\'' B)'\' C)'\018' D)'\\0'

'\\' '\017' '\f' '\101'

'\n' '\"' 'xab' 'x1f'

参考答案:A

参考分析:"\"后面的数字,c总是按照八或十六进制解释。由于c支持扩展ASCII字符集,所以,八进制数范围在0~377,十六进制数范围在00~ff。 *2.13下面四个选项中,均是不合法的转义符的选项是。

A)'\"' B)'\1011' C)'\011' D)'\abc'

'\\' '\' '\f' '\101'

'\xf' '\a' '\}' 'x1f'

参考答案:B

参考分析:不合法的有B1,B2,B3,C3,D1,D3;但B3和C3值得讨论,实际上,'\a'是一个转义字符(07 beep)。C中只有少数字母是转义字符,大多数字母不是。像'\c'就不是,它就是字符c自身,非转义字母加"\"也仅表示它本身。C3'\}'也表示自身。本题的命题人显然不知道'\a'也是转义字符。

*2.14下面正确的字符常量是。

A)"c" B)'\\'' C)'W' D)""

参考答案:C *2.15下面四个选项中,均是不正确的八进制或十六进制数的选项是。

A)016 B)0abc C)010 D)0a12

0x8f 017 -0x11 7ff

018 0xa 0x16 -123

参考答案:D

参考分析:不正确的有A3:非法八进制数;B1、D1、D2:缺少x;D3是十进制数。 2.16下面四个选项中,均是正确的八进制或十六进制数的选项是。

A)-10 B)0abc C)0010 D)0a12

0x8f -017 -0x11 -0x123

-011 0xc 0xf1 -0xa

参考答案:C

参考分析:不正确的有A1:这是十进制数;B1、D1:缺少x 2.17下面四个选项中,均是正确的数值常量或字符常量的选项是。

A)0.0 B)"a" C)'3' D)+001

0f 3.9e-2.5 011 0xabcd

8.9e 1e1 0xFF00 2e2

'&' '\"' 0a 50.

参考答案:D

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

参考分析:不正确的有A2、C4:不是ox打头;A3:e后不是整数; B1是字符串;B2:

2.5不是整数。

2.18下面不正确的字符串常量是。

A)'abc' B)"12'12" C)"0" D)" "

参考答案:A

参考分析:与PASCAL不同,B)字符串内的单引号不需双写。C语言中,在不引起误解的情况下,双引号界定的字符串里的单引号可以不加转义标志"\",单引号界定的双引号字符也可以不加转义标志"\"。

2.19 对应以下各代数式中,若变量a和x均为double类型,则不正确的c语言表达式是 。

exp(x*x/2)/sqr(2*3.14159)

√2π

B)?() 1.0/2.0*(a*x+(a+x)/(4*a))

C)√sinx2.5 sqrt((pow(sin(x*3.14159/180),2.5))

D)x2-e5 x*x-exp(5.0)

参考答案:C

2.20若有代数式3ae/bc,则不正确的C语言表达式是

A)a/b/c*e*3 B)3*a*e/b/c C)3*a*e/b*c D)a*e/c/b*3

参考答案:C

参考分析:注意表达式的计算顺序

2.21已知各变量的类型说明如下,则不符合C语言语法规定的表达式是。 int k,a,b;

unsigned long w=5;

double x=1.42;

A)x%(-3) B)w+=-2 C)k=(a=2,b=3,a+b) D)a+=a-=(b=4)*(a=3)

参考答案:A

参考分析:不符合C语法规定的只有A,因为X为实型数。

2.22已知各变量说明如下,则符合C语言语法规定的表达式是。

int i=8,k,a,b;

unsigned long w=5;

double x=1.42,y=5.2;

A)a+=a-=(b=4)*(a=3) B)a=a*3=2 C)x%(-3) D)y=float(i)

参考答案:A

参考分析:B)表达式不能出现在赋值号右侧;C)x是实型数,不能进行取余运算;D)应将float用括号扩起来(强制类型转换)。

*2.23以下不正确的叙述是。

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

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

C)若a和b类型相同,在计算表达式a=b后,b的值将放入a中,而b中的值不变

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

参考答案:D

参考分析:整型变量可以输入实型数值,实型变量也可以输入整型数值

2.24以下正确的叙述是。

A)在C程序中,每行只能写一条语句

B)若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数

C)在C程序中,无论是整数还是实数,都能被准确无误地表示

D)在C程序中,%是只能用于整数运算的运算符

参考答案:D

参考分析:注意它的描述,是只能用于整数运算,而不是整型数运算。

*2.25以下符合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

参考答案:B

参考分析:C不是赋值表达式,是逗号表达式,赋值仅是其中的一部分。严格说来,B也不是赋值表达式,它是由两个赋值表达式组成的逗号表达式。

**2.26已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='A'+'6'-'3';后,c2的值为 。

A)D B)68 C)不确定的值 D)C

参考答案:A 参考分析:表达式中的各字符以各自的ASCII码参与运算。

*2.27在C语言中,要求运算数必须是整型(数)的运算符是。

A)/ B)++ C)!= D)%

参考答案:D

参考分析:理论上++运算都是针对整型(含字符型)的,尽管现在很多系统提供了对实型变量的增量运算。

*2.28若以下变量均是整型,且num=sum=7;则计算表达式sUM=num++, sUM++,++num后sum的值为。

A)7 B)8 C)0 D)10

参考答案:A 参考分析:注意sum和sUM不是一个变量(区分大小写)。

*2.29在C语言中,int、char和short三种类型数据在内存中所占用的字节数。

A)由用户自己定义 B)均为两个字节

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

参考答案:D

参考分析:参考答案很明确地表明了,C语言中各种类型在内存中所占用的字节数由所用机器字长决定。通常在PC机中字符、整型、实型所占用的内存空间大小为1、2、4个字节。

2.30若有说明语句:char c='\72';则变量c 。

A)包含1个字符。 B)包含2个字符。

C)包含3个字符。 D)说明不合法,c的值不确定。

参考答案:A

参考分析:转义字符'\72'为字符':'。

2.31若有定义: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

参考答案:A

参考分析:计算时要注意其结合性和优先级。

*2.32 sizeof(float)是。

A)一个双精度型表达式 B)一个整型表达式

C)一种函数调用 D)一个不合法的表达式

参考答案:B 参考分析:算术表达式的类型由表达式计算结果的类型决定

*2.33设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为

A)int B)float C)double D)不确定

参考答案:C

参考分析:实型只要参与运算就自动转换为double型。

2.34下面四个选项中,均是非法常量的选项是

A)'as' B)'\\' C)-0x18 D)0xabc

-0fff '\01' 01177 '\0'

'\0xa' 12,456 0xf "a"

参考答案:A 参考分析:A3转义字符以十六进制描述时,前面不能加0。非法的还有B3

*2.35若有代数式√x则正确的C语言表达式是

A) sqrt(fabs(pow(y,x)+log10(y)))

B) sqrt(abs(pow(y,x)+log10(Y)))

C) sqrt(fabs(pow(x,y)+log10(y)))

D) sqrt(abs(pow(x,y)+log10(y)))

参考答案:A

参考分析:c语言中整型和实型的绝对值函数各自独立,为abs和fabs;pow为一系统函数pow(y,x)=>yx。

2.36 若有代数式|x3+lgx|,则正确的C语言表达式是。

A)fabs(x*3+log10(x))

B)abs(pow(x,3)+log10(x))

C)abs(pow(x,3.0)+log10(x))

D)fabs(pow(x,3.0)+log10(x))

参考答案:D

参考分析:以上两题均未说明x,y的类型,从表达式的性质可分析隐含为实型,因此应使用fabs。

*2.37在C语言中,char型数据在内存中的存储形式是

A)补码 B)反码 C)原码 D)ASCII码 参考答案:D

参考分析:计算机系统不能存储字符本身,存储的是字符的ASCII码。

*2.38设变量n为float,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入的表达式是 。

A)n=(n*100+0.5)/100.0 B)m=n*100+0.5,n=m/100.0

C)n=n*100+0.5/100.0 D)n=(n/100+0.5)*100.0

参考答案:B

参考分析:m=n*100+0.5赋值过程中有实型转整型的自动转换。

2.39表达式18/4*sqrt(4.0)/8值的数据类型为

A)int B)float C)double D)不确定

参考答案:C

参考分析:表达式的类型由表达式结果的类型决定。

2.40设C语言中,一个int型数据在内存中占2个字节,则unsigned int型数据的取值范围

为 。

A)0-255 B)0-32767 C)0-65535 D)0-2147483647

参考答案:C

参考分析:各种数据类型的取值范围是由其字长决定,字长确定的情况下,有符号数与无符号数的范围应当容易计算得知。

2.41设有说明:char w;int x;float y;double z;则表达式w*x+z-y值的数据类型为

A)float B)char C)int D)double

参考答案:D

参考分析:表达式的类型由表达式结果的类型决定。虽然本题各变量没有具体的变量值,由于参与运算的变量中z变量为double型,表达式计算的结果肯定为double型。

2.42若有以下定义,则能使值为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)

参考答案:D

参考分析:A的值为0,B、C两个表达式相同,值为2,只有D的值为3。

2.43设以下变量均为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

参考答案:C

参考分析:经计算可知,只有C的值为12,不为7。

2.2 填空题

2.44 在C语言中(以16位PC机为例),一个char型数据在内存中所占的字节数为【1】;一个int型数据在内存中所占的字节数为【2】。

参考答案:【1】1 【2】2

2.45 在C语言中(以16位PC机为例),一个float型数据在内存中所占的字节数为【1】;一个double型数据在内存中所占的字节数为【2】。

参考答案:【1】4 【2】8

2.46 若有以下定义,int m=5,y=2;则计算表达式y+=y-=m*=y后y的值是【 】。 参考答案:-16

2.47 设C语言中,一个int型数据在内存中占2各字节,则int型数据的取值范围为【 】。 参考答案:-32768~32767

2.48 在C语言中的实型变量分为两种类型,它们是【1】和【2】。 参考答案:【1】float 【2】double

*2.49 C语言所提供的基本数据类型包括:单精度型、双精度型、【1】、【2】和【3】。 参考答案:字符型 整型 枚举

参考分析:基本类型又称简单类型,若分为四种则为字符、整型、实型和枚举,若分为五种,则将实型分为单精度型和双精度型两种。

*2.50 若s是int型变量,则表达式s%2+(s+1)%2的值为【 】。

参考答案:1

参考分析:无论s是奇数还是偶数表达式的值只能是1。

*2.51 若a是int型变量,则表达式(a=4*5,a*2),a+6的值为【 】。

参考答案:26

*2.52 若x和a均是整型变量,则计算表达式(1)后的x值为【1】,计算表达式(2)后x的

值为【2】。

(1)x=(a=4,6*2)

(2)x=a=4,6*2

参考答案:【1】12 【2】4

2.53 若a、b和c均是int型变量,则计算表达式a=(b=4)+(c=2)后,a的值为【1】,b的值为【2】,c的值为【3】。

参考答案:【1】6 【2】4 【3】2

2.54 若a是int 型变量,且a的初值为6,则计算表达式a+=a-=a*a后a的值为【 】。 参考答案:-60

2.55 若a是int型变量,则计算表达式a=25/3%3后a的值为【 】。

参考答案:2

2.56 若x和n均是int型变量,且x和n的初值均为5,则计算表达式x+=n++后x的值为【1】,n的值为【2】。

参考答案:【1】10 【2】6

2.57 若有定义:int b=7;float a=2.5,c=4.7;则表达式a+(int)(b/3*(int)(a+c)/2)%4的值为【 】。 参考答案:5.5

2.58 若有定义:int a=2,b=3;float x=3.5,y=2.5;则表达式(float)(a+b)/2+(int)x%(int)y的值为

【 】。

参考答案:3.5

2.59 若有定义:char c='\010';则变量c中包含的字符个数为【 】。

参考答案:1

2.60 若有定义:int x=3,y=2;float a=2.5,b=3.5;则表达式(x+y)%2+(int)a/(int)b的值为【 】。 参考答案:1

2.61 若有定义:int x=12,n=5;则计算表达式x%=(n%=2)后x的值为【 】。

参考答案:0

2.62 若有定义:int a,b;表达式a=2,b=5,a++,b++,a+b的值为【 】。

参考答案:9

2.63 C语言中的标识符只能由三种字符组成,它们是【1】、【2】和【3】。 参考答案:【1】字符 【2】数字 【3】下划线

*2.64 已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch='a'+'8'-'3'的值为【 】。

参考答案:f

参考分析:表达式计算中取各个字符的ASCII码值进行计算,但ch的值是以计算结果为码值的字符。

2.65 把以下多项式写成只含七次乘法运算,其余皆为加、减运算的表达式为【 】。 参考答案:((((((5*x+3)*x-4)*x+2)*x+1)*x-6)*x+1)*x+10

2.66 若double x=3.0,y=2.0;则表达式pow(y,fabs(x))的值为【 】。

参考答案:8.0

2.67 若有定义:int e=1,f=4,g=2;float m=10.5,n=4.0,k;则计算表达式k=(e+f)/g+ sqrt((double)n)*1.2/g+m后k的值是【 】。 参考答案:13.7

2.68 表达式8/4*(int)2.5/(int)(1.25*(3.7+2.3))值的数据类型为( )。

参考答案:int型

*2.69 表达式pow(2.8,sqrt(double(x)))值的数据类型为【 】。

参考答案:double型

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

*2.70 假设m是一个三位数,从左到右用a、b、c表示各位的数字,则从左到右各个数字是bac的三位数表达式是【 】。

参考答案:m/10%10*100+m/100*10+m%10

参考分析:数字各个位的分离可以先整除再取余,也可以先取余再整除。

第三章 最简单的C程序设计

3.1 选择题

3.1 putchar函数可以向终端输出一个

A)整型变量表达式 B)实型变量值

C)字符串 D)字符或字符型变量值

参考答案:D 参考分析:putchar函数的作用是输出一个字符,可以是常量或变量。

*3.2以下程序的输出结果是。

printf("\n*s1=%15s*","chinabeijing");

printf("\n*s2=%-5s*","chi");

A)*s1=chinabeijing□□□* B)*s1=chinabeijing□□□*

*s2=**chi* *s2=chi□□*

C) *s1=□□chinabeijing* D) * s1=□□□chinabeijing*

*s2=□□chi* *s2=chi□□*

参考答案:D

参考分析:-:数据左齐,右补空格。

3.3 printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列。如果字符串长度大于5,则输出按方式 【1】 ;如果字符串长度小于5,则输出按方式 【2】 。

A)从左起输出该字符串,右补空格 B)按原字符串长从左向右全部输出

C)右对齐输出该字符串,左补空格 D)输出错误信息 参考答案:【1】B 【2】C

*3.4已有定义int a=-2;和输出语句:printf("%8lx",a);以下正确的叙述是

A)整型变量的输出格式符只有%d一种

B)%x是格式符的一种,它可以适用于任何一种类型的数据

C)%x是格式符的一种,其变量的值按十六进制输出,但%8lx是错误的

D)%8lx不是错误的格式符,其中数字8规定了输出字段的宽度 参考答案:D

参考分析:答案B基本上是正确的,但是%x不能正确的输出长整型数据。 *3.5以下C程序正确的运行结果是

main()

{ long y=-43456;

printf ("y=%-8ld\n",y);

printf ("y=%-08ld\n",y);

printf ("y=%08ld\n",y);

printf ("y=%+8ld\n",y);

}

A)y=□□-43456 B)y=-43456

y=-□□43456 y=-43456

y=-0043456 y=-0043456

y=-43456 y=+□-43456

C)y=-43456 D) y=□□-43456

y=-43456 y=-0043456

y=-0043456 y=00043456

y=□□-43456 y=+43456

参考答案:C

参考分析:0:数据左侧必须充满,给定数据不足时,前面补0。

+:数据前面显示符号位。

*3.6以下C程序正确运行的结果是

main()

{ int y=2456;

printf("y=%3o\n",y);

printf("y=%8o\n",y);

printf("y=%#8o\n",y);

}

A)y=□□□2456 B)y=□□□4630

y=□□□□□□□□2456 y=□□□□□□□□4630

y=########2456 y=########4630

C)y=2456 D)y=4630

y=□□□□2456 y=□□□□4630

y=□□□02456 y=□□□04630

参考答案:D

参考分析:#要求输出数据的类型特征符号。

3.7以下C程序正确的运行结果是

main()

{long y=23456;

printf("y=%3lx\n",y);

printf("y=%8lx\n",y);

printf("y=%#8lx\n",y);

}

A)y=5ba0 B)y=□□□5ba0

y=□□□□5ba0 y=□□□□□□□□5ba0

y=□□0x5ba0 y=□□0x5ba0

C)y=5ba0 D)y=5ba0

y=5ba0 y=□□□□5ba0

y=0x5ba0 y=####5ba0

参考答案:A

分析:长整型数据输出应当加修正字符l,如果不加l仅能输出数据的低两个字节,高字节数据不能输出。

*3.8 若x,y均定义为int型,z定义为double型,以下不合法的scanf函数调用语句是 。

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

B)scanf("%2d*%d%lf",&x,&y,&z);

C)scanf("%x%*d%o",&x,&y);

D)scanf("%x%o%6.2f",&x,&y,&z);

参考答案:D

参考分析:A)首先读第一个十进制数赋给变量x,读第二个长十六进制数赋给变量y(此时有自动赋值转换),再读入格式规定的第二和第三个数据间的间隔符号逗号,最后读入第三个double型数据赋给变量z。B)首先读入2个宽度的十进制数赋给变量x,再读入格式规定的第一和第二数据间的间隔符号星号,然后读入第二个十进制整数赋给变量y,然

后读入第三个double型数据赋给变量z。C)读入第一个十六进制数赋给变量x,然后虚读一个十进制数不赋给任何变量,最后读入一个八进制数赋给变量y。D)%6.2f不符合格式规定,即不能规定读入数据的小数点后的数字位数。

*3.9 已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的数据输入方式是 。

int a1,a2;char c1,c2;

scanf("%d%c%d%c",&a1,&c1,&a2,&c2);

A)10A□20B<CR> B)10□A□20□B<CR>

C)10□A20B<CR> D)10A20□B<CR> 参考答案:A

*3.10 已有定义int x;float y;且执行scanf("%3d%f",&x,&y);语句时,从第一列开始输入数据12345□678<CR>,则x的值为 ⑴ ,y的值为 ⑵ 。

⑴ A)12345 B)123 C)45 D)345

⑵ A)无定值 B)45.0 C)678.0 D)123.0

参考答案:B B 参考分析:读取数据格式中规定域宽时,系统仅读取指定宽度的数据。

**3.11 已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的数据输入方式是 。

int a1,a2;char c1,c2;

scanf("%d%d",&a1,&a2);

scanf("%c%c",&c1,&c2);

A)1020AB<CR> B)10□20<CR>AB<CR>

C)10□□20□□AB<CR> D)10□20AB<CR>

参考答案:D

参考分析:A)a1为1020,a2为随机值,c1为A,c2为B。B)a1为10,a2为20,c1为<CR>,c2为A。C)a1为10,a2为20,c1、c2均为□。

3.12 已有程序段和输入数据的形式,程序中输入语句的正确形式应当为。

main()

{ int a;float f;

printf("Input number:");

(输入语句)

printf("\nf=%f,a=%d\n",f,a);

}

Input number:4.5□□2<CR>

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

C)scnaf("%d%f",&a,&f); D)scanf("%f%d",&f,&a);

参考答案:D

3.13 根据定义和数据的输入方式,输入语句的正确形式为。

已有定义:float f1,f2;

数据的输入方式:4.52

3.5

A)scanf("%f,%f",&f1,&f2); B)scanf("%f%f",&f1,&f2);

C)scanf("%3.2f %2.1f",&f1,&f2); D)scanf("%3.2f%2.1f",&f1,&f2); 参考答案:B

*3.14 阅读以下程序,当输入数据的形式为:25,13,10<CR>,正确的输出结果为

main()

{int x,y,z;

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

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

}

A)x+y+z=48 B)x+y+z=35 C)x+z=35 D)不确定的值

参考答案:D

参考分析:由于提供数据的格式与规定格式不一致,变量y,z不能获取正确的数据,均为随机值,故三变量之和也是随机数。

3.15 根据题目中已给出的数据输入和输出形式,程序中输入输出语句的正确内容是 。

main()

{int x;float y;

printf("enter x,y:");

输入语句

输出语句

}

输入形式:enter x,y:2 3.4

输出形式:x+y=5.40

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

printf("\nx+y=%4.2f",x+y); printf("\nx+y=%4.2f",x+y);

C)scanf("%d%f",&x,&y); D)scanf("%d%3.1f",&x,&y);

printf("\nx+y=%6.1f",x+y); printf("\nx+y=%4.2f",x+y);

参考答案:B

3.16 以下说法正确的是

A)输入项可以为一个实型常量,如scanf("%f",3.5);

B)只有格式控制,没有输入项,也能进行正确输入,如scanf("a=%d , b=%d");

C)当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf("%4.2f",&f);

D)当输入数据时,必须指明变量的地址,如scanf("%f",&f); 参考答案:D

*3.17 根据下面程序及数据的输入和输出形式,程序中输入语句的正确形式应该为 。

main()

{char ch1,ch2,ch3;

输入语句

printf("%c%c%c",ch1,ch2,ch3);

}

输入形式:A□B□C

输出形式:A□B

A)scanf("%c%c%c",&ch1,&ch2,&ch3);

B)scanf("%c,%c,%c",&ch1,&ch2,&ch3);

C)scanf("%c %c %c",&ch1,&ch2,&ch3);

D)scanf("%c%c",&ch1,&ch2,&ch3);

参考答案:A

参考分析:字符控制格式中有无空格对数据的读取有影响,B)ch1读取A,ch2和ch3为随机字符。C)三个变量分别为A、B、C。D)ch3为随机字符。

3.18 有输入语句:scanf("a=%d,b=%d,c=%d",&a,&b,&c);为使变量a的值为1,b为3,c为2,从键盘输入数据的正确形式应当是 。

A)132<CR> B)1,3,2<CR>

C)a=1□b=3□c=2<CR> D)a=1,b=3,c=2<CR>

参考答案:D

3.19 以下能正确地定义整型变量a,b和c并为其赋初值5的语句是

A)int a=b=c=5; B)int a,b,c=5; C)int a=5,b=5,c=5; D)a=b=c=5; 参考答案:C

*3.20已知ch是字符型变量,下面不正确的赋值语句是

A)ch='a+b'; B)ch='\0'; C)ch='7'+'9'; D)ch=5+9

参考答案:A

参考分析:B)为转义字符。C)为7和9两个字符ASCII码值之和的字符。D)为码值为14的字符(控制字符)。

3.21 已知ch是字符型变量,下面正确的赋值语句是

A)ch='123'; B)ch='\xff'; C)ch='\08'; D)ch="\";

参考答案:B

3.22 若有以下定义,则正确的赋值语句是

int a,b;float x;

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

参考答案:B

参考分析:这里强调的是赋值语句,请注意赋值表达式与赋值语句的区别。

3.23设x、y均为float型变量,则以下不合法的赋值语句为________。

A) ++x; B)y=(x%2)/10; C)x*=y+8 D)x=y=0 参考答案:B

*3.24 设x、y和z均为int型变量,则执行语句x=(y=(z=10)+5)-5;后,x、y和z的值是 。

A)x=10 B)x=10 C)x=10 D)x=10

y=15 y=10 y=10 y=5

z=10 z=10 z=15 z=10 参考答案:A

3.25 设有说明:double y=0.5,z=1.5;int x=10;则能够正确使用C语言库函数的赋值语句是 。

A)z=exp(y)+fabs(x);

B)y=log10(y)+pow(y);

C)z=sqrt(y-z);

D)x=(int)(atan2((double)x,y)+exp(y-0.2));

参考答案:D

参考分析:本题有些偏,其他选项错误的原因为A)fabs(x),x不是double型。B)pow(y)其格式原型为double pow(double y,double x)。C)y-z为负数。

3.2 填空题

*3.26以下程序的输出结果为( )。

main()

{short i;

i=-4;

printf("\ni:dec=%d, oct=%o, hex=%x, unsigned=%u\n",i,i,i,i);

} 参考答案:i:dec=-4, oct=177774, hex=fffc, unsigned=65532

*3.27 以下程序的输出结果为( )。

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

main()

{printf("*%f,%4.3f*\n",3.14,3.1415);

}

参考答案:*3.140000,3.142*

分析:不能输出的位会向前一位四舍五入输出。

3.28以下程序的输出结果为( )。

main()

{char c='x';

printf("c:dec=%d, oct=%o, hex=%x, ASCII=%c\n",c,c,c,c);

} 参考答案:c:dec=120, oct=170, hex=78, ASCII=x

*3.29 已有定义int d=-2;执行以下语句后的输出结果是( )。

printf("*d(1)=%d*d(2)=%3d*d(3)=%-3d*\n",d,d,d);

printf("*d(4)=%o*d(5)=%7o*d(6)=%-7o*\n",d,d,d);

参考答案:*d(1)=-2*d(2)=□-2*d(3)=-2□*

*d(4)=177776*d(5)=□177776*d(6)=177776□*

3.30已有定义int d=-2;执行以下语句后的输出结果是( )。

printf("*d(1)=%d*d(2)=%3d*d(3)=%-3d*\n",d,d,d);

printf("*d(4)=%x*d(5)=%6x*d(6)=%-6x*\n",d,d,d);

参考答案:*d(1)=-2*d(2)=□-2*d(3)=-2□* *d(4)=fffe*d(5)=□□fffe*d(6)=fffe□□*

*3.31已有定义float d1=3.5,d2=-3.5;执行以下语句后的输出结果是( )。

printf("*d(1)=%e*d(2)=%.4e*d(3)=%10.4e*\n",d1,d1,d1);

printf("*d(4)=%e*d(5)=%.6e*d(6)=%-12.5e*\n",d2,d2,d2);

参考答案:*d(1)=3.50000e+00*d(2)=3.500e+00*d(3)=□3.500e+00*

*d(4)=-3.50000e+00*d(5)=-3.50000e+00*d(6)=-3.5000e+00□*

参考分析:通过本题应注意%f和%e在规定小数点后位数的区别。%e小数位后面位数含e标志。

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

main()

{int x=1,y=2;

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

printf("10 Squared is :%d\n",10*10);

}

参考答案:x=1 y=2 *sum*=3

10 Squared is :100

*3.33 以下程序的输出结果是( )。

#include <stdio.h>

main()

{int x=10;float pi=3.1416;

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

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

printf("(3)%f\n",56.1);

printf("(4)%14f\n",pi);

printf("(5)%e\n",568.1);

printf("(6)%14e\n",pi);

printf("(7)%g\n",pi);

printf("(8)%12g\n",pi);

}

参考答案:(1)10

(2)□□□□10

(3)56.100000

(4) □□□□□□3.141600

(5)5.68100e+02

(6) □□□3.14160e+00

(7)3.1416

(8) □□□□□□3.1416

参考分析:采用g格式输出数据时,当数据<=10-5或>=107时,按指数方式输出(缺省正数11位,负数12位),否则按小数方式输出(缺省含小数点总宽度最多7位)。且不输出无意义的0(后面)和小数点。

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

#include <stdio.h>

main()

{float a=123.456;double b=8765.4567;

printf("(1)%f\n",a);

printf("(2)%14.3f\n",a);

printf("(3)%6.4f\n",a);

printf("(4)%lf\n",b);

printf("(5)%14.3lf\n",b);

printf("(6)%8.4lf\n",b);

printf("(7)%.4lf\n",b);

}

参考答案:(1)123.456000

(2) □□□□□□□123.456

(3)123.4560

(4)8765.456700

(5) □□□□□□8765.456

(6)8765.4560 (7)8765.4560

*3.35 以下printf语句中*的作用是( ),输出结果是( )。

#include <stdio.h>

main()

{int i=1;

printf("##%*d\n",i,i);

i++;

printf("##%*d\n",i,i);

i++;

printf("##%*d\n",i,i);

}

参考答案:

(1)可使同一或相同输出格式数据输出宽度得以改变(动态域宽控制)

(2)##1

##□2

##□□3

3.36 以下printf语句中的"-"的作用是( ),该程序的输出结果是( )。

#include <stdio.h>

main()

{int x=12;double a=3.1415926;

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

printf("%-6d##\n",x);

printf("%14.10lf##\n",a);

printf("%-14.10lf##\n",a);

}

参考答案:

(1)输出数据左对齐

(2) □□□□12##

12□□□□##

□□3.1415926000##

3.1415926000□□##

*3.37 以下程序的输出结果是( )。

#include <stdio.h>

main()

{int a=325;double x=3.1415926;

printf("a=%+06d x=%+e\n",a,x);

} 参考答案:a=+00325 x=+3.14159e+00

*3.38以下程序的输出结果是( )。

#include <stdio.h>

main()

{int a=252;

printf("a=%o a=%#o\n",a,a);

printf("a=%x a=%#x\n",a,a);

}

参考答案:a=374□□a=0374

a=fc□□a=0xfc

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

int x=7281;

printf("(1)x=%3d,x=%6d,x=%o,x=%6x,x=%6u\n",x,x,x,x,x);

printf("(2)x=%-3d,x=%-6d,x=$%-06d,x=$%06d,x=%%06d\n",x,x,x,x,x);

printf("(3)x=%+3d,x=%+6d,x=%+08d\n",x,x,x);

printf("(4)x=%o,x=%#o\n",x,x);

printf("(5)x=%x,x=%#x\n",x,x);

参考答案:(1)x=7281,x=□□7281,x=□16161,x=□□1c71,x=□□7281

(2)x=7281,x=7281□□,x=$7281□□,x=$007281,x=%06d

(3)x=+7281,x=□+7281,x=+0007281

(4)x=16161,x=016161 (5)x=1c71,x=0x1c71

**3.40 假设变量a和b均为整型,以下语句可以不借助任何变量把a、b中的值进行交换。请填空。

a+=( );b=a-( );a-=( );

参考答案:b b b

3.41 假设变量a、b和c均为整型,以下语句借助中间变量t把a、b和c中的值进行交换,即把b中的值给a,把c中的值给b,把a中的值给c。例如:交换前a=10、b=20、c=30,交换后a=20,b=30,c=10。请填空。

( );a=b;b=c;( );

参考答案:t=a c=t;

**3.42 设x、y和z都是int型变量,m为long型变量,则在16位微型机上执行下面赋值语句后,y值为( ),z值为( ),m值为( )。

y=(x=32767,x-1);

z=m=oxffff;

参考答案:32766、-1、65535

3.43 若x为int型变量,则执行以下语句后x的值为( )。

x=7;

x+=x-=x+x;

参考答案:-14

3.44 若a和b均为int型变量,则以下语句的功能是( )。

a+=b;b=a-b;a-=b; 参考答案:交换a、b变量的值

*3.45 在scanf函数调用语句中,可以在格式字符和%号之间加一星号,它的作用是( ),当输入以下数据:10□□20□□30□□40<CR>,下面语句的执行结果是( )。

int a1,a2,a3;

scanf("%d%*d%d%d",&a1,&a2,&a3);

参考答案:读入数据后不赋给相应的变量 把10给a1,把20不给任何变量,把30给a2,把40给a3

3.46有一输入函数scanf("%d",k);则不能使float类型变量k得到正确数值的原因是( )和( ),正确的语句应为( )。 参考答案:格式字符不正确 缺少&符号 scanf("%f",&k);

3.47 已有定义int a;float b,x;char c1,c2;为使a=3,b=6.5,x=12.6,c1='a',c2='A',正确的scanf函数调用语句是( ),输入数据的方式为( )。

参考答案:

scanf("%d%f%f%c1%c2",&a,&b,&x,&c1,&c2);

3□6.5□12.6aA

参考分析:该题目不好,读取数据语句和提供数据方式全部由做题者决定,这会出现各式各样的答案。

*3.48 若有以下定义和语句,为使变量c1得到字符'A',变量c2得到字符'B',正确的格式输入形式是( )。

char c1,c2;

scanf("%4c%4c",&c1,&c2);

参考答案:A□□□B□□□

参考分析:读取字符数据指定数据宽度时,系统读取第一个字符

*3.49 执行以下程序时,若从第一列开始输入数据,为使变量a=3,b=7,x=8.5, y=71.82, c1='A',c2='a',正确的数据输入形式是( )。

int a,b;float x,y;char c1,c2;

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

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

scanf("c1=%c c2=%c",&c1,&c2);

参考答案:a=3□b=7x=8.5□y=71.82c1=A□c2=a<CR>

*3.50 已有定义int i,j;float x;为将-10赋给i,12赋给j,410.34赋给x;则对应以下scanf函数调用语句的数据输入形式是( )。

scanf("%o%x%e",&i,&j,&x);

参考答案:-12□c□4.1034e2

参考分析:第一个数也可给17776,第二个数也可给0xc,第三个数也可给410.34。

第四章 逻辑运算和判断选取控制

4.1 选择题

**4.1逻辑运算符两则运算对象的数据类型。

A)只能是0或1 B)只能是0或非0正数

C)只能是整型或字符型数据 D)可以是任何类型的数据

参考答案:D

参考分析:c语言中没有专用的逻辑量,任何数值类型的数据都可以作为逻辑数据使用,判断时0为假,非零为真,计算时真置1,假置0。

*4.2以下关于运算符优先顺序的描述中正确的是

A)关系运算符<算术运算符<赋值运算符<逻辑运算符

B)逻辑运算符<关系运算符<算术运算符<赋值运算符

C)赋值运算符<逻辑运算符<关系运算符<算术运算符

D)算术运算符<关系运算符<赋值运算符<逻辑运算符

参考答案:C 4.3 下列运算符中优先级最高的是

A)< B)+ C)&& D)!=

参考答案:B

*4.4能正确表示―当x的取值在[1,10]和[200,210]范围内为真‖的C语言表达式为

A) (x>=1)&&(x<=10)&&(x>=200)&&(x<=210)

B) (x>=1)&&(x<=10)||(x>=200)&&(x<=210)

C) (x>=1)||(x<=10)||(x>=200)||(x<=210)

D) (x>=1)||(x<=10)&&(x>=200)||(x<=210)

参考答案:B

参考分析:C语言中实际上与运算和或运算优先级相等,由于C采用短路算法,所以不会影响B的结果,即不需要改成((x>=1)&&(x<=10))||((x>=200) &&(x<=210)) 4.5

A)(x<=a)&&(x>=b)&&(x<=c) B)(x<=a)||(b<=x<=c)

C)(x<=a)||(x>=b)&&(x<=c) D)(x<=a)&&(b<=x<=c) 参考答案:C

4.6判断char型变量ch是否为大写字母的正确表达式为

A)'A'<=ch<='Z' B)(ch>='A')&(ch<='Z')

C) (ch>='A')&&(ch<='Z') D)('A'<=ch)AND('Z'>=ch)

参考答案:C

4.7 有int x=3,y=4,z=5;则下面表达式中值为0的是。

A)'x'&&'y' B)x<=y C)x||y+z&&y-z D)!((x<y)&&!z||1)

参考答案:D

4.8 已知x=43,ch='A',y=0;则表达式(x>=y&&ch<'B'&&!y)的值是。

A)0 B)语法错误 C)1 D)"假"

参考答案:C

4.9若希望当A的值为奇数时,表达式的值为―真‖,A的值为偶数时,表达式的值为―假‖。则以下不能满足要求的表达式是 。

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

A)A%2= =1 B)!(A%2= =0) C)!(A%2) D)A%2 参考答案:C

*4.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

参考答案:B

参考分析:本题为标准的短路算法,由于第一个表达式m=a>b为真,故第二个表达式n=c>d被短路不再计算。因此,n值仍然保持原来的值2不变。

4.11判断char型变量ch是否为小写字母的正确表达式为

A)'a'<=ch<='z' B)(ch>=a)&&(ch<=z)

C) (ch>='a')||(ch<='z') D)(ch>='a')&&(ch<='z') 参考答案:D

*4.12 以下程序的运行结果是

#include <stdio.h>

main()

{int a,b,d=241;

a=d/100%9;

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

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

}

A)6,1 B)2,1 C)6,0 D)2,0

参考答案:B 参考分析:计算时,非零为真。

*4.13 执行以下语句后a的值为b的值为。

int a,b,c;

a=b=c=1;

++a||++b&&++c;

A)0 B)1 C)2 D)错误

参考答案:C B 参考分析:c语言在计算表达式时采用短路算法。

4.13-改 执行以下语句后,a,b,c的值分别为

int a,b,c;

a=b=c=1;

++a||++b&&++c;

A)1,1,1 B)2,1,1 C)2,2,1 D)2,2,2

参考答案:B

4.14 执行以下语句后a的值为b的值为。

int a=5,b=6,w=1,x=2,y=3,z=4;

(a=w>x)&&(b=y>z);

(1)A)5 B)0 C)2 D)1

(2)A)6 B)0 C)1 D)4

参考答案:B A

参考分析:短路算法。

*4.15 以下不正确的if语句形式是

A)if (x>y&&x!=y);

B)if (x==y) x+=y;

C)if(x!=y) scanf("%d",&x) else scanf("%d",&y);

D)if(x<y) {x++;y++;}

参考答案:C

4.16 下列运算符中优先级最低的是。

A)? : B)&& C)+ D)!= 参考答案:A C

*4.17 已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是。

if(x>y)

z=x;x=y;y=z;

A)10,20,30 B)20,30,30 C)20,30,10 D)20,30,20

参考答案:C

4.18 以下if语句语法正确的是

A)if (x>0) printf("%f",x) else printf("%f",-x);

B)if(x>0){x=x+y;printf("%f",x);} else printf("%f",-x); C)if(x>0){x=x+y;printf("%f",x);};else printf("%f",-x);

D)if(x>0){x=x+y;printf("%f",x)} else printf("%f",-x);

参考答案:B

*4.19有程序:main()

{int a=5,b=1,c=0;

if (a=b+c) printf("***\n");

else printf("$$$\n");}

该程序 。

A)有语法错误不能通过编译 B)可以通过编译,但不能通过连接

C)输出:*** D)输出:$$$

参考答案:C 参考分析:注意条件表达式不是a= =b+c。

*4.20 以下程序的运行结果是

main()

{int m=5;

if(m++>5) printf("%d",--m);

else printf("%d",m++);

}

A)4 B)5 C)6 D)7

参考答案:C

参考分析:m先与5进行关系比较,然后进行增量运算,m值为6,因比较结果为假,执行else,输出为6,m为7。

4.21 当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是。

if(a<b)

if(c<d) x=1;

else

if(a<c)

if(b<d) x=2;

else x=3;

else x=6;

else x=3;

A)1 B2 C)3 D)6

参考答案:B

**4.22有函数关系如下,能正确表示该关系的程序段是

A)y=x+1; B)y=x-1;

if(x>=0) if(x!=0)

if(x= =0) y=x; if (x>0) y=x+1;

else y=x-1; else y=x;

C)if (x<=0) D) y=x;

if (x<0) y=x-1; if(x<=0)

else y=x; if (x<0) y=x-1;

else y=x+1 else y=x+1; 参考答案:C

*4.23 以下程序的输出结果是

main()

{int a=100,x=10,y=20,ok1=5,ok2=0;

if(x<y)

if(y!=10)

if(!ok1)

a=1;

else

if(ok2) a=10;

a=-1;

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

}

A)1 B)0 C)-1 D)值不确定

参考答案:C

参考分析:无论前面的分支如何执行,由于a=-1和上面的语句为顺序关系,因此不会影响到a的值。

4.24 以下程序的输出结果是

main()

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

if(x<y)

if(y<0) z=0;

else z+=1;

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

}

A)3 B)2 C)1 D)0 参考答案:B

*4.25为了避免在嵌套的条件语句if-else中产生二义性,C语言规定:else子句总是与 配对。

A)缩排位臵相同的if B)其之前最近的没有else配对的if

C)其之后最近的if D)同一行上的if

参考答案:B 参考分析:本题表述不严谨。

*4.26以下不正确的语句为。

A)if (x>y);

B)if (x=y)&&(x!=0) x+=y;

C)if (x) z=z/x;

D)if (x>y) {x++;y++;}

参考答案:B

4.27 请阅读以下程序:

#include <stdio.h>

main()

{float a,b;

scanf("%f",&a);

if(a<0.0) b=0.0;

else if((a<0.5)&&(a!=2.0)) b=1.0/(a+2.0);

else if(a<10.0) b=1.0/a;

else b=10.0;

printf("%f\n",b);

}

若运行时输入2.0<CR>,则上面程序的输出结果是。

A)0.000000 B)0.500000 C)1.000000 D)0.250000 参考答案:B

**4.28 若有条件表达式(exp)?a++:b--,则以下表达式中能完全等价于表达式(exp)的是 。

A)exp==0 B)exp!=0 C)exp==1 D)exp!=1

参考答案:B

参考分析:在C语言中,当一个表达式不等于0时,可以将不等于部分省略,其效果完全一样。

*4.29 若运行时给变量输入12,则以下程序的运行结果是

main()

{int x,y;

scanf("%d",&x);

y=x>12?x+10:x-12;

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

}

A)0 B)22 C)12 D)10

参考答案:A

参考分析:x>12为假,取x-12。

4.30 以下程序的运行结果是

main()

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

printf("\n%d\n",k<a?k:c<b?c:a);

}

A)4 B)3 C)2 D)1 参考答案:D

**4.31执行下列程序段后,变量a,b,c的值分别是。

int x=10,y=9;

int a,b,c;

a=(--x= =y++)?--x:++y;

b=x++;

c=y;

A)a=9,b=9,c=9 B)a=8,b=8,c=10

C)a=9,b=10,c=9 D)a=8,b=8,c=9

参考答案:B

参考分析:首先x进行--操作,x为9,然后与y进行等于比较,即9==9,然后y++为

10。由于比较结果为真,故计算--x,为8,赋给a。

4.32 阅读以下程序,则执行下面语句后m的值是。

int w=1,x=2,y=3,z=4,m;

m=w<x?w:x;

m=m<y?m:y;

m=m<z?m:z;

A)1 B)2 C)3 D)4

参考答案:A

4.33 若有int w=1,x=2,y=3,z=4;则表达式w<x?w:y<z?y:z的值是。

A)4 B)3 C)2 D)1 参考答案:D

*4.34 执行以下程序后的输出结果是

int w=3,z=7,x=10;

printf("%d",x>10?x+100:x-10);

printf("%d",w++||z++);

printf("%d",!w>z);

printf("%d",w&&z);

A)0111 B)1111 C)0101 D)0100

参考答案:C

4.2 填空题

*4.35 若int a=3,b=2,c=1,f;表达式f=a>b>c的值是( )。

参考答案:0

参考分析:计算过程如下,a>b计算为真,然后计算 真(1)>c,结果为假

4.36 若int a=5,b=4,c=2;表达式a>b!=c的值是( )。 参考答案:1

*4.37 以下程序的运行结果是( )。

#include <stdio.h>

main()

{int x=1,y,z;

x*=3+2;

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

x*=y=z=5;

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

x=y==z;

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

}

参考答案:5□□□□□□□25□□□□□□1(制表符为7个)

4.38 在C语言中,表示逻辑―真‖值用( )。 参考答案:非0的数值。

*4.39 设y为int型变量,请写出描述―y是奇数‖的表达式( )。

参考答案:y%2==1 y%2!=0 y%2 (y-1)%2==0 !(y%2==0)

4.40 c语言提供的三种逻辑运算符是( )、( )和( )。

参考答案:&& || !

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

4.41 设x,y,z均为int型变量,请写出描述―x或y中有一个小于z‖的表达式( )。 参考答案:x<z||y<z

*4.42设x,y,z均为int型变量,请写出描述―x,y,z中有两个为负数‖的表达式( )。 参考答案:x*y*z>=0&&((x<0&&y<0)||(x<0&&z<0)||(y<0&&z<0))

参考分析:原书提供的答案是(x<0&&y<0)||(x<0&&z<0)||(y<0&&z<0),但当三个变量均为负数时不合适,后来本人思考了一个试图简化一些的答案,即x*y*z>0&&(x<0||y<0||z<0) 可是若有一个变量为零,其他为负数时也不合适,只有参考答案才无懈可击。

4.43 已知A=7.5,B=2,C=3.6,表达式A>B&&C>A||A<B&&!C>B的值是( )。 参考答案:0

参考分析:在本表达式的计算过程中A<B被短路。

4.44 若int a=6,b=4,c=2;表达式!(a-b)+c-1&&b+c/2的值是( )。

参考答案:1

4.45 若a=2,b=4,则表达式!(x=a)||(y=b)&&0的值是( )。

参考答案:0

4.46 若a=1,b=4,c=3,则表达式!(a<b)||!c&&1的值是( )。

参考答案:0

4.47 若a=6,b=4,c=3,则表达式a&&b+c||b-c的值是( )。

参考答案:1

4.48 若a=5,b=2,c=1,则表达式a-b<c||b==c的值是( )。

参考答案:0

4.49 若a=3,b=4,c=5,则表达式a||b+c&&b的值是( )。

参考答案:1

4.50 条件―2<x<3或x<-10‖的C语言表达式是( )。

参考答案:x>2&&x<3||x<-10

4.51 当m=2,n=1,a=1,b=2,c=3时,执行完d=(m=a!=b)&&(n=b>c)后,n的值为( ),m的值为( )。

参考答案:0 1

4.52 以下程序的运行结果是 。

main()

{int x,y,z;

x=1;y=2;z=3;

x=y--<=x||x+y!=z;

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

}

参考答案:1,1

参考分析:这是两个表达式的或运算,第一个表达式y--<=x相当于2<=1为假,y变量增为1,第二表达式x+y!=z相当于1+1!=3为真,故x的值为1。

4.53 以下程序的运行结果是

main()

{int a1,a2,b1,b2;

int i=5,j=7,k=0;

a1=!k;

a2=i!=j;

printf("a1=%d\ta2=%d\n",a1,a2);

b1=k&&j;

b2=k||j;

printf("b1=%d\tb2=%d\n",b1,b2);

}

参考答案:a1=1 a2=1 b1=0 b2=1

*4.54 以下程序的运行结果是

main()

{int x,y,z;

x=1;y=1;z=0;

x=x||y&&z;

printf("%d,%d",x,x&&!y||z);

}

参考答案:1,0

参考分析:本题采用短路算法,由于x为真,后面的或和与运算均被短路。

4.55 有int x,y,z;且x=3,y=-4,z=5,则表达式(x&&y)==(x||z)的值为( )。

参考答案:1

4.56 有int x,y,z;且x=3,y=-4,z=5,则表达式!(x>y)+y!=z)||(x+y)&&(y-z)的值为(参考答案:1

4.57有int x,y,z;且x=3,y=-4,z=5,则表达式x++-y+(++z)的值为( )。

参考答案:13

4.58 有int a=3,b=4,c=5;则表达式a||b+c&&b==c的值为( )。

参考答案:1

4.59 有int a=3,b=4,c=5,x,y;则表达式!(x=a)&&(y=b)&&0的值为( )。

参考答案:0 4.60 有int a=3,b=4,c=5;则表达式!(a+b)+c-1&&b+c/2的值为( )。

参考答案:1

4.61 若运行时输入:16<CR>,则以下程序的运行结果是

#include <stdio.h> void main(void)

{int year;

printf("Input your year:");

scanf("%d",&year);

if (year>=18)

printf("your $4.5 yuan/xiaoshi");

else

printf("your $3.0 yuan/xiaoshi"); }

参考答案:your $3.0 yuan/xiaoshi

4.62 若运行时输入:2<CR>,则以下程序的运行结果是

#include <stdio.h>

void main(void)

{char class;

printf("Enter 1 for 1st class post or 2 for 2nd post");

scanf("%c",&class);

if (class=='1')

printf("1st class postage is 19p");

else

printf("2nd class postage is 14p"); 。 )

}

参考答案:2nd class postage is 14p

4.63 若运行时输入:4.4<CR>,则以下程序的运行结果是。

#include <stdio.h>

void main(void)

{float costprice,sellingprice;

printf("Enter Cost Price $:");

scanf("%f",&costprice);

if(costprice>=5)

{sellingprice=costprice+costprice*0.25;

printf("Selling Price(0.25)$%6.2f",sellingprice);

}

else

{sellingprice=costprice+costprice*0.30;

printf("Selling Price(0.30)$%6.2f",sellingprice);

}

}

参考答案:Selling Price(0.30)$ 5.72

4.64 以下程序的运行结果是

main()

{if (2*2==5<2*2==4)

printf("T");

else

printf("F");

} 参考答案:F

*4.65 请阅读以下程序,若运行时输入:1605<CR>时,程序的运行结果是。

main()

{int t,h,m;

scanf("%d",&t);

h=t/100%12;

if(h==0) h=12;

printf("%d:",h);

m=t%100;

if(m<10) printf("0");

printf("%d",m);

if (t<1200||t==2400)

printf("AM");

else

printf("PM");

}

参考答案:4:05PM

4.66 以下程序实现:输入园的半径r和运算标志m,按照运算标志进行指定计算,请填空。

标志 运算

a 面积

c 周长

b 二者均计算

#define pi=3.14159

main()

{char m;

float r,c,a;

printf("Input mark a c or b && r\n");

scanf("%c %f",&m,&r);

if ( {a=pi*r*r;printf("area is %f",a);}

if ( {c=2*pi*r;printf("circle is %f",c);}

if ( {a=pi*r*r;c=2*pi*r;

printf("area && circle are %f %f",a,c);

}

}

参考答案:【1】m=='a' 【2】m=='c' 【3】m=='b'

4.67 若运行时输入:5999<CR>,则以下程序的运行结果是。

main()

{int x;

float y;

scanf("%d",&x);

if(x>=0&&xx<=2999) y=18+0.12*x;

if(x>=3000&&x<=5999) y=36+0.6*x;

if(x>=6000&&x<=10000)y=54+0.3*x;

printf("%6.1f",y);

}

参考答案:3635.4

4.68 以下程序实现输出x,y,z三个数中的最大者。请分析程序填空。

main()

{int x=4,y=6,z=7;;

int ;

if() u=x;

else u=y;

if (else v=z;

printf("v=%d",v);

}

参考答案:【1】u,v 【2】x>y【3】u>z

4.69 以下程序将输入的三个整数按从大到小顺序输出,请分析程序填空。

main()

{int x,y,z,c;

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

if()

{c=y;y=z;z=c;}

if()

{c=x;x=z;z=c;}

if()

{c=x;x=y;y=c;}

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

}

参考答案:【1】y<z【2】x<z【3】x<y

4.70 以下程序对输入的两个整数,按从大到小顺序输出,请分析程序填空。

main()

{int x,y,z;

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

if()

{z=x;}

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

} 参考答案:【1】x<y【2】x=y;y=z;

*4.71 以下程序对输入的一个小写字母进行循环后移5个位臵后输出。如'a'变成'f','w'变成'b'。请分析程序填空。

#include<stdio.h>

main()

{char c;

c=getchar();

if (c>='a'&&c<='u') ;

else if (c>='v'&&c<='z') ;

putchar(c);

} 参考答案:【1】c=c+5【2】c=c+6-26

*4.72 输入一个字符,如果它是大写字母,则把它变成小写字母,如果它是一个小写字母,则把它变成大写字母,其它字符不变。请分析程序填空。

main()

{char ch;

scanf("%c",&ch);

if() ch=ch+32;

else if(ch>='a'&&ch<='z') ;

printf("%c",ch);

}

参考答案:【1】ch>='A'&&ch<='Z'【2】ch=ch-32

4.73 以下程序的运行结果是

main()

{int a,b,c;

int s,w,t;

s=w=t=0;

a=-1;b=3;c=3;

if(c>0) s=a+b;

if(a<=0)

{if(b>0)

if(c<=0) w=a-b;

}

else if(c>0) w=a-b;

else t=c;

printf("%d %d %d",s,w,t);

}

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

参考答案:2 0 0

4.74以下程序的运行结果是。

main()

{int a,b,c,d;

a=c=0;

b=1;

d=20;

if(a) d=d-10;

else if(!b)

if(!c) d=15;

else d=25;

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

}

参考答案:20

4.75 以下程序的运行结果是

#include <stdio.h>

main()

{int x,y=1,z;

if(y!=0) x=5;

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

if(y==0) x=4;

else x=5;

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

x=1;

if(y<0)

if(y>0) x=4;

else x=5;

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

}

参考答案:

□□□□□□□□5

□□□□□□□□5 □□□□□□□□1

*4.76以下程序的运行结果是。

#include<stdio.h>

main()

{int x,y=-2,z=0;

if((z=y)<0) x=4;

else if(y==0) x=5;

else x=6;

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

if(z=(y==0))

x=5;

x=4;

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

if(x=z=y) x=4;

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

}

参考答案:

□□□□□□□□4□□□□□□□-2

□□□□□□□□4□□□□□□□0 □□□□□□□□4□□□□□□□-2

*4.77 请阅读以下程序,为使输出时t值为4,输入量a和b应满足的条件是

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) t=5;

else t=2*s;

printf("s=%d,t=%d",s,t);

}

参考答案:0<a<b (a>0&&a<b)

4.78 请阅读下面的程序,为使输出s=1,t=5的结果,输入量a和b应满足的条件是

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) t=5;

else t=2*s;

printf("s=%d,t=%d",s,t);

4.79 下面程序根据以下函数关系,对输入的每个x值,计算出y值。请分析程序填空。

main()

{int x,y;

scanf("%d",&x);

if() y=x*(x+2);

else if(else ;

if(y!=-1) printf("%d",y);

else printf("error");

}

参考答案:【1】2<x&&x<=10【2】-1<x&&x<=2【3】y=-1

4.80下面程序根据以下函数关系,对输入的每个x值,计算出y值。请分析程序填空。

#include <math.h>

main()

{int x,a;

float y;

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

if() y=0;

else if(else y=x;

printf("%f",y);

} 参考答案:【1】x==-a||x==a【2】x>-a&&x<a

*4.81 以下程序的功能是计算一元二次方程ax2+bx+c=0的根,请分析程序填空。 #include <math.h>

main()

{float a,b,c,t,disc,twoa,term1,term2;

printf("Enter a,b,c:");

scanf("%f %f %f",&a,&b,&c);

if()

if() printf("no answer due to input error.\n");

else printf("the single root is %f\n",-c/b);

else

{disc=b*b-4*a*c;

twoa=2*a;

term1=-b/twoa;

t=abs(disc); term2=sqrt(t)/twoa;

if()

printf("complex root\nreal part=%f imag part=%f\n",term1,term2);

else

printf("real roots\nroot1=%froot2=%f\n",term1+term2,term1-term2);

}

}

参考答案:【1】a==0 fabs(a)<1e-4【2】b==0【3】disc<0

4.82 以下程序根据输入的三角形的三边判断是否能组成三角形,若可以则输出它的面积和三角形的类型。请分析程序填空。

#include "math.h"

main()

{float a,b,c,s,area;

scanf("%f%f%f",&a,&b,&c);

if()

{s=(a+b+c)/2;

area=sqrt(s*(s-a)*(s-b)*(s-c));

printf("%f",area);

if()

printf("等边三角形");

else if( printf("等腰三角形");

else if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c=a*a))

printf("直角三角形");

else printf("一般三角形");

}

else printf("不能组成三角形");

}

参考答案:【1】a+b>c&&b+c>a&&c+a>b【2】a==b&&b==c

【3】a==b||b==c||a==c

4.83 某邮局对邮寄包裹有如下规定:若包裹的长宽高任一尺寸超过1米或重量超过30千克,不予邮寄;对可以邮寄的包裹每件收取手续费0.2元,在加上根据下表按重量wei计算的邮资。请分析程序填空。

main()

{float len,wei,hei,wid,mon,r;

scanf("%f %f %f %f",&len,&wid,&hei,&wei);

if(len>1||wid>1||hei>1||wei>30) ;

else if(wei<10) r=0.8;

else if(wei<=20) r=0.75;

else if(wei<=30) if(r==-1) printf("error\n");

else

{;printf("%f",mon);}

} 参考答案:【1】r=-1【2】r=0.70【3】m=0.2+r*wei

**4.84某服装店经营套服,也单件出售。若买的不少于50套每套80元;不足50套的每套90元;只买上衣每件60元;只买裤子每条45元。以下程序的功能是读入所买上衣c和裤子t的件数,计算应付款m。请分析程序填空。

main()

{int c,t,m;

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

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

if()

if(c>=50) m=c*80;

else m=c*90;

else

if()

if(t>=50) m=t*80+(c-t)*60;

else m=t*90+(c-t)*60;

else

if() m=c*80+(t-c)*45;

else m=c*90+(t-c)*45;

printf("cost=%d\n",m);

}

参考答案:【1】t==c 【2】c>t 【3】c>=50

4.85 以下程序的功能是判断输入的年份是否是闰年。请分析程序填空。

main()

{int y,f;

scanf("%d",&y);

if(y%400==0) f=1;

else if(else ;

if (f) printf("%d is",y);

else printf("%d is not",y);

printf(" a leap year.\n");

} 参考答案:【1】year%4== 0&&year%100!=0【2】f=0

*4.86 以下程序段针对输入的截止日期(年:yend,月:mend,日:dend)和出生日期(yman,mman,dman),计算出实际年龄。请分析程序填空。

设有:int yend,mend,dend,yman,mman,dman;

age=yend-yman;

if(mend)mman) age--; else if(mend age--;

参考答案:【1】<【2】==【3】<

4.87 有四个数a,b,c,d,要求从大到小的顺序输出。请分析程序填空。

main()

{int a,b,c,d,t;

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

if(a<b){t=a;a=b;b=t;}

if(){t=c;c=d;d=t;}

if(a<c){t=a;a=c;c=t;}

if(){t=b;b=c;c=t;}

if(b<d){t=b;b=d;d=t;}

if(c<d){t=c;c=d;d=t;}

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

}

参考答案:【1】c<d【2】b<c

4.88 以下程序的运行结果是

main()

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

c=a;

if(a>b) c=1;

else if(a==b) c=0;

else c=-1

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

}

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

参考答案:-1

4.89 若a=1,b=2,则表达式a>b?a:b+1的值是。

参考答案:3

4.90 若a=1,b=2,c=3,d=4,则表达式a>b?a:c>d?c:d的值是。 参考答案:4

*4.91 设有变量定义:int a=10,c=9;则表达式(--a!=c++)?--a:++c的值是 参考答案:11

4.92 若有说明语句:int x=1,y=0;则表达式x>(y+x)?10:12.5>y++?'a':'A'的值是。 参考答案:'a'

*4.93 若有说明语句:int a=1,b=0;则表达式++a*--a==b?12%5:'x'的值是。 参考答案:'x'

4.94 若有x=1,y=2,z=3,则表达式(x<y?x:y)==z++的值是。 参考答案:0

**4.95 若有说明语句:int x=1,y=0;则表达式x-->(y+x)?5:25>y++?'1':'2'的值是 参考答案:5

参考分析:增量运算在条件运算的第一个表达式中时,关系运算符两侧各为一个处理单元。x--中的值是1,然后增为0,故y+x为0+0,因此整个表达式计算结果为真。

4.96 以下程序的运行结果是

#include <stdio.h>

main()

{int a=-10,b=-3;

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

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

printf("%d\n",a-b?a-b:a+b);

}

参考答案:1,-13,-7

4.97以下程序的运行结果是。

main()

{int x=1,y=1,z=1;

y=y+z;

x=x+y;

printf("%d,",x<y?y:x);

printf("%d,",x<y?x++:y++);

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

}

参考答案:3,2,3,3

4.98 以下程序的运行结果是

main()

{int x,y,z;

x=3;

y=z=4;

printf("%d,",(x>=y>=x)?1:0);

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

}

参考答案:0,1

4.99 若运行时输入:-2<CR>,则以下程序的输出结果是。

main()

scanf("%d",&a);

b=(a>=0)?a:-a;

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

}

参考答案:b=2

4.100 若运行时输入:100<CR>,下面程序的运行结果是

main()

{int a;

scanf("%d",&a);

printf("%s",(a%2!=0)?"no":"yes");

}

参考答案:yes

4.101 如果运行时输入字符'Q',则以下程序的运行结果是

main()

{char ch;

scanf("%c",&ch);

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

ch=(ch>='a'&&ch<='z')?(ch-32):ch;

printf("%c",ch);

}

参考答案:Q

4.102 当运行时输入:1992<CR>,则以下程序的运行结果是

main()

{int y,t;

scanf("%d",&y);

t=((y%4==0)&&(y%100!=0)||y%400==0)?1:0;

if(t) printf("%d is",y);

else printf("%d is not",y);

printf("a leap year");

}

参考答案:1992 is a leap year

4.103 以下程序是计算x,y,z三个数中最小的。请分析程序填空。

main()

{int x=4,y=5,z=8;

int u,v;

u=x<y?v=u<z?printf("%d",v);

}

参考答案:【1】x:y【2】u:z

4.104 设有变量定义:int a=5,c=4;则(--a==++c)?--a:c++,此时c的存储单元的值为【2】。

参考答案:【1】5【2】6

4.105 执行以下程序后,a=。

int x=10,y=9;

int a,b,c;

a=(x-- == y++) ? x-- : y++;

c=y; 参考答案:【1】10【2】9【3】11

*4.106 设有int x=1,y=0;则以下表达式的值为

x-->(y+x)?10:12.5>y++?'A':'Z'

参考答案:10

参考分析:在本题中x-->(y+x)的实际比较运算是1>0+0为真。

*4.107 设有int x=0,y=1;则以下表达式的值为

x++*x--!='y'?8-4:y

参考答案:4

参考分析:此处x++*x—实际计算为0*0。

4.108 若运行时输入:3 5/<CR>,则以下程序的运行结果是。

main()

{float x,y;

char o;

double r;

scanf("%f %f %c",&x,&y,&o);

switch(o)

{case '+':r=x+y;break;

case '-':r=x-y;break;

case '*':r=x*y;break;

case '/':r=x/y;break;

}

printf("%f",r);

}

参考答案:0.600000

4.109 根据以下嵌套的if语句所给条件,填写switch语句,使它完成相同的功能。

(假设mark的取值在1-100之间)

if语句:

if(mark<60) k=1;

else if(mark<70) k=2;

else if(mark<80) k=3;

else if(mark<90) k=4;

else k=5; switch语句:

switch()

{k=1;break;

case 6 :k=2;break;

case 7 :k=3;break;

case 8 :k=4;break;

【3】k=5;

}

参考答案:【1】mark/10 【2】default: 【3】case 9:case 10:

4.110 设有如下程序段,若grade的值为'C',则输出结果是。

switch(grade)

{case 'A':printf("85-100\n");

case 'B':printf("70-84\n");

case 'C':printf("60-69\n");

case 'D':printf("<60\n");

default:printf("error!\n");

}

参考答案:

60-69

<60

error!

4.111 以下程序段的运行结果是

int x=1,y=0;

switch(x)

{case 1:

switch(y)

{case 0:printf("**1**\n");break;

case 1:printf("**2**\n");break;

}

case 2:printf("**3**\n");

}

参考答案:

**1**

**3**

4.112 根据以下函数关系,对输入的每个x值,计算出相应的y值。请分析程序填空。

main()

{int x,c;

float y;

scanf("%d",&x);

if() c=-1;

else c=switch(c)

{case –1:y=0;break;

case 0:y=x;break;

case 1:y=10;reak;

case 2:case 3:y=-0.5*x+20;break;

default:y=-2;

}

if() printf("y=%f",y);

else printf("error\n");

}

参考答案:【1】x<0 【2】x/10 【3】y!=-2

4.113 以下程序的运行结果是。

main()

{int a=2,b=7,c=5;

switch(a>0)

{case 1:switch(b<0)

{case 1:printf("@");break;

case 2:printf("!");break;

}

case 0:switch(c==5)

{case 0:printf("*");break;

case 1:printf("#");break;

default:printf("#");break;

}

default:printf("&");

}

printf("\n");

}

参考答案:#&

4.114 下面程序的运行结果是。

#include <stdio.h>

main()

{int x=1,y=0,a=0,b=0;

switch(x)

{case 1:switch(y)

{case 0:a++;break;

case 1:b++;break;

}

case 2:a++;b++;break;

}

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

}

参考答案:a=2,b=1

4.115 假设奖金税率如下(a代表奖金,r代表税率)

a<500 r=0%

500≤a<1000 r=5%

1000≤a<2000 r=8%

2000≤a<3000 r=10%

3000≤a r=15%

以下程序对输入的一个奖金数,求税率和应交税款以及实得奖金数(扣除奖金税后)。请分析程序填空。

main()

{float a,r,t,b;

int c;

scanf("%f",&a);

if(a>=3000) c=6;

else c=switch(c)

{case 0:r=0;break;

case 1:r=0.05;break;

case 2:case 3:;break;

case 4:case 5:r=0.1;break;

case 6:r=0.15;break;

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

}

t=a*r;

b=a-t;

printf("r=%f,t=%f,b=%f",r,t,b);

}

参考答案:【1】a/500 【2】r=0.08

4.116 某个自动加油站有'a','b','c'三种汽油,单价分别为1.50,1.35,1.18(元/千克),也提供了―自己加‖和―协助加‖两个服务等级。这样用户可以得到5%或10%的优惠。本程序针对用户输入加油量a,汽油品种b和服务类型c('f'--自动,'m'--自己,'e'--协助),输出应付款m。请分析程序填空。

main()

{float a,r1,r2,m;

char b,c;

scanf("%f %c %c",&a,&b,&c);

swith(b)

{case 'a':r1=1.5;break;

case 'b': ;break;

case 'c':r1=1.18;break;

}

switch(c)

{case 'f':r2=0;break;

case 'm':r2=0.05;break;

case:r2=0.1;break;

}

m=printf("%f",m);

}

参考答案:【1】r1=1.35【2】'e'【3】a*r1*(1-r2)

4.117 以下程序计算某年某月有几天。其中判别闰年的条件是:能被4整除但不能被100整除的年是闰年,能被400整除的年也是闰年。请分析程序填空。

main()

{int yy,mm,len;

printf("year,month=");

scanf("%d %d",&yy,&mm);

switch(mm)

{case 1: case 3: case 5: case 7:case 8:

case 10:case 12:;break;

case 4: case 6: case 9: case 11:len=30;break;

case 2:if(yy%4==0&&yy%100!=0||yy%400==0);

else;

break;

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

}

printf("the length of %d %d is %d\n",yy,mm,len);

} 参考答案:【1】len=31【2】len=29【3】len=28

*4.118 以下程序用以计算y年m1月d1日与同年的m2月d2日之间的天数(m2>=m1),并打印计算结果。若m1=m2且d1=d2则算一天。请分析程序填空。

main()

{int y,m1,d1,m2,d2;

int i,d;

scanf("%d,%d,%d,%d,%d",&y,&m1,&d1,&m2,&d2);

y=(y%4==0y%100!=0y%400==0)?1:0;

d=0-d1;

for(i=m1;i<m2;i++)

switch(i)

{case 1:case 3:case 5: case 7:case 8:

case 10:case 12:d+=31;break;

case 2:d=d+28+y; break;

case 4:case 6:case 9:case 11:}

printf("%d",d+d2+1);

}

参考答案:【1】&&【2】||【3】d=d+30

4.3 编程题

4.119 编制程序,要求输入整数a和b,若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数之和。

参考程序:

main()

{int a,b;

printf("Input a & b:");

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

if (a*a+b*b>100) printf("%d\n",(a*a+b*b)/100);

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

}

4.120 试编程判断输入的正整数是否既是5又是7的整数倍,若是输出yes,否则输出no。 参考程序:

main()

{int a;

printf("Input a:");

scanf("%d",&a);

if (a%5==0&&a%7==0) printf("yes\n");

else printf("no\n");

}

4.121 请编程序,根据以下函数关系,对输入的每个x值,计算出相应的y值。

参考程序:

main()

{float x,y;

printf("Input x:");

scanf("%f",&x);

y=-1;

if(x<0) y=0;

else if(x<=10) y=x;

else if(x<=20) y=10;

else if(x<40) y=0.5*x+20

else y=-1;

if (y==-1) printf("error");

else printf("y=%f\n",y);

}

4.122 输入一个整数,判断它能否被3,5,7整除,并输出以下信息之一:

(1)能同时被3,5,7整除

(2)能被其中两数整除(要指出哪两个)。

(3)能被其中一个数整除(要指出哪一个)。

(4)不能被任何一个整除。

参考程序:

main()

{int m;

printf("Input a number:");

scanf("%d",&m);

if(m%3==0&&m%5==0&&m%7==0)

printf("能同时被3,5,7整除");

else if((m%3==0&&m%5==0)||(m%3==0&&m%7==0)||(m%5==0&&m%7==0)) {printf("能被其中两数整除");

if(m%3==0&&m%5==0) printf("(3,5)");

else if(m%3==0&&m%7==0) printf("(3,7)");

else printf("(5,7)");

}

else if(m%3==0||m%5==0||m%7==0)

{printf("能被其中一个数整除");

if(m%3==0) printf("(3)");

else if(m%5==0) printf("(5)");

else printf("(7)");

}

else printf("不能被任何一个整除");

}

4.123 将以下程序段改用非嵌套的if语句实现。

int s,t,m;

t=(int)(s/10);

switch(t)

{case 10:m=5;break;

case 9:m=4;break;

case 8:m=3;break;

case 7:m=2;break;

case 6:m=1;break;

default: m=0;

}

参考程序:

m=0;

if(s>=100&&s<110) m=5;

if(s>=90&&s<100) m=4;

if(s>=80&&s<90) m=3;

if(s>=70&&s<80) m=2;

if(s>=60&&s<70) m=1;

4.124 用switch编程实现:

-1 (x<0)

y={0 (x=0)

1 (x>0)

参考程序:

void main()

{float x;

int y;

printf("Input a x:");

scanf("%f",&x);

switch(x<0)

{case 1:y=-1;break;

case 0:switch(x==0)

{case 1:y=0;break;

case 0:y=1;

}

}

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

}

4.125 将以下程序段改用嵌套的if语句实现。

int s,t,m;

t=(int)(s/10);

switch(t)

{case:m=5;break;

case 9:m=4;break;

case 8:m=3;break;

case 7:m=2;break;

case 6:m=1;break;

default: m=0;

}

参考程序:

if(s>=110&&s<60) m=0

else if(s<110) m=5;

else if(s<100) m=4;

else if(s<90) m=3;

else if(s<80) m=2;

else m=1;

4.126 请将以下语句改写成为switch语句。

if(s>0&&s<=10)

if(s>=3&&s<=6) x=2;

else if(s>1||s>8) x=3;

else x=1;

else x=0;

参考程序:

switch(s>0&&s<=10)

{case 0:x=0;break;

case 1:switch(s>=3&&s<=6)

{case 1:x=2;break;

case 0:switch(s>1||s>8)

{case 1:x=3;break;

case 0:x=1;break;

}

}

}

4.127编程实现以下功能:读入两个运算数(data1和data2)及一个运算符(op),计算表达式data1 op data2的值,其中op可为+,-,*,/(用switch语句实现)。

参考程序:

#include<stdio.h>

#include<stdlib.h>

main()

{float data1,data2,result;

char op;

printf("Type in your expression:");

scanf("%f %c %f",&data1,&op,&data2);

switch(op)

{case '+':result=data1+data2;break;

case '-':result=data1-data2;break;

case '*':result=data1*data2;break;

case '/':if(data2==0){printf("\nDivision by zero!");exit(1);}

result=data1/data2;break;

}

printf("This is %6.2f %c %6.2f=%6.2f\n",data1,op,data2,result);

}

4.128 编一程序,对于给定的一个百分制成绩,输出相应的五分值成绩。设90分以上为'A',80-89分为'B',70-79分为'C',60-69分为'D',60分以下为'E'(用switch语句实现)。 参考程序:

main()

{int score=-1,temp;

char grade;

while(score>=0&&score<=100)

{ printf("Enter score:");

scanf("%d",&score);

}

temp=score/10;

switch(temp)

{case 0:case 1:case 2:case 3:case 4:case 5:grade='E';break;

case 6:grade='D';break;

case 7:grade='C';break;

case 8:grade='B';break;

case 9:case 10:grade='A';

}

printf("score=%d,grade=%c\n",score,grade);

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

第五章 循环控制

5.1 选择题

5.1 设有程序段

int k=10;

while(k=0) k=k-1;

则下面描述中正确的是 。

A)while循环执行10次 B)循环是无限循环

C)循环体语句一次也不执行 D)循环体语句执行一次 参考答案:C

5.2设有以下程序段

int x=0,s=0;

while(!x!=0) s+=++x;

printf("%d",s);

则。

A)运行程序段后输出0 B)运行程序段后输出1

C)循环的控制表达式不正确 D)程序段执行无限次 参考答案:B

5.3语句while(!E);中的!E等价于。

A)E= =0 B)E!=1 C)E!=0 D)E= =1

参考答案:A

5.4下面程序段的运行结果是。

a=1;b=2;c=2;

while(a<b<c){t=a;a=b;b=t;c--;}

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

A)1,2,0 B)2,1,0 C)1,2,1 D)2,1,1

参考答案:A

5.5 下面程序段的运行结果是

x=y=0;

while(x<15)

y++,x+=++y;

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

A)20,7 B)6,12 C)20,8 D)8,20

参考答案:D

5.6下面程序段的运行结果是。

int n=0;

while(n++<=2);

printf("%d",n);

A)2 B)3 C)4 D)语法错误

参考答案:C

5.7 设有程序段

t=0;

while(printf("*"))

{t++;

if(t<3) break;

下面描述正确的是 。

A)其中循环控制表达式与0等价 B)其中循环控制表达式与'0'等价

C)其中循环控制表达式是不合法的 D)以上说法都不对

参考答案:B

参考分析:printf的返回值为数值1,恒真,故与B等价。

5.8 下面程序的功能是将从键盘输入的一对数,由小到大排序输出。当输入一对相等数时结束循环,请选择填空。

#include <stdio.h>

main()

{int a,b,t;

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

)

{if (a>b)

{t=a;a=b;b=t;}

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

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

}

}

A)!a=b B)a!=b C)a==b D)a=b

参考答案:B

5.9下面程序的功能是从键盘输入的一组字符中统计出大写字母的个数m和小写字母的个数n,并输出m,n中的较大者

#include "stdio.h"

main()

{int m=0,n=0;

char c;

while ((!='\n')

{ if(c>='A'&&c<='Z') m++;

if (c>='a'&&c<='z') n++;

}

printf("%d",m<n?【1】A)c=getchar() B)getchar() C)c=gets() D)scanf("%c",c)

【2】A)m:n B)m:m C)n:n D)n:m 参考答案:【1】A【2】D

5.10下面程序的功能是将小写字母变成对应大写字母后的第二个字母,其中y变成A,z变成B。请选择填空。 #include "stdio.h"

main()

{ char c;

while ((c=getchar())!='\n')

{if (c>='a'&&c<='z')

{;

if (c>'Z')

【2】;

}

printf("%c",c);

}

【1】A)c+=2 B)c-=32 C)c=c+32+2 D)c-=30

【2】A)c='B' B)c='A' C)c-=26 D)c=c+26 参考答案:【1】D【2】 C

5.11下面程序的功能是在输入一批正整数中求出最大者,输入0结束循环,请选择填空 。 #include "stdio.h"

main()

{int a,max=0;

scanf("%d",&a);

{if (max<a) max=a;

scanf("%d",&a);

}

printf("%d",max);}

A)a= =0 B)a C)a= =1 D)!a 参考答案:B

5.12 下面程序的运行结果是

#include <stdio.h>

main()

{int num=0;

while(num<=2)

{num++;

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

}

}

A)1 B)1 C)1 D)1

2 2 2

3 3

4

参考答案:C

5.13若运行以下程序时,从键盘输入2473<CR>(<CR>表示回车),则下面程序的运行结果是 。

#include "stdio.h"

{int c;

while ((c=getchar())!='\n')

switch (c-'2')

{case 0:

case 1: putchar(c+4);

case 2:putchar(c+4);break;

case 3:putchar(c+3);

default:putchar(c+2);break;

}

printf("\n");}

A)668977 B)668966 C)66778777 D)6688766

参考答案:A

5.14 C语言中while和do while循环的主要区别是。

A)do-while的循环至少无条件执行一次。

B)while循环控制条件比do-while的循环控制条件严格。

C)do-while允许从外部转入到循环体内。

D)do-while的循环体不能是复合语句。

参考答案:A

5.15 以下能正确计算10!的程序段是。

A)do {i=1;s=1; B)do{i=1;s=0;

s=s*i; s=s*i;

i++; i++;

}while(i<=10); }while(i<=10);

C)i=1;s=1; D)i=1;s=0;

do{s=s*i; do{s=s*i;

i++; i++;

}while(i<=10); }while(i<=10);

5.16 以下程序段

x=-1;

do x=x*x;

while(!x);

A)是死循环 B)循环执行两次

C)循环执行一次 D)有语法错误

参考答案:C

5.17 以下描述中正确的是

A)由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句。

B)do-while循环由do开始,用while结束,在while(表达式)后面不能写分号。

C)在do-while循环体中,一定要有能使while后面表达式的值变为零("假")的操作。

D)do-while循环中,根据情况可以省略while。

参考答案:C

5.18 若有语句如下,则程序段的输出是

int x=3;

do {printf("%d",x-=2);}while(!(--x)); A)1 B)1和-2 C)3和0 D)死循环

*5.19下面程序的功能是计算正整数2345的各位数字平方和。

#include "stdio.h" main()

{int n,sum=0;

n=2345;

do {sum=sum+ n=;

} while(n);

printf("sum=%d",sum);}

【1】A)n%10 B)(n%10)*(n%10) C)n/10 D)(n/10)*(n/10)

【2】A)n/1000 B)b/100 C)n/10 D)n%10

参考答案:【1】B 【2】C

5.20 下面程序是从键盘输入学号,然后输出学号中百位数是3的学号,输入0时结束循环。请选择填空。

#include <stdio.h>

main()

{long int num;

scanf("%ld",&num);

do

{if( scanf("%ld",&num);

}while(;

}

【1】A)num%100/10==3 B)num/100%10==3

C)num%10/10==3 D)num/10%10==3

【2】A)!num B)num>0==0 C)!num==0 D)!num!=0

参考答案:【1】B 【2】C

5.21 等比数列的第一项a=1,公比q=2,下面程序的功能是求满足前n项和小于100的最大n,请选择填空。

#include <stdio.h>

main()

{int a,q,n,sum;

a=1;q=2;n=sum=0;

do

{;

++n;a*=q;

}while(sum<100);

【2】;

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

}

【1】A)sum++ B)sum+=a C)sum*=a D)a+=sum

【2】A)n=n-2 B)n=n C)n++ D)n-=1 参考答案:【1】B 【2】D

5.22 下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除。请选择填空。 #include <stdio.h>

main()

{int i=0,j,k;

do

);

j=k/11;

printf("316=13*%d+11*%d",i,j);

}

A)k/11 B)k%11 C)k/11==0 D)k%11==0 参考答案:B

5.23 下面程序的运行结果是

#include <stdio.h>

main()

{int y=10;

do {y--;}while(--y);

printf("%d\n",y--);

}

A)-1 B)1 C)8 D)0

参考答案:D

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

5.24若运行以下程序时,从键盘输入Adescriptor<CR>(<CR>表示回车),则下面程序的运行结果是 。

#include <stdio.h>

main()

{ char c;

int v0=0,v1=0,v2=0;

do {

switch(c=getchar())

{case 'a':case'A':

case 'e':case'E':

case 'i':case 'I':

case 'o':case 'O':

case 'u':case 'U':v1+=1;

default:v2+=1;

}

v0+=1;

} while(c!='\n');

printf("v0-%d,v1=%d,v2=%d\n",v0,v1,v2);

}

A)v0=7,v1=4,v2=7 B)v0=11,v1=4,v2=11

C)v0=12,v1=4,v2=11 D)v0=12,v1=4,v2=12

参考答案:D

5.25 下面程序的运行结果是

#include <stdio.h>

main()

{int a=1,b=10;

do

{b-=a;a++;}while(b--<0);

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

}

A)a=3,b=11 B)a=2,b=8 C)a=1,b=-1 D)a=4,b=9

参考答案:B

5.26下面有关for循环的正确描述是

A)for循环只能用于循环次数已经确定的情况

B)for循环是先执行循环体语句,后判断表达式

C)在for循环中,不能用break语句跳出循环体

D)for循环的循环体可以包括多条语句,但必须用花括号括起来

参考答案:D

5.27对for(表达式1; ;表达式3)可理解为

A) for (表达式1;0;表达式3) B) for (表达式1;1;表达式3)

C) for (表达式1;null;表达式3) D)缺少一个表达式

参考答案:B

5.28 若i为整型变量,则以下循环执行次数是。

for (i=2;i==0;)printf("%d",i--);

A)无限次 B)0次 C)1次 D)2次

参考答案:B

5.29 以下for循环的执行次数是。

for(x=0,y=0;(y=123)&&(x<4);x++);

A)是无限循环 B)循环次数不定 C)4次 D)3次

参考答案:C

5.30 以下不是无限循环的语句为

A)for(y=0,x=1;x>++y;x=i++) i=x;

B)for(;;x++=i);

C)while(1){x++;}

D)for(i=10;;i--) sum+=i;

参考答案:A

5.31下面程序段的运行结果是。

for(y=1;y<10;)y=((x=3*y,x+1),x-1);

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

A)x=27,y=27 B)x=12,y=13 C)x=15,y=14 D)x=y=27

参考答案:C

5.32下面程序段的运行结果是。

for(x=3;x<6;x++) printf((x%2)?("**%d"):("##%d\n")),x);

A)**3 B)##3 C)##3 D)**3##4

##4 **4 **4##5 **5

**5 ##5 参考答案:D

*5.33以下不是无限循环的语句为。

A)int i=100;

while(1)

{i=i%100+1;

if(i>100)break;

}

B)for(;;);

C)int k=0;

do{++k;}while(k>=0);

D)int s=36;

while(s);--s;

参考答案:C

5.34 执行语句for(i=1;i++<4;);后变量的值为。

A)3 B)4 C)5 D)不定 参考答案:C

5.35 有一堆零件(100到200之间),如果分成4个零件一组则多出2个零件;若分成7个零件一组,则多3个零件;若分成9个零件一组,则多出5个零件。下面程序是求这堆零件总数,请选择填空。

#include <stdio.h>

main()

{int i;

for(i=100;i<200;i++)

if((i-2)%4==0)

if(!((i-3)%7))

)

printf("%d",i);

}

A)i%9=5 B)i%9!=5 C)(i-5)%9!=0 D)i%9==5

参考答案:D

5.36 下面程序的功能是计算1至50中是7的倍数的数值之和,请选择填空。

#include<stdio.h>

main()

{int i,sum=0;

for(i=1;i<=50;i++)

if( )sum+=i;

printf("%d",sum);

}

A)(int)(i/7)==i/7 B)(int)i/7==i/7 C)i%7!=0 D)i%7==0

参考答案:D

5.37 下面程序的功能是计算1至10之间的奇数之和和偶数之和。请选择填空。

#include<stdio.h>

main()

{int a,b,c,i;

a=c=0;

for(i=0;i<=10;i+=2)

{a+=i;

;

c+=b;

}

printf("偶数之和=%d\n",a);

printf("奇数之和=%d\n", );

}

【1】A)b=i-- B)b=i+1 C)b=i++ D)b=i-1

【2】A)c-10 B)c C)c-11 D)c-b

参考答案:【1】B 【2】CD

参考分析:奇数累加和根据题目的要求多计算了11,需要从累加和中去除,但退出循环后b变量的值也是11,故【2】中的D也正确。

5.38 下面程序的运行结果是

#include<stdio.h>

main()

{int i;

for(i=1;i<=5;i++)

switch(i%5)

{case 0:printf("*");break;

case 1:printf("#");break;

default:printf("\n");break;

case 2:printf("&");

}

}

A)#&&* B)#& C)# D)#&

& &

&* & *

&* 参考答案:B

5.39 下面程序的运行结果是

#include<stdio.h>

main()

{int x,i;

for(i=1;i<=100;i++)

{x=i;

if(++x%2==0)

if(++x%3==0)

if(++x%7==0)

printf("%3d",x);

}

}

A) 39 81 B)42 84 C)26 68 D)28 70 参考答案:D

5.40 下面程序段的功能是计算1000!的末尾含有多少个零。请选择填空。(提示:只要计算出1000!中含有因子5的个数即可)

for(k=0,i=5;i<=1000;i+=5)

{m=i;

){k++;m=m/5;}

A)m%5=0 B)m=m%5==0 C)m%5==0 D)m%!=0

5.41 下面程序的功能是求算式xyz+yzz=532中x,y,z的值(其中xyz和yzz分别表示一个三位数),请选择填空。

#include<stdio.h>

main()

{int x,y,z,i,result=532;

for(x=1;x<10;x++)

for(y=1;y<10;y++)

for(;z<10;z++)

{i=100*x+10*y+z+100*y+10*z+z;

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

}

}

【1】A)z=x B)z=1 C)z=0 D)z=y

【2】A)i/result==1 B)i=result C)i!=result D)i==result

参考答案:【1】CB 【2】D

参考分析:【1】由于z不需要作为百位数,因此可以为0。若更进一步考虑到z为两个数的末尾,2倍的z不可能为0,故z也不可能为0,所以B也应当正确。

**5.42 下面程序是对输出一个正整数等差数列的前十项,此数列前四项之和及积分别是26和880,请选择填空。

#include<stdio.h>

main()

{int a,d,i,s,f,x;

for (a=1;a<=6;a++)

for(d=1;;d++)

{s=0;f=1;x=a;

for(i=1;i<=4;i++)

{s=s+x;

f=f*x;

x=x+d;

}

if(s==26&&f==880)

for(i=0;i<10;i++)

printf("%3d", ;

}

}

【1】A)d<=a B)空 C)d<=5 D)d<a

【2】a+i*d B)i*d C)a+(i+1)*d D)a+d

参考答案:【1】C【2】A

5.43 下面程序的运行结果是

#include<stdio.h>

main()

{int i,b,k=0;

for(i=1;i<=5;i++)

{b=i%2;

while(b-->=0) k++;

}

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

}

A)3,-1 B)8,-1 C)3,0 D)8,-2

参考答案:D

5.44 以下正确的描述是

A)continue语句的作用是结束整个循环的执行。

B)只能在循环体内和switch语句体内使用break语句。

C)在循环体内使用break语句或continue语句的作用相同。

D)从多层循环嵌套中退出时,只能使用goto语句。 参考答案:B

5.45 下面程序段

for(t=1;t<=100;t++)

{scanf("%d",&x);

if(x<0)continue;

printf("%3d",t);

}

A)当x<0时整个循环结束 B)x>=0时什么也不输出

C)printf函数永远也不执行 D)最多允许输出100个非负整数 参考答案:D

5.46下面程序段。

x=3;

do{y=x--;

if(!y) {printf("*"); continue;}

printf("#");

}while(1<=x<=2);

A)将输出## B)将输出###*

C)是死循环 D)含有不合法的控制表达式

参考答案:C

5.47 以下是死循环的程序段是

A)for(i=1; ; )

if(++i%2==0) continue;

if(++i%3==0) break;

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

}

B)i=32767;

do{if(i<0) break;}while(++i);

C)for(i=1; ; ) if(++i<10) continue;

D)i=1;

while(i--);

参考答案:C

5.48 以下描述正确的是

A)goto语句只能用于退出多层循环。

B)switch语句中不能出现continue语句。

C)只能用continue语句来中止本次循环。

D)在循环中break语句不能独立出现。

参考答案:C

5.49 与下面程序段等价的是

for(n=100;n<=200;n++)

{if(n%3==0) continue;

printf("%4d",n);

}

A)for(n=100;(n%3)&&n<=200;n++) printf("%4d",n);

B)for(n=100;(n%3)||n<=200;n++) printf("%4d",n);

C)for(n=100;n<=200;n++) if(n%3!=0) printf("%4d",n);

D) for(n=100;n<=200;n++)

{if(n%3) printf("%4d",n);

else continue;

break;

} 参考答案:C

**5.50 下面程序的功能是将从键盘输入的偶数写成两个素数之和。请选择填空。

#include <stdio.h>

#include <math.h>

main()

{int a,b,c,d;

scanf("%d",&a);

for(b=3,b<=a/2;b+=2)

{for(c=2;c<=sqrt(b);c++) if(b%c==0) break;

;else continue;

for(c=2;c<=sqrt(d);c++) if(d%c==0) break;

if(c>sqrt(d)) printf("%d=%d+%d\n",a,b,d);

}

}

A)a+b B)a-b C)a*b D)a/b

参考答案:B

5.51下面程序的运行结果是。

#include<stdio.h>

main()

{int k=0;char c='A';

do

{switch(c++)

{case 'A':k++;break;

case 'B':k--;

case 'C':k+=2;break;

case 'D':k=k%2;break;

case 'E':k=k*10;break;

default:k=k/3;

}

k++;

}while(c<'G');

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

}

A)k=3 B)k=4 C)k=2 D)k=0

参考答案:B

5.52 若运行以下程序时,从键盘输入3.6 2.4<CR>,则下面程序的运行结果是 #include<stdio.h>

#include<math.h>

main()

{float x,y,z;

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

z=x/y;

while(1)

{if(fabs(z)>1.0) {x=y;y=z;z=x/y;}

else break;

}

printf("%f\n",y);

}

A)1.500000 B)1.600000 C)2.000000 D)2.400000

参考答案:B

5.53下面程序的运行结果是。

#include<stdio.h>

main()

{int a,b;

for(a=1,b=1;a<=100;a++)

{if(b>=20) break;

if(b%3==1){b+=3;continue;}

b-=5;

}

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

}

A)7 B)8 C)9 D)10

参考答案:B

5.54下面程序的运行结果是。

#include<stdio.h>

main()

{int i,j,x=0;

for(i=0;i<2;i++)

{x++;

for(j=0;j<=3;j++)

{if(j%2) continue;

x++;

x++;

}

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

}

A)x=4 B)x=8 C)x=6 D)x=12

参考答案:B

5.55下面程序的运行结果是。

#include<stdio.h>

main()

{int i;

for(i=1;i<=5;i++)

{if(i%2) printf("*");

else continue;

printf("#");

}

printf("$\n");

}

A)*#*#*#$ B)#*#*#*$ C)*#*#$ D)#*#*$

参考答案:A

5.56下面程序的运行结果是。

main()

{int i,j,a=0;

for(i=0;i<2;i++)

{for(j=0;j<4;j++)

{if(j%2) break;

a++;

}

a++;

}

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

}

A)4 B)5 C)6 D)7

参考答案:A

5.2 填空题

5.57 下面程序段是从键盘输入的字符中统计数字字符的个数,当输入换行符时结束循环。请分析程序填空。

int n=0,c;

c=gethar();

while()

{if( c=getchar();

} 参考答案:【1】c!='\n' 【2】c>='0'&&c<='9'

5.58 下面程序的功能是用公式π2/6≈1/12+1/22+1/32+...+1/n2求π的近似值,直到最后一项的值小于10-6为止,请分析程序填空。

#include<math.h>

#include<stdio.h>

{long i=1;

pi=0;

while(i*i>=1e6)

{pi=;i++;}

pi=sqrt(6.0*pi);

printf("pi=%10.6f\n",pi);

} 参考答案:【1】double 【2】pi+1/i/i

5.59 有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完?请分析程序填空。

#include<stdio.h>

main()

{int day,x1,x2; day=0;x1=1020;

while(){x2=;x1=x2;day++;}

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

}

参考答案:【1】x1 【2】x1/2-2

5.60 下面程序的功能是用―辗转相除法‖求两个正整数的最大公约数。请分析程序填空。

#include<stdio.h>

main()

{int r,m,n;

scanf("%d%d",&m,&n);

if(m<n) ;

r=m%n;

while(r){m=n;n=r;r=;}

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

}

参考答案:【1】r=m,m=n,n=r 【2】m%n

5.61 执行以下程序时输入right?<CR>,则下面程序的运行结果是

#include <stdio.h>

main()

{char c;

while((c=getchar())!='?') putchar(++c); }

参考答案:sjhiu

5.62下面程序的运行结果是。

#include<stdio.h>

main()

{int a,s,n,count;

a=2;s=0;n=1;count=1;

while(count<=7) {n=n*a;s=s+n;++count;}

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

}

参考答案:s=254

参考分析:本题是计算21+22+...+27之和。 5.63当运行以下程序,用户输入China#<CR> 程序的运行结果是

#include "stdio.h"

main()

{int v1=0,v2=0;

char ch;

while ((ch=getchar())!='#')

switch(ch)

{case 'a':

case 'h':

default:v1++;

case 'o': v2++;

}

printf("%d,%d\n",v1,v2);}

参考答案:5,5

5.64 执行下面程序段后,k值是。

k=1;n=263;

do{k*=n%10;n/=10;}while(n);

参考答案:36

5.65 下面程序段中循环体的执行次数是

a=10;b=0;

do{b+=2;a-=2+b;}while(a>=0);

参考答案:3次

5.66下面程序段的运行结果是。

x=2;

do{printf("*");x--;}while(!x==0);

参考答案:**

5.67下面程序段的运行结果是。

i=1;a=0;s=1;

do{a=a+s*i;s=-s;i++;}while(i<=10);

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

参考答案:a=-5

5.68 下面的程序是用do while语句求1至1000之间满足―用3除余2;用5除余3;用7除余2"的数,且一行只打印五个数。请分析程序填空。

#include<stdio.h>

main()

{int i=1,j=0;

do

{if( {printf("%4d",i);

j=j+1;

if() printf("\n");

}

i=i+1;

}while(i<1000);

}

参考答案:【1】i%3==2&&i%5==3&&i%7==2 【2】j%5==0

5.69 下面程序的功能是统计正整数的各位数字中零的个数,并求各位数字中的最大者。请分析程序填空。

#include<stdio.h>

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

{int n,count,max,t;

count=max=0;

scanf("%d",&n);

do

{t=;

if(t==0) ++count;

else if(max<t) n/=10;

}while(n);

printf("count=%d,max=%d",count,max);

}

参考答案:【1】n%10 【2】max=t

5.70 等差数列的第一项a=2,公差d=3,下面程序的功能是在前n项和中,输出能被4整除的所有数的和。请分析程序填空。

#include<stdio.h>

main()

{int a,d,sum;

a=2;d=3;sum=0;

do

{sum+=a;

a+=d;

)printf("%4d\n",sum);

}while(sum<200);

}

参考答案:sum%4==0

*5.71 下面程序的功能是求1111的个、十、百位上的数字之和。请分析程序填空。

#include<stdio.h>

main()

{int i,s=1,m=0;

for(i=1;i<=11;i++) s=s*11%1000;

do {m+=;}while(s);

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

}

参考答案:【1】s%10 【2】s/10

参考分析:本题各位数的分离,没有什么新意,一个十进制大数的人为―高位溢出‖这种技巧,值得学习和模仿。

5.72 当运行以下程序时,从键盘输入1 2 3 4 5 -1<CR>,则下面程序的运行结果是

#include<stdio.h>

main()

{int k=0,n;

do{scanf("%d",&n);k+=n;}while(n!=-1);

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

}

参考答案:k=14 n=-1

5.73下面程序的运行结果是。

#include<stdio.h>

main()

i=x=y=0;

do{++i;

if(i%2!=0){x=x+i;i++;}

y=y+i++;

}while(i<=7);

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

}

参考答案:x=1,y=20

5.74下面程序的运行结果是。

#include<stdio.h>

main()

{int a,b,i;

a=1;b=3;i=1;

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

a=(b-a)*2+b;

b=(a-b)*2+a;

if(i++%2==0) printf("\n");

}while(b<100);

}

参考答案:1,3,7,15,

31,63,

5.75 当从键盘输入-1 0<CR>,则以下程序的运行结果是。

#include<stdio.h>

main()

{int a,b,m,n;

m=n=1;

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

do{if(a>0) {m=2*n;b++;}

else {n=m+n;a+=2;b++;}

}while(a==b);

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

}

参考答案:m=4 n=2

5.76下面程序段是找出整数的所有因子,请分析程序填空。

scanf("%d",&x);

if (x%i==0) printf("%3d",i);

参考答案:i<=x

5.77 鸡兔同笼,头30,脚90,下面程序段计算鸡兔各有多少只。请分析程序填空。

for(x=1;x<=30;x++ )

{y=30-x;

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

}

参考答案:2*x+4*y==90

5.78 下面程序段的运行结果是

for(a=1,i=-1;-1<=i<1;i++)

{a++;printf("%d,",a);}

printf("%2d",i);

参考答案:-1

5.79 循环语句for(i=0;i<3;i++) printf("*");表达式i=0i++次。

参考答案:【1】1 【2】3

5.80 下面程序的功能是计算1-3+5-7+...-99+101的值,请分析程序填空。

#include<stdio.h>

main()

{int i,t=1,s=0;

for(i=1;i<=101;i+=2)

{;s=s+t;;}

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

}

参考答案:【1】t=t*i 【2】t=-t/i

5.81 以下程序是用梯形法求sin(x)*cos(x)的定积分。求定积分的公式为:

s=h/2(f(a)+f(b))+h∑f(xi) (i=1~n-1)

其中xi=a+ih,h=(b-a)/n。设a=0,b=1.2为积分上下限,积分区间分隔数n=100,请分析程序填空。

#include<stdio.h>

#include<math.h>

main()

{int i,n;double h,s,a,b;

printf("Input a,b:");

scanf("%lf%lf",);

n=100;h= s=0.5*(sin(a)*cos(a)+sin(b)*cos(b));

for(i=1;i<=n-1;i++) s+= s*=h;

printf("s=%10.4lf\n",s);

}

参考答案:【1】&a,&b 【2】(b-a)/n 【3】sin(a+i*h)*cos(a+i*h)

5.82 以下程序的功能是根据公式e=1+1/1!+1/2!+...1/n!求e的近似值,精度要求为10-6。请分析程序填空。

#include<stdio.h>

main()

{int i;double e,new;

;new=1.0;

for(i=1;;i++)

{new/=(double)i; e+=new;}

printf("e=%lf\n",e);

}

参考答案:【1】e=1 【2】new>1e-6

*5.83 下面程序的运行结果是

#include<stdio.h>

main()

{int i,t,sum=0;

for(t=i=1;i<=10;)

{sum+=t;++i;

if(i%3==0) t=-i;

else t=i;

}

printf("sum=%d",sum);

}

参考答案:sum=19

参考分析:此题为1+2-3+4+5-6+7+8-9+10之和。

*5.84下面程序的运行结果是。

#include<stdio.h>

main()

{int i;

for(i=1;i<=5;i++)

switch(i%2)

{case 0:i++;printf("#");break;

case 1:i+=2;printf("*");

default:printf("\n");

}

}

参考答案:*

#

参考分析:由于在程序中改变了循环变量的值,导致循环只能循环2次。

5.85下面程序的运行结果是。

#include<stdio.h>

main()

{int i,j=4;

for(i=j;i<=2*j;i++)

switch(i/j)

{case 0:case 1:printf("*");break;

case 2:printf("#");

}

}

参考答案:****#

5.86 下面程序的功能是求出用数字0至9可以组成多少个不重复的三位偶数。请分析程序填空。

#include<stdio.h>

main()

{int n=0,i,j,k;

for(i=1;i<=9;i++)

for(k=0;k<=8; if(k!=i)

for(j=0;j<=9;j++)

if() n++;

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

}

参考答案:【1】k+=2 【2】i!=j&&k!=j

5.87 下面程序的功能是输出1至100之间每位数的乘积大于每位数的和的数,请分析程序填空。

#include<stdio.h>

main()

{int n,k=1,s=0,m;

for(n=1;n<=100;n++)

{k=1;s=0;

;

while()

{k*=m%10;

s+=m%10;

;

}

if(k>s) printf("%3d",n);

}

}

参考答案:【1】m=n 【2】m 【3】m=m/10

*5.88 下面程序的功能是求1000以内的所有完全数。说明:一个数如果恰好等于它的因子之和(除自身外),则称该数为完全数。例如:6=1+2+3。

#include<stdio.h>

main()

{int a,i,m;

for(a=1;a<=1000;a++)

{for( if(!(a%i)) ;

if(m==a) printf("%4d",a);

}

}

参考答案:【1】i=1,m=0 【2】m=m+i

5.89 下面程序的功能是完成用一元人民币兑换一分、两分、五分零币的所有兑换方案。请分析程序填空。

#include<stdio.h>

main()

{int i,j,k,l=1;

for(i=0;i<=20;i++)

for(j=0;j<=50;j++)

{k=;

if()

{printf(" %2d %2d %2d ",i,j,k);

l=l+1;

if(l%5==0) printf("\n");

}

}

}

参考答案:【1】100-5*i-2*j 【2】k>=0

5.90 下面程序的功能是从三个红球、五个白球、六个黑球中任意取出八个球,且其中必须有白球,输出所有可能的方案。请分析程序填空。

#include<stdio.h>

main()

{int i,j,k;

printf("\n hong bai hei\n");

for(i=0;i<=3;i++)

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

for(;j<=5;j++)

{k=8-i-j;

if() printf(" %3d %3d %3d\n",i,j,k);

}

}

参考答案:【1】j=1 【2】k<7

*5.91 若从键盘输入65 14<CR>,则下面程序的运行结果是。

#include<stdio.h>

main()

{int m,n;

printf("Enter m,n:");

scanf("%d%d",&m,&n);

while(m!=n)

{while(m>n) m-=n;

while(n>m) n-=m;

}

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

}

参考答案:m=1

参考分析:这是一种计算两个整型数最大公约数的一种算法。

5.92 下面程序的运行结果是

#include<stdio.h>

main()

{int y=2,a=1;

while(y--!=-1)

{do {a*=y; a++;}while(y--);}

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

}

参考答案:1,-2

5.93 下面程序的运行结果是

#include<stdio.h>

main()

{int i,j;

for(i=0;i<=3;i++)

{for(j=0;j<=5;j++)

if(i==0||j==0||i==3||j==5) printf("*");

else printf(" ");

printf("\n");

}

}

参考答案:

******

* *

* *

******

5.94下面程序的运行结果是。

#include<stdio.h>

main()

{int i,j;

for(i=4;i>=1;i--)

{for(j=1;j<=i;j++) putchar('#');

for(j=1;j<=4-i;j++) putchar('*');

putchar('\n');

}

}

参考答案:

####

###*

##**

#***

5.95下面程序的运行结果是。

#include<stdio.h>

main()

{int i,k=0;

for(i=1; ;i++)

{k++;

while(k<i*i)

{k++;

if(k%3==0) goto loop;

}

}

loop:printf("%d,%d",i,k);

}

参考答案:2,3

5.96 下面程序段的运行结果是

i=1;s=3;

do{s+=i++;

if(s%7==0) continue;

else ++i;

}while(s<15);

printf("%d",i);

参考答案:8

5.97 若用0至9之间不同的三个数构成一个三位数,下面程序将统计出共有多少种方法。请分析程序填空。

#include<stdio.h>

main()

{int i,j,k,count=0;

for(i=1;i<=9;i++)

for(j=0;j<=9;j++)

if()continue;

else for(k=0;k<=9;k++)

if() count++;

printf("%d",count);

}

参考答案:【1】i==j 【2】k!=i&&k!=j

5.98 下面程序的功能是计算100至1000之间有多少个数其各位数字之和是5。请分析程序填空。

#include<stdio.h>

main()

{int i,s,k,count=0;

for(i=100;i<=1000;i++)

{s=0;k=i;

while(){s+=k%10;k= if(s!=5) ;

else count++;

}

printf("%d",count);

}

参考答案:【1】k 【2】k/10 【3】continue

5.99 下面程序的功能是从键盘输入的10个整数中,找出第一个能被7整除的数。若找到,打印此数后退出循环;若未找到,打印―not exist‖。请分析程序填空。

#include <stdio.h>

main()

{int i,a;

for(i=1;i<=10;i++)

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

if(a%7==0) {printf("%d",a); ;}

}

if() printf("not exist\n");

}

参考答案:【1】break 【2】i>10

5.100 下面程序的功能是输出100以内个位数为6且能被3整除的所有数。请分析程序填空。

#include<stdio.h>

main()

{int i,j;

for(i=0;;i++)

{j=i*10+6;

if() continue;

printf("%d",j);

}

}

参考答案:【1】i<=9 【2】j%3

5.101 下面程序的运行结果是

#include<stdio.h>

main()

{int i=1;

while(i<=15)

if(++i%3!=2) continue;

else printf("%d ",i);

printf("\n");

}

参考答案:2 5 8 11 14

5.102下面程序的运行结果是。

#include<stdio.h>

main()

{int i,j,k=19;

while(i=k-1)

{k-=3;

if(k%5==0){i++;continue;}

else if(k<5) break;

i++;

}

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

}

参考答案:i=6,k=4

5.103下面程序的运行结果是。

#include<stdio.h>

main()

{int a=10,y=0;

do

{a+=2;y+=a;

if(y>50) break;

}while(a=14);

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

}

参考答案:a=16 y=60

5.104下面程序的运行结果是。

#include<stdio.h>

main()

{int i=5;

do

{switch(i%2)

{case 4:i--;break;

case 6:i--;continue;

}

i--;i--;

printf(%d ",i);

}while(i>0);

}

参考答案:3 1 -1

5.3 编程题

5.105 每个苹果0.8元,第一天买2个苹果,第二天开始买前一天的2倍,直至购买的苹果个数达到不超过100的最大值。编写程序求每天平均花多少钱。

参考程序:

main()

{int day=0,buy=2;

float sum=0,ave;

do

{sum=sum+0.8*buy;

day++;buy=buy*2;

}while(buy<=100);

ave=sum/day;

printf("average=%f\n",ave);

}

5.106 编写程序,找出1至99之间的全部同构数。同构数是这样一组数:它出现在平方数的右边。例如,5是25右边的数,25是625右边的数,5和25就是同构数。 参考程序:

main()

{int i;

for(i=1;i<100;i++)

if(i*i%10==i||i*i%100==i) printf("%3d",i);

}

5.107 编写程序,求一个整数任意次方的最后三位数。即求xy值的最后三位数,要求x,y从键盘输入。

参考程序:

main()

{int x,y,i,s=1;

printf("Input x and y:");

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

for(i=1;i<=y;i++)

s=s*x%1000;

printf("The last 3 digit of %d*%d is:%d\n",x,y,s);

}

5.108 编写程序,从键盘输入6名学生的五门成绩,分别统计出每个学生的平均成绩。 参考程序:

main()

{int i,j;

float s,sum,ave;

for(i=0;i<6;i++)

{sum=0;

for(j=1;j<=5;j++)

{scanf("%f",&s);

sum=sum+s;

}

ave=sum/5;

printf("No.%d ave=%6.2f\n",i+1,ave);

}

}

第六章 数组

6.1 选择题

6.1在c语言中,引用数组元素时,其数组下标的数据类型是。

A)整型常量 B)整型表达式

C)整型常量或整型表达式 D)任何类型的表达式

参考答案:C

参考分析:严格的说法应当是常量表达式。

6.2以下对一维数组a的正确说明是。

A) int n; scanf("%d",&n); int a[n]; B)int n=10,a[n];

C) int a(10); D)#define SIZE 10

int a[SIZE];

参考答案:D

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

6.3若有说明:int a[10];则对数组元素的正确引用是

A)a[10] B)a[3,5] C)a(5) D)a[10-10] 参考答案:D

6.4 在C语言中,一维数组的定义方式为:类型说明符 数组名。

A)[常量表达式] B)[整型表达式]

C)[整型表达式]或[整型常量] D)[整型常量]

参考答案:A

6.5 以下能对一维数组a进行正确初始化的语句是

A)int a[10]=(0,0,0); B)int a[10]={};

C)int a[]={0}; D)int a[10]={10*1};

参考答案:CD

参考分析:本题题目设计有问题,D也是正确的。

6.6 以下对二维数组a的正确说明是

A)int a[3][]; B)float a(3,4);

C)double a[1][4]; D)float a(3)(4);

参考答案:C

6.7若有说明:int a[3][4];则对a数组元素的正确引用是。

A)a[2][4] B)a[1,3] C)a[1+1][0] D)a(2)(1)

参考答案:C

参考分析:在实际应用中a[2][4]这种应用方式实质上访问的是a[3][0],这是越界访问。

6.8 若有说明:int a[3][4];则对a数组元素的非法引用是

A)a[0][2*1] B)a[1][3] C)a[4-2][0] D)a[0][4]

参考答案:D

参考分析:a[0][4]实质上访问的是a[1][0],严格意义上并不非法。

6.9 以下能对二维数组a进行正确初始化的语句是

A)int a[2][]={{1,0,1},{5,2,3}};

B)int a[][3]={{1,2,3},{4,5,6}};

C)int a[2][4]={{1,2,3},{4,5},{6}};

D)int a[][3]={{1,0,1}{},{1,1}};

参考答案:B

6.10以下不能对二维数组a进行正确初始化的说明是。

A)int a[2][3]={0}; B)int a[][3]={{1,2},{0}};

C)int a[2][3]={{1,2},{3,4},{5,6}}; D)int a[][3]={1,2,3,4,5,6};

参考答案:C

6.11 若有说明:int a[3][4]={0};则下面正确的叙述是。

A)只有元素a[0][0]可以得到初值0

B)此说明语句不正确

C)数组中各元素都可以得到初值,但其值不一定为0

D)数组中每个元素均可得到初值0

参考答案:D

6.12若有说明:int a[][4]={0,0};则下面不正确的叙述是。

A)数组a的每个元素都可得到初值0

B)二维数组a的第一维大小为1

C)因为二维数组a中第二维大小的值除初值个数的商为0,故数组a的行数为1

D)只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0

参考答案:D

6.13 若有说明:static int a[3][4];则数组中各元素

A)可在程序的运行阶段得到初值0

B)可在程序的编译阶段得到初值0

C)不能得到确定的初值

D)可在程序的编译或运行阶段得到初值0

参考答案:B

6.14 以下各组选项中,均能正确定义二维实型数组a的选项是

A)float a[3][4]; B)float a(3,4);

float a[][4]; float a[3][4];

float a[3][]={{1},{0}}; float a[][]={{0},{0}};

C)float a[3][4]; D)float a[3][4];

static float a[][4]={{0},{0}}; float a[3][];

auto float a[][4]={{0},{0},{0}}; float a[][4];

参考答案:C

6.15 下面程序有错误的行是。

1 main()

2 { int a[3]={3*0};

3 int i;

4 for(i=0;i<3;i++)

5 scanf("%d",&a[i]);

6 for(i=1;i<3;i++) a[0]=a[0]+a[i];

7 printf("%d\n",a[0]);

8 }

A)第2行有错误 B)第6行有错误

C)第7行有错误 D)没有错误

参考答案:习题集中答案为A,实质上应当选择D

6.16下面程序有错误的行是(行前数字表示行号)。

1 main()

2 {

3 float a[10]={0.0};

4 int i;

5 for(i=0;i<3;i++) scanf("%d",&a[i]);

6 for(i=1;i<10;i++) a[0]=a[0]+a[i];

7 printf("%f\n",a[0]);

8 }

A)没有错误 B)第3行有错误

C)第5行有错误 D)第7行有错误

参考答案:C

6.17下面程序有错误的行是(行前数字表示行号)。

1 main()

2 {

3 int a[3]={1};

4 int i;

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

6 for(i=1;i<3;i++) a[0]=a[0]+a[i];

7 printf("a[0]=%d\n",a[0]);

8 }

A)3 B)6 C)7 D)5

参考答案:D

6.18下面程序有错误的行是(行前数字表示行号)。

1 main()

2 {

3 int a[3]={0};

4 int i;

5 for(i=0;i<3;i++) scanf("%d",&a[i]);

6 for(i=1;i<4;i++) a[0]=a[0]+a[i];

7 printf("%d\n",a[0]);

8 }

A)没有错误 B)3 C)5 D)6 参考答案:D

6.19 若二维数组a有m列,则计算任一元素a[i][j]在数组中位臵的公式为(假设a[0][0]位于数组的第一个位臵上) 。

A)i*m+j B)j*m+i C)i*m+j-1 D)i*m+j+1

参考答案:D

6.20 对说明语句int a[10]={6,7,8,9,10};的正确理解是。

A)将5个初值依次a[1]至a[5]

B)将5个初值依次a[0]至a[4]

C)将5个初值依次a[5]至a[9]

D)将5个初值依次a[6]至a[10]

参考答案:B

6.21 以下不正确的定义语句是

A)double x[5]={2.0,4.0,6.0,8.0,10.0};

B)int y[5]={0,1,3,5,7,9};

C)char c1[]={'1','2','3','4','5'};

D)char c2[]={'\x10','\xa','\x8'};

参考答案:B

6.22 若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是

A)2 B)3 C)4 D)无法确定

参考答案:B

6.23 若二维数组a有m列,则在a[i][j]前的元素个数为。

A)j*m+i B)i*m+j C)i*m+j-1 D)i*m+j+1

参考答案:B

6.24 定义如下变量和数组:int k,a[3][3]={1,2,3,4,5,6,7,8,9};则下面语句的输出结果是 。

for(k=0;k<3;k++) printf("%d ",a[k][2-k]);

A)3 5 7 B)3 6 9 C)1 5 9 D)1 4 7 参考答案:A

6.25以下程序段的作用是。

int a[]={4,0,2,3,1},i,j,t;

for (i=1;i<5;i++)

{t=a[i];j=i-1;

while (j>=0&&t>a[j])

{a[j+1]=a[j];j- -;}

a[j+1]=t;

}

A)对数组a进行插入排序(升序)

B)对数组a进行插入排序(降序)

C)对数组a进行选择排序(升序)

D)对数组a进行选择排序(降序)

参考答案:B

6.26 以下正确的定义语句是

A)int a[1][4]={1,2,3,4,5}; B)float x[3][]={{1},{2},{3}};

C)long b[2][3]={{1},{2,3},{4,5,6}}; D)double y[][3]={0};

参考答案:D

6.27 下面程序的运行结果是

#include<stdio.h>

main()

{int a[6][6],i,j;

for(i=1;i<6;i++)

for(j=1;j<6;j++)

a[i][j]=(i/j)*(j/i);

for(i=1;i<6;i++)

{for(j=1;j<6;j++)

printf("%2d",a[i][j]);

printf("\n");

}

}

A) 1 1 1 1 1 B) 0 0 0 0 1 C) 1 0 0 0 0 D) 1 0 0 0 1

1 1 1 1 1 0 0 0 1 0 0 1 0 0 0 0 1 0 1 0

1 1 1 1 1 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0

1 1 1 1 1 0 1 0 0 0 0 0 0 1 0 0 1 0 1 0

1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1

参考答案:C

6.28 下面程序的运行结果是

#include<stdio.h>

main()

{int a[6],i;

for(i=1;i<6;i++)

{a[i]=9*(i-2+4*(i>3))%5;

printf("%2d",a[i]);

}

}

A)-4 0 4 0 4 B)-4 0 4 0 3 C)-4 0 4 4 3 D)-4 0 4 4 0 参考答案:C

*6.29下面是对s的初始化,其中不正确的是

A)char s[5]={"abc"}; B)char s[5]={'a','b','c'};

C)char s[5]=""; D)char s[5]="abcde"; 参考答案:D

*6.30下面程序段的运行结果是。

char c[5]={'a','b','\0','c','\0'};

printf("%s",c);

A)'a''b' B)ab C)ab c D)ab▄(▄表示空格)

参考答案:B

*6.31对两个数组a和b进行如下初始化

char a[]="ABCDEF";

char b[]={'A','B','C','D','E','F'};

则以下叙述正确的是 。

A)a与b数组完全相同 B)a与b数组长度相同

C)a和b中都存放字符串 D)a数组比b数组长度长

参考答案:D

6.32有两个字符数组a、b,则以下正确的输入语句是。

A)gets(a,b); B)scanf("%s%s",a,b);

C)scanf("%s%s",&a,&b); D)gets("a");gets("b");

参考答案:B

6.33有字符数组a[80]和b[80],则正确的输出语句是

A)puts(a,b); B)printf("%s,%s",a[],b[]);

C)putchar(a,b); D)puts(a),puts(b); 参考答案:D

*6.34 下面程序段的运行结果是

char a[7]="abcdef",b[4]="ABC";

strcpy(a,b);

printf("%c",a[4]);

A)■ B)\0 C)e D)ef

参考答案:C

6.35有下面程序段,上机运行,将。

char a[3],b[]="China";

a=b;

printf("%s",a);

A)输出China B)输出Chi C)输出Ch D)编译出错 参考答案:D

*6.36下面程序段的运行结果是。

char c[]="\t\v\\\0will\n";

printf("%d",strlen(c));

A)3 B)6 C)9 D)14

参考答案:A

6.37 判断字符串a和b是否相等,应当使用

A)if(a==b) B)if(a=b) C)if(strcmp(a,b)) D)if(strcmp(a,b)==0) 参考答案:D

6.38判断字符串s1是否大于字符串s2,应当使用。

A) if (s1>s2) B) if (strcmp(s1,s2)

C)if(strcmp(s2,s1)>0) D)if(strcmp(s1,s2)>0) 参考答案:D

6.39下面程序段输出两个字符串中对应相等的字符。请分析程序填空。

char x[]="programming";

char y[]="Fortran";

ini i=0;

while (x[i]!='\0'&&y[i]!='\0')

if (x[i]= =y[i]) else i++;

A)x[i++] B)y[++i] C)x[i] D)y[i]

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

参考答案:A

6.40 下面描述正确的是

A)两个字符串包含的字符个数相同时,才能比较字符串

B)字符个数多的字符串比字符个数少的字符串大

C)字符串"STOP"与"STOP■"相等

D)字符串"That"小于字符串"The"

参考答案:D

6.41 下面对C语言字符数组的描述中错误的是。

A)字符数组可以存放字符串

B)字符数组的字符串可以整体输入、输出

C)可以在赋值语句中通过赋值运算符对字符数组整体赋值

D)不可以用关系运算符对字符数组中的字符串进行比较 参考答案:C

***6.42 有已排好序的字符串a,下面的程序是将字符串s中的每个字符按升序的规律插入到a中。请选择填空。

#include<stdio.h>

main()

{char a[20]="cehiknqtw";

char s[]="fbla";

int i,k,j;

for(k=0;s[k]!='\0';k++)

{j=0;

while(s[k]>=a[j]&&a[j]!='\0') j++;

for() ;

s[j]=s[k];

}

puts(a);

}

【1】A)i=strlen(a)+k;i>=j;i-- B)i=strlen(a);i>=j;i--

C)i=j;i<=strlen(a)+k;i++ D)i=j;i<=strlen(a);i++

【2】A)a[i]=a[i+1] B)a[i+1]=a[i]

C)a[i]=a[i-1] D)a[i-1]=a[i]

参考答案:【1】B 【2】B

参考分析:向有序数据中插入数据关键在于两点,一是查找插入位臵——查找插入位臵注意两个问题,插入的数据与有序数组中数据的大小关系和注意防止向右越界。再一个是有序数组元素后移时自后向前。

***6.43下面程序的功能是将已按升序排好序的两个字符串a和b中的字符,按升序归并到字符串c中。请分析程序填空。

#include "stdio.h"

main()

{char a[]="acegikm";

char b[]="bdfhjlnpq";

char c[80],*p;

int i=0,j=0,k=0;

while (a[i]!='\0'&&b[j]!='\0')

{if (a[i]<b[j]) {}

else {

k++;

}

c[k]='\0';

if ( p=b+j;

else p=a+i;

strcat(c,p);

puts(c);

}

【1】【2】

A)c[k]=a[i];i++ B)c[k]=b[j];i++

C)c[k]=a[i];j++ D)c[k]=b[j];j++

【3】A)a[i]=='\0' B)a[i]!='\0' C)a[i-1]=='\0' D)a[i-1]!='\0'

参考答案:【1】A 【2】D 【3】A

参考分析:归并排序的要点是将两个数组a和b的下标逐次后移,存放的是那个数组的元素,就移动那个数组的下标,而目标数组c则每次循环都要移动,当a,b数组其中一个到达结束标志后,再将没到达结束标志的数组中剩余的数据全部写到目的数组中。 ***6.44下面程序的功能是将字符串s中所有的字符'c'删除。

#include "stdio.h"

main()

{char s[80];

int i,j;

gets(s);

for (i=j=0;s[i]!='\0';i++)

if (s[i]!='c') s[j]='\0';

puts(s);}

A)s[j++]=s[i] B)s[++j]=s[i] C)s[j]=s[i];j++ D)s[j]=s[i]

参考答案:A

参考分析:删除指定字符的程序要点在于采用双下标,一个下标对数组从头到尾进行逐个扫描,另外一个下标则只有当写入不删除字符时才向后移动。其关键思想就是:s[j++]=s[j]。

*6.45 下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔。请分析程序填空。

#include<stdio.h>

main()

{char s[80],c1,c2=' ';

int i=0,num=0;

gets(s);

while(s[i]!='\0')

{c1=s[i];

) num++;

i++;

c2=c1;

}

printf("There are %d words.\n",num);

}

A)c1==' '&&c2==' ' B)c1!=' '&&c2==' '

C)c1==' '&&c2!=' ' D)c1!=' '&&c2!=' '

参考答案:B

参考分析:判断是不是一个单词的要点就是当前字符不是空格而前一个字符是空格。

6.46 下面程序的运行结果是

#include<stdio.h>

main()

{char ch[7]={"12ab56"};

int i,s=0;

for(i=0;ch[i]>='0'&&ch[i]<='9';i+=2)

s=10*s+ch[i]-'0';

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

}

A)1 B)1256 C)12ab56 D)1 2 5 6 参考答案:A

6.47 当运行以下程序时,从键盘输入:aa bb<CR>cc dd<CR> 则下面程序的运行结果是 。

#include<stdio.h>

main()

{char a1[5],a2[5],a3[5],a4[5];

scanf("%s%s",a1,a2);

gets(a3);gets(a4);

puts(a1);puts(a2);puts(a3);puts(a4);

}

A)aa B)aa C)aa D)aa bb

bb bb bb cc

cc cc dd dd

cc dd dd ee 参考答案:A

6.48 当运行以下程序时,从键盘输入ab<CR>c<CR>def<CR>,则下面程序的运行结果是 。

#include<stdio.h>

#define N 6

main()

{char c[N];int i=0;

for(;i<N;c[i]=getchar(),i++);

for(i=0;i<N;i++) putchar(c[i]);

}

A)abcdef B)ab C)a D)ab

c c c

def d d

参考答案:D

6.49 当运行以下程序时,从键盘输入:AhaMA Aha<CR>,则下面程序的运行结果是 。

#include<stdio.h>

main()

{char s[80],c='a';

int i=0;

scanf("%s",s);

while(s[i]!='\0')

{if(s[i]==c) s[i]=s[i]-32;

else if(s[i]==c-32) s[i]=s[i]+32;

i++;

}

puts(s);

}

A)ahAMa B)AhAMa C)AhAMa ahA D)ahAMa ahA

参考答案:A

6.50 下面程序的运行结果是

#include<stdio.h>

#include<string.h>

main()

{char a[20]="AB",b[20]="LMNP";

int i=0;strcat(a,b);

while(a[i++]!='\0') b[i]=a[i];

puts(b);

}

A)LB B)ABLMNP C)AB D)LBLMNP

参考答案:D

6.51下面程序的运行结果是。

#include<stdio.h>

main()

{char str[]="SSSWLIA",c;

int k;

for(k=2;(c=str[k])!='\0';k++)

{switch(c)

{case 'I':++k;break;

case 'L':continue;

default:putchar(c);continue;

}

putchar('*');

}

}

A)SSW* B)SW* C)SW*A D)SW

参考答案:B

6.52下面程序的运行结果是。

#include<stdio.h>

main()

{char a[]="morning",t;

int i,j=0;

for(i=1;i<7;i++) if(a[j]<a[i]) j=i;

t=a[j];a[j]=a[7];a[7]=t;

puts(a);

}

A)mogninr B)mo C)morning D)mornin

参考答案:B

6.2 填空题

6.53 在c语言中,二维数组的定义方式为:类型说明符 数组名[【1】][【2】]; 参考答案:【1】【2】常量表达式

6.54 在c语言中,二维数组在内存中的存放顺序是【 】。

参考答案:按行主顺序存放

6.55 若有定义:double x[3][5];则x数组中行下标的下限为【1】,列下标的上限为【2】。 参考答案:【1】0 【2】4

6.56 若二维数组a有m列,则计算任一元素a[i][j]在数组中位臵的公式为【 】。(假设a[0][0]位于数组的第一个位臵上)

参考答案:i*m+j+1

6.57 若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是【1】,a[2][1]得到的初值是【2】。 参考答案:【1】0【2】6

6.58 若有以下输入(数之间有空格),则下面程序的运行结果是。

7 16 5 4 6 7 9 8 3 2 4 6 12 2 -1<CR>

main()

{int b[51],x,i,j=0,n=0;

scanf("%d",&x);

while(x>-1){b[++n]=x;scanf("%d",&x);}

for(i=1;i<=n;i++)

if(b[i]%2==0) b[++j]=b[i];

for(i=1;i<=j;i++) printf("%3d ",b[i]);

}

参考答案:16 4 6 8 2 4 6 12 2

参考分析:本程序是删除用户所输入的所有奇数。

6.59 下面程序以每行4个数的形式输出a数组,请分析程序填空。

#define N 20

main()

{int a[N],i;

for(i=0;i<N;i++) scanf("%d", for(i=0;i<N;i++)

{if( printf("%3d",a[i]);

}

}

参考答案:【1】&a[i] 【2】i%4==0 【3】printf("\n");

6.60 下面程序将二维数组a的行和列元素互换后存到另一个二维数组b中。请分析程序填空。

main()

{int a[2][3]={{1,2,3},{4,5,6}}, int b[3][2],i,j;

printf("array a:\n");

for(i=0;i<=1;i++)

{for(j=0;;j++)

{printf("%5d",a[i][j]);

;

}

printf("\n");

}

printf("array b:\n");

for(i=0;;i++)

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

{for(j=0;j<=1;j++)

printf("%5d",b[i][j]);

printf("\n");

}

}

参考答案:【1】j<=2 【2】b[j][i]=a[i][j] 【3】i<=2

6.61 下面程序的运行结果是

main()

{int a[2][3]={{1,2,3},{4,5,6}}, int b[3][2],i,j;

printf("array a:\n");

for(i=0;i<=1;i++)

{for(j=0;j<=2;j++)

{printf("%5d",a[i][j]);

b[j][i]=a[i][j];

}

printf("\n");

}

printf("array b:\n");

for(i=0;i<=2;i++)

{for(j=0;j<=1;j++)

printf("%5d",b[i][j]);

printf("\n");

}

}

参考答案:

array a:

1 2 3

4 5 6

array b:

1 4

2 5

3 6

6.62 下面程序可求出矩阵两条对角线上的元素之和。请分析程序填空。

main()

{int a[3][3]={1,3,6,7,9,11,14,15,17},sum1=0,sum2=0,i,j;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

if(i==j) sum1+=a[i][j];

for(i=0;i<3;i++)

for(;;j--)

if(i+j==2) sum2+=a[i][j];

printf("sum1=%d,sum2=%d\n",sum1,sum2);

}

参考答案:【1】j=2 【2】j>=0

6.63 下面程序的运行结果是

main()

{int a[5][5],i,j,n=1;

for(i=0;i<5;i++)

for(j=0;j<5;j++)

a[i][j]=n++;

printf("The result is:\n");

for(i=0;i<5;i++)

{for(j=0;j<=i;j++)

printf("%4d",a[i][j]);

printf("\n");

}

}

参考答案:1

6 7

11 12 13

16 17 18 19

21 22 23 24 25

6.64 下面程序可求出矩阵a的主对角线上的元素之和。请分析程序填空。

main()

{int a[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

if() sum+=;

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

}

参考答案:【1】i==j 【2】a[i][j]

6.65 以下程序可求出所有的水仙花数。(水仙花数是三位正数,其各位数字的立方和等于该正数,如:407=4*4*4+0*0*0+7*7*7)

main()

{int x,y,z,a[8],m,i=0;

printf("The special numbers are :\n");

for ( {x=m/100;

y=;

z=m%10;

if (m= =x*x*x+y*y*y+z*z*z)

{;i++;}

}

for (x=0;x<i;x++)

printf(%6d",a[x]);

}

参考答案:【1】m=100;m<1000 【2】m/10%10或m%100/10 【3】a[i]=m

6.66下面程序的功能是生成并打印某数列的前20项,该数列第1,2项分别为0和1,以后每个奇数编号的项是前两项之和,偶数编号的项是前两项差的绝对值。生成的20个数存在一维数组x中,并按每行4项的形式输出。

main()

{ int x[21],i,j;

x[0]=0;x[2]=1;

i=3;

do

{x[i]=;

x[i+1]=

i=} while (i<=20);

for (i=1;i<=20;i++)

{printf("%5d",x[i]);

if (i%4= =0)

printf("\n");

}

} 参考答案:【1】x[i-2]+x[i-1] 【2】x[i]-x[i-1] 【3】i+2

6.67 若有以下输入,则下面程序的运行结果是

1 4 2 3 3 4 1 2 3 3 2 2 2 3 3 1 1 1 4 1 1 1 -1

#define M 50

main()

{int a[M],c[4],i,n=0,x;

printf("Enter 1 or 2 or 3 or 4,to end with -1\n");

scanf("%d",&x);

while(x!=-1)

{if(x>0&&x<=4)

{a[n-1]=x;n++;}

scanf("%d",&x);

}

for(i=0;i<4;i++) c[i]=0;

for(i=0;i<n;i++) c[a[i]-1]++;

printf("The result is:\n");

for(i=1;i<=4;i++) printf("%d:%d\n",i,c[i-1]);

printf("\n");

} 参考答案:

The result is:

1:8

2:5

3:6

4:3

6.68 下面程序的运行结果是

main()

{int i,j,a[2][3]={{2,4,6},{8,10,12}};

printf("The original array is:\n");

for(i=0;i<2;i++)

{for(j=0;j<3;j++)

printf("%4d",a[i][j]);

printf("\n");

}

printf("\nThe result is:\n");

for(i=0;i<3;i++)

{for(j=0;j<2;j++)

printf("%4d",a[j][i]);

printf("\n");

}

}

参考答案:

The original array is:

2 4 6

8 10 12

The result is:

2 8

4 10

6 12

6.69 设数组a包括10个整型元素,下面程序的功能是求出a中各相邻两个元素的和,并将这些和存在数组b中,按每行3个元素的形式输出。请分析程序填空。

void main()

{int a[10],b[10],i;

for(i=0;i<10;i++)

scanf("%d",&a[i]);

for(;i<10;i++)

;

for(i=1;i<10;i++)

{printf("%3d",b[i]);

if(==0) printf("\n");

}

}

参考答案:【1】i=1【2】b[i]=a[i-1]+a[i]【3】i%3

6.70 下面程序是将十进制数转换成不超过十六进制的n进制。请分析程序填空。

#include<stdio.h>

main()

{int i=0,base,n,j,num[20];

printf("Enter data that will be converted:\n");

scanf("%d",&n);

printf("Enter base:\n");

scanf("%d",&base);

do

{i++;

num[i]=n n=n } while(n);

printf("The data %d has been converted into the %d base data:\n",n,base);

for()

if(num[j]>9) putchar(num[j]+'A'-10);

else putchar(num[j]+'0');

}

参考答案:【1】%【2】/【3】j=i;j>=1;j--

6.71下面程序的功能是输入5个整数,找出最大数和最小数所在的位臵,并把二者对调,然后输出调整后的5个数。

main()

{int a[5],max,min,i,j,k;

for (i=0;i<5;i++)

scanf("%d:,&a[i];

min=a[0];

for (i=1;i<5;i++)

if (a[i]<min) {min=a[i];max=a[0];

for (i=1;i<5;i++)

if a[i]>max) {max=a[i]; 【3】

printf("\nThe position of min is:%3d\n",k);

printf("\nThe position of max is:%3d\n",j);

for (i=0;i<5;i++)

printf("%5d",a[i]);

}

参考答案:【1】j=i【2】k=i【3】a[j]=max;a[k]=min;

6.72 下面程序的运行结果是

main()

{int i,f[10];

f[0]=f[1]=1;

for(i=2;i<10;i++)

f[i]=f[i-2]+f[i-1];

for(i=0;i<10;i++)

{if(i%4==0) printf("\n");

printf("%3d",f[i]);

}

}

参考答案:

1 1 2 3

5 8 13 21

34 55

6.73 下面程序的运行结果是

main()

{int a[10]={1,2,2,3,4,3,4,5,1,5};

int n=0,i,j,c,k;

for(i=0;i<10-n;i++)

{c=a[i];

for(j=i+1;j<10-n;j++)

if(a[j]==c)

{for(k=j;k<10-n;k++)

a[k]=a[k+1];

n++;

}

}

for(i=0;i<10-n;i++)

printf("%3d",a[i]);

} 参考答案: 1 2 3 4 5

**6.74 下面程序的功能是给一维数组a任意输入6个整数,假设为7 4 8 9 1 5,然后建立一个具有以下内容的方阵并打印。请分析程序填空。

5 7 4 8 9 1

1 5 7 4 8 9

9 1 5 7 4 8

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

8 9 1 5 7 4

4 8 9 1 5 7

7 4 8 9 1 5

main()

{int a[6],i,j,k,m;

for(i=0;i<6;i++)

scanf("%d",&a[i]);

for(i=5;i>=0;i--)

{k=a[5];

for(;j>=0;j--)

a[j+1]=a[j];

for(m=0;m<6;m++)

printf("%d ",a[m]);

printf("\n");

}

}

参考答案:【1】j=4 【2】a[0]=k

参考分析:采用二维数组可以采用a[i][j]=a[i-1][(j-1+M)%M]的方式为0行以后的行进行赋值。

**6.75 下面程序的功能是输出以下n*n阶(最大为9阶)方阵。请分析程序填空。(以下例子是6阶方阵)

1 1 1 1 1 1

1 2 2 2 2 1

1 2 3 3 2 1

1 2 3 3 2 1

1 2 2 2 2 1

1 1 1 1 1 1

main()

{int a[9][9],n,i,j,m;

scanf("%d",&n);

m=(n+1)/2;

for(i=0;i<m;i++)

for(j=0;j<n-i;j++)

{a[i][j]=i+1;

a[][j]=i+1;

a[j][i]=i+1;

a[j][]=i+1;

}

for(i=0;i<n;i++)

{for(j=0;j<n;j++)

printf("%3d",a[i][j]);

printf("\n");

}

}

参考答案:【1】【2】n-i-1

6.76 当从键盘输入18并回车后,下面程序的执行结果是。

main()

{int x,y,i,j,a[10];

scanf("%d",&x);

y=x;i=0;

do

{a[i++]=y%2;

y=y/2;

}while(y);

for(j=i-1;j>=0;j--)

printf("%d",a[j]);

}

参考答案:10010

6.77 下面程序的功能是将二维数组a中每个元素向右一列,最后一列换到最左一列,移后的数组存到另一二维数组b中,并按矩阵形式输出a和b。请分析程序填空。 例如:array a: array b:

4 5 6 6 4 5

1 2 3 3 1 2

main()

{int i,j,a[2][3]={4,5,6,1,2,3},b[2][3];

printf("array a:\n");

for(i=0;i<2;i++)

for(j=0;j<3;j++)

{printf("%4d",a[i][j];

【1】;

}

for(;i++) b[i][0]=a[i][2];

printf("array b:\n");

for(i=0;i<2;i++)

{ for(j=0;j<3;j++)

printf("%4d",b[i][j]);

;

}

} 参考答案:【1】b[i][j+1]=a[i][j] 【2】i=0;i<2 【3】printf("\n")

*6.78 下面程序的功能是统计年龄在16-31岁之间的学生人数。请分析程序填空。

main() {int a[16],n,age,i;

for(i=0;i<16;i++) a[i]=0;

printf("Enter the age of each student(to end with -1):\n");

scanf("%d",&age);

while(age>-1)

{;

scanf("%d",&age);

}

printf("The result is:\n");

for(;i++)

printf("%3d%6d\n",i,a[i-16]);

}

参考答案:【1】a[age-16]++ 【2】i=16;i<=31

6.79 下面程序的功能是检查一个二维数组是否对称(即对所有i和j都有a[i][j]=a[j][i])。

请分析程序填空。

main()

{int i,j,found=0,a[4][4];

printf("Enter array(4*4):\n");

for(i=0;i<4;i++)

for(j=0;j<4;j++)

scanf("%d",&a[i][j]);

for(j=0;j<4;j++)

for(;i<4;i++)

if(a[j][i]!=a[i][j])

{;break;}

if(found) printf("No");

else printf("Yes");

}

参考答案:【1】i=j+1 【2】found=1

6.80 下面程序中的数组a包括10个整数元素,从a中第二个元素起,分别将后项减前项之差存入数组b,并按每行3个元素输出数组b。请分析程序填空。

main()

{int a[10],b[10],i;

for(i=0;;i++)

scanf("%d",&a[i]);

for(i=1;;i++)

b[i]=a[i]-a[i-1];

for(i=1;i<10;i++)

{printf("%3d",b[i]);

if() printf("\n");

}

}

参考答案:【1】i<10 【2】i<10 【3】i%3==0

6.81 下面程序的运行结果是

main()

{int i=1,n=3,j,k=3, a[5]={1,4,5};

while(i<=n&&k>a[i]) i++;

for(j=n-1;j>=i;j--)

a[j+1]=a[j];

a[i]=k;

for(i=0;i<=n;i++)

printf("%3d",a[i]);

} 参考答案: 1 3 4 5

**6.82下面程序的运行结果是。

#include "stdio.h"

#define LEN 12

int num[]={3,4,5,6,7,8,9,10,11,12,13,14};

main()

{int i,j,k,x,y;

x=0;y=LEN-1;

while(x<=y)

{j=num[x];i=2;k=1;

while (i<=j/2&&k) //判断j是否为素数

k=j%i++;

if (k)

printf(―%3d‖,num[x++];

else //j不是素数首尾数据互换,尾指针前移

{num[x]=num[y];

num[y--]=j;

}

}

for (i=0;i<x;i--)

printf(―%5d‖,num[i]);

}

参考答案: 3 13 5 11 7

参考分析:该程序对数组设臵了头尾两个下标,对数组自前向后检查各元素是否为素数,如果是则输出该元素,头下标后移,继续检查下一个元素;如果不是,则将数组后面的元素与正检查的数组元素互换,尾下标前移,继续检查,直到头下标大于尾下标。

6.83 设数组中的元素均为正整数,以下程序是求a中偶数的个数和偶数的平均值。请分析程序填空。

main()

{int a[10]={1,2,3,4,5,6,7,8,9,10},k,i;

float ave,s=0;

for(k=s=i=0;i<10;i++)

{if(a[i]%2!=0) ;

s+= k++;

}

if(k!=0) {ave=s/k;printf("%d,%f\n",k,ave);}

}

参考答案:【1】continue 【2】a[i]

6.84 以下程序是求矩阵a,b的和,结果存入矩阵c中,并按矩阵形式输出。请分析程序填空。

main()

{int a[3][4]={{1,3,5,7},{4,7,2,5},{-8,2,5,6}};

int b[3][4]={{-2,6,7,3},{-1,5,4,7},{8,9,3,2}};

int i,j,c[3][4];

for(i=0;i<3;i++)

for(j=0;j<4;j++)

c[i][j]= for(i=0;i<3;i++)

{for(j=0;j<4;j++)

printf("%3d",c[i][j]);

;

}

}

参考答案:【1】a[i][j]+b[i][j] 【2】printf("\n")

6.85 以下程序是求矩阵a,b的乘积,结果存入矩阵c中并按矩阵形式输出。请分析程序填空。

main()

{int a[3][2]={2,3,4,6,3,1},b[2][2]={6,-1,8,3};

int i,j,k,s,c[3][2];

for(i=0;i<3;i++)

for(j=0;j<2;j++)

{for( s+= c[i][j]=s;

}

for(i=0;i<3;i++)

{for(j=0;j<2;j++)

printf("%6d",c[i][j]);

;

}

}

参考答案:【1】s=0,k=0 【2】a[i][k]*b[k][j] 【3】printf("\n")

6.86 已知以下矩阵:

y1 1 -0.2 0 0 1

y2 -0.8 1 -0.2 -0.2 1

y3= 0 -0.8 1 -0.2 × 1

y4 0 -0.8 -0.8 1 1

下面程序的功能是求出y1,y2,y3,y4的值。请分析程序填空。

main()

{float a[4][4]={{1,-0.2,0,0},{-0.8,1,-0.2,-0.2},{0,-0.8,1,-0.2},{0,-0.8,-0.8,1}}; float x[4]={1,1,1,1},y[4];

int i,j,k;

for(i=0;i<4;i++)

{y[i]=0;

for(j=0;j<4;j++)

;

}

for(k=0;k<4;k++)

printf("\ny[%d]=%-6.2f",k+1,}

参考答案:【1】y[i]+=a[i][j]*x[i] 【2】y[k]

6.87 以下程序的功能是求数组num中小于零的数据之和。请分析程序填空。

main()

{int num[20]={2,-3,51,-72,86,4,0,-23,3,-65,-1,0,5,8,2,-4,-7,-9,4,-8};

int sum=0,i;

for(i=0;i<20;i++)

{if( sum= }

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

}

参考答案:【1】num[i]<0 【2】sum+num[i]

6.88 以下程序的功能是

main()

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

{int num[20]={2,-3,51,-72,86,4,0,-23,3,-65,-1,0,5,8,2,-4,-7,-9,4,-8};

int sum=0,i;

for(i=0;i<20;i++)

{if(num[i]>0)

sum+=num[i];

}

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

}

参考答案:求取num数组中大于0的所有数据之和。

6.89 下面程序的运行结果是

main()

{int i,j,row,col,min;

int a[3][4]={{1,2,3,4},{9,8,7,6},{-1,-2,7,-5}};

min=a[0][0];row=0;col=0;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

if(a[i][j]<min)

{min=a[i][j];row=i;col=j;}

printf("min=%d,row=%d,col=%d\n",min,row,col);

}

参考答案:min=-5,row=2,col=3 参考分析:在二维数组中查找最小值及它的下标。

***6.90 若输入52<CR>,则下面程序的运行结果是

main()

{int a[8]={6,12,18,42,46,52,67,73};

int low=0,mid,high=7,x;

printf("Input a x:");

scanf("%d",&x);

while(low<=high)

{mid=(low+high)/2;

if(x>a[mid]) low=mid+1;

else if(x<a[mid]) high=mid-1;

else break;

}

if(low<=high) printf("Search Successful! The index is:%d\n",mid);

else printf("Can't search!\n");

}

参考答案:Search Successful! The index is:5

参考分析:本题为典型的折半查找,要点有三:1.循环条件为low<=high;2.查找处理是一个三分支;3.总是把中点的前点作为后点或把中点的后点作为前点。

**6.91 下面程序的运行结果是

main()

{int a[9]= {0,6,12,18,42,46,52,67,73};

int x=52;i,n=9,m;

i=n/2+1;m=n/2;

while(m!=0)

{if(x<a[i])

i=i-m/2-1;

else if(x>a[i])

i=i+m/2+1;

else break;

m=m/2;

}

if (m) printf("The index is:%d",i);

else printf("Can't search.");

}

参考答案:The index is:6

参考分析:这是折半查找的变形题目,本算法仅计算数组中间元素的下标。计算中点下标时巧妙地利用了数据元素个数的―折半‖。

6.92 下面程序用―顺序查找法‖查找数组a中是否存在某一关键字。请分析程序填空。

main()

{int a[8]={25,57,48,37,12,92,86,33};

int i,x;

scanf("%d",&x);

for(i=0;i<8;i++)

if(x==a[i])

{printf("Found! The index is:%d\n",i); if()

printf("Can't found!");

} 参考答案:【1】break 【2】i>=8

**6.93 下面程序用―快速顺序查找法‖查找数组a中是否存在某一关键字。请分析程序填空。

main()

{int a[9]={11,23,41,27,42,64,82,59};

int i=0,x;

scanf("%d",&x);

;

while(a[i]!=x) i++;

if() printf("Found! The index is:%d\n",i);

else printf("Can't found!\n");

}

参考答案:【1】a[8]=x 【2】i<8

参考分析:如果数组中不存在需要查找的数据,循环条件设臵为a[i]!=x无疑会使得对数组的访问产生右越界。将欲查找的数据放到数组的最后位臵可以防止查找过程发生右越界。

***6.94 下面程序用插入法对数组a进行降序排序。请分析程序填空。

main()

{int a[5]={4,7,8,2,5};

int i,j,m; for(i=1;i<5;i++)

{m=a[i];

j= while(j>=0&&m>a[j])

{;

j--;

}

=m;

}

for(i=0;i<5;i++)

printf("%3d",a[i]);

printf("\n");

}

参考答案:【1】i-1 【2】a[j+1]=a[j] 【3】a[j+1]

参考分析:插入排序是一种很重要的排序方法。它的排序思想及相应的技巧需要好好掌握。

6.95 下面程序用―两路合并法‖把两个已按升序排列的数组合并成一个升序数组。请分析程序填空。

main()

{int a[3]={5,9,19};

int b[5]={12,24,26,37,48};

int c[10],i=0,j=0,k=0;

while(i<3&&j<5)

if()

{c[k]=b[j];k++;j++;}

else

{c[k]=a[i];k++;i++;}

while()

{c[k]=a[i];i++;k++;}

while()

{c[k]=b[j];k++;j++;}

for(i=0;i<k;i++)

printf("%3d",c[i]);

}

参考答案:【1】a[i]>b[j] 【2】i<3 【3】j<5

6.96 下面程序的运行结果是

main()

{int a[6][6],i,j;

for(i=1;i<6;i++)

for(j=1;j<6;j++)

a[i][j]=(i/j)*(j/i);

for(i=1;i<6;i++)

{for(j=1;j<6;j++)

printf("%2d",a[i][j]);

printf("\n");

}

}

参考答案:

1 0 0 0 0

0 1 0 0 0

0 0 1 0 0

0 0 0 1 0

0 0 0 0 1

6.97 若输入3245<CR>8<CR>,则下面程序的运行结果是。

main()

{int i=0,base,n,j,old,num[20];

printf("Enter data that will be converted:");

scanf("%d",&n);

old=n;

printf("Enter base:");

scanf("%d",&base);

do

{i++;

num[i]=n%base;

n=n/base;

}while(n!=0);

printf("The data %d has been converted into the %d-base data:\n",old,base); for(j=i;j>=1;j--)

printf("%5d",num[j]);

}

参考答案:

Enter data that will be converted:3245

Enter base:8

The data 3245 has been converted into the 8-base data:

6 2 5 5

6.98 若输入7 4 8 9 1 5<CR>,则下面程序的运行结果是。

main()

{int a[6],i,j,k,m;

for(i=0;i<6;i++)

scanf("%d",&a[i]);

for(i=5;i>=0;i--)

{k=a[5];

for(j=4;j>=0;j--)

a[j+1]=a[j];

a[0]=k;

for(m=0;m<6;m++)

printf("%3d",a[m]);

printf("\n");

}

}

参考答案:

5 7 4 8 9 1

1 5 7 4 8 9

9 1 5 7 4 8

8 9 1 5 7 4

4 8 9 1 5 7

7 4 8 9 1 5

6.99 下面程序的运行结果是

main()

{int a[10]={1,2,3,4,5,6,7,8,9,10}, k,i;

float ave,s=0;

for(k=i=0;i<10;i++)

{if(a[i]%2==0) continue;

s+=a[i];

k++;

}

if(k!=0)

{ave=s/k;

printf("The number is:%d, The average is:%f\n",k,ave); }

}

参考答案:The number is:5, The average is:5.000000

6.100 若有以下输入,则下面程序的运行结果是 3 1 2 3 2 2 2 1 1 3 0<CR>

main()

{int a[4],x,i;

for(i=1;i<=3;i++) a[i]=0;

scanf("%d",&x);

while(x>0) {a[x]+=1;scanf("%d",&x);}

for(i=1;i<=3;i++) printf("a[%2d]=%4d\n",i,a[i]); }

参考答案:

a[ 1]= 3

a[ 2]= 4

a[ 3]= 3

6.101 若有以下输入,则下面程序的运行结果是 5<CR>

9 7 5 3 1<CR>

5<CR>

main()

{int a[10],x,i,n;

printf("Enter n(n<10):");

scanf("%d",&n);

for(i=1;i<=n;i++) scanf("%d",a+i);

printf("Enter x:");scanf("%d",&x);

a[0]=x;i=n;

while(x>a[i]) {a[i+1]=a[i];i--;}

a[i+1]=x;

n++;

for(i=1;i<=n;i++) printf("%3d",a[i]);

printf("\n");

}

参考答案: 9 7 5 5 3 1

6.102 下面程序的运行结果是

#define SIZE 30

main()

{float a[SIZE],b[SIZE/5],sum;

int i,k;

for(k=2,i=0;i<SIZE;i++)

{a[i]=k;k+=2;}

sum=0;

for(k=0,i=0;i<SIZE;i++)

{sum+=a[i];

if((i+1)%5==0)

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

{b[k]=sum/5;

sum=0;

k++;

}

}

printf("The result is:\n");

for(i=0;i<SIZE/5;i++) printf("%5.2f",b[i]);

printf("\n");

}

参考答案:The result is :

6.00 16.00 26.00 36.00 46.00 56.00

6.103 下面程序的功能是求出矩阵x的上三角元素之积。其中矩阵x的行、列数和元素值均由键盘输入。请分析程序填空。

#define M 10

main()

{int x[M][M];

int n,i,j;

long s=1;

printf("Enter a integer(<=10):\n");

scanf("%d",&n);

printf("Enter %d data on each line for the array x\n",n);

for()

for(j=0;j<n;j++)

scanf("%d",&x[i][j]);

for(i=0;i<n;i++)

for()

;

printf("%ld\n",s);

}

参考答案:【1】i=0;i<n;i++ 【2】j=i;j<n;j++ 【3】s=s*x[i][j]

6.104 若有以下输入,则下面程序的运行结果是

4<CR>

1 2 3 4

1 2 3 4

1 2 3 4

1 2 3 4

#define M 10

main()

{int x[M][M];

int n,i,j;

long s=1;

printf("Enter a integer(<10):\n");

scanf("%d",&n);

printf("Enter %d data on each line for the array x\n",n);

for(i=0;i<n;i++)

for(j=0;j<n;j++)

scanf("%d",&x[i][j]);

for(i=0;i<n;i++)

for(j=i;j<n;j++)

s=s*x[i][j];

printf("The result =%ld\n",s);

}

参考答案:The result=27648

6.105 字符串"ab\n\\012\\\""的长度是

参考答案:9

6.106 下面程序段的运行结果是

char ch[]="600";

int a,s=0;

for(a=0;ch[a]>='0'&&ch[a]<='9';a++)

s=10*s+ch[a]-'0';

printf("%d",s);

参考答案:600

6.107 下面程序段将输出computer,请填空。

char c[]="It's a computer";

for(i=0;;i++)

{;printf(%c",c[j]);}

参考答案:【1】i<8 【2】j=i+7

6.108 下面程序段的运行结果是

char x[]="the teacher";

i=0;

while(x[++i]!='\0')

if(x[i-1]=='t') printf("%c",x[i]);

参考答案:he

6.109 下面程序的功能是在一个字符数组中查找一个指定的字符,若数组中含有该字符则输出该字符在数组中第一次出现的位臵(下标值);否则输出-1。请分析程序填空。

#include <stdio.h>

#include <string.h>

main()

{char c='a',t[50];

int n,k,j;

gets(t);

n=;

for(k=0,j=-1;k<n;k++)

if() {j=k;break;}

printf("%d",j);

}

参考答案:【1】strlen(t) 【2】t[k]==c

6.110 下面程序的功能是在三个字符串中找出最小的。请分析程序填空。

#include <stdio.h>

#include <string.h>

main()

{char s[20],str[3][20];

int i;

for(i=0;i<3;i++) gets(str[i]);

strcpy(s, if(strcmp(str[2],s)<0) strcpy(s,str[2]);

printf("%s\n",);

}

参考答案:【1】strcmp(str[0],str[1])<0?str[0]:str[1] 【2】s

6.111 下面程序的功能是从键盘输入一个大写英文字母,要求按字母的顺序打印出相邻的字母,指定的字母在中间。若指定的字母为'Z',则打印YZA;若为A则打印ZAB。请分析程序填空。

#include <stdio.h>

main()

{char a[3],c;

int i;

c=getchar();

a[1]=c;

if(c=='Z') {a[2]='A'; else if(c=='A'){a[0]='Z'; else {a[0]=c-1;a[2]=c+1;}

for(i=0;i<3;i++) putchar(a[i]);

}

参考答案:【1】a[0]=c-1 【2】a[2]=c+1

6.112 下面程序的功能是将字符数组a[6]={'a','b','c','d','e','f'}变为{'f','a','b','c','d','e'}。请分析程序填空。

#include <stdio.h>

main()

{char t,a[6]={'a','b','c','d','e','f'};

int i;

;

for(i=5;i>0;i--)

;

a[0]=t;

for(i=0;i<=5;i++) printf("%c",a[i]);

}

参考答案:【1】t=a[5] 【2】a[i]=a[i-1]

6.113 下面程序的功能是将字符串a中下标值为偶数的元素由小到大排序,其他元素不变。请分析程序填空。

#include <stdio.h>

main()

{char a[]="labchmfye",t;

int i,j;

for(i=0;i<7;i+=2)

for(j=i+2;j<9; if()

{t=a[i];a[i]=a[j];a[j]=t;}

puts(a);

}

参考答案:【1】j+=2 【2】a[i]>a[j]

6.114 下面程序的功能是在任意的字符串a中将与字符c相等的所有元素下标值分别存放在整型数组b中。请分析程序填空。

#include<stdio.h>

main()

{char a[80];

int i,b[80],k=0;

gets(a);

for(i=0;a[i]!='\0';i++)

if(){b[k]=i;;}

for(i=0;i<k;i++) printf("%3d",b[i]);

}

参考答案:【1】a[i]=='c' 【2】k++

6.115 有十个字符串。下面程序的功能是在每个字符串中,找出最大字符按一一对应的顺序放入一维数组中,即第i个字符串中的最大字符放在a[i]中,输出每个字符串中的最大字符及其下标。

#include <stdio.h>

main()

{char s[10][20],a[10];

int i,j;

for (i=0;i<10;i++) gets(s[i]);

for(i=0;i<10;i++)

{;

for(j=1;s[i][j]!='\0';j++)

if(a[i]<s[i][j]) }

for(i=0;i<10;i++) printf("%d %c\n",i,a[i]);

}

参考答案:【1】a[i]=s[i][0] 【2】a[i]=s[i][j]

6.116 下面程序的运行结果是。

#include<stdio.h>

main()

{int i;

char a[]="Time",b[]="Tom";

for(i=0;a[i]!='\0'&&b[i]!='\0';i++)

if(a[i]==b[i])

if(a[i]>='a'&&a[i]<='z') printf("%c",a[i]-32);

else printf("%c",a[i]+32);

else printf("*");

}

参考答案:t*M

6.117下面程序的运行结果是

#include<stdio.h>

main()

{char a[2][6]={"Sun","Moon"};

int i,j,len[2];

for(i=0;i<2;i++)

{for(j=0;j<6;j++)

if(a[i][j]=='\0')

{len[i]=j;break;}

printf("%6s:%d\n",a[i],len[i]);

}

}

参考答案: Sun:3

Moon:4

6.118下面程序的运行结果是

#include<stdio.h>

main()

{int i,r;

char s1="bus",s2="book";

for(i=r=0;s1[i]!='\0'&&s2[i]!='\0';i++)

if(s1[i]==s2[i]) i++;

else {r=s1[i]-s2[i];break;}

printf("%d",r);

} 参考答案:4

*6.119下面程序的运行结果是

#include<stdio.h>

#define LEN 4

main()

{int j,c;

char n[2][LEN+1]={"8980","9198"};

for(j=LEN-1;j>=0;j--)

{c=n[0][j]+n[1][j]-2*'0';

n[0][j]=c%10+'0';

}

for(j=0;j<=1;j++) puts(n[j]);

}

参考答案:7078

9198

*6.120下面程序的运行结果是。

#include<stdio.h>

main()

{int i=5;

char c[6]="abcd";

do{c[i]=c[i-1];} while(--i>0);

puts(c);

}

参考答案:aabcd

*6.121 当运行以下程序时,从键盘输入AabD<CR>,则运行结果是

#include<stdio.h>

main()

{char s[80];

int i;

gets(s);

while(s[i]!='\0')

{if(s[i]<='z'&&s[i]>='a')

s[i]='z'+'a'-s[i];

i++;

}

puts(s);

}

参考答案:AzyD

参考分析:本题是将串中小写字母逆序转换。

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

*6.122下面程序的运行结果是。

#include<stdio.h>

main()

{char s[]="ABCCDA",c;

int k;

for(k=1;(c=s[k])!='\0';k++)

{switch(c)

{case 'A':putchar('%');continue;

case 'B':++k;break;

default:putchar('*');

case 'C':putchar('&');continue;

}

putchar('#');

}

}

参考答案:#&*&%

6.123下面程序的运行结果是。

#include<stdio.h>

main()

{int i=0;

char a[]="abm",b[]=aqid",c[10];

while(a[i]!='\0'&&b[i]!='\0')

{if(a[i]>=b[i]) c[i]=a[i]-32;

else c[i]=b[i]-32;

i++;

}

c[i]='\0';

puts(c);

}

参考答案:AQM

*6.124 当运行以下程序时,从键盘输入:

BOOK<CR>

CUT<CR>

GAME<CR>

PAGE<CR>

则下面程序的运行结果是 。

#include<stdio.h>

#include<string.h>

main()

{int i;

char str[10],temp[10]="Control";

for(i=0;i<4;i++)

{gets(str);

if(strcmp(temp,str)<0) strcpy(temp,str);

}

puts(temp);

}

参考答案:PAGE

参考分析:本题是查找输入的最大字符串(含初始串)。

6.125 当运行以下程序时,从键盘输入:

apple<CR>

orange<CR>

则下面程序的运行结果是 。

#include<stdio.h>

#include<string.h>

main()

{char a[2][80],t;

int i,j,m=0,n=0,l,max;

for(i=0;i<=1;i++) gets(a[i]);

t=a[0][0];

for(i=0;i<=1;i++)

{l=strlen(a[i]);

for(j=0;j<=l;j++)

if(a[i][j]>t) {max=a[i][j];m=i;n=j;}

}

printf("%c %d %d\n",max,m,n);

}

参考答案:e 1 5

参考分析:本题是查找最后一个大于首字符的字符及其位臵。

6.3 编程题

6.126 从键盘输入若干个整数,其值在0至4范围内,用-1作为输入结束的标志。统计每个整数的个数。

参考程序:

void main()

{int i,s[5],x

printf("Input some numbers(between 0 to 4):");

scanf("%d",&x);

while(x!=-1)

{if (x>=0&&x<=4) s[x]++;}

for(i=0;i<=4;i++)

printf("%d: %d\n",i,s[i]);

}

6.127 若有说明:int a[2][3]={{1,2,3},{4,5,6}};现要将a的行和列的元素互换后存到另一个二维数组b中。请编写程序并输出a和b数组中的元素。

参考程序:

main()

{int a[2][3]={{1,2,3},{4,5,6}},b[3][2],i,j;

printf("Array a:\n");

for(i=0;i<2;i++)

{for(j=0;j<3;j++)

{b[j][i]=a[i][j];

printf("%3d",a[i][j]);

}

printf("\n");

}

printf("Array b:");

for(i=0;i<3;i++)

{for(j=0;j<2;j++)

printf("%3d",b[i][j]);

printf("\n");

}

}

6.128 定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;然后按顺序每五个数求出一个平均值,放在另一个数组中并输出。试编程。

参考程序:

#define SIZE 30

main()

{float b[SIZE/5],sum;

int a[SIZE],i,k;

for(k=2,i=0;i<SIZE;i++,k+=2)

a[i]=k;

sum=0;

for(k=0,i=0;i<SIZE;i++)

{sum=sum+a[i];

if((i+1)%5==0)

{b[k++]=sum/5;

sum=0;

}

}

printf("The result is:\n");

for(i=0;i<SIZE/5;i++) printf("%6.2f ",b[i]);

}

6.129 通过赋初值按行顺序为一个2×3的二维数组赋予2、4、6、...等偶数,然后按列的顺序输出该数组。试编程。

参考程序:

main()

{int i,j,a[2][3]={{2,4,6},{8,10,12}};

printf("\nThe result is:\n");

for(i=0;i<3;i++)

{for(j=0;j<2;j++)

printf("%4d",a[j][i]);

printf("\n");

}

}

6.130 通过循环按行顺序为一个5×5的二维数组a赋1到25的自然数,然后输出该数组的左下半三角。试编程。

参考程序:

main()

{int a[5][5],i,j,n=1;

for(i=0;i<5;i++)

for(j=0;j<5;j++)

a[i][j]=n++;

printf("The result is:\n");

for(i=0;i<5;i++)

{for(j=0;j<=i;j++)

printf("%4d",a[i][j]);

printf("\n");

}

}

6.131 试编程打印用户指定的n阶顺时针螺旋方阵(n<10)。

参考程序:

main()

{int a[10][10],i,j,k=0,m,n;

printf("Enter n(n<10):\n");

scanf("%d",&n);

if(n%2==0)

m=n/2;

else

m=n/2+1;

for(i=0;i<m;i++)

{for(j=i;j<n-i;j++)

{k++;a[i][j]=k;}

for(j=i+1;j<n-i;j++)

{k++;a[j][n-i-1]=k;}

for(j=n-i-2;j>=i;j--)

{k++;a[n-i-1][j]=k;}

for(j=n-i-2;j>=i+1;j--)

{k++;a[j][i]=k;}

}

for(i=0;i<n;i++)

{for(j=0;j<n;j++)

printf("%5d",a[i][j]);

printf("\n");

}

}

6.132 数组a包括10个整数,把a中所有的后项除以前项之商取整后存入数组b,并按每行3个元素的格式输出数组b。试编程。

参考程序:

#define N 10

main()

{int a[N],b[N],i;

printf("Enter %d data:",N);

for(i=0;i<N;i++)

scanf("%d",&a[i]);

for(i=1;i<N;i++)

b[i]=a[i]/a[i-1];

for(i=1;i<N;i++)

{printf("%3d",b[i]);

if(i%3==0)

printf("\n");

}

}

6.133 从键盘输入一个整数,,用折半查找法找出该数在10个有序整型数组a中的位臵。若该数不在a中,则打印出相应信息。试编程。

参考程序:

main()

{int a[10]={1,3,5,7,9,11,13,15,17,19},top,bot,mid,m;

printf("Enter a integer:");

scanf("%d",&m);

top=0;bot=9; /*字符型bot=strlen(a)-1*/

while(top<=bot)

{mid=(top+bot)/2;

if(a[mid]==m) break;

else if(a[mid]>m) top=mid+1;

else bot=mid-1;

}

if(top<=bot) printf("Found! position is %d.\n",mid);

else printf("Not found %d.\n",m);

}

6.134 从键盘输入两个字符串a和b,要求不用库函数strcat把串b的前五个字符连接到串a中;如果b的长度小于5,则把b的所有元素都连接到a中。试编程。 参考程序:

#include <string.h>

main()

{char a[80],b[80];

int i=0,j;

printf("Input two strings:\n");

gets(a);gets(b);

while(a[i]) i++;

for(j=0;j<5&&b[j];j++)

a[i++]=b[j];

a[i]='\0';

puts(a);

}

6.135 从键盘输入一个字符串a,并在串中的最大元素后边插入另外输入的字符串b。试编程。

参考程序:

#include <string.h>

main()

{char a[80],b[]="ab",max;

int i=1,j;

printf("Input a string:\n");

gets(a);

puts(a);

max=a[0];

while(a[i])

{if(a[i]>max)

{max=a[i];j=i;}

i++;

}

for(i=strlen(a)+strlen(b)-1;i>j;i--)

a[i]=a[i-strlen(b)];

j=0;i++;

while(b[j])

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

{a[i]=b[j];

i++;j++;

}

puts(a);

}

第七章 函数

7.1 选择题

*7.1建立函数的目的之一,以下正确的说法是

A)提高程序的执行效率 B)提高程序的可读性

C)减少程序的篇幅 D)减少程序文件所占内存

参考答案:B

*7.2 以下正确的说法是

A)用户若需要调用标准库函数,调用前必须重新定义

B)用户可以重新定义标准库函数,若如此,该函数将失去原有意义

C)用户系统根本不允许用户重新定义标准库函数

D)用户若需要调用库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动寻找该文件。

参考答案:B

7.3 以下正确的函数定义形式是

A)double fun(int x,int y) B)double fun(int x;int y)

C)double fun(int x,int y); D)doubel fun(int x;int y);

参考答案:A

*7.4 以下正确的函数形式是

A)double fun(int x,int y){z=x+y;return z;}

B)double fun(int x,y){int z;return z;}

C)fun(x,y){int x,y;double z; z=x+y; return z;}

D)double fun(int x,int y){double z;z=x+y;return z;}

参考答案:D

*7.5以下正确的说法是。

A)实参和与其对应的形参占用独立的存储单元

B)实参和与其对应的形参共占用一个存储单元

C)只有当实参和与其对应的形参同名时才共占用一个存储单元

D)形参是虚拟的,不占用存储单元

参考答案:A

参考分析:本题并不严谨,因为实参可以是表达式,当实参为表达式时,实参并不单独占用独立的存储单元。

7.6 若调用一个函数,且此函数中没有return语句,则正确的说法是该函数。

A)没有返回值 B)返回若干个系统默认值

C)返回一个用户所希望的函数值 D)返回一个不确定的值

参考答案:D

参考分析:函数有没有返回值是由函数类型所决定的,当没有retrun语句,系统不能返回一个确定的值而已。

7.7 以下不正确的说法是,C语言规定

A)实参可以是常量、变量或表达式

B)形参可以是常量、变量或表达式

C)实参可以是任意类型

D)实参应与其对应的形参类型一致

参考答案:B

7.8 以下正确的说法是

A)定义函数时,形参的类型说明可以放在函数体内

B)return后面的值不能为表达式

C)如果函数的类型与返回值类型不一致,以函数类型为准

D)如果形参与实参的类型不一致,以实参类型为准

参考答案:C

7.9 C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是。

A)地址传递 B)单向值传递

C)由实参传给形参,再由形参传回实参 D)由用户指定传递方式

参考答案:B

7.10 以下程序有语法性错误,有关错误原因的正确说法是。

main()

{int G=5,k;

void prt_char();

......

k=prt_char(G);

......

}

A)语句void prt_char();有错,它是函数调用语句,不能用void说明

B)变量名不能使用大写字母

C)函数说明和函数调用语句之间有矛盾

D)函数名不能使用下划线

参考答案:C

7.11 C语言允许函数值类型缺省定义,此时该函数值隐含的类型是。

A)float型 B)int型 C)long型 D)double型

参考答案:B

7.12 C语言规定,函数返回值的类型是由

A)return语句中的表达式类型

B)调用该函数时的主调函数类型

C)调用该函数是系统临时指定

D)在定义该函数时所指定的函数类型

参考答案:D

*7.13 下面函数调用语句含有实参的个数为

fun((exp1,exp2),(exp3,exp4,exp5));

A)1 B)2 C)4 D)5

参考答案:B

参考分析:该函数的实参是两个逗号表达式。

7.14 以下错误的描述是

函数调用可以

A)出现在执行语句中 B)出现在表达式中

C)作为函数的实参 D)作为函数的形参

参考答案:D

7.15 以下程序的功能是计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请选择填空。

#include <stdio.h>

#include <math.h>

float f(float,float);

main()

{float x,y,z,sum;

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

sum=f()+f( printf("sum=%f\n",sum);

}

float f(float a,float b)

{float value;

falue=a/b;

return(value);

}

【1】A)x-y,x+y B)x+y,x-y C)z+y,z-y D)z-y,z+y

【2】A)x-y,x+y B)x+y,x-y C)z+y,z-y D)z-y,z+y

参考答案:【1】B 【2】C

7.16以下正确的描述是________。

A)函数的定义可以嵌套,但函数的调用不可以嵌套

B)函数的定义不可以嵌套,但函数的调用可以嵌套

C)函数的定义和函数的调用均不可嵌套

D)函数的定义和函数的调用均可以嵌套

参考答案:B

7.17 以下程序是选出能被3整除且至少有一位是5的两位数,打印出所有的这样的数及其个数。请选择填空。

sub(int k,int n)

{int a1,a2;

a2=【1】;

a1=k-【2】;

if((k%3==0&&a2==5)||(k%3==0&&a1==5))

{printf("%4d",k);n++;return n;}

else return -1;

}

main()

{int n=0,k,m;

for(k=10;k<100;k++)

{m=sub(k,n);

if(m!=-1) n=m;

}

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

}

【1】A)k*10 B)k%10 C)k/10 D)k*10%10

【2】A)a2*10 B)a2 C)a2/10 D)a2%10

参考答案:【1】C 【2】A

7.18 以下是有关汉诺塔问题的程序段,若在main函数中有调用语句hanoi(3,'A','B','C');

则符合程序段运行结果的选项是 。

void move(char getone,char putone)

{printf("%c-->%c\n",getone,putone);}

void hanoi(int n,char one,char two,char three)

{if(n==1) move(one,three);

else

{hanoi(n-1,one,three,two);

move(one,three);

hanoi(n-1,two,one,three);

}

}

A)A-->C B)A-->C C)A-->C D)A-->C

A-->B A-->B A-->B A-->B

C-->B C-->A C-->B C-->B

B-->A A-->B A-->C A-->C

C-->B B-->C B-->A A-->B

A-->C A-->C B-->C B-->C

A-->B A-->B A-->C A-->C

参考答案:C

7.19 若用数组名作为函数调用的实参,传递给形参的是。

A)数组的首地址 B)数组第一个元素的值

C)数组中全部元素的值 D)数组元素的个数

参考答案:A

7.20 已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array的错误定义方式为 。

int a[3][4];

f(a);

A)f(int array[][6]) B)f(int array[3][]) C)f(int array[][4]) D)f(int array[2][5]) 参考答案:B

7.21 若使用一位数组名作为函数实参,则以下正确的说法是。

A)必须在主调函数中说明此数组的大小

B)实参数组类型与形参数组类型可以不匹配

C)在被调函数中,不需要考虑形参数组的大小

D)实参数组名与形参数组名必须一致

参考答案:C

7.22 以下函数binary的作用是应用折半查找法从存有10个整数的a数组中对关键字m进行查找,若找到,返回其下标值;反之,返回-1。请选择填空。

int binary(int a[],int m)

{int low=0,high=9,mid;

while(low<=high)

{mid=(low+high)/2;

if(m<a[mid]) 【1】;

else if(m>a[mid]) 【2】;

else return(mid);

}

return(-1);

}

A)high=mid-1 B)high=mid+1 C)low=mid-1 D)low=mid+1

参考答案:【1】A 【2】D

7.23如果在一个复合语句中定义了一个变量,则有关该变量正确的说法是。

A)只在该复合语句中有效 B)只在该函数中有效

C)在本程序范围内均有效 D)为非法变量

参考答案:A

7.24 以下不正确的说法为

A)在不同函数中可以使用相同名字的变量

B)形式参数是局部变量

C)在函数内定义的变量只在本函数范围内有效

D)在函数内的复合语句中定义的变量在本函数范围内有效

参考答案:D

7.25 以下程序的正确运行结果是

#define MAX 10

int a[MAX],i;

main()

{printf("\n");sub1();sub3(a);sub2();sub3(a);}

sub2()

{int a[MAX],i,max;

max=5;

for(i=0;i<max;i++) a[i]=i;

}

sub1()

{for(i=0;i<MAX;i++) a[i]=i+i;}

sub3(int a[])

{int i;

for(i=0;i<MAX;i++) printf("%3d",a[i]);

printf("\n");

}

A) 0 2 4 6 8 10 12 14 16 18 B) 0 1 2 3 4

0 1 2 3 4 0 2 4 6 8 10 12 14 16 18

C) 0 1 2 3 4 5 6 7 8 9 D) 0 2 4 6 8 10 12 14 16 18 0 1 2 3 4 0 2 4 6 8 10 12 14 16 18 参考答案:D

*7.26 以下程序的正确运行结果是

#include<stdio.h>

void num()

{extern int x,y;

int a=15,b=10;

x=a-b;

y=a+b;

}

int x,y;

main()

{int a=7,b=5;

x=a+b;

y=a-b;

num();

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

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

}

A)12,2 B)12,25 C)5,25 D)5,2

参考答案:C

7.27 凡是函数中未指定存储类别的局部变量,其隐含的存储类别为。

A)auto B)static C)extern D)register

参考答案:A

7.28 在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是 。

A)extern B)register C)auto D)static

参考答案:D

*7.29 以下程序的正确运行结果是

main()

{int a=2,i;

for(i=0;i<3;i++) printf("%4d",f(a));

}

int f(int a)

{int b=0;

static int c=3;

b++;c++;

return(a+b+c);

}

A) 7 7 7 B) 7 10 13

C) 7 9 11 D) 7 8 9

参考答案:D

*7.30 以下程序的正确运行结果是

#include<stdio.h>

main()

{int k=4,m=1,p;

p=func(k,m); printf("%d,",p);

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

}

func(int a,int b)

{static int m=0,i=2;

i+=m+1;

m=i+a+b;

return(m);

}

A)8,17 B)8,16 C)8,20 D)8,8

参考答案:A

7.2 填空题

7.31 C语言规定,可执行程序的开始执行点是【 】。

参考答案:main函数

7.32 在C语言中,一个函数一般由两个部分组成,它们是【1】和【2】。

参考答案:【1】函数声明 【2】函数体

*7.33 若输入的值是-125,以下程序的执行结果是

#include<math.h>

main()

{int n;

scanf("%d",&n);

printf("%d=",n);

if(n<0) printf("-");

n=abs(n);

fun(n);

}

fun(int n)

{int k,r;

for(k=2;k<=sqrt(n);k++)

{r=n%k;

while(r==0)

{printf("%d",k);

n=n/k;

if(n>1)printf("*");

r=n%k;

}

}

if(n!=1) printf("%d\n",n);

}

参考答案:-125=-5*5*5

参考分析:本程序用来将整数分解为素数因子的乘积。

7.34 下面add函数的功能是求两个参数的和,并将和值返回调用函数。函数中错误的部分是【1】;改正后为【2】。

void add(float a,float b)

{float c;

c=a+b;

return c;

}

参考答案:【1】void add(float a,float b) 【2】float add(float a,float b)

7.35 以下程序的运行结果是

main()

{int i=2,x=5,j=7;

fun(j,6);

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

}

fun(int i,int j)

{int x=7;

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

}

参考答案:

i=7;j=6;x=7

i=2;j=7;x=5

7.36 以下程序的运行结果是

main()

{increment();

increment();

increment();

}

increment()

{int x=0;

x+=1;

printf("%d",x);

}

参考答案:1 1 1

7.37 以下程序的运行结果是

#include<stdio.h>

main()

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

c=max(a,b);

printf("max is %d\n",c);

}

max(int x,int y)

{int z;

z=(x>y)?x:y;

return(z);

}

参考答案:max is 2

7.38 以下程序的功能是根据输入的"y"("Y")与"n"("N"),在屏幕上分别显示出"This is YES."与"This is NO."。请填空。

#include<stdio.h>

void YesNo(char ch)

{switch(ch)

{case 'y':

case 'Y':printf("\nThis is YES.\n");【1】;

case 'n':

case 'N':printf("\nThis is NO.\n");

}

}

main()

{char ch;

printf("\nEnter a char 'y','Y' or 'n','N':");

ch=【2】;

printf("ch:%c",ch);

YesNo(ch);

}

参考答案:【1】break 【2】getchar()

7.39 以下Check函数的功能是对value中的值进行四舍五入计算,若计算后的值与ponse值相等,则显示"WELL DONE!!",否则显示计算后的值。已有函数调用语句Check(ponse,value);请填空。

void Check(int ponse,float value)

{int val;

val=【1】;

printf("计算后的值:%d",val);

if(【2】) printf("\nWELL DONE!!!\n");

else printf("\nSorry the correct answer is %d\n",val);

}

参考答案:【1】value+0.5 【2】ponse==val

7.40 以下程序的功能是

#include<stdio.h>

f(int n)

{int i,j,k;

i=n/100;j=n/10-i*10;k=n%10;

if (i*100+j*10+k==i*i*i+j*j*j+k*k*k) return n;

else return 0;

}

main()

{int n,k;

printf("Output");

for(n=100;n<1000;n++)

{k=f(n);

if(k!=0)

printf("%d ",k);

}

printf("\n");

}

参考答案:输出所有的水仙花数。

7.41 以下程序的功能是用二分法求方程2x3-4x2+3x-6=0的根,并要求绝对误差不超过0.001。请填空。

#include<stdio.h>

float f(float x)

{return (2*x*x*x-4*x*x+3*x-6);}

main()

{float m=-100,n=90,r;

r=(m+n)/2;

while(f(r)*f(n)!=0)

{if(【1】) m=r;

else n=r;

if(【2】) break;

r=(m+n)/2;

}

printf("方程的解是%6.3f\n",r);

}

参考答案:【1】f(r)*f(n)<0或f(r)*f(m)>0【2】n-m<0.001

7.42 若输入一个整数10,以下程序的运行结果是。

int sub(int a)

{int c;

c=a%2;

return c;

}

main()

{int a,e[10],c,i=0;

printf("Input a number:");

scanf("%d",&a);

while(a!=0)

{c=sub(a);

a=a/2;

e[i]=c;

i++;

}

for(;i>0;i--) printf("%d",e[i-1]);

}

参考答案:1010

7.43 以下程序的功能是计算下面函数的值。请填空。

sin(x) sin(y) sin(z)

F(x)= + +

sin(x-y)*sin(x-z) sin(y-z)*sin(y-x) sin(z-x)*sin(z-y)

#include <stdio.h>

#include <math.h>

float f(float,float,float);

main()

{printf("input x,y,z:\n");

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

sum=【1】;

printf("sum=%f\n",sum);

}

float f(float a,float b,float c)

{float value;

value=【2】;

return(value);

}

参考答案:【1】f(x,y,z)+f(y,z,x)+f(z,x,y) 【2】sin(a)/sin(a-b)/sin(a-c)

参考分析:本题答案非常不严谨,完全可以写成多种方式,比如

【1】f(x,x-y,x-z)+f(y,y-z,y-x)+f(z,z-x,z-y) 【2】sin(a)/sin(b)/sin(c)

【1】f(x,y,z) 【2】sin(a)/sin(a-b)/sin(a-c)+sin(b)/sin(b-c)/sin(b-a)+sin(c)/sin(c-a)/sin(c-b)

7.44 已有函数pow,现要求取消变量i后pow函数的功能不变。请填空。 修改前的pow函数:

int pow(int x,int y)

{int i,j=1;

for(i=1;i<=y;i++) j=j*x;

return j;

}

修改后的函数:

int pow(int x,int y)

{int j;

for(【1】;【2】;【3】) j=j*x;

return j;

}

参考答案:【1】j=1【2】y>0或y>=1【3】y--或--y

7.45 以下程序的运行结果是输出如下图形。请填空。

*

***

*****

*******

*****

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

***

*

#include <stdio.h>

void a(int i)

{int j,k;

for(j=0;j<=7-i;j++) printf(" ");

for(k=0;k<【1】;k++) printf("*");

printf("\n");

}

main()

{int i;

for(i=0;i<3;i++) 【2】;

for(i=3;i>=0;i--) 【3】;

}

参考答案:【1】2*i+1 【2】a[i] 【3】a[i]

参考说明:最长的一行前面有5个空格。

7.46 以下程序的功能是求三个数的最小公倍数,请填空。

#include <stdio.h>

int max(int x,int y,int z)

{if(x>y&&x>z) return(x);

else if(【1】) return(y);

else return(z);

}

main()

{int x1,x2,x3,i=1,j,x0;

printf("Input three number:");

scanf("%d%d%d",&x1,&x2,&x3);

x0=max(x1,x2,x3);

while(1)

{j=x0*i;

if(【2】) break;

i++;

}

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

}

参考答案:【1】y>x&&y>z 【2】j%x1==0&&j%x2==0&&j%x3==0

参考分析:本题有错误,若x=z>y这种条件下max函数不能正确返回最大值。若将所有条件均改为>=就可以了。

7.47 函数gongyue的作用是求整数num1和num2的最大公约数。请填空。

int gongyue(int num1,int num2)

{int temp,a,b;

if(num1【1】num2)

{temp=num1;num1=num2;num2=temp;}

a=num1;b=num2;

while(【2】)

{temp=a%b;a=b;b=temp;}

return(a);

}

参考答案:【1】< 【2】b

参考分析:本题需要修改,作为函数,没有必要将num1赋值给a,另外,不必须要num1大,num2小,还有【2】可以为b!=0

7.48以下程序的运行结果是。

main()

{int x=2,y=3,z=0;

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

add(x,y,z);

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

}

add(int x,int y,int z)

{z=x+y; x=x*x; y=y*y;

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

}

参考答案:

(1)x=2 y=3 z=0

(2)x=4 y=9 z=5

(3)x=2 y=3 z=0

7.49 下面函数pi的功能是:根据以下公式,返回满足精度(0.0005)要求的π值,请填空。 π/2=1+1/3+1/3*2/5+1/3*2/5*3/7+1/3*2/5*3/7*4/9+…

#include <conio.h>

#include<math.h>

#include<stdio.h>

double pi(double eps)

{double s,t;

int n;

for(【1】;t>eps;n++)

{s+=t;

t=n*t/(2*n+1);

}

return (【2】);

}

main()

{double x;

printf("\nPlease enter a precision:");

scanf("%lf",&x);

printf("\neps=%lf,π=%lf",x,pi(x));

}

参考答案:【1】s=0,t=1,n=1 【2】2*s

7.50 下面是一个计算阶乘的程序。程序中错误的语句是【1】,应改为【2】。

#include <stdio.h>

double fac(int);

main()

{int n;

printf("Enter an integer:");

scanf("%d",&n);

printf("\n\n%d!=%lg\n\n",n,fac(fac(n));

}

double fac(int n)

{double result=1.0;

while (n>1||n<170) result *=--n;

return result;

}

参考答案:【1】while(n>1||n<170) result *=--n 【2】while (n>1&&n<170) result *=n--; ***7.51 函数f的形参a为一个10×10的二维数组,n的值为5,以下程序段的运行结果为 。

f(int a[][20], int n)

{int i,j,k;

j=n/2+1;

a[1][j]=1;

i=1;

for(k=2;k<=n*n;k++)

{i=i-1;j=j+1;

if(i<1&&j>n) {i=i+2;j=j-1;}

else

{if(i<1) i=n;

if(j>n) j=1;

}

if(a[i][j]==0) a[i][j]=k;

else {i=i+2; j=j-1; a[i][j]=k;}

}

}

main()

{int a[20][20]={0},n,i,j;

scanf("%d",&n);

f(a,n);

for(i=1;i<=n;i++)

{for(j=1;j<=n;j++)

printf("%3d",a[i][j]);

printf("\n");

}

}

参考答案:

17 24 1 8 15

23 5 7 14 16

4 6 13 20 22

10 12 19 21 3

11 18 25 2 9

参考说明:这是幻方题目

7.52 下面函数func的功能是

#include<math.h>

long func(long num)

{long k=1;

num=labs(num);

do

{k*=num%10;

num/=10;

}while(num);

return k;

}

main()

{long n;

printf("\nPlease enter a number:");

scanf("%ld",&n);

printf("\nThe product of its digits is %ld.",func(n));

}

参考答案:计算一个数的各位数字之积。

7.53以下程序的运行结果是。

#include <stdio.h>

main()

{printf("FACT(5):%d\n",fact(5));

printf("FACT(1):%d\n",fact(1));

fact(-5);

}

fact(int value)

{if(value<0) {printf("FACT(<0):Error!\n"); return (-1);}

else if(value==1||value==0) return(1);

else return(value*fact(value-1));

}

参考答案:

FACT(5):120

FACT(1):1

FACT(<0):Error!

7.54 以下程序的功能是用递归方法计算学生的年龄,已知第一位学生年龄最小,为10岁,其余学生一个比一个大2岁,求第5位学生的年龄。请填空。

递归公式如下:

10 n=1

age(n)=age(n-1)+2 n>1

#include<stdio.h>

age(int n)

{int c;

if(n==1) c=10;

else c=【1】;

return c;

}

main()

{int n=5;

printf("age:%d\n",【2】);

}

参考答案:【1】age(n-1)+2 【2】age(n)

7.55 下面程序的功能是【1】,运行结果是【2】。

long fib(int g)

{switch(g)

{case 0: return 0;

case 1: case 2: return 1;

}

return(fib(g-1)+fib(g-2));

}

main()

{ long k;

k=fib(7);

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

}

参考答案:【1】计算斐波那契数列第7项的值 【2】k=13

7.56以下程序的运行结果是。

main()

{int i=5;

printf("%d\n",sub(i));

}

sub(int n)

{int a;

if(n==1) return 1;

a=n+sub(n-1);

return a;

}

参考答案:15

参考分析:利用递归的方法计算1+2+3+4+5

7.57 以下程序是应用递归函数算法求某数a的平方根,请填空。求平方根的迭代公式如下:

x1=1/2(x0+a/x0)

#include <math.h>

double mysqrt(double a,double x0)

{double x1,y;

x1=【1】;

if(fabs(x1-x0)>0.00001) y=mysqrt(【2】);

else y=x1;

return y;

}

main()

{double x;

printf("Enter x:"); scanf("%lf",&x);

printf("The sqrt of %f=%f\n",x,mysqrt(x,1.0));

}

参考答案:【1】1.0/2*(x0+a/x0) 【2】a,x1

7.58以下程序的运行结果是。

#include <stdio.h>

f(int a[])

{int i=0;

while(a[i]<=10)

{printf("%3d",a[i]);

i++;

}

}

main()

{int a[]={1,5,10,9,11,7};

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

f(a+1);

}

参考答案:5 10 9

7.59以下程序的运行结果是。

main()

{int a[3][3]={1,3,5,7,9,11,13,15,17},sum;

sum=func(a);

printf("\nsum=%d\n",sum);

}

func(int a[][3])

{int i,j,sum=0;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

{a[i][j]=i+j;

if(i==j) sum=sum+a[i][j];

}

return (sum);

}

参考答案:sum=6

7.60 阅读下面程序,完成下列问题中的填空。

问题(1)此程序在调用函数f后的运行结果是【1】。

(2)若将函数f中的for(j=i+1;j<4;j++)改为for(j=0;j<3-i;j++),则程序的运行结果是

【2】。

f(int s[][4])

{int i,j,k;

for(i=0;i<3;i++)

for(j=i+1;j<4;j++)

{k=s[i][j];s[i][j]=s[j][i];s[j][i]=k;}

}

main()

{int s[4][4],i,j;

for(i=0;i<4;i++)

for(j=0;j<4;j++)

s[i][j]=i-j;

f(s);

for(i=0;i<4;i++)

{printf("\n");

for(j=0;j<4;j++)

printf("%4d",s[i][j]);

}

}

参考答案:

【1】 0 1 2 3 【2】 0 -1 -2 -3

-1 0 1 2 1 0 -1 -2

-2 -1 0 1 2 1 0 -1

-3 -2 -1 0 3 2 1 0

7.61 以下search函数的功能是利用顺序查找法从数组的10个元素中对关键字m进行查找。顺序查找法的思路是:从第一个元素开始,从前向后依次与关键字比较,直到找到此元素或找到数组尾部时结束。若找到,返回此元素的下标;若未找到,则返回-1。请

填空。

#include <stdio.h>

int search(int a[10],int m)

{int i;

for(i=0;i<=9;i++) if(【1】) return (i);

return -1;

}

main()

{int a[10],m,i,no;

no=search(【2】);

if(【3】) printf("\nOK FOUND!",no);

else printf("\nSorry Not Found!");

}

参考答案:【1】a[i]==m 【2】a,m 【3】no>=0

7.62 已定义一个含有30个元素的数组s,函数fav1的功能是按顺序分别赋给各元素从2开始的偶数,函数fav2则按顺序每5个元素求一个平均值,并将该值存放在数组w中。请填空。

#define SIZE 30

fav1(float s[])

{int k,i;

for(k=2,i=0;i<SIZE;i++)

{【1】;

k+=2;

}

}

fav2(float s[],float w[])

{float sum,k,i;

sum=0.0;

for(k=0,i=0;i<SIZE;i++)

{sum+=s[i];

if((i+1)%5==0)

{w[k]=sum/5;

【2】;

k++;

}

}

}

main()

{float s[SIZE],w[SIZE/5],sum;

int i,k;

fav1(s);

fav2(s,w);

}

参考答案:【1】s[i]=k 【2】sum=0.0

7.63 以下程序的运行结果是【1】,其算法是【2】。

main()

{int a[5]={5,10,-7,3,7},i,t,j;

sort(a);

for(i=0;i<=4;i++)

printf("%3d",a[i]);

}

sort(int a[])

{int i,j,k;

for(i=0;i<4;i++)

for(j=0;j<4-i;j++)

if(a[j]>a[j+1])

{t=a[j];a[j]=a[j+1];a[j+1]=t;}

}

参考答案:【1】-7 3 5 7 10 【2】冒泡法排序

7.64以下程序的运行结果是【1】,其算法是【2】。

main()

{int a[5]={9,6,8,3,-1},i,j,t,p;

sort(a);

for(i=0;i<=4;i++)

printf("%3d",a[i]);

}

sort(int a[])

{int i,j,t,p;

for(j=0;j<4;j++)

{p=j;

for(i=j;i<=4;i++)

if(a[i]<a[p]) p=i;

t=a[p];a[p]=a[j];a[j]=t;

}

}

参考答案:【1】 -1 3 6 8 9 【2】选择法排序

7.65 函数del的作用是删除有序数组a中的指定元素x。已有调用语句n=del(a,n,x);其中实参n为删除数组元素的个数,赋值号左边的n为删除后数组元素的个数。请填空。

del(int a[],int n,int x)

{int p,i;

p=0;

while (x>=a[p]&&p<n)

【1】;

for(i=p-1;i<n;i++)

【2】;

n=n-1;

return n;

}

参考答案:【1】p++ 【2】a[i]=a[i+1]

7.66以下程序的运行结果是。

#include<stdio.h>

func(int array[][4],int m)

{int i,j,k;

k=0;

for(i=0;i<3;i++)

for(j=0;j<4;j++)

if(array[i][j]<m)

k=k+array[i][j];

return k;

}

main()

{static int a[3][4]={{1,13,5,7},{2,4,26,8},{10,1,3,12}};

int i,j,m;

for(i=0;i<3;i++)

{for(j=0;j<4;j++)

printf("%4d",a[i][j]);

printf("\n");

}

m=10;

printf("\nthe value is %d\n",func(a,m));

}

参考答案: 1 13 5 7

2 4 26 8

10 1 3 12 the value is 31

7.67 函数swap(int x,int y)可完成对x和y值的交换。在运行调用函数中的如下语句后,a[0]和a[1]的值分别为【1】,原因是【2】。

a[0]=1,a[1]=2;

swap(a[0],a[1]); 参考答案:【1】1,2 【2】单向传值不能完成对实参数据的交换

7.68函数swap(arr,n)可完成对arr数组从第一个元素到第n个元素两两交换。在运行调用函数中的如下语句后,a[0]和a[1]的值分别为【1】,原因是【2】。

a[0]=1,a[1]=2;

swap(a,2);

参考答案:【1】2,1 【2】地址传递对形参的改变能改变实参的值

7.69 以下程序可计算10名学生1门课成绩的平均分,请填空。

float average(float array[])

{int i;float aver,sum=array[0];

for(i=1;【1】;i++)

sum+=【2】;

aver=sum/10;

return aver;

}

main()

{float score[10],aver;

int i;

printf("\ninput 10 scores:");

for(i=0;i<10;i++) scanf("%f",&score[i]);

aver=【3】;

printf("\naverage score is %5.2f\n",aver);

}

参考答案:【1】i<10 【2】array[i] 【3】average(score)

7.70 函数yahui能够按以下形式构成一个杨辉三角形,请填空。

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

………..

#define N 11

yahui(int [][N])

{int i,j;

for(i=1;i<N;i++)

{a[i][1]=1;a[i][i]=1;}

for(【1】;i<N;i++)

for(j=2;【2】;j++)

a[i][j]=【3】+a[i-1][j];

}

参考答案:【1】i=3 【2】j<i 【3】a[i-1][j-1]

7.71 下面程序的功能是:从键盘输入一个整数m(4≤m≤20),则输出如下的整数方阵(存入二维数组aa)。例如,若输入4则会输出左边的方阵,若输入5,则会输出右边的方阵。

16 9 4 1 25 16 9 4 1

9 4 1 16 16 9 4 1 25

4 1 16 9 9 4 1 25 16

1 16 9 4 4 1 25 16 9

请改正程序中的错误语句,使它能得出正确的结果。改正后的语句是【1】和【2】。 #define M 20

void aMatrix(int n, int x[][M])

{int i,j;

for(j=0;j<n;j++)

x[0][j]=(n-j)*(n-j);

for(i=1;i<n;i++)

{for(j=0;j<n;j++) /*错误语句【1】*/

x[i][j]=x[i-1][j+1];

x[i][n-1]=x[i-1][0];

}

}

main()

{int a[M][M],i,j,m;

printf("\nPlease enter an integer number between 4 and 20:");

scanf("%d",&m);

aMatrix(m,a);

printf("\nThe %d*%d matrix generated:",m,m);

for(i=0;i<m;i++)

{printf("\n");

for(j=0;j<m;j++)

printf("%4f",(*(a+i))[j]); /*错误语句【2】*/

}

}

参考答案:【1】for(j=0;j<n-1;j++ 【2】printf("%4d",(*(a+i))[j]);

7.72以下程序的运行结果是。

main()

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

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

++a;

c+=++b;

{int b=4,c;

c=b*3;

a+=c;

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

a+=c;

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

}

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

}

参考答案:

first:14,4,12

second:26,4,12

third:26,3,6

7.73以下程序的运行结果是。

int k=1;

main()

{int i=4;

fun(i);

printf("(1)%d,%d\n",i,k);

}

fun(int m)

{m+=k;

k+=m;

{char k='B';

printf("(2)%d\n",k-'A');

}

printf("(3)%d,%d\n",m,k);

}

参考答案:

(2)1

(3)5,6

(1)4,6

7.74 以下程序的运行结果是

int x1=30,x2=40;

main()

{int x3=10,x4=20;

sub(x3,x4);

sub(x2,x1);

printf("%d,%d,%d,%d\n",x3,x4,x1,x2);

}

int sub(int x,int y)

{x1=x;x=y;y=x1;}

参考答案:10,20,40,40

7.75以下程序的运行结果是。

int i=0;

main()

{int i=5;

reset(i/2); printf("i=%d\n",i);

reset(i=i/2); printf("i=%d\n",i);

reset(i/2); printf("i=%d\n",i);

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

}

workover(int i)

{i=(i%i)*((i*i)/(2*i)+4);

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

return i;

}

reset(int i)

{i=i<=2?5:0;

return i;

}

参考答案:

i=5

i=2

i=2

i=0

i=2

7.76以下程序的运行结果是。

int a=5;int b=7;

main()

{int a=4,b=5,c;

c=plus(a,b);

printf("A+B=%d\n",c);

}

int plus(int x,int y)

{int z;

z=x+y;

return z;}

参考答案:A+B=9

7.77以下程序的运行结果是。

int a=3,b=5;

int max(int a,int b)

{int c;

c=a>b?a:b;

return c;

}

main()

{int a=8;

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

}

参考答案:8

7.78以下程序的运行结果是。

int x;

main()

{x=5;

cude();

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

}

cude()

{x=x*x*x;}

参考答案:125

参考分析:x是全局变量。

7.79以下程序的运行结果是。

main()

{int i;

for (i=0;i<3;i++)

{funx();

funy();

}

}

funx()

{int x=0;

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

}

funy()

{static int y=0;

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

}

参考答案:

x=1 y=1

x=1 y=2

x=1 y=3

7.80以下程序的运行结果是。

main()

{int i;

for (i=0;i<3;i++)

fun();

}

fun()

{static int x=0;

x+=1;

printf("%3d",x);

}

参考答案: 1 2 3

7.81以下程序的运行结果是。

int n=1;

main()

{static int x=5;

int y;

y=n;

printf("MAIN:x=%2d y=%2d n=%2d\n",x,y,n);

func();

printf("MAIN:x=%2d y=%2d n=%2d\n",x,y,n);

func();

}

func()

{static int x=4;

int y=10;

x=x+2;

n=n+10;

y=y+n;

printf("FUNC:x=%2d y=%2d n=%2d\n",x,y,n);

}

参考答案:

MAIN:x= 5 y= 1 n=1

FUNC:x= 6 y=21 n=11

MAIN:x= 5 y= 1 n=11

FUNC:x= 8 y=31 n=21

7.82 以下程序的功能是

int fac(int n)

{static int f=1;

f=f*n;

return f;

}

main()

{int i;

for(i=1;i<=5;i++)

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

}

参考答案:计算并输出1到5的阶乘

7.3 编程题

7.83 已有变量定义和函数调用语句:int a=1,b=-5,c;c=fun(a,b);fun函数的作用是计算两个数之差的绝对值,并将差值返回调用函数,请编写fun函数。

fun(int x,int y)

{ }

参考程序:

fun(int x,int y)

{if(x>y) return x-y;

return y-x;

}

7.84 已有变量定义和函数调用语句:int x=57; isprime(x);函数isprime()用来判断一个整型数a是否为素数,若是素数,函数返回1,否则返回0。请编写isprime函数。 int isprime(int a)

{ }

参考程序:

int isprime(int a)

{int k;

if(a==1) return 0;

for(k=2;k<=a/2;k++)

if(a%k==0) return 0;

return 1;

}

7.85 已有变量定义和函数调用语句int a,b; b=sum(a);函数sum用来求1+2+3+…+n,请

编写sum函数。

int sum(int n){ }

参考程序:

int sum(int n)

{int s=0,k;

for(k=1;k<=n;k++)

s+=k;

return s;

}

7.86已有变量定义和函数调用语句double a=5.0; int n=5;和函数调用语句mypow(a,n);用来求a的n次方。请编写mypow函数。

double mypow(double x,int y){ }

参考程序:

double mypow(double x,int y)

{double s=1;

for(;y>0;y--)

s=s*x;

return s;

}

7.87 以下程序的功能是用牛顿法求解方程f(x)=cosx-x=0。已有初始值x0=3.1415/4,要求绝对误差不超过0.001,函数f用来计算迭代公式中x0的值。请编写f函数。牛顿迭代公式是:xn+1=xn

第八章 编译预处理

8.1 选择题

8.1 以下叙述中不正确的是

A)预处理命令都必须以#开始

B)在C程序中凡是以#开始的语句行都是预处理命令行

C)C程序在执行过程中对预处理命令行进行处理

D)以下是正确的宏定义 #define IBM_PC

参考答案:C

8.2 以下叙述中正确的是

A)在程序的一行上可以出现多个有效的预处理命令行

B)使用带参的宏时,参数的类型应与宏定义时的一致

C)宏替换不占用运行时间,只占用编译时间

D)以下定义中C R是称为宏名的标识符

#define C R 045

参考答案:C

8.3

8.7以下有关宏替换的叙述不正确的是。

A)宏替换不占用运行时间

B)宏名无类型

C)宏替换只是字符替换

D)宏名必须用大写字母表示

参考答案:D

8.21在―文件包含‖预处理语句的使用形式中,当#include后面的文件名用""括起时,寻找被

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

包含文件的方式是 。

A)直接按照系统设定的标准方式搜索目录

B)先在源程序所在目录搜索,再按照系统设定的标准方式搜索

C)仅仅搜索源程序所在目录

D)仅仅搜索当前目录

参考答案:B

8.22 在―文件包含‖预处理语句的使用形式中,当#include后面的文件名用<>括起时,寻找被包含文件的方式是。

A)仅仅搜索当前目录

B)仅仅搜索源程序所在目录

C)直接按系统设定的标准方式搜索目录

D)先在源程序所在目录搜索,再按系统设定的标准方式搜索

参考答案:C

8.25 C语言提供的预处理功能包括条件编译,其基本形式为:

#xxx 标识符

程序段1

#else

程序段2

#endif

A)define或include B)ifdef或include

C)ifdef或ifndef或define D)ifdef或ifndef或if

参考答案:D

8.2 填空题

8.3 编程题

第九章 指针

9.1 选择题

9.1 以下程序的运行结果是

void sub (int x,int y,int *z)

{*z=y-x;}

main()

{int a,b,c;

sub(10,5,&a);

sub(7,a,&b);

sub(a,b,&c);

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

}

A) 5, 2, 3 B) -5, -12, -7

C) -5, -12, -17 D) 5, -2, -7

参考答案:A

9.2 执行以下程序后,a的值为【1】,b的值为【2】。

main()

{int a,b,k=4,m=6,*p1=&k,*p2=&m;

a=p1==&m;

b=(-*p1)/(*p2)+7;

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

}

【1】A)-1 B)1 C)0 D)4

【2】A)5 B)6 C)7 D)10

参考答案:【1】C 【2】C

9.3下面程序欲对两个整型变量的值进行交换,以下正确的说法是。

main()

{int a=10,b=20;

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

swap(&a,&b);

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

}

swap (int p,int q)

{int t;

t=p;p=q;q=t;}

A) 该程序完全正确

B) 该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可

C) 该程序有错,只要将swap()函数中的形参p、q和变量t均定义为指针即可

D) 以上说法都不正确 参考答案:D

*9.4 有四组对指针变量进行操作的语句,以下判断正确的选项是。

(1)int *p,*q;q=p;

int a,*p,*q;p=q=&a;

(2)int a,*p,*q;q=&a;p=*q;

int a=20,*p;*p=a;

(3)int a=b=0,*p;p=&a;b=*p;

int a=20,*p,*q=&a;*p=*q;

(4)int a=20,*p,*q=&a;p=q;

int p,*q;q=&p;

A)正确:(1) 不正确:(2),(3),(4)

B)正确:(1),(4) 不正确:(2),(3)

C)正确:(3) 不正确:(1),(2),(4)

D)以上结论都不正确

参考答案:D

参考分析:在四组操作中,完全正确的只有(4),对各组操作中出现的错误分析如下。

(1)int *p,*q;q=p; p没有指向一个确定的空间

int a,*p,*q;p=q=&a;

(2)int a,*p,*q;q=&a;p=*q; q没有指向确定空间,且*q不是地址值

int a=20,*p;*p=a; p没有指向一个确定的空间

(3)int a=b=0,*p;p=&a;b=*p;

int a=20,*p,*q=&a;*p=*q; p没有指向一个确定的空间

9.5 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误的原因是 。

main()

{int *p,*q,a,b;

p=&a;

printf("input a:");

scanf("%d",*p);

}

A)*p表示的是指针变量p的地址

B)*p表示的是变量a的值,而不是变量a的地址

C)*p表示的是指针变量p的值

D)*p只能用来说明p是一个指针变量

参考答案:B

9.6 以下程序有错,错误原因是

main()

{int *p,i;char *q,ch;

p=&i;

q=&ch;

*p=40;

*p=*q;

}

A)p和q类型不一致,不能执行*p=*q;语句

B)*p中存放的是地址值,因此不能执行*p=40;语句

C)q没有指向具体的存储单元,所以*q没有实际意义

D)q虽然指向了具体的存储单元,但该单元中没有确定的值,所以不能执行*p=*q;语句

参考答案:D

9.7 有如下语句int a=10,b=20;*p1=&a,*p2=&b;如果让两个指针变量均指向b,正确的赋值方式是 。

A)*p1=*p2; B)p1=p2; C)p1=*p2; D)*p1=*p2;

参考答案:B

9.8 已有定义int k=2;int *p1,*p2;且p1,p2均指向变量k,下面不能正确执行的赋值语句是 。

A)k=*p1+*p2; B)p2=k; C)p1=p2; D)k=*p1*(*p2);

参考答案:B

9.9 变量的指针,其含义是指变量的

A)值 B)地址 C)名 D)一个标志

参考答案:B

9.10 若已定义int a;下面对(1)(2)两个语句的正确解释是。

(1)int *p=&a; (2)*p=a;

A)语句(1)和(2)中的*p含义相同,都表示给指针变量p赋值

B)(1)和(2)语句的执行结果,都是把变量a的地址赋给指针变量p

C)(1)在对p进行说明的同时进行初始化,使p指向a

(2)将变量a的值赋给指针变量p

D)(1)在对p进行说明的同时进行初始化,使p指向a

(2)将变量a的值赋给*p

参考答案:D

9.11 若有语句int a=4,*p=&a;下面均代表地址的一组选项是。

A)a,p,*&a B)*&a,&a,*p C)*&p,*p,&a D)&a,&*p,p

参考答案:D

9.12 已有说明float f=3.14,*p;若让p指向f,则正确的赋值语句是

A)p=f; B)p=&f; C)*p=f; D)*p=&m

参考答案:B

9.13 若有说明int *p,m=5,n;则以下正确的程序段是。

A)p=&n; B)p=&n;

scanf("%d",&p); scanf("%d",*p);

C)scanf("%d",&n); D)p=&n;

*p=n; *p=m;

参考答案:D

9.14 若有说明int *p1,*p2,m=5,n;以下正确的程序段是

A)p1=&m;p2=&p1; B)p1=&m;p2=&n;*p1=*p2;

C)p1=&m;p2=p1; D)p1=&m;*p2=*p1;

参考答案:C

9.15 已有变量定义和函数调用语句int a=25;print_value(&a);下面函数输出的正确结果是 。

void print_value(int *x)

{printf("%d\n",++*x);}

A)23 B)24 C)25 D)26

参考答案:D

9.16下面判断正确的是

A)char *a="china";等价于char *a;*a="china";

B)char str[10]={"china"};等价于char str[10];str[]="china";

C)char *s="china";等价于char *s;s="china";

D)char c[6]="china",d[6]="china";等价于char c[6]=d[6]="china";

9.17设char *s="\ta\017bc";则指针变量s指向的字符串所占的字节数是。

A)9 B)5 C)6 D)7

参考答案:C

参考分析:字符串的串长为5,但字符串占用6个字节的空间(含一个'\0')。

9.18 下面程序段中,for循环的执行次数是。

char *s="\ta\018bc";

for( ;*s!='\0';s++) printf("*");

A)9 B)5 C)6 D)7

参考答案:C

9.19下面能正确进行字符串赋值操作的是。

A)char s[5]={"ABCDE"}; B)char s[5]={'A','B','C','D','E'};

C)char *s;s="ABCDE"; D)char *s;scanf("%s",s);

参考答案:C

9.20 下面程序段的运行结果是

char *s="abcde";

s+=2;

printf("%d",s);

A)ced B)字符'c' C)字符'c'的地址 D)无确定的输出结果

参考答案:C

9.21 设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是 。

A)c=*p1+*p2; B)p2=c; C)p1=p2; D)c=*p1*(*p2);

9.22 设有下面的程序段,则下列正确的是

char s[]="china"; char *p;p=s;

A)s和p完全相同 B)数组s中的内容和指针变量p中的内容相等

C)s数组长度和p所指向的字符串长度相等 D)*p与s[0]相等

参考答案:D

9.23 下面程序段的运行结果是

char *format="%s,a=%d,b=%d\n";

int a=1,b=10;

a+=b;

printf(format,"a+=b",a,b);

A)for,"a+=b",ab B)format,"a+=b" C)a+=b,a=11,b=10 D)以上结果都不对 参考答案:C

9.24下面程序段的运行结果是________。

char *p="%d,a=%d,b=%d\n";

int a=111,b=10,c;

c=a%b;p+=3;

printf(p,c,a,b);

A)1,a=111,b=10 B) a=1,b=111 C)a=111,b=10 D) 以上结果都不对 参考答案:B

9.31以下与库函数strcpy(char*p1,char*p2)功能不等的程序段是。

A)strcpy1(char *p1,char *p2)

{while ((*p1++=*p2++)!='\0');}

B)strcpy2(char *p1,char *p2)

{while ((*p1=*p2)!='\0'){p1++;p2++;}}

C)strcpy3(char *p1,char *p2)

{while (*p1++=*p2++);}

D)strcpy4(char *p1,char *p2)

{while (*p2) *p1++=*p2++;}

参考答案:D

9.32以下与库函数strcmp(char*s,char*t)的功能相等的程序段是。

A)strcmp1(char *s,char *t)

{for (;*s++= =*t++;)

if (*s= ='\0') return 0;

return (*s-*t);}

B)strcmp2(char *s,char *t)

{for (;*s++= =*t++;)

if (!*s) return 0;

return (*s-*t);}

C)strcmp3(char *s,char *t)

{for (;*t= =*s;)

{if (!*t) return 0; t++;s++;}

return (*s-*t);}

D)strcmp4(char *s,char *t)

{for (;*s= =*t;s++,t++)

if (!*s) return 0;

return (*t-*s);}

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

参考答案:C

9.39 下面程序的功能是将八进制正整数字符串转换为十进制整数。请选择填空。

#include <stdio.h>

main()

{char *p,s[6];int n;

gets(p);

n=【1】;

while(【2】!='\0') n=n*8+*p-'0';

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

}

【1】A)0 B)*p C)*p-'0' D)*p+'0'

【2】A)*p B)*p++ C)*(++p) D)p

参考答案:【1】C 【2】C

9.40 下面程序的功能是统计子串sub在母串中出现的次数。请选择填空。

#include<stdio.h>

main()

{char str[80],sub[80];

int n;

gets(str);gets(sub);

printf("%d\n",count(str,sub));

}

int count(char *str,char *sub)

{int i,j,k,num=0;

for(i=0;【1】;i++)

for(【2】,k=0;sub[k]==str[j];k++,j++)

if(sub[【3】])=='\0') {num++;break;}

return num;

}

【1】A)str[i]==sub[i] B)str[i]!='\0' C)str[i]=='\0' D)str[i]>sub[i]

【2】A)j=i+1 B)j=i C)j=0 D)j=1

【3】A)k B)k++ C)k+1 D)++k

参考答案:【1】C应该为B 【2】B 【3】A应该为C

9.41 下面程序的功能是在字符串str中找出最大的字符并放在第一个位臵上,并将该字符前的原字符往后顺序移动,如chyab变成ychab。请选择填空。

#include<stdio.h>

main()

{char str[80],*p,max,*q;

p=str;gets(p);max=*(p++);

while(*p!='\0')

{if(max<*p) {max=*p;【1】;}

p++;

}

p=q;

while(【2】) {*p=*(p-1);【3】;}

*p=max;

puts(p);

}

【1】A)p++ B)p=q C)q=p D)q++

【2】A)p>str B)p>=str C)*p>str[0] D)*p>=str[0]

【3】A)p++ B)str-- C)p-- D)i--

参考答案:【1】C 【2】A 【3】C

9.53下面程序的运行结果是________。

#include "stdio.h"

#include "string.h"

main()

{char *s1="AbDeG";

char *s2="AbdEg";

s1+=2; s2+=2;

printf"%d\n",strcmp(s1,s2));

}

A)正数 B)负数 C)零 D)不确定的值

参考答案:B

9.68若有定义:int (*p)[4];则标识符。

A)是一个指向整型变量的指针

B)是一个指针数组名

C)是一个指针,它指向一个含有四个整型元素的一维数组

D)定义不合法

9.74若有定义:int *p[4];则标识符

A)是一个指向整型变量的指针

B)是一个指针数组名

C) 是一个指针,它指向一个含有四个整型元素的一维数组

D) 定义不合法

9.103语句int (*ptr)();的含义是

A)ptr是指向一维数组的指针变量

B)ptr是指向int型数据的指针变量

C)ptr是指向函数的指针,该函数返回一个int型数据

D)ptr是一个函数名,该函数的返回值是指向int型数据的指针

9.2 填空题

9.117 下面程序段是把从终端读入的一行字符作为字符串放在字符数组中,然后输出,请分析程序填空。

int i;

char s[80],*p;

for(i=0;i<79;i++)

{s[i]=getchar();

if(s[i]=='\n') break;

}

while(*p) putchar(*p++);

参考答案:【1】'\0' 【2】s

9.133下面程序的功能是检查给定字符串s是否满足下列两个条件:

a)字符串s中左括号‖(‖的个数与右括号‖)‖的个数相同;

b)从字符串s的首字符起顺序查找右括号‖)‖的个数在任何时候均不超过所遇到的左括号‖(‖的个数;

若字符串同时满足上述两个条件,函数返回1,否则返回0

#include "stdio.h"

main()

{ char c[80];

int d;

printf("Input a string:");

gets(c);

d=check(c);

printf("%s",d?"Yes":"No");

}

check (char *s)

{int l=0,r=0;

while (*s!='\0')

{if(*s= ='(') l++;

else if (*s= =')')

{r++; if (【l<r】) return(0); }

【s++】;

}

return(【l= =r】);

}

9.134下面程序的功能是将十进制数转换成十六进制数。

(注释:'0'和'A'的ASCII码值为48,65)

#include "stdio.h"

#include "string.h"

main()

{int a,i;

char s[20];

printf("Input a:\n");

scanf("%d",&a);

c10_16(s,a);

for (i=【strlen(s)-1】;i>=0;i--) printf("%c",*(s+i));

printf("\n");

}

c10_16(char *p,int b)

{int j;

while(b>0)

{j=b%16;

if (【j<10】) *p=j+48;

else *p=j+55;

b=b/16;

【p++】;

}

*p='\0';

}

9.135下面程序是判断输入的字符串是否是‖回文‖,(顺读和倒读都一样的字符串,称‖回

文‖,如level)。

#include "stdio.h"

#include "string.h"

main()

{char s[81],*p1,*p2;

int n;

printf("Input a string:");

gets(s);

n=strlen(s);

p1=s;

p2=【s+n-1】;

while (【p1<p2】)

{if (*p1!=*p2) break;

else {p1++;【p2--】;}

}

if (p1<p2) printf("No\n");

else printf("Yes\n");

}

9.139当运行以下程序时,从键盘输入this is a text.<CR>,则下面程序的运行结果是________。

#include "stdio.h"

#define TURE 1

#define FALSE 0

int change(char *c,int status);

main()

{int flage=TRUE;

char ch;

do

{ ch=getchar();

flag=change(&ch,flag);

putchar(ch);

} while (ch!='.');

printf("\n");

}

int change (char *c,int status)

{ if (*c= ='□' return TRUE;

else

{if (status&&*c<='z'&&*c>='a') *c+='A'-'a';

return FALSE;

}

}

结果:This Is A Text.

9.144下面程序的运行结果是________。

#include "stdio.h"

#define SIZE 12

main()

{char s[SIZE];int i;

for (i=0;i<SIZE;i++)

s[i]='A'+i+32;

sub(s,7,SIZE-1);

for (i=0;i<SIZE;i++)

printf("%c",s[i];

printf("\n");

}

sub(char *a,int t1,int t2)

{ char ch;

while (t1<t2)

{ch=*(a+t1);

*(a+t1)=*(a+t2);

*(a+t2)=ch;

t1++; t2--;

}

}

参考答案:abcdefglkjih

}

9.145下面程序的运行结果是。

#include <stdio.h>

main()

{ char a[80],b[80],*p="aAbcdDefgGH"; int i=0,j=0;

while (*p!='\0')

{ if (*p>='a'&&*p<='z')

{a[i]=*p;i++;}

else

{b[j]=*p;j++;}

p++;

}

a[i]=b[j]='\0';

puts(a);puts(b);

}

参考答案:

abcdefg

ADGH

9.3 编程题

第十章 结构体和共用体

10.1 选择题

10.2 填空题

10.38

10.3 编程题

第十一章 位运算

11.1 选择题

11.2 填空题

11.3 编程题

第十二章 文件

12.1 选择题

12.2 填空题

谭浩强c语言程序设计习题集 36_c程序设计 谭浩强

四 : C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

扩展:谭浩强c语言第三版 / 谭浩强c语言第三版pdf / c语言程序设计 谭浩强

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

扩展:谭浩强c语言第三版 / 谭浩强c语言第三版pdf / c语言程序设计 谭浩强

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

扩展:谭浩强c语言第三版 / 谭浩强c语言第三版pdf / c语言程序设计 谭浩强

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

扩展:谭浩强c语言第三版 / 谭浩强c语言第三版pdf / c语言程序设计 谭浩强

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

扩展:谭浩强c语言第三版 / 谭浩强c语言第三版pdf / c语言程序设计 谭浩强

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

扩展:谭浩强c语言第三版 / 谭浩强c语言第三版pdf / c语言程序设计 谭浩强

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

扩展:谭浩强c语言第三版 / 谭浩强c语言第三版pdf / c语言程序设计 谭浩强

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

扩展:谭浩强c语言第三版 / 谭浩强c语言第三版pdf / c语言程序设计 谭浩强

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

扩展:谭浩强c语言第三版 / 谭浩强c语言第三版pdf / c语言程序设计 谭浩强

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

扩展:谭浩强c语言第三版 / 谭浩强c语言第三版pdf / c语言程序设计 谭浩强

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

扩展:谭浩强c语言第三版 / 谭浩强c语言第三版pdf / c语言程序设计 谭浩强

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

扩展:谭浩强c语言第三版 / 谭浩强c语言第三版pdf / c语言程序设计 谭浩强

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

扩展:谭浩强c语言第三版 / 谭浩强c语言第三版pdf / c语言程序设计 谭浩强

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

扩展:谭浩强c语言第三版 / 谭浩强c语言第三版pdf / c语言程序设计 谭浩强

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

扩展:谭浩强c语言第三版 / 谭浩强c语言第三版pdf / c语言程序设计 谭浩强

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

c语言程序设计软件 C语言程序设计(第三版)-谭浩强[开始免费了]

[www.61k.com]

扩展:谭浩强c语言第三版 / 谭浩强c语言第三版pdf / c语言程序设计 谭浩强

本文标题:c语言程序设计谭浩强-C语言程序设计(第三版)-谭浩强【清晰完整版】
本文地址: http://www.61k.com/1156540.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1