1、第 1 章 C+基础知识1.1 知识要点计算机的基本功能是进行数据处理。在 C+语言中,数据处理的基本对象是常量和变量。运算是对各种形式的数据进行处理。数据在内存中存放的情况由数据类型所决定。数据的操作要通过运算符实现,而数据和运算符共同组成了表达式。本章是对 C+语言中的数据类型、运算符、表达式等内容的全面介绍,要正确理解其特点,并灵活运用,主要掌握以下的知识要点:1掌握常量和变量的概念。2掌握整型数据和实型数据、字符型数据和字符串型数据的概念和区别。3掌握各种类型的变量说明及其初始化。4掌握算术运算、关系运算、逻辑运算、赋值运算、逗号运算、条件运算等概念。5掌握运算符的优先级、左结合和右结
2、合规则。6掌握表达式求值时的自动转换和强制类型转换。7掌握自加、自减运算的规则。8掌握常用数学函数的功能。9. C+程序的组成注释部分(两种风格) 、编译预处理部分(宏定义,文件包含和条件编译、 ) 、程序正文部分(类型定义、常变量定义、函数定义) 。最终,程序源代码由 ASCII 码组成类似单词或词组的单元(词法单元) ,可以用任意的文本编辑器编辑,源代码中的空白(空格、Tab、回车换行)用来表示词法单元的开始和结束,除这一功能外其余空白将被忽略,但如果是字符串内部的空白(不含回车换行,或者说字符串内不能直接回车换行,需要使用转义符)将作为字符串的一部分输出,不会忽略。注释:1)一 对 符
3、号 “/ *”与 “* /”之 间 的 内 容 称 为 注 释 。 它 可 以 占 多 行 , 是 从 C 语 言中 继 承 来 的 一 种 注 释 形 式 。2)一 行 中 符 号 “/”之 后 的 内 容 也 称 为 注 释 。 它 只 能 占 一 行 , 是 C+语 言 特 有 的 一种 注 释 形 式 。编译预处理命令: C+的编译预处理命令以“#”开头。C+提供了三类编译预处理命令:宏定义、文件包含和条件编译。 程序主体:用 函 数 组 织 过 程 , 每 个 相 对 独 立 的 过 程 都 要 组 织 成 一 个 函 数 ; 不 同 的 程序 由 不 同 的 函 数 按 层 次 结
4、 构 组 织 而 成 。 一 个 C+程 序 至 少 且 仅 包 含 一 个 main( ) 函 数 ,也 可 以 包 含 一 个 main( ) 函 数 和 若 干 个 其 他 函 数 。 其 他 函 数 可 以 是 系 统 提 供 的 库 函 数 ,也 可 以 是 用 户 根 据 需 要 自 己 编 制 设 计 的 函 数10. 程序的编辑、编译、连接和运行(1)编 辑 编 辑 是 将 编 写 好 的 C+源 程 序 输 入 到 计 算 机 中 , 生 成 磁 盘 文 件 的 过 程 。(2)编译和连接过程编 译 器 的 功 能 是 将 程 序 的 源 代 码 转 换 成 为 机 器 代
5、码 的 形 式 , 称 为 目 标 代 码 , 然 后 ,再 将 目 标 代 码 进 行 连 接 , 生 成 可 执 行 文 件 。编 译 过 程 又 可 分 为 三 个 子 过 程 。(1)预处理过程:对源 程 序 编 译 时 , 先 进 行 预 处 理 , 如 果 源 程 序 中 有 预 处 理 命 令 ,则 先 执 行 这 些 预 处 理 命 令 , 执 行 后 再 进 行 下 面 的 编 译 过 程 。(2)编译过程:编 译 过 程 主 要 是 进 行 词 法 分 析 和 语 法 分 析 的 过 程 , 又 称 源 程 序 分 析 。1)词 法 分 析 。 2)语 法 分 析 。 3)
6、符 号 表 。 4)错 误 处 理 程 序 。 5)生 成 目 标 代 码 。连 接 过 程 : 这 是 编 译 的 最 后 一 个 过 程 , 将 用 户 程 序 生 成 的 多 个 目 标 代 码 文 件 和 系 统提 供 的 库 文 件 中 的 某 些 代 码 连 接 在 一 起 由 连 接 器 生 成 一 个 可 执 行 文 件 , 存 储 这 个 可 执 行文 件 的 扩 展 名 为 .exe。(3) 运 行 一 个 C+的 源 程 序 经 过 编 译 和 连 接 后 生 成 了 可 执 行 文 件 。 运 行 可 执 行 文件 可 在 编 译 系 统 下 选 择 相 关 菜 单 项
7、 来 实 现 , 也 可 以 采 用 其 他 方 法。1.2 典型例题分析与解答1 选择题例题 1:运算符+、= 、*、=中,优先级最高的运算符是( ) 。A+ B= C* D=答案:C分析:根据 C+语言对运算符优先级的规则,以上运算符优先级从低到高的次序为=、= 、+、*。例题 2:下列说法正确的是( ) 。Acouta+coutr;couth;area=3.14*r*r;volume=area*h;cout10 (9) x10 ? x : sqrt (x) (10) x double x=4.7; char r= a; 试求出下列每个表达式的值(假定各表达式互不影响) 。答案 答案(1)
8、a+ (2) +r (3) 1+a/3%4 (4) 10*sizeof( int ) (5) char (a+20) (6)a= =r | a= =floor(x) (7) a/9.0 (8)x=pow(3,5) (9) x=(a+,r+) (10) ceil(x-0.5) (11) a=abs(a)%8-10 (12)x=fabs(-27.2)+6 (13)floor(x+0.5) (14) ceil(x-=0.5)-0.5) (15)floor(x*1000+0.5)/1000 (16)floor(x+0.5) (17)floor(x*1000)/1000 (18)a+rand()%40
9、(19) a % =n % = 2) ,n=5 此题运行时要给 n 赋初值, n 必须是整型奇数,n 为整型偶数出错。(20) a + = a - = a * = a 说明:函数 ceil(x) ,返回大于等于 x 的最小整数;floor(x) ,返回小于等于 x 的最大整数;rand () ,返回 032767 之间的整数。8.设程序中有说明语句int x=20; float y=4.7; char ch = k; 试求出下列每个表达式的值(假定各表达式互不影响)答案 答案(1) x=0 (2) x!=y (3) x+ 21 (4) a = A (5) ch != 0 (6) x0 b=a”
10、 执行后,c 的值为 2C语句“int a=0,c=1,b;b=a|c+;” 执行后,c 的值为 2D语句“int a=1,c=1,b;b=a” 执行后,c 的值为 2(6)设 int m=7,n=12;则表达式为 3 的是( ) 。An%=(m%=5) Bn%=(m-m%5)Cn%=m-m%5 D(n%=m)-(m%=5)(7)数学公式 yx+lny,正确的 C+语言的表达式是( ) 。Asqrt(fabs(pow(y,x)+log(y) Bsqrt(fabs(pow(x,y)+log(y)Csqrt(abs(pow(y,x)+log(y) Dsqrt(abs(pow(x,y)+log(y)
11、(8)有如下程序段:int a=14,b=15,x;char c=A;x=(a&b)&(cb)& (n=c=a)&(n=n)| | (z=a )&(n=z)10. 填空题(1) “A”与 A的区别是:前者表示的是_,占用_个内存空间,后者表示的是_,占用_个内存空间。(2) 表达式 8/4*(int)2.5/(int)(1.25*(3.7+2.3)值的数据类型为_。(3)已知 c 的 ASCII 码为十进制数 99,设 k 为字符型变量,则表达式 k=c+9-8的值为_。(4)设有说明语句 int a=6;,则运算表达式 a+=a-=a*a 后,a 的值为_。(5)C+表达式表达:y=ax 2
12、+bx+c_, 5x3+9xy/5-xy_。(6)设 a、b、c 都是 int 型变量,则运算表达式 a=(b=4)+(c=2)后,a 值为_,b 值为_,c 值为_。(7) C+语言中的标识符只能由三种字符组成,它们是_,_和_。(8)有语句:char k=010 ;则变量 k 中包含的字符个数是_。(9)在 C+语言中,表示逻辑“真”值用_。(10)表达式 pow(2.8,sqrt (double(x) ) )值的数据类型为_。(11)设 m 是一个三位数,从左到右用 a、b、c 表示各位是数字,则从左到右各个数字是cba 的三位数的表达式是_。(12)设有语句 int a=3,b=4,c
13、=5;则表达式:!(a+b)+c-1&b+c/2 的值为_,表达式 a | | b+c& b = = c 的值为_。(13) 请写出判断整型变量 x 为偶数且不小于 100 的表达式:_。11. 编程题(1)用 C+语言写出下列要求的表达式: 判断 char 型变量 ch 是否为大写字母。 设 y 为 int 变量,判断 y 是否为奇数。 设 x、y、z 都为 int 型变量,描述“x 或 y 中有一个小于 z”。 设 x、y、z 都为 int 型变量,描述“x、y 和 z 中有两个为负数” 。(2)编写一个程序,从键盘输入两个整型的数,在屏幕上分别输出这两个数的和、差和积。(3)编写一个程序,从键盘输入两个数,分别求出这两个数的平方和和立方和,在屏幕上予以输出。(4)编写程序,从键盘输入某一字母的 ASCII 码,如:97(字母 a) ,98(字母 b) ,65(字母 A)等,在屏幕上输出给字母。