C语言强化训练(第一、二部分).ppt_第1页
C语言强化训练(第一、二部分).ppt_第2页
C语言强化训练(第一、二部分).ppt_第3页
C语言强化训练(第一、二部分).ppt_第4页
C语言强化训练(第一、二部分).ppt_第5页
已阅读5页,还剩132页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言强化训练第一部分语法与语义第二部分程序构造方法 C 语言程序设计 2 强化训练目的 加强程序设计基础知识掌握与C语言基本编程能力的培养 包括基本语法 数据结构和基本算法 内容重点突出 注重实用的原则 3 关于计算机基础部分 计算机基础涉及范围广 第一靠平时的积累 第二关注计算机领域的新发展和我国在计算机方面的新成就 4 关于C语言学习方法 学习计算机语言的目的是为了程序设计 因此计算机语言的学习不仅仅是掌握知识 更注重于应用能力的培养 因此学习过程中 应从两方面着手 掌握知识 熟记相关的语法 语义 应用能力培养 程序设计方式 方法的学习 通过实验 总结 把知识转变为应用能力 5 C语言难点 C语言是众多计算机高级语言中最难学的语言之一 C语言有很强的特性 数据类型丰富 语法语义变化繁多 既严谨又灵活 要消化这些 需要投入大量的时间和精力 学习C语言 一方面学生缺乏这方面的学习经验 对于这门全新 枯燥 庞大的课程 心有余而力不足 更重要的是经过一段时间学习缺乏应有的信心 6 学习计算机语言时的思维 学习计算机语言的思维是一种自顶向下的思维方式 可用八个字来形容 自顶而下 逐步细化 也就是从宏观到微观 从整体到局部 这种思维符合我们大学计算机的教学 这种思维强调的是 纲举目张 强调的是分层次思考 7 关于该讲义内容说明 该讲义的大部分例题来自C语言等级考试真题 但也有部分题目来自其他语言等级考试真题或自拟的题目 8 第一部分语法与语义 一 C语言最基本部分1 保留字与标识符标识符是指常量 变量 语句标号以及用户自定义函数的名称 作为标识符必须满足以下规则 标识符必须由字母 下划线或数字 0 9 组成 标识符的第一个字符可以是字母 a z A Z 或下划线 保留字不能作标识符 9 第一部分语法与语义 特别提示 C语言是一种大小写敏感的语言 如 Test test是2个不同的标识符 例 以下选项中 B 是C语言关键字 A printfB includeC funD default 10 第一部分语法与语义 2 常量整数 注意八和十六进制数 实数 用指数形式表示小数时 方幂e 或E 前后必须是数字 e的前面可以是整数也可以是小数 但e后面只能为1 3位整数 如 1 24e3 4 3e 2是合法的实数 但1 3e e2 1 2e3 1等是不合法的实数 11 第一部分语法与语义 字符数 字符常量是用单引号括起来的一个字符 如 e E 或 开始 后跟一个字符或一个整型常量 字符的ASCII码值 的方法来表示另一个字符 如 0 n 20 等 字符串常量 用一对双引号将0个或若干个字符括起来 注意中间 0字符 字符串长度和占用内存字节数 如 123 123 0abc 12 第一部分语法与语义 符号常量 definea10constintb 20 字符常量是用单引号括起来的一个字符 如 e E 或 开始 后跟一个字符或一个整型常量 字符的ASCII码值 的方法来表示另一个字符 符号常量在程序中不能被改变 13 第一部分语法与语义 例 1 设有定义和声明如下 defined2intx 5 floaty 3 83 charc d 以下表达式中有语法错误的是D A x B y C c D d 2 以下语句中有语法错误的是A A printf d 0e B printf f 0e2 C printf d 0 x2 D printf s 0 x2 14 第一部分语法与语义 3 表达式算术运算符与表达式运算符有 特别关注 和 运算 对于除法运算 如果运算符两边的操作数都是整数 其运算结果也是整数 即两数整除 如果两个操作符中有一个是实数 其运算结果就是实数 4 5运算结果为04 0 5或4 0 5或4 0 5 0运算结果为0 85 4运算结果为15 0 4或5 4 0运算结果为1 25 15 第一部分语法与语义 例 1 已知有声明 inta 3 b 4 c 则执行语句 c 1 2 a b 后 c的值为 A A 0B 3C 3 5D 42 以下双目运算符中要求两个操作数均为整型的运算符是 D A B C D 16 第一部分语法与语义 关系运算符与表达式运算符有 特别关注 1 把 理解 或把 写成 重点在上机改错题 2 注意类似式子 设有定义intx 3 计算5 x 10的值 例 intk 0 while k 1 k 问while的循环次数 17 逻辑运算符与表达式运算符有 特别关注 逻辑表达式优化所带来的影响 也称副作用 例 已知有声明 inta 12 b 15 c 则执行表达式 c a b a 后 变量b和c的值分别为 b 15 c 1 第一部分语法与语义 18 赋值运算符与表达式运算符有 和与算术 位的复合赋值 特别关注 多重赋值的实现形式 例 已知有声明 intn floatx y 则执行语句 y n x 3 89 后 Y的值为 A 3B 3 0C 3 89D 4 0 第一部分语法与语义 19 赋值运算符左边必须是内存中一个可以访问且可以合法修改的对象 可以是变量名 引用名 数组的元素 指针变量所指向的合法空间 而不能是常量或表达式 看下面的赋值运算 3 1415926 pi x y z constintN 30 N 40 第一部分语法与语义 20 逗号运算符与表达式逗号也称顺序求值表达式 最后一个表达式的值作为整个逗号表达式的结果 例 设有语句 inti 1 s 1 for s i 6 i 5 i s i 以下for循环语句的循环次数为 位运算符 第一部分语法与语义 21 类型转换 自动类型转换类型转换有自动类型转换和强制类型转换 关注转换原则 例 1 若有声明 floaty 3 14619 intx 则计算表达式 x y 100 0 5 y x 100 0 后y的值是 2 已知有声明 charch g 则表达式ch ch a A 的值为字符 的编码 第一部分语法与语义 22 类型转换 强制类型转换例 设有声明 inta 3 b 4 floatx 4 5 y 3 5 则表达式 float a b 2 int x int y 的值是 第一部分语法与语义 23 与 特别关注 前置与后置的问题 圆括号不能改变后置的问题 例 有如下程序段 inta 5 1 3 5 7 9 p a printf d n p 则执行的结果是 第一部分语法与语义 24 二 输入 输出输入和输出是计算机语言的重要组成部分 常用输入 输出函数putchar 把变量中的一个字符常量输出到显示器屏幕上 getchar 从键盘上输入一字符常量 此常量是该函数的值 printf 把各类数据 加以格式控制输出到显示器屏幕上 scanf 从键盘上输入各类数据 并存放到程序变量中 puts 把一个字符串常量输出到显示器屏幕上 gets 从键盘上输入一个字符串常量并放到程序的数组中 第一部分语法与语义 25 最常用的 格式控制字符串 说明如下 1 d 是按十进制整型数据格式输出 数据长度为实际长度 与d之间可以加正数m 控制输出宽度 2 s 控制输出一个字符串 3 f 按小数形式输出十进制实数 包括单 双精度 实数的整数部分全部输出 并输出6位小数 m nf 表示输出实数共占m个字符位置 其中n位小数 多余位左端补空格 第一部分语法与语义 26 注意事项 1 掌握常用的一些格式控制字符 2 格式说明中 与后面格式符之间不能有空格 除了X E G格式符外 其他格式符必须用小写字母 3 若要输出 可在格式控制字符串中使用两个连续的 例如 printf d n 5 输出结果 5 第一部分语法与语义 27 例 已知有声明和语句 inta scanf a d a 欲从键盘上输入数据使a中的值为3 则正确的输入应是 第一部分语法与语义 28 三 C语言程序结构1 程序的三种基本结构顺序结构 是指程序按照语句在程序的先后顺序逐句运行 没有分支 跳转 分支 或选择 结构 是指程序根据不同的条件执行不同的分支的语句 如C语言中的if switch语句 条件运算符语句 循环结构 是指程序在满足一定的条件下循环执行的相关语句 如C语言中的while dowhile for语句 由这3种基本结构可以组成任何复杂逻辑的程序 第一部分语法与语义 29 2 C语言的语句有以下六大类 说明语句 在C 中 实现对数据结构的定义和描述 对变量的定义性说明的语句被称为说明语句 如 inta 表达式语句 在合法的表达式后面加上分号 即形成了表达式语句 a 10 控制语句 控制改变程序运行顺序的语句被称为控制语句 包括 选择语句 循环语句 流程跳转语句等 如 break 第一部分语法与语义 30 函数调用语句 在函数的调用后面加上分号 即形成函数调用语句 如 about 空语句 只有一个分号组成的语句称为空语句 它不做任何操作 复合语句 当用 将若干条语句括起来 C 将其作为一条语句进行处理 被称为复合语句 第一部分语法与语义 31 3 C语言程序组成任何一个复杂的C语言程序是由一个main 函数和若干个用户自定义函数组成的 main 函数是整个程序执行时的入口 必须有且只能有一个 可放在程序的任何地方 4 简单的设计方法 第一部分语法与语义 32 例 C语言规定 在一个源程序中main函数的位置 A 必须在最开始B 必须在最后C 必须在预处理命令的后面D 可以在其他函数之前或之后 第一部分语法与语义 33 四 流程控制语句C语言流程控制语句有 选择语句 if语句 switch语句 条件运算符语句 循环语句 while语句 do while语句 for语句 控制语句 break语句 continue语句 第一部分语法与语义 34 1 条件语句单分支的if语句if 表达式 语句if后面的表达式一般是一个逻辑表达式 如果表达式的计算结果为逻辑真 非0 则执行语句 反之 则不执行这个语句 提示 if后面只能跟一条语句 若if后面需要跟多条语句 则需用 将其变成一条复合语句 注意 条件和循环结构中要注意 和 混淆 第一部分语法与语义 35 双分支的if语句if 表达式 语句1else语句2这种if语句格式的含义是 如果if后面的表达式求值结果为非0 则执行语句1 否则执行语句2 同样要求语句1和语句2是一条语句 第一部分语法与语义 36 if语句的嵌套if条件语句嵌套时 else语句总是与最近的 同一块内的 没有与else配对的if语句配对 例 if if else 例 1 以下程序段的输出结果是 x 20 y 0 intx 10 y 20 t 0 if x y t x x y y t printf d t d n x y 2 以下程序段的输出结果是 yes inta 1 b 3 c 5 if c a b cout yes elsecout no 第一部分语法与语义 37 2 开关语句 switch switch语句也称开关语句 多重选择语句 一般用于 根据一个量的多种不同取值实现程序的执行流程的多个分支 用switch语句可以避免if else多层嵌套造成的书写错误 方便程序阅读 注意 语句格式 语法和break语句的作用 第一部分语法与语义 38 提示 a 各个case 包括default 分支出现的次序可以任意 b case分支是开关语句的入口 其后面的语句序列可以是一条语句 也可以是多条语句 c break语句是可选的 当所执行的case分支没有break 则继续往下执行其他分支的语句序列 直到遇到break语句或switch语句的关括号 为止 d case后的常量表达式需为整型常量 取值可为整型 字符型或枚举型 第一部分语法与语义 39 例 执行语句序列intn scanf d 时 若键盘输入1 则屏幕显示BA 1B 2C 3D 12 第一部分语法与语义 40 3 循环结构语句C语言循环结构语句有 while do while 和for 三种循环语句 第一部分语法与语义 41 while循环语句while语句格式为 while 表达式 语句其中 表达式可以是任意合法的表达式 是循环的控制条件 语句是重复执行的循环体 可以是C语言的一条语句 也可以是C语言的一条复合语句 while语句的执行过程是 先判断表达式的值 若表达式的值为逻辑真 非0 则进入循环执行循环体 然后自动回到循环控制条件的判断点 计算表达式的值 并重复以上的过程 直到表达式的值为假 或为0 为止 第一部分语法与语义 42 学习循环的方式方法 循环的三个要素 寻找重复执行部分 循环的条件 进入循环前的初始化 第一部分语法与语义 43 dowhile循环语句dowhile语句的格式为 do 语句 while 表达式 dowhile循环的执行过程是先执行循环体语句 后判断循环条件表达式的值 表达式的值为真 继续执行循环 表达式的值为假 则结束循环 因此 do while循环保证了循环体语句至少执行一次 第一部分语法与语义 44 for循环语句for循环语句的格式为 for 表达式1 表达式2 表达式3 语句其中表达式1称为循环初值表达式 表达式2称为控制表达式 循环终值表达式 表达式3称为增量表达式 语句序列为任意合法的一条C语言语句或复合语句 提示 for语句中3个表达式都可以省略 但两个分号不能省略 表达式1可以放在for语句之前 表达式3可以放在循环体中 表达式2也可省略 如果表达式2省略 表示循环条件恒成立 第一部分语法与语义 45 例 1 下列关于 for e1 e2 e3 s1 的描述中不正确的是 B A 存在 for s1 的情况B 表达式e1和e3可为空 但e2不能为空C 表达式e2的值可增可减D 循环体e1可以为空 但分号 必须有2 以下循环语句的循环体的执行次数为 无限次 for ints 0 j 1 j 10 s j j 3 循环语句 for intx 0 y 0 y 100 x 10 x 执行的循环次数是 A A 无限次B 10C 11D 100 第一部分语法与语义 46 4 分析程序的运行结果 includevoidmain void intn 0 m 0 for inti 0 i i n m printf d n d n n m 第一部分语法与语义 47 break语句在switch语句中 break语句终止当前所在的case语句表 从而也就终止了整个switch语句 在循环语句中 break语句可以提前结束该语句所在的循环 在嵌套循环中 break终止的是其所在的循环语句 而并非终止所有的循环 第一部分语法与语义 48 continue语句continue语句用来终止本次循环 当程序执行到continue语句时 将跳过其后尚未执行的循环体语句 开始下一次循环 并根据循环控制条件决定是否再次执行循环 在循环语句的循环体中如果执行到continue语句 则跳过循环体中continue语句的后续语句 将控制转移到下一轮循环 第一部分语法与语义 49 例 1 有如下程序段 intsum 0 i for i 1 i 10 i if i 3 0 break sum i printf sum d n sum 把break改为continue分析结果 第一部分语法与语义 50 2 以下程序运行后的输出结果是 includevoidmain intk 4 n 0 for n k n if n 3 0 continue k cout k n 第一部分语法与语义 51 3 在给定范围内查找k使得用公式k2 k 17生成的整数满足以下条件 该数的十进制表示中低3位数字相同 去掉低3位后的整数是回文数 例如 当k 461时用公式生成的整数是212999 该数满足所给条件 第一部分语法与语义 52 五 数组在结构化程序设计中 数组是组织数据的最重要 最有效手段 很多算法和编程技巧都是建立在数组的基础之上的 数组是有序的相同类型数据的集合 数组的特征是 数组名 数组类型 也就是数组各元素的类型 维数 即标识数组元素所需的下标个数 数组大小 即可容纳数组元素的个数 第一部分语法与语义 53 1 一维数组一维数组的定义与初始化一维数组也称向量 它是由具有一个下标的数组元素组成的数组 它的定义形式为 数组定义时 说明数组大小的表达式必须是常量表达式 数组定义时 没有初始化时 静态或全局数组为0 其他的是不确定的值 当只对部分元素初始化时 其余元素为0 初始化时 初始化值个数不能多于数组元素个数 第一部分语法与语义 54 第一部分语法与语义 例 1 下列数组定义中错误的是 D A inta1 2 1 B inta2 2 1 2 C inta3 3 D inta4 3 2 下列数组定义中正确的是 C A intn 10 inta n B inta 10 C constintn 10 inta n D intn scanf d 55 第一部分语法与语义 例 3 下列数组定义中错误的是 C A inta 4 0 1 2 3 B inta 0 1 2 3 4 C inta 4 0 1 2 3 4 D inta 4 0 56 一维数组的引用引用数组元素的语法格式为 其中 是非负的整型表达式 也就是数组的下标 数组下标是用来指定所要访问的数组中的元素的位置 提示 数组下标范围是从0开始的到数组的大小 1 如 inta 10 则数组下标范围是0 9 数值数组不能整体输入 输出 也不能整体引用 包括数组之间的赋值 第一部分语法与语义 57 2 二维数组二维数组的定义与初始化二维数组对应数学中的行列式或矩阵 定义二维数组的一般格式为 二维数组中的每个元素要用两个下标来表示 规定 表示为二维数组的行下标的大小 表示为二维数组的列下标的大小 第一部分语法与语义 58 二维数组元素的表示方法为 提示 两个下标的取值范围都从0开始 在C语言中 二维数组在计算机中的存储顺序是按行顺序存储的 即先存储第1行元素 然后再存储第2行元素 依次类推 第一部分语法与语义 59 例 1 对二维数组a进行正确初始化的是D A inta 2 3 1 2 3 4 5 6 B inta 3 1 2 3 4 5 6 C inta 2 1 2 3 4 5 6 D inta 2 1 2 3 4 2 设intb 5 1 2 3 4 5 6 7 则元素b 1 2 的值是A A 0B 2C 6D 7 第一部分语法与语义 60 3 数组应用 排序和查找排序和查找是建立在数组基础上的最重要的算法 排序的算法很多 最基本而常用的算法是选择排序法和冒泡排序法 查找是在排序的基础上进行的 基本的查找方法有顺序查找和折半查找两种方法 第一部分语法与语义 61 例 在一个有10个元素的数组a中找出值最大的元素及其位置 分析 这里采用 打擂台 算法 1 设置一个擂台 变量max 先将一个数 通常是a 0 放在擂台上 max a 0 2 用下一元素 a 1 与擂台上的数 max 进行比较 大者留台上 3 将第三个元素 a 2 再与台上的数比较 同样是大者留台上 4 如此比下去直到所有的数 a 1 a 9 都上台比过为止 最后留在台上的就是大者 62 includevoidmain inti j max a 10 6 9 8 5 2 4 7 3 1 0 max a 0 j 0 将a 0 放在擂台上for i 1 imax 如果擂台max上的数字小 max a i 就将a i 留在擂台上j i 记录擂台上数在数组中的位置 printf max d 其位置为 d n max j 63 例 用冒泡排序法对n个整数进行升序排序 注意 元素的序号从0开始 程序如下 for i 0 ii j if a j a j 1 t a j a j a j 1 a j 1 t 64 includevoidmain inta 10 12 5 34 26 18 8 4 22 9 15 intn 10 i j t for i 0 ii j if a j a j 1 t a j a j a j 1 a j 1 t for i 0 i n 1 i printf d t a i printf n 65 例 用选择排序法对10个整数进行升序排序 includevoidmain inta 10 12 5 34 26 18 8 4 22 9 15 intn 10 i j t for i 0 ia j t a i a i a j a j t for i 0 i n 1 i printf d t a i printf n 66 例 用顺序查找法在数组中查找指定的元素 includevoidmain inta 10 12 5 34 26 18 8 4 22 9 15 intx i n 10 scanf x d 67 例 在具有10个元素的数组中 用二分查找法 也称折半查找法 在数组中查找指定的元素 分析 二分法查找要求数组元素是有序的 二分法查找基本思路是 以升序为例 在一个区间 l r 中计算中点位置m l r 2 如果a m 就是要查找的x 则查找成功 68 includevoidmain inty 10 5 7 8 14 25 36 44 50 69 80 inti n m x scanf 输入要查找的数 d 69 4 字符数组字符数组可以整个字符串一次输入 输出 使用数组名 但在使用数组名整体一次输出时 注意字符串结束符 0 在实际操作时 要特别注意字符串中有无字符转义序列 第一部分语法与语义 70 例 1 以下程序运行后的输出结果是 7 2 main chara 7 a0 0a0 0 inti j i sizeof a j strlen a printf d d i j chara a123 123 0ef 第一部分语法与语义 71 2 在自动类型数组初始化时 若初始化的元素比数组的元素少 则其余元素初始化为 inta 3 3 则a 2 inta 3 1 3 5 7 则会 inta 3 则a 2 的值 3 设有下列语句序列 intx scanf d BA z的值为4B z的值为3C B行语句错D A行语句错 第一部分语法与语义 72 4 要定义数组A 使得其中每个元素的数据依次为 3 9 4 8 0 0 0 错误的定义语句是 A intA 3 9 4 8 0 0 0 B intA 7 3 9 4 8 0 0 0 C intA 3 9 4 8 D intA 7 3 9 4 8 第一部分语法与语义 73 六 函数1 函数的基本知识 1 函数定义函数定义时 有返回值要注意函数的返回值类型与return语句后的表达式类型相一致 函数没有返回值时 void 则用return 语句 函数可以嵌套调用 但不可以嵌套定义 在一个函数的函数体中定义另一个函数是非法的 第一部分语法与语义 74 2 函数调用调用函数时 实参和形参要求一一对应 函数调用有两种 作为表达式的函数调用和函数调用语句 对于没有返回值的函数调用只能通过函数调用语句实现 3 函数调用参数传递参数传递有三种 值传递 地址传递和引用传递 第一部分语法与语义 75 4 作用域 难点 与存储类在C 中 作用域共分为五类 块作用域 文件作用域 函数原型作用域 函数作用域 类作用域 局部变量 在一个函数内部定义的变量或在一个块中定义的变量称为局部变量 全局变量 在函数外定义的变量或用extern说明的变量称为全局变量 全局变量的作用域称为文件作用域 即在整个文件中都可以访问 第一部分语法与语义 76 1 设有函数定义调用语句 f e1 e2 e3 e4 e5 则实参个数是A A 2 B 3 C 4 D 5 2 下列函数中对调用它的函数没有起到任何作用的是C A voidf1 double 第一部分语法与语义 77 3 以下程序输出的第一行是01234第二行是15 include 作用域 intk voidmain void k 10 for inti 0 i 5 i intk k i 由于重新定义变量k 所以就有不同的作用域cout k k k cout n k n 第一部分语法与语义 78 2 递归函数在利用递归方法求值时 必须注意三点 1 递归的公式 2 递归的结束条件 3 递归的约束条件 关键是找到递归公式和递归的结束条件 递归函数在调用时分两部分 递推和回归 第一部分语法与语义 79 1 以下程序的输出结果是 vrg includevoidfunc2 inti chars verygood voidfunc1 inti cout st i if i 3 i 2 func2 i voidfunc2 inti cout st i if i 3 i 2 func1 i voidmain inti 0 func1 i 第一部分语法与语义 80 2 以下程序的输出结果是 15 includelongfib intn if n 2 return fib n 1 fib n 2 elsereturn5 n voidmain cout fib 3 第一部分语法与语义 81 3 以下程序输出的第一行是11第二行是41最后一行是x 10 includevoidfun intn int s intf1 f2 if n 1 n 2 s 1 else fun n 1 第一部分语法与语义 82 4 以下程序输出的结果是dcba includevoidshow char s if s show s 1 cout s voidmain void show abcd 0efg 0hij cout n 第一部分语法与语义 83 5 以下程序输出的第一行是123第二行是321第三行是123 includevoidp1 chars inti if s i 0 p1 s i 1 cout s i voidp2 chars inti cout s i if s i 0 p2 s i 1 voidmain void charstr 123 cout str n p1 str 0 cout n p2 str 0 cout n 第一部分语法与语义 84 3 重载函数定义的重载函数必须具有 相同的函数名但具有不同的参数个数或不同的参数类型 调用重载该函数时 将根据实参的数据类型和重载函数的形参匹配 确定调用其中的一个重载函数 第一部分语法与语义 85 4 静态变量静态类型变量有确定的初值 静态类型变量对全局变量和局部变量有不同的含义 静态类型变量只能初试化一次 当局部变量使用静态类型变量时 其作用将保存函数的运行结果 以便下次调用函数时 能继续使用上次计算的结果 但不在变量的作用域时 不能直接使用 确需使用时 可通过变量的地址取值 即指针 当全局变量使用静态类型变量时 表示所说明的变量仅限于这个源程序文件内使用 第一部分语法与语义 86 1 以下程序输出的结果是i 105i 110 includeintt staticinti 100 i 5 returni voidmain void cout i t n cout i t n 第一部分语法与语义 87 2 以下程序输出的结果是i 105105i 105110 includeintt int p staticinti 100 p 第一部分语法与语义 88 3 以下程序输出的第一行是20 第二行是400 includeintf intx staticintu 1 x x returnu x voidmain void intx 10 cout f x n cout f x n 第一部分语法与语义 89 4 以下程序输出的第一行是21 第二行是53 includeintf void staticinta b 10 c 1 a b b c returnc a b voidmain void cout f n cout f n 第一部分语法与语义 90 5 编译预处理指令编译预处理指令包括三方面的内容 文件包含 宏指令和条件编译 其重点是宏指令 带参数的宏定义 注意 在宏调用时 将不作任何语法检查 也不做任何计算 只作简单替换 第一部分语法与语义 91 1 若有宏定义 defineN2 defineY n N 1 n 则执行语句 z 2 N Y N 2 后 z的值为20 2 若有宏定义 defineT x y z x y z 4则表达式 z T 3 4 2 4 4 4 后 z的值为132 第一部分语法与语义 92 3 若有宏定义 则D defineM a b a b Eintx M 3 4 5 6 y Fy M 3 4 GA 编译时 E行语法错B 编译时 F行语法错C 编译时 G行语法错D 编译时 F行和G行语法错 4 若有宏定义 defineP x y x y definePP a b a bintc P 2 3 2 3 PP 2 3 2 3 则c的值为17 第一部分语法与语义 93 5 编译以下程序时 结果是B include 第1行 defineaa123 第2行voidmain void 第3行 cout aa n 第4行A 编译时第2行出错B 编译时第4行出错C 编译时第2 4行出错D 编译时无错误 第一部分语法与语义 94 六 指针 引用和函数1 指针指针变量的访问有两种形式 访问指针变量的值和访问指针的内容 指针可执行的运算有三种 赋值运算 关系运算和算术运算 指针变量 之间的混合运算 p1 p1 p1 p1 第一部分语法与语义 95 2 指针和一维数组假设有 inta 10 point point 总结 1 数组名等同于数组的第0个元素的地址 也是数组的起始地址 2 当指针变量point指向数组a的第0个元素后 则point i等同于a i 为a i 的地址 3 当指针变量point指向数组a的第0个元素后 则 point i a i a i point i 和 a i 都表示元素a i 注意 point 允许 但a 不允许 第一部分语法与语义 96 3 指针与二维数组要注意区分元素地址和行地址 例 假设有数组 inta 4 4 point 第0行第0列的元素地址 a 0 a 0 0 a 0 a等 第0行的行地址 a 0 a等 Point指针变量只能存放元素地址值 第一部分语法与语义 97 1 以下程序输出的第一行至第三行分别是112 358 132134 includevoidf int q1 int q2 int q3 q3 q1 q2 voidmain void inti j a 3 3 1 1 p1 a 0 int p2 a 0 1 p3 a 0 2 for i 2 i 9 i f p1 p2 p3 for i 0 i 3 i for j 0 j 3 j cout a i j t cout n 第一部分语法与语义 98 4 指向数组的指针对于一个m列的二维数组 我们可以定义一个指向它的指针 int p m 然后就有 p a 这里的指针p称为 指向数组的指针 也称指向数组的指针变量 定义指向数组的指针的一般形式为 第一部分语法与语义 99 例 使用指向数组的指针输出数组中的元素 voidmain inta 3 4 0 1 2 3 4 5 6 7 8 9 10 11 int p 4 i j p a 指针p指向数组a 起始地址 for i 0 i 3 i for j 0 j 4 j printf d t p i j printf d t p i j printf d t a i j printf d t a i j 100 例 将两个整数按从小到大的顺序输出 voidexchang int p1 int p2 指针作形参 intp p p1 p1 p2 p2 p p1 p2所指向的实参变量交换数据 voidmain inta b cin a b if a b exchang 实参为地址 输入数据 94运行结果 49 101 4 指针和字符串当字符串和指针结合在一起 使用起来就特别灵活 在各类考试中经常会出现相关的题目 1 完善程序题 以下程序的功能是 输入两个字符串 把这两个字符串拼成一个新的字符串 输出拼接后的字符串 第一部分语法与语义 102 第二部分结构化程序设计 1 完善程序题 以下程序的功能是 输入两个字符串 把这两个字符串拼成一个新的字符串 输出拼接后的字符串 includechar stringcat char to char from 实现拼接 char p to 把form拼接到to后面while to to while to from returnp 103 2 下列程序中函数insertstr的功能是 在字符串str中所有出现子串str1的后面插入子串str2 如本程序的输出为 Iamastudenttoo Youareastudenttoo Heisastudenttoo include includechar insertstr char str char str1 charstr2 char p p1 q1 t1 inti len2 if str 0 str1 0 str2 0 returnstr len2 strlen str2 p str t1 str2 104 while p 0 p1 p q1 str1 while p1 q1 105 5 引用引用是某一变量 目标 的一个别名 对引用的操作与对变量直接操作完全一样 定义引用的一般格式 目标变量名 必须是已经定义过的变量或引用 符号 在不同的场合有不同的含义 在数据声明时 如int a 意为引用 若 前无类型符 则是取变量的地址 如inta p a 第一部分语法与语义 106 6 参数传递方式有值传递 地址传递和引用传递三种 怎么理解参数传递呢 前期知识回顾计算机内存单元 地址与数据 第一部分语法与语义 107 理解C语言中 最简单的语句 inta 10 第一部分语法与语义 108 形参与实参的对应关系假设 主调函数中有定义 intx 10 p 109 参数不同传递方式对结果的影响 includeintf1 inta a returna intf2 int a a return a intf3 int a a return a intf4 int 10 1111 1110 2011 11 110 第一部分语法与语义 七 结构体有时需要将不同类型的数据组合成一个有机的整体 以便于引用 这些组合在一个整体中的数据是互相联系的 111 第一部分语法与语义 1 结构体类型说明声明一个结构体类型的一般形式为struct结构体名 成员表列 112 第一部分语法与语义 2 结构体类型变量定义定义结构体类型变量的方法先声明结构体类型再定义变量名structstudent intnum charname 20 charsex 113 第一部分语法与语义 声明结构体类型时定义变量名structstudent intnum charname 20 charsex stu1 stu2 直接定义结构体变量struct intnum charname 20 charsex stu1 stu2 114 第一部分语法与语义 3 结构体类型变量引用在定义了结构体变量以后 当然可以引用这个变量 但应遵守以下规则 1 不能将一个结构体变量作为一个整体进行输入和输出 例如 已定义student1和student2为结构体变量并且它们已有值 不能这样引用 printf d s c d f s n student1 只能对结构体变量中的各个成员分别进行输入和输出 引用结构体变量中成员的方式为 结构体变量名 成员名 115 4 指针和链表要掌握指针和链表 对相关语句所实现的功能必须非常明确 设有结构体说明 需要黑板画图说明 structNode intdata Node next Node p1 p2 p1 newNode 产生一个新结点p2 p2 next p2指针指向下一个结点p2 next p1 把p1指向的新结点连到p2结点的后面 第一部分语法与语义 116 例1 设h1和h2分别为两个单链表的头指针 链表中结点的数据结构为 typedefstructnode intdata structnode next NODE sea del函数的功能是 删除h1指向的链表中首次出现的与h2指向的链表中数据完全匹配的若干个连续结点 函数返回h1指向链表的头指针 例如 初态下 h1指向链表和h2指向链表如下图所示 第一部分语法与语义 117 试完善函数seadel以达到要求的功能 118 NODEsea del NODE h1 NODE h2 NODE p ph q s ph NULL p q h1 s h2 if h1 NULL h2 NULL returnh1 while p NULL 119 例2 设结点的数据结构定义如下 structPNODE intx y PNODE next 函数padd的功能是 根据pa pb指向的两个链表 按节点的y值升序排列 生成一个新链表 pc为链表首指针 新生成链表仍按升序排列 生成新链表的规则是 当在pa和pb链表中发现y值相同的结点时 则在pc链表中增加一个新节点 新节点的x取值为两链表对应的两个节点的x值之和 新节点的y指为pa或pb链表中对应节点的y值 第一部分语法与语义 120 PNODE padd PNODE pa PNODE pb PNODE pcr pt pc 0 while pa 121 第一部分语法与语义 八 文件1 文件类型指针缓冲文件系统中 关键的概念是 文件指针 每个被使用的文件都在内存中开辟一个区 用来存放文件的有关信息 如文件的名字 文件状态及文件当前位置等 FILE fp 122 第一部分语法与语义 2 文件的打开与关闭和其他高级语言一样 对文件读写之前应该 打开 该文件 在使用结束之后应关闭该文件 fopen函数的调用方式通常为 FILE fp fp fopen 文件名 使用文件方式 例如 fp fopen a1 r 123 第一部分语法与语义 3 文件的关闭 fclose函数 在使用完一个文件后应该关闭它 以防止它再被误用 关闭 就是使文件指针变量不指向该文件 例如 fclose fp 124 第一部分语法与语义 4 文件的读写文件打开之后 就可以对它进行读写了 常用的读写函数如下 printf函数和fscanf函数fprintf函数 fscanf函数与printf函数 scanf函数作用相仿 都是格式化读写函数 125 第二部分 程序构造方法 一 C语言的程序结构C语言程序文件是以函数为单位叠加起来的 任何一个C 项目必须有且只能有一个main 函数 main 函数是C语言程序执行时的入口 其他函数都是具有独立功能的一部分程序 由main 函数或其他函数调用 126 在程序设计过程中 对于功能相对独立且重复的功能 可以通过一个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论