已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文由中国移动接线员贡献 p d f 文档可能在WAP端浏览体验不佳 建议您优先选择TXT 或下载源文件到本机 查看 计算机等级考试 C 语言上机速成 网站简介 计算机 321 h t t p w w w j s j 321 c o m 京ICP备 06013945 号 是为计算机 信 息 等IT类专业在校大学生服务的学习社区 IT行业是一个前景广阔的行业 对人才的需 求量 非常大 但是与此对应的是在校IT类专业大学生却非常迷茫 他们有着各种各样的 困惑 1 IT 类专业好找工作吗 待遇怎么样 2 现在计算机专业学生那么多 我们会 不会找不到工作 3 培训机构几个月就能培养出一个高薪白领软件工程师 我学四年 却什么都不会 是不是上大学浪费了 4 听说我们专业毕业后可以做软件开发 游戏 开发 嵌入式开发 网络管理 我应 该学哪个方向 5 有人说 做软件开发就是吃青春 饭 干不到 35 岁 是不是 35 岁以后我就失业 了 6 IT 行业的技术发展这么快 是 不是我学的很快就会被淘汰 学什么不会被淘汰 7 这么多技术 我该学什么 我该怎 么学 8 看到招聘启事上都写着要会某某工具 某某语言 某某框架 这什么时候 能学完 9 单位招聘都要两年 三年的工作经验 我还没毕业哪里来的经验呀 10 像 微软 g o o g l e 百度 IBM 等这样的大公司招聘的时候看重什么能力呀 11 考研还是不 考研 谁能告诉我 12 计算机专业是学好 C 语言就行了吗 C Ja v a 那些东西需不 需要学 大部分同学都在被这些问题迷茫着 因此浪费了大量的时间 也走了 很多弯路 这样大 部分同学毕业后个人能力根本无法满足企业的要求 这就出现了同 学们最害怕的 毕业即失 业 企业里急需大量才人 应届生找不到工作 是业内一个怪 圈 计算机 321 认为 要从根本上改变这个怪圈就要从同学们的大学生活的每一天抓 起 大一看清 IT 行业 对 这个行业产生兴趣 大二 大三苦练基本技能 实战本领 大 四学习求职技巧 是我们运 营的宗旨 JSJ321 原创的 C 语言也能干大事 自己 动手写网站 学校里教的过时了吗 一 切语言都是纸老虎 等视频教程已 经帮助很多同学走出了困境 学东西不用东奔西走 在宿舍就能学习 在网上就能与老 师互动 让 计算机 321 与 同学们共成长 本教程由 j s j 321 c o m 原创 未经许可禁止转载 计算机等级考试 C 语言上机速成 JSJ321 网站编辑 n w 0220 制作 本教程由 j s j 321 c o m 原创 未经许可禁止转载 计算机等级考试 C 语言上机速成 目 录 连载 1 编程的良好习惯 1 连载 2 程序愚蠢的错误 5 连载 3 排错技巧 8 连载 4 C 语言重点难点详解 11 连载 5 应试基本算法 14 连载 6 提取 一个数字各位的数字 20 连载 7 递归函数 22 连载 8 求出一个数组中的最大 值 最小值 25 连载 9 指针相关题目 27 连载 10 排序算法 32 连载 11 常 用库函数之数学函数 36 连载 12 常用库函数之串操作函数 37 连载 13 常用 库函数之内存操作 字符函数 42 连载 14 试题精解 求余数型题目 45 连载 1 5 试题精解 个数统计 46 连载 16 试题精解 提取一个数字各个位上的数值 50 连载 17 试题精解 排序 55 连载 18 试题精解 数值精度题 58 连载 19 试 题精解 递归类 59 连载 20 试题精解 数组类问题 62 连载 21 试题精解 矩阵 类题目 64 连载 22 试题精解 字符及串操作类题 71 连载 23 试题精解 字符 数组排序 74 连载 24 试题精解 字符串加密 77 连载 25 试题精解 出圈型 80 连载 26 试题精解 平均值题 82 连载 27 试题精解 字符串类型题 83 连 载 28 试题精解 结构体类型题 84 连载 29 应试技巧篇 86 连载 30 经验汇总 90 本教程由 j s j 321 c o m 原创 未经许可禁止转载 计算机等级考试 C 语言上机速成 p a g e 1 连载 1 编程的良好习惯 j s j 321 c o m 无论对于专业编程人员还是业余编程人员 良好的编程习惯的养成都会对快速良 好的完成程序设计有 很大的帮助 作为一本知道计算机等级考试上机应试技巧的书 本 书只讨论对应试有帮助的一些东西 如 果读者有兴趣还可以参考其他相关的书籍 1 时刻注意保存程序 在上机考试过程中 有相当数量的考生就是因为忘记了保存程序而 影响了考试成绩 也有的考生程序 已经写的差不多了 但是在调试程序以前没有保存程 序 由于程序中的一点点错误 导致的死机 等重启 计算机后 由于程序没有保存 以前 的工作也就付之东流了 不得不重新开始 在此 我提出一下几点建议 在您编程过 程中要随时注意保存程序 每当输入三 四行程序 就应该按一下 F2 键 也就是保存程 序的快捷键 当您在调试程序之前 一定要随手按一下 F2 键 以防止死机 实践证 明 很多死机的情况都发生在 这个时候 2 不要修改程序的其他部分 二级上机考试程 序设计试题大部分都是要求考生完成某个功能函数 程 序其他部分已经给出 所以千万 不能修改程序的其他部分 3 使用缩进的编程风格 使用缩进的编程风格可以使程序更 清晰 易于发现其中的错误 请看下面的 两段程序 程序一 f o r i 1 i 20 i p r i n t f d i f o r j 1 j v o i d f u n c i n t t e s t n u m t e x t n u m p r i n t f t e s t n u m d n t e s t n u m v o i d m a i n i n t n u m n u m p r i n t f n u m d n n u m f u n c 这段程序在不同的计算机 不同时刻运行会得到不同的结果 比如此程 序在我的计算机上第一次运行 的结果就是 n u m 64 f u n c 50 所以 所有您自定义的变 量在使用以前一定要初始化 最好的方式就是在定义时就给它赋初始值 如 上边的程序 就可以改正为 i n c l u d e v o i d f u n c i n t t e s t n u m 0 t e s t n u m p r i n t f t e s t n u m d n t e s t n u m 本教程由 j s j 321 c o m 原创 未经许可禁止转载 第2页 计算机等级考试 C 语言上机速成 v o i d m a i n i n t n u m 0 n u m p r i n t f n u m d n n u m f u n c 程序运行结果为 n u m 1 t e s t n u m 1 再举一个例子 这个例子中的未初始化的错误是很多人都会犯的 求一个数组的平均值 错误的做法 i n c l u d e St d i o h i n c l u d e Co n i o h m a i n i n t x x 5 2 3 5 6 3 i n t s u m i n t n f o r n 0 n 9 i d 9 与 i d 9 i d 5 看起来更清楚 6 不要命名冲突 求一个数组的平均值 不知道您是否这样这样写过 i n c l u d e St d i o h i n c l u d e Co n i o h m a i n 本教程由 j s j 321 c o m 原创 未经许可禁止转载 第3页 计算机等级考试 C 语言上机速成 i n t a 0 i n t a 5 1 3 5 4 6 i n t n 0 f o r n 0 n 65 s c a n f d n p r i n t f d n 上面的程序语法上没有 任何错误 但是运行时总是得不出正确得结果 相信很多人都看出了错误 就 是 s c a n f d n 应该写成 s c a n f d 这个错误如此简单 以至于有很多人常常忽视这 个错误 二 f o r 循环的错误 有这样一道题 题目要求 为 i n t 型数组 n u m 10 的所 有单元赋初值 99 然后将它们打印出来 某考生如此写到 i n c l u d e St d i o h i n c l u d e Co n i o h m a i n i n t n u m 10 i n t n 0 m 0 f o r n 0 n 10 n n u m n 99 f o r m 0 m 10 m p r i n t f d n n u m m 执行结果竟然为 99 究竟 为什么呢 对 f o r 循环语句后多了一个小尾巴 这样 只是 f o r 语句在那里空转 1 0 次 然后才执行 n u m n 99 这时 n 9 所以只有 n u m 9 被赋了值 正确的程序如 下 i n c l u d e St d i o h i n c l u d e Co n i o h 本教程由 j s j 321 c o m 原创 未经许可 禁止转载 第5页 计算机等级考试 C 语言上机速成 m a i n i n t n u m 10 i n t n 0 m 0 f o r n 0 n 10 n n u m n 99 f o r m 0 m 10 m p r i n t f d n n u m m 三 与 混淆 学过其他编程语言 如 VB De l p h i 等 的考生常常会犯下面的错误 i f n 9 正确的写法应该为 i f n 9 好在对于这种错误 TC 编译器都会给出 Po s s i b l y i n c o r r e c t a s s i g n m e n t i n f u n c t i o n m a i n 的警 告 所以当您见到此警告时 就先要看看程序中有 没有这样的错误了 四 与 混淆 这个错误也是学过其他编程语言 如 VB D e l p h i 的人经常犯的错误 应该注意在 C 语言中 不等号 是 而不是 例如 对下面的程序 TC 编译器将会报错 i f a b 五 数组个数错误 下面的程序 i n c l u d e St d i o h i n c l u d e Co n i o h m a i n i n t n u m 10 i n t n 0 f o r n 0 n 10 n n u m n 99 对于上边的程序 TC 编译器并不会提示错误 但是运 行后常常会导致死机或程序运行异常 本教程由 j s j 321 c o m 原创 未经许可禁止转载 第6页 计算机等级考试 C 语言上机速成 因为当 n 10 的时候 n u m n 99 就变成了 n u m 10 99 而由于 C 语言编译器并不进行边界检 查 但是由于 n u m 10 产生了越 界 n u m 10 所占的空间已经超过了程序能控制的范围 所以如果 n u m 10 侵犯了系统 的内存空间 就会发生死机等异常现象 正确程序如下 i n c l u d e St d i o h i n c l u d e Co n i o h m a i n i n t n u m 10 i n t n 0 f o r n 0 n 10 n n u m n 99 六 忘记语句后边的 对于这类错误 TC 的高亮色条将停留在该语句的下一行 并且 提示 St a t e m e n t m i s s i n g i n f u n c t i o n 函数名 七 错误的将变量定义语句放于执 行语句之后 注意 在 TC2 0 环境中 变量的定义必须放在执行语句之前 下面的代码 就是错误的 m a i n p r i n t f h e l l 0 n i n t a 10 此处错误 八 使用了未 定义的变量名 此时系统提示 Un d e f i n e d s y m b o l i n f u n c t i o n p a g e 3 本教程由 j s j 321 c o m 原创 未经许可禁止转载 第7页 计算机等级考试 C 语言上机速成 连载 3 排错技巧 j s j 321 c o m 一 一时不用的代码不要删除 而是要将其注释起来 在您调试程序过程中 如果发 现某行或某几行程序错了或者时没有用处了 请不要草草的将它删除 而是要用注释符 号将其暂时屏蔽掉 使其不起作用 因为很有可能当你又编了一会儿后才发现原来的代 码 并没有错或者只需稍加修改就可以 那么只要将注释符号去掉即可 这就省去了重新 输入代码的时间 也 就节约了宝贵的考试时间 如果当您编写的程序已经正确执行了的 时候 注释掉的代码还没有被用到的话 到那时候就可以删除它们了 当然不删除这些 注释掉的代码也没有关系 因为它们并不影响您的考试成绩 再 TC 编译环境中 注释 符号是 将 放在您想注释掉的那些行的第一行前 将 放在您想注释 掉的那些行的最后一行后 例如 对于下面的代码 i n c l u d e St d i o h i n c l u d e Co n i o h m a i n i n t n u m 10 i n t n 0 f o r n 0 n 10 n n u m n 99 我想 注释掉 f o r 循环语句就可以这样 i n c l u d e St d i o h i n c l u d e Co n i o h m a i n i n t n u m 10 i n t n 0 f o r n 0 n 0 m p r i n t f d m 本教程由 j s j 321 c o m 原创 未经许可禁止转载 第8页 计算机等级考试 C 语言上机速成 但是由于疏忽 将程序输成了 i n c l u d e St d i o h i n c l u d e Co n i o h m a i n i n t m 0 f o r m 10 m 0 m p r i n t f d m g e t c h 这样由于 m 被 错误的输成了 m f o r 这个循环语句会一直执行下去 当然 我们这里不考 虑溢出的 情况 所以在我们看来 就想死机了一样 我们完全可以中止这个死循环的执行 那就 是我们的救命宝 键 Ct r l Pa u s e Br e a k Pa u s e Br e a k 键一般位于方向键的上方 当 发生 死机 情况时 先按一下这个组合键 此时只要再按一下 ESC 键 就又可以回到 TC 编译环境中了 如果按下 Ct r l Pa u s e Br e a k 电脑仍 然没有反应 就有可能是真的 死机了 这时您应 向监考人员说明情况 由监考人员确认为非人为造成死 机时 方可 进行二次登录 您不要自行重启计算机 否则的话有可能影响考试成绩 关于如何避免 假死机 我们在后面的章节还会有论述 三 用 p r i n t f 语句辅助调试 如果您不理解 程序为什么错 为什么输出结果与预想的不一致 那么弄清楚它的最简单而又最有效的 方法是添加一些输出语句 这样可以是程序显示出更多的信息 能帮助您更快速的排除 错误 下面举一个 简单的例子 例 要求编程实现将初值为 0 的 i n t 型变量 m 以每 次增加 1 的形式增加到 10 并打印 m 错误的程序 i n c l u d e St d i o h i n c l u d e Co n i o h m a i n i n t m 0 i n t n 0 f o r n 0 n 10 n m p r i n t f d n m 正确的结果应该是 10 这里却输出了 0 于是我们怀疑是 f o r 循环语句没有执 行 于是插入 p r i n t f 语 句 如下 i n c l u d e St d i o h i n c l u d e Co n i o h m a i n 本教程由 j s j 321 c o m 原创 未经许可禁止转载 第9页 计算机等级考试 C 语言上机速成 i n t m 0 i n t n 0 f o r n 0 n 10 n m p r i n t f I a m h e r e n p r i n t f d n m 如果 f o r 语句执行正确的话 程序应该输出 10 个 I a m h e r e 但是结果一个也没有输出 这说明 f o r 语句根本没 有被执行 于是我们把注意力集中在 f o r 循环语句上 经过检查发现 原来 f o r n 0 n 10 n 修改后正确 也许您第一眼就看出了这 个错误 因为它太简单了 但是如果在 f o r 循环语句和 p r i n t f 之间又有很多 行程序 的话 您也许就不能立即把注意力放在 f o r 语句上了 本教程由 j s j 321 c o m 原创 未经许可禁止转载 p a g e 4 第 10 页 计算机等级考试 C 语言上机速成 连载 4 C语言重点难点详解 j s j 321 c o m 第一节 运算符 C 语言的运算功能十分丰富 运算种类远多于其它程序设计语言 因此 当多种不同运算组成一个运 算表达式 即一个运算式中出现多种运算符时 运算 的优先顺序和结合规则显得十分重要 下面我们通过几个例子来说明 1 3 20 4 10 这个表达式中出现 3 种运算符 是同级运算符 运算顺序按从左至右结合 因 此先计算 3 20 60 然后被 4 除 结果为 15 最后是 求余数 运算 所以表达式 的最终结果为 15 10 5 2 a 3 b 5 c a b d a b 例子 中的 是 C 语言的语句分隔符 执行顺序为从左到右 第 1 条语句执行后 a 的值为 3 第 2 条语句执行后 b 的值为 5 第 3 条语句中有两个运算符前置 和 按表中所 列顺序 先执行 后执行 所以 a 执行后 a 的值为 4 由于 为前置运算 所以 a 的值 4 参与运算 C 的值为 20 最后执行第 4 条语句 由于 a 为后置运算 所以 a 值为 4 参与运算 使得 d 的值仍为 20 而 a 参与运算后其值加 1 值为 5 软件 公司需要学生什么样的能力 这个例子执行后 a 的值为 5 b 的值为 5 c 的值为 20 d 的值也是 20 3 a 3 b 5 b a c b 5 例子中的 是逗号结合运算 上式称为逗号表达式 自左向右结合 最后一个表达式的结果值就是逗号表达式的结 果 所以上面的逗号表达式结果为 40 a 的 值为 3 b 的值为 8 c 的值为 40 第二节 C 语言的几种程序结构 1 顺序结构 这种结构的程序比较简单 就是按照语句的排列 顺序依次执行的机制 顺序结构的执行顺序是自上而 下 依次执行 因此编写程序也必 须遵守这一规定 否则你的程序执行结果就不对 例如 a c a a b b c 执行 结果是 a 5 b c 3 如果改变其顺序 写成 a b c a b c 则执行结果 就变成 a b c 5 不能达到预期的目的 这是初学者常犯的错误 顺序结构可以 独立使用构成一个简单的完整程序 常见的输入 计算 输出三步曲的程序就是顺序结 构 例如计算圆的面积 其程序的语句顺序就是输入圆的半径 R 计算 S 3 14159 R R 输出圆的面 积 S 而大多数情况下顺序结构都是作为程序的一部分 与其它结构 一起构成一个复杂的程序 例如分支 结构中的块体 循环结构中的循环体等 2 分支 结构 分支结构与顺序结构不同 其执行是依据一定的条件选择执行路径 而不是严格按 照语句出现的物理 顺序 分支结构的程序设计方法的关键在于构造合适的分支条件和 分析程序流程 根据不同的程序流程选 择适当的分支语句 本教程由 j s j 321 c o m 原 创 未经许可禁止转载 第 11 页 3 b 5 现交换 a b 的值 正确的程序为 计算机等级考试 C 语言上机速成 分支结构适合于带有逻辑条件判断的计算 设 计这类程序时往往都要先绘制其程序流程图 然后根据 程序流程写出源程序 这样做把 程序设计分析与语言分开 使得问题简单化 易于理解 程序流程图是根 据解题分析所 绘制的程序执行流程图 学习分支结构不要被分支嵌套所迷惑 只要弄清基本的分支结 构 嵌套结构也就不难了 嵌套只不过 是分支块体中又包括分支语句而已 不是新知识 只要你基础知识扎实 分支嵌套也难不住你 下面我们 重点讨论几种基本的分支结构 的学习方法 If 条件 块 这种分支结构中的块可以是一条语句 此时 可 以省略 也可以是多条语句 它有两条分支路径 可选 一条是条件为真 执行块 另一条 是条件不满足 跳过块 如 计算 x 的绝对值 根据绝对值定义 我们知道 当 x 0 时 其绝对值不变 而 x 0 时其绝对值是为 x 的反号 因此程序段为 i f x 0 时 方程有两个实根 否则 b 2 4a c 0 x 1 b s q r t d 2a x 1 b s q r t d 2a p r i n t f x 1 8 4f x 2 8 4f n x 1 x 2 e l s e r b 2 a i s q r t d 2 a p r i n t f x 1 8 4f 8 4f i n r i p r i n t f x 2 8 4f 8 4f i n r i 多路分 支 其语句格式为 i f 条件 1 e l s e e l s e e l s e e l s e i f 条件 n 块 n 1 块 n 块 1 块 2 块 3 i f 条件 2 i f 条件 3 本教程由 j s j 321 c o m 原创 未经许可禁止转载 第 12 页 p a g e 5 计算机等级考试 C 语言上机速成 s w i t c h 语句 s w i t c h 语句也是多分支选择 语句 又称为多路开关语句 到底执行哪一块 取决于开关设置 也就是 表达式的值与常 量表达式相匹配的那一路 它不同 i f e l s e 语句 它的所有分支都是并列的 程序 执行时 由第一分支开始查找 如果相匹配 执行其后的块 接着执行第 2 分支 3 分支 的块 第 直到遇到 b r e a k 语句 如果不匹配 查找下一个分支是否匹配 3 循环结构 循环结构可以减少源程序重复书写的工作量 用来描述重复执行某段算法 的问题 这是程序设计中最 能发挥计算机特长的程序结构 C 语言中提供四种循环 即 g o t o 循环 w h i l e 循环 d o w h i l e 循环和 f o r 循环 四种循环可以用来处理同一问 题 一般情况下它们可以互相代替换 但一般不提昌用 g o t o 循环 所以 下面我们重点 讲解另外的三种循环 常用的三种循环结构学习的重点在于弄清它们相同与不同之处 以便在不同场合下使用 大家好好看 一下书中三种循环的格式和执行顺序 如何替换 使用 如把 w h i l e 循环的例题 用 f o r 语句重新编写一个 程序 这样能更好地理解它 们的作用 注意 w h i l e 和 d o w h i l e 循环体内和 f o r 循环中的第 3 语句中 在 应包含趋于结束的语句 如 I I 否则就可能成了一个死循环 这也是初学者的 一个常见错误 下面我们来讨论下这三种循环的异同之处 用 w h i l e 和 d o w h i l e 循环时 循环变量的初始化的操作应在循环体之前 而 f o r 循环是在语句 1 中 进行的 w h i l e 循环和 f o r 循环都是先判断表达式 后执行循环体 而 d o w h i l e 循环是先执 行循环体后 判断表达式 也就是说 d o w h i l e 的循环体最少被执行一次 而 w h i l e 循 环和 f o r 就不一定了 这三种循 环都可以用 b r e a k 语句跳出循环 用 c o n t i n u e 语句 结束本次循环 而 g o t o 语句与 i f 构成的循环 不能用 b r e a k 和 c o n t i n u e 语句进行 控制 这三种结构并不是彼此孤立的 在循环中可能出现分支 顺序结构 分支中也可能 出现循环 顺序结 构而把循环 分支看成一个语句 它又是构成顺序结构的一个元素 因 此这三种结构相互结合 就能实现 各种算法 设计出解题程序 本教程由 j s j 321 c o m 原创 未经许可禁止转载 第 13 页 计算机等级考试 C 语言上机速成 连载 5 应试基本算法 j s j 321 c o m 就像算法是程序设计的核心一样 本章是本书的核心章节 我们后面对试题的分析 都将使用本章提到 的算法 全国计算机等级考试的试题千变万化 但是仔细分析它考 查的算法却只有为数几个 只要掌握了这几 个算法 再配合灵活的运用 您将会在短期 内迅速提高自己的应试水平 轻松顺利的通过上机考试 第一节 基本算法 这一节之所 以称为 基本算法 是因为这些算法比较常见比较简单 学过 C 语言的考生基本都能掌 握 我在这里介绍它们的主要原因就是帮助读者巩固这些基本知识 并且这些知识也有 助于后面章节的展 开讨论 交换两个变量的值 可以设置一个中间变量 比如 t e m p 用 它来进行变量的交换 算法如下 t e m p a a b b t e m p 此时 t e m p 的值等于 a 由 t e m p 来保存 a 的值 使 a 等于 b 将 t e m p 的值 也就是 a 的值赋给 b 这个算法很简单 不用多加解释 需要注意的是 一定要弄清楚各个赋值语句的顺 序 千万不能颠倒 它们的顺序 如下面的写法是错误的 a b t e m p a b t e m p 可以 用下面的方法记忆 t e m p 在两边 a b 哥俩在中间 例 i n c l u d e St d i o h i n c l u d e Co n i o h m a i n i n t a 10 i n t b 20 i n t t e m p 0 p r i n t f a d b d n a b t e m p a a b b t e m p 本教程由 j s j 321 c o m 原创 未经许可禁止转载 第 14 页 计算机等级考试 C 语言上机速成 p r i n t f a d b d n a b 输出结果 a 10 b 20 a 20 b 10 判断一个整数是否是奇数 偶数 判断一个整数是否能被 2 整 除 如果除以 2 后 余数为 1 则说明是奇数 若余数是 0 则说明是偶数 在 C 语言中 求余数符号是 a b 即表示求 a b 的余数 例 i n c l u d e St d i o h i n c l u d e Co n i o h m a i n i n t n 0 p r i n t f 请输入一个整数 n s c a n f d i f n 2 0 p r i n t f 是偶数 n e l s e p r i n t f 是奇数 n 求一个数组的平均 数 使用循环语句即可实现 f o r I 0 I n I t o t a l t o t a l x a v e r a g e a v e r a g e n f o r I 0 I n I t o t a l t o t a l x a v e r a g e a v e r a g e n i n t 型数 a 是否能被 i n t 型数 b 整除 仍沿用上边第二个问题的思路 用求余符号实现 例如 i n c l u d e p a g e 6 St d i o h i n c l u d e Co n i o h m a i n i n t a 0 i n t b 0 p r i n t f 请输入 a 和 b n s c a n f d s c a n f d i f a b 0 p r i n t f a 能被 b 整除 n 求平均数 这个算法比较简单 不再多做解释 值得注意的是千万不能犯前面说 的 f o r 语句错误 写成 注意 I 从 0 开始 不是从 1 开始 本教程由 j s j 321 c o m 原创 未经许可禁止转载 第 15 页 计算机等级考试 C 语言上机速成 e l s e p r i n t f a 不能被 b 整除 n 判断 一个数是否是素数 给定一个整数 判断它是否是素数 由数学知识可得知 只要 m 能被 2 3 m 1 中的任何一个数整 除 那么它就不是素数 否则就是素数 根据这一思路 我们用一个循环过程及判断一个数是否能被整除 的方法构造出下面的算法 i n t i s p i n t m i n t i 0 f o r i 2 i m i i f m i 0 r e t u r n 0 r e t u r n 1 思路 非常清晰 使 i 从 2 开始递增 每次循环都判断是否能被 I 整除 如果能被整除则 表明 m 不是素数 返回 0 退出此函数 如果 I 循环到最后 也没有一个数使 m 能被 整除 则表明 m 使素数 于是执行最后 一句 返回 1 这个问题还有另外一种做法 思 路基本相同 但是使用了另外一种编程思想 使用一个标志来判断是 否被整除过 这种 编程思路也是计算机等级考试经常考的 所以这里介绍一下 在后面的编程中还要用到 这种思想 做法 2 i n t i s p i n t m i n t i 0 i n t f l a g 0 f o r i 2 i m i i f m i 0 f l a g 1 i f f l a g 1 r e t u r n 0 e l s e r e t u r n 1 这里的 f l a g 我们 可以称它为一个标志 其初始值为 0 一旦在循环中发现 m 能被某个数整除了 则将 m 赋值为 1 等循环执行完后根据 f l a g 的值判断 m 是否为素数 使用实例如下面程序 i n c l u d e St d i o h i n c l u d e Co n i o h m a i n i n t n u m 0 p r i n t f 请输入 一个整数 n s c a n f d i f i s p n u m 1 p r i n t f 是素数 n e l s e p r i n t f 不是素数 n 本教程由 j s j 321 c o m 原创 未经许可禁止转载 第 16 页 计算机等级考试 C 语言上机速成 其实上面这两种实现算法是可以改进的效率 更高的 但由于这是一本应试指导的书 对这个问题就不 做深入的探讨了 将两个小于 10 的正整数 a b 组成一个新的十位数 a b 即以 a 为十位 以 b 为个位 显然应该将 a 扩大十倍 然后与 b 相加 i n c l u d e St d i o h i n c l u d e Co n i o h m a i n i n t a 5 i n t b 7 i n t a b 0 a b a 10 b p r i n t f d n a b 运行结果为 57 求最小数 算法 与求最大数的算法完全类似 先定义一个变量 m i n 用于存放最小数 具体算法如下 1 首先假设第一个数为最小数 将第一个数的值赋给 m i n 2 然后 将后面的数逐个与 m i n 比较 若小于 m i n 则将值赋给 m i n 否则继续下一个数的比较 例程 1 从键盘输入三个整数 求最小数并输出 m a i n i n t x y z m i n s c a n f d d d m i n x i f y m i n m i n y i f z m i n m i n z p r i n t f m i n d n m i n 例程 2 从键盘输入若干个整数 以 0 表示结束输入 求最小数并输出 m a i n i n t x n 0 m i n s c a n f d m i n x w h i l e x 0 n i f x m i n m i n x s c a n f d i f n p r i n t f m i n d n m i n 对读入的数进行 计数 与 m i n 比较 并作相应处理 读入下一个数 读入第一个数 假设第一个数为最小数 本教程由 j s j 321 c o m 原创 未经许可禁止转载 第 17 页 计算机等级考试 C 语言上机速成 e l s e p r i n t f n o i n p u t 例程 3 编写函 数 求数组 a N 中的最小数 i n t m y m i n i n t a N i n t m i n i m i n a 0 假 设第一个数为最小数 从第二个元素开始 逐个与 m i n 比较并作相应处理 f o r i 1 i N i r e t u r n m i n 求两个正整数的最大公约数 假设两个正整数用 u 和 v 表示 算法采用辗转相除法 具体描述如下 1 求出 u v 的值并赋给变量 r r u v 2 进行迭代 u v v r 3 看 v 是否为 0 若是 则 u 即为所要求的值 否则 转到 1 程序如下 i n t g e t c d i n t u i n t v i n t r w h i l e v 0 r u v u v v r r e t u r n u 求两个整数的最小公倍数 假设两个整数为 x 和 y 算法 1 1 先求出 x 和 y 的最大公约数 并赋给变量 r 2 x 和 y 的最小公倍数即为 x y r 程序如下 i n t g e t m i n t x i n t y i n t r r g e t c d x y r e t u r n x y r p a g e 7 该方法需调用求最大公约数函数 算法 2 1 将两数中较小的数放在 x 中 较大 数保存在 y 中 2 判断 y 是否为 x 的整数倍 若是 则 y 就是最小公倍数 返回 y 否则 继续 若读入的第一个数就为 0 输出错误信息 i f a i y r x x y y r f o r i 1 i x i i f i y x 0 b r e a k r e t u r n i y 本教程由 j s j 321 c o m 原创 未经许可禁止转载 第 19 页 计算机等级考试 C 语言上机速成 连载 6 提取一个数字各位的数字 j s j 321 c o m 在计算机等级考试中有这样一类试题 已知在文件 IN DAT 中存有若干个 个数 1000 s c a n f d g e n u m 10 s h i n u m 10 10 b a i n u m 100 10 q i a n n u m 1000 p r i n t f d n d n d n d n g e s h i b a i q i a n 注意 g e n u m 10 可以看作 g e n u m 1 10 q i a n n u m 1000 可以看作 q i a n n u m 1000 10 由此我们可以得出这样一个规律 要想得到一 个整数的第 n 位 这个位为第一位 十位为第二位 依此类推 则只要 第 n 位的值 n u m 10n 1 10 即可 本教程由 j s j 321 c o m 原创 未经许可禁止转载 第 21 页 计算机等级考试 C 语言上机速成 连载 7 递归函数 j s j 321 c o m 一 函数即自调用函数 在函数体内部直接或间接地调用自己调用自己 即函数地 嵌套调用地是函数 本身 例如 下面程序中的函数 f a c t i n t n 完成的功能就是求 n i n c l u d e St d i o h i n c l u d e Co n i o h l o n g f a c t i n t n i f n 1 r e t u r p a g e 8 n 1 r e t u r n f a c t n 1 n m a i n i n t n 0 l o n g f a c t o f n 0 p r i n t f 请输 入一个正整数 n s c a n f d f a c t o f n f a c t n p r i n t f n l d n f a c t o f n 如果您看不懂上面的程序也不要紧 我这里举个例子 例如求 3 则第一次执 行函数 f a c t 的时候 由于 3 不等于 1 所以就执行 r e t u r n f a c t n 1 n 也就是 r e t u r n f a c t 2 3 由于 f a c t 2 是未知 的 所以又调用 f a c t 2 来求它的值 求 f a c t 2 n 2 时 因为 2 不等于 1 所以就执行 r e t u r n f a c t n 1 n 也就是 r e t u r n f a c t 1 3 由于 f a c t 1 是未知的 所以又调用 f a c t 1 来求它的值 求 f a c t 1 时 n 1 因为 1 不等于 1 所以就执行 r e t u r n 1 所以 f a c t 1 1 因为 f a c t 1 1 所以第 步中的 f a c t 1 2 也就等于 2 所以 f a c t 2 2 因为 f a c t 2 2 所以第 步中的 f a c t 2 3 也就能求出 它等于 6 最终得出 f a c t 3 6 递 归的条件 1 有使递归终止的条件 通常使一个 i f 判断语句 例如 上边求 n 的程序 中 语句 i f n 1 就是一个递归终止条件 它的条件满足使 将会终止 递归的进行 一个递归调用语句 该递归调用语句应调用自身 而且函数参数应该逐渐逼近递归终止 的条件 本教程由 j s j 321 c o m 原创 未经许可禁止转载 第 22 页 计算机等级考试 C 语言上机速成 例如 上边的代码中 r e t u r n f a c t n 1 n 就是一个递归调用语句 它调用自身而且参数值在 逐渐变小 这种参数变小的趋势最 终能使递归终止的条件 i f n 1 满足 从而终止递归的调用 3 应先执行测试递归终 止的条件是否满足的测试代码 再执行递归调用的代码 在递归函数的定义中 必须首 先测试 后递归调用 也就是说 递归调用使有条件的 满足了条件后 才可以递归 例 如 下面的代码无条件的调用函数自己 造成无限制递归 形成了死循环 l o n g f a c t i n t n r e t u r n f a c t n 1 n i f n 1 r e t u r n 1 三 如何快速正确的写出递 归函数 从上面的条件来看 写一个递归函数是非常程式化的东西 只要按照一定的规 则来写 就可以很容易 地写出递归函数 写递归函数有三步 写出迭代公式 确定 递归终止条件 将 翻译成代码 仍以求 n 为例 写出迭代公式 n 的迭代公 式为 确定递归终止条件 1 1 就是递归终止条件 将 翻译成代码 将迭代公式 等号右边的式子写入 r e t u r n 语句中 即 r e t u r n f a c t n 1 n 将 1 1 翻译成判 断语句 i f n 1 按照先测试 后递归的原则写出代码 l o n g f a c t i n t n i f n 1 r e t u r n 1 r e t u r n f a c t n 1 n 下面再举一个例子 希望能帮助大家进一步 体会这一原则 写一个函数 求 f n 1 2 3 n 的值 写出迭代公式 迭代公式为 r e t u r n 1 本教程由 j s j 321 c o m 原创 未经许可禁止转载 第 23 页 计算机等级考试 C 语言上机速成 确定递归终止条件 f 1 1 就是递归终止条 件 将 翻译成代码 将迭代公式等号右边的式子写入 r e t u r n 语句中 即 r e t u r n Su m n 1 n 将 1 1 翻译成判断语句 i f n 1 按照先测试 后递归的原则写出 代码 l o n g Su m i n t n i f n 1 r e t u r n 1 r e t u r n Su m n 1 n r e t u r n 1 本教程由 j s j 321 c o m 原创 未经许可禁止转载 第 24 页 计算机等级考试 C 语言上机速成 连载 8 求出一个数组中的最大值 最小值 j s j 321 c o m 等级考试上机试题中有这样一类题目 就是求出一组数中的最大值 最小值 然后 再对这些最大值 最小值进行一些处理 那么怎么求出这样的最大值 最小值呢 这个 问题可以用排序算法按从大到小的顺序排序 然后取出首尾项 但是这样做的效率太低 了 况且 如果排序算法掌握的不是很好的话 就比较麻烦了 这里我给出一个比较简单 清晰的算法 设两个变量 m a x m i n 分别代表最大值和最小值 先另 m a x m i n 都等于 数组第一个元素的值 然后从 第一个元素开始逐个元素与 m a x m i n 比较 如果发现比 m a x 大的元素 则对 m a x 重新赋值为这个更小的元 素 当所有元素都比较完后 m a x p a g e 9 m i n 中存储的值就是最大值和最小值了 可以参看下面的例子 i n c l u d e St d i o h i n c l u d e Co n i o h m a i n i n t x 10 3 32 4 7 5 24 456 23 13 12 i n t n 0 i n t m a x 0 m i n 0 m a x x 0 m i n x 0 f o r n 0 n m a x m a x x n i f x n m i n m i n x n p r i n t f m a x i f d n m a x p r i n t f m i n i f d n m i n 运行结果为 m a x i f 456 m i n i f 3 例题 要求程序的功能是 把 20 个随机数存入一个数组 然后输出该数组中的最小值 其中确定最小 值的下标的操 作在 f u n 函数中实现 请给出该函数的定义 试题程序 i n c l u d e i n c l u d e d e f i n e VSIZE 20 i n t v e c t o r VSIZE i n t f u n i n t l i s t i n t s i z e 本 教程由 j s j 321 c o m 原创 未经许可禁止转载 第 25 页 计算机等级考试 C 语言上机速成 i n t i j 0 f o r i 1 i i n c l u d e i n c l u d e d e f i n e N 81 f u n c h a r s 给数组赋值 本教程由 j s j 321 c o m 原创 未经许可禁止转载 第 28 页 计算机等级考试 C 语言上机速成 m a i n c h a r a N c l r s c r p r i n t f E
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 空调ODM合同协议书
- 电工承包学校合同范本
- 瓷砖美缝装修合同范本
- 石材年度购销合同范本
- 煤层气合同转让协议书
- 电气火灾报警合同范本
- 私人医院采购合同范本
- 电力负荷控制员-维修电工考试历年真题摘选带答案(5套)
- 2025年电商基础试题及答案
- 2025年移动合同管理试题及答案
- 血栓闭塞性脉管炎护理查房讲课件
- 人工智能在临床麻醉中的应用-刘进教授研究进展
- 飞行体验游旅行合同
- 2024年国网陕西省电力有限公司高校毕业生招聘(第一批)统一安排笔试参考题库附带答案详解
- 2025年CSCO胰腺癌诊疗指南解读
- 2024年昆山农村商业银行招聘笔试真题
- 2025年四川省自然资源投资集团有限责任公司招聘笔试参考题库附带答案详解
- 展会活动疫情防控措施及应急预案
- 安全经验分享:中石油触电事故安全经验分享
- 南京市2024-2025学年高二上学期期中学情调研测试语文试卷及答案
- 全国导游基础知识-第六章-中国古典园林建筑
评论
0/150
提交评论