已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
重庆工贸职业技术学院重庆工贸职业技术学院 C C 语言语言 集中实训指导书集中实训指导书 计算机应用技术教研室 目录 实训内容实训内容 3 1 C 语言的基础知识语言的基础知识 3 2 简单的简单的 C 程序设计程序设计 3 3 选择结构程序设计选择结构程序设计 3 4 循环结构程序设计循环结构程序设计 3 5 一维数组一维数组 3 6 二维数组二维数组 3 7 函函 数数 3 8 文文 件件 3 9 综合练综合练习习 第一章 实训的总目的和要求 程序设计是实践性很强的过程 任何程序最终都必须在计算机上运行 以检验程序的正确与否 因此在 学习完 C 程序设计后 一定要重视上机实践环节 安排一周的实习时间 即独立编写出程序 独立上机调试 程序 通过上机实习可以加深理解 C 语言的有关概念 以巩固理论知识 另一方面也可以培养程序调试的能 力与技巧 上机实习的目的 绝不仅是为了验证教材和讲课的内容或者验证自己所编的程序正确与否 应该说 学 习程序设计 上机实习的目的为 1 加深对讲授内容的理解 尤其是一些语法规则 光靠课堂讲授和很少学时的实验 既枯燥又难以彻 底消化吸收 但它们都很重要 通过实习 就能熟练地掌握 2 进一步熟悉所用的计算机系统的操作方法 也就是熟悉 C 语言程序的开发环境 一个程序必须在一 定的外部环境下才能运行 所谓 环境 就是指所用的计算机系统的硬件和软件条件 使用者应该 了解为了运行一个 C 程序 需要哪些必要的外部条件 例如硬件配置和软件配置 可以利用哪些系 统的功能来帮助自己开发程序 3 熟练地掌握上机调试程序的方法 对程序设计来说 要求会编程序并上机调试通过 因此调试程序 本身是程序设计课程的一个重要的内容和基本要求 应充分地重视 调试程序的经验固然可以借鉴 他人的现成经验 但更重要的是通过自己的直接实践来积累 而且有些经验是只能 会意 难以 言传 因此 在实习中千万不要在程序通过后就认为万事大吉 完成任务了 而应当在已通过的 程序基础上作一些改动 例如修改一些参数 增加程序一些功能 改变输入数据的方法等 再进行 编译 连接和运行 甚至于 自设障碍 即把正确的程序改为有错的 例如用 scanf 函数函数输入变 量时 漏写 flost x y char c1 c2 scanf a d b d scanf f e scanf printf a d b d x f y f c1 c c2 c n a b x y c1 c2 运行该程序 必须按如下方式在键盘上输入数据 a 3 b 7 8 5 71 82 a A 请同学们写出输出结果 例 2 输入三角形三边长 求三角形面积 include math h main float a b c s area scanf f f f s 1 0 2 a b c area sqrt s s a s b s c printf area f area 例 3 已知圆半径 圆柱高 求圆周长 圆柱体积 main float r h l v pi pi 3 scanf f f l 2 pi r v pi r r h printf 圆周长为 6 2f n l printf 圆柱体积为 6 2f v 例 4 输入一个摄氏温度 要求输出华氏温度 公式为 f 5 9 c 32 main float c f scanf f f 5 0 9 c 32 printf 5 2f n c 作业作业 1 已知圆半径 r 1 5 圆柱高 h 3 求圆周长 圆面积 圆球表面积 圆球体积 圆柱体积 2 输入一个华氏温度 要求输出摄氏温度 公式为 c 5 9 f 32 3 3 3 3 选择结构程序设计选择结构程序设计 目的与要求 1 了解 C 语句表示逻辑量的方法 以 0 代表 假 以 1 代表 真 2 学会正确使用逻辑运算符和逻辑表达式 3 熟练掌握 if 语句和 switch 语句 上机内容 一般示例 例 1 已知三个数 a b c 找出最大值放于 max 中 分析 由已知可得在变量定义时定义四个变量 a b c 和 max a b c 是任意输入的三个数 max 是 用来存放结果最大值的 第一次比较 a 和 b 把大数存入 max 中 因 a b 都可能是大值 所以用 if 语句中 if else 形式 第二次比较 max 和 c 把最大数存入 max 中 用 if 语句的第一种形式 if 形式 Max 即为 a b c 中的最大值 include stdio h main int a b c max 定义四个整型变量 scanf a d b d c d if a b max a a b else max b amax max c c 是最大值 printf max d max 若输入下列数据 分析程序的执行顺序并写出运行结果 1 a 1 b 2 c 3 2 a 2 b 1 c 3 3 a 3 b 2 c 1 4 a 3 b 1 c 2 5 a 3 b 3 c 2 6 a 2 b 1 c 2 例 2 输入某学生的成绩 经处理后给出学生的等级 等级分类如下 90 分以上 包括 90 A 80 至 90 分 包括 80 B 70 至 80 分 包括 70 C 60 至 70 分 包括 60 D 60 分以下 E 方法一 用 if 嵌套 分析 由题意知如果某学生成绩在 90 分以上 等级为 A 否则 如果成绩大于 80 分 等级为 B 否则 如果 成绩大于 70 分 等级为 C 否则 如果成绩大于 60 分为 D 否则 如果成绩小于 60 分 等级为 E 但当我 们输入成绩时也可能输错 出现小于 0 或大于 100 这时也要做处理 输出出错信息 因此 再用 if 嵌套 前 应先判断输入的成绩是否在 0 100 之间 include stdio h main int score char grade printf nplease input a student score scanf f if score 100 score 90 grade A else if score 80 grade B else if score 70 grade C else if score 60 grade D else grade E printf nthe student grade c grade 输入测试数据 调试程序 测试数据要覆盖所有路径 注意临界值 例如此题中得 100 分 60 分 0 分 以及小于 0 和大于 100 的数据 方法二 用 switch 语句 分析 switch 语句是用于处理多分支的语句 注意 case 后的表达式必须是一个常量表达式 所以在以用 switch 语 句之前 必须把 0 100 之间的成绩分别化成相关的常量 所有 A 除 100 以外 B C D 类的成绩的共同特 点是十位数相同 此外都是 E 类 则由此可得把 score 除十取整 化为相应的常数 include stdio h main int g s char ch printf ninput a student grade scanf d s g 10 if s10 printf ninput error else switch s case 10 case 9 ch A break case 8 ch B break case 7 ch C break case 6 ch D break default ch E printf nthe student scort c ch 输入测试数据 同方法一一样调试程序并写出结果 例 3 有一函数 x x 1 y 2x 1 1 x 10 3x 11 x 10 用 scanf 函数输入 x 的值 分别为 x 10 三种情况 求 y 值 分析 y 是一个分段表达式 要根据 x 的不同区间来计算 y 的值 所以应使用 If 语句 main int x y printf please input x scanf d if x 1 y x printf y d n y else if xc n 1 t 1 while t 5 n n t t t 1 printf d n 例 2 求和 s 1 2 3 main int n s 0 t 1 for n 1 n 3 n t t n s s t printf d s 例 3 求和 s 1 3 5 main int s 0 t i j for i 1 i 3 i t 1 for j 1 j 2 i 1 j t t j s s t printf d s 例 4 求和 s 3 33 333 main int s 0 t 3 i for i 1 i 3 i s s t t 10 t 3 printf d s 例 5 有一数列 2 1 3 2 5 3 8 5 求出这个数列的前 10 项之和 main int n t float a 2 b 1 s 0 for n 1 n 10 n s s a b t a a a b b t printf f s 例 6 打印 500 以内的 水仙花数 水仙花数 是一个三位数 其各位数立方和等于该数本身 main int i j k n for n 100 n 500 n i n 100 j n 10 i 10 k n 10 if n i i i j j j k k k printf d n 例 7 一个数如果恰好等于它的因子之和 这个数就称为完数 求 100 之内的所有完数 main int n s j for n 1 n 100 n s 0 for j 1 jn 其次 算法 使 k 为 m 除以 n 的余数 如果 m 能被 n 整 除 则 k 值为 0 n 为这两个数的最大公约数 否则 使 k 代替 n n 代替 m 重复以上过程 直到 k 值为 0 include stdio h main int m n k result printf Enter two numbers scanf d d if m 0 if k 0 result m else n m m k while k 0 循环取余求出最大公因子 printf The greatest common divistor is d n result else printf Nonpositive values not allowed n 例 2 用牛顿迭代求方程 2x3 4x2 3x 6 0 在 1 0 附近的根 include math h main float x x0 f f1 x 1 0 do x0 x f 2 x0 4 x0 3 x0 6 f1 6 x0 8 x0 3 x x0 f f1 while fabs x x0 1e 5 printf 6 2f x 例 3 打印下列图案 main int i j for i 1 i 4 i for j 1 j 4 i j printf for j 1 j 2 i 1 j printf printf n 例 4 判断 m 是否是素数 程序 include main int m i k scanf d k sqrt m 1 for i 2 i k 1 printf d is a prime number n m else printf d is not a prime number n m 作业作业 1 输入两个正整数 m 和 n 求其最大公约数和最小公倍数 2 求 Sn a aa aaa aa a 之值 其中 a 是一个数字 例如 2 22 222 2222 22222 此时 n 5 n 由键盘输入 3 求和 1 2 3 4 20 4 打印 100 999 之间所有的 水仙花数 水仙花数 是一个三位数 其各位数立方和等于该数本 身 5 一个数如果恰好等于它的因子之和 这个数就称为完数 求 1000 之内的所有完数 6 有一数列 2 1 3 2 5 3 8 5 求出这个数列的前 20 项之和 7 用迭代法求 x a 求平方根的迭公式为 xn 1 1 2 xn a xn 要求前后两次求出的 x 的差的绝对值小于 10 5 8 用牛顿迭代求方程 2x3 4x2 3x 6 0 在 1 5 附近的根 9 打印下列图案 3 3 5 5 一维数组一维数组 目的与要求 1 掌握一维数组的定义 赋值和输入输出的方法 2 掌握字符数组的使用 3 掌握与数组有关的算法 例如排序算法 上机内容 一般示例 例 1 在键盘上输入 N 个整数 试编制程序使该数组中的数按照从大到小的次序排列 分析 C 中数组长度必须是确定大小 即指定 N 的值 排序的方法有多种 我们取出其中两种作为参考 方法一 起泡排序 从第一个数开始依次对相邻两数进行比较 如次序对则不做任何操作 如次序不对则使这两个数交换位 置 第一遍的 N 1 次比较后 最大的数已放在最后 第二遍只需考虑 N 1 个数 以此类推直到第 N 1 遍比较后就可以完成排序 源程序如下 define N 10 include stdio h main int a N i j temp printf please input d numbers n N for i 0 i N i scanf d for i 0 i N 1 i for j 0 ja j 1 temp a j a j a j 1 a j 1 temp printf the array after sort n for i 0 i N i printf 5d a i 方法二 选择排序 首先找出值最小的数 然后把这个数与第一个数交换 这样值最小的数就放到了第一个位置 然后 在 从剩下的数中找值最小的 把它和第二个数互换 使得第二小的数放在第二个位置上 以此类推 直到所有 的值从小到大的顺序排列为止 include stdio h define N 10 main int a N i j r temp printf please input d numbers n N for i 0 i N i scanf d for i 0 i N 1 i r i for j i 1 j N j if a j a r r j if r i temp a r a r a i a i temp printf the array after sort n for i 0 i N i printf 5d a i printf n 例 2 青年歌手参加歌曲大奖赛 有 10 个评委对她的进行打分 试编程求这位选手的平均得分 去 掉一个最高分和一个最低分 分析 这道题的核心是排序 将评委所打的 10 个分数利用数组按增序 或降序 排列 计算数组中除 第一个和最后一个分数以外的数的平均分 其中排序部分这里用选择法实现 main int i j min float temp ave 0 float a 11 printf n 输入评委所打的分数 n for i 1 i 10 i scanf f for i 1 i 9 i min i for j i 1 ja j min j temp a i a i a min a min temp for i 2 i 9 i 注意 i 值的变化范围 ave ave a i printf 选手所得最后分数 6 1f ave 8 printf n 例 3 输入一串字符 计算其中空格的个数 include main char c 30 int i sum 0 gets c for i 0 i strlen c i if c i sum sum 1 printf 空格数为 d n sum 作业 1 已有一个已排好序的数组 今输入一个数 要求按原来排序的规律将它插入数组中 2 将一个数组中的值按逆序重新存放 例如 原来顺序为 8 6 5 4 1 要求改为 1 4 5 6 8 3 有 15 个数按由小到大顺序存放在一个数组中 输入一个数 要求用折半查找法找出该数是数组中第 几个元素的值 如果该数不在数组中 则打印出 无此数 4 编一程序 将两个字符串连接起来 不要用 strcat 函数 3 3 6 6 二维数组二维数组 目的与要求 1 掌握二维数组的定义 赋值和输入输出的方法 2 掌握字符数组的使用 3 掌握与数组有关的算法 例如排序算法 上机内容 一般示例 例 1 有一个 3 4 的矩阵 要求输出其中值最大的元素的值 以及它的行号和列号 define M 3 define N 4 main int max i j r c static int a M N 123 94 10 218 3 9 10 83 45 16 44 99 max a 0 0 for i 0 i M i for j 0 jmax max a i j r i c j printf max d row d colum d n max r c 例 2 打印以下图案 main char a 5 int i j k char space for i 0 i 5 i 输出 5 行 printf n 输出每行前先换行 printf 每行前面留 5 个空格 for j 1 j i j printf c space 每行再留 1 个空格 for k 0 k 5 k printf c a k 每行输入 5 个 号 例 3 求矩阵下三角形元素之和 define N 6 main int i j sum 0 int a N N 0 printf input 5 5 data n for i 1 i N i printf Input the d line data n i for j 1 j N j scanf d for i 1 i N i for j 1 j N j printf 5d a i j printf n for i 1 i N i for j 1 j i j sum sum a i j printf sum d n sum 作业作业 1 求一个 3 3 矩阵对角线元素之和 2 打印出以下的杨辉三角形 要求打印出 10 行 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 3 有一篇文章 共有 3 行文字 每行有 80 个字符 要求分别统计出其中英文大写字母 小写字 母 数字 空格以及其他字符的个数 3 3 7 7 函函 数数 目的与要求 1 掌握 C 语言函数的定义方法 函数的声明及函数的调用方法 2 了解主调函数和被调函数之间的参数传递方式 上机内容 一般示例 例 1 写一个判断素数的函数 在主函数输入一个整数 输出是否素数的信息 源程序如下 mian int number printf 请输入一个正整数 n scanf d if prime number printf n d 是素数 number else printf n d 不是素数 number int prime number 此函数用于判别素数 int number int flag 1 n for n 2 n number 2n if number n 0 flag 0 return flag 判断素数的算法 我们在以前学习循环的时候已经学过了 在这里只是把这个算法用函数的形式表示出 来 这里我们要注意函数的定义 声明的方法和格式 例 2 写一函数 是给定的一个二位数组 4 4 转置 即行列互换 源程序如下 矩阵的转置 define N 4 int array N N convert array int array 4 4 int i j t for i 0 i N i for j i 1 j N j t array i j array i j array j i array j i t main int i j printf 输入数组元素 n for i 0 i N i for j 0 j N j scanf d printf n 数组是 n for i 0 i N i for j 0 j N j printf 5d array i j printf n conver array printf 转置数组是 n for i 0 i N i for j 0 jv t u u v v t a u b v while r b a 0 b a a r return a lcd u v h int u v h return u v h main int u v h l scanf d d h hcf u v printf H C F d n h l lcd u v h printf L C D d n l 这是一个十分典型的算法 同学们一定要认真分析 学习 例 2 写一函数 用 起泡法 对输入的 10 个字符按由小到大顺序排序 源程序如下 起泡法排序 define N 10 char str N main int i flag for flag 1 flag 1 printf n 输入字符串 长度为 10 n scanf s if strlen str N printf 超过长度 请重输 else flag 0 sort str printf n 排序结果 for i 0 i N i printf c str i sort str char str N int i j char t for j 1 j N j for i 0 istr i 1 t str i str i str i 1 str i 1 t 例 3 用牛顿迭代法求根 方程为 ax3 bx2 cx d 0 系数 a b c d 由主函数输入 求 x 在 1 附近 的一个实根 求出根后 由主函数输出 源程序如下 牛顿迭代法解方程 include math h float solut a b c d float a b c d float x 1 x0 f f1 do x0 x f a x0 b x0 c x0 d f1 3 a x0 2 b x0 c x x0 f f1 while fabs x x0 1e 5 return x main float a b c d printf n 输入方程的系数 a b c d n scanf f f f f printf n 方程是 5 2fx 3 5 2fx 2 5 2fx 5 2f 0 a b c d printf nX 10 7f n solut a b c d 在此题目中 方程的系数是未知的 这是与以前我们用牛顿迭代法的时候不同的地方 但原理 算法是 相同的 这里我们用函数来求方程的根 也就是把牛顿迭代法用函数的形式表现出来 作业作业 1 上机调试下面的程序 记录系统给出的出错信息 并指出出错原因 main int x y printf d n sum x y int sum a b int a b return a b 2 定义一个函数 功能是计算 n 个学生的成绩中 高于平均成绩的人数 并作为函数值 用主函数来 调用它 统计 50 个学生成绩中 高于平均成绩的有多少人 3 编写一个对 n 个数据从大到小的排序 C 函数 再编写一个计算最后得分的 C 函数 计算方法是 去 除一个最高分 去除一个最低分 其余的平均分为参赛选手的最后得分 并在主函数中调用它们对有 n 个评 委评分 m 个选手参赛的最后得分 从大到小排序输出 4 编写一个计算 n 的函数 用主函数调用它 使之输出 7 阶杨辉三角形 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 杨辉三角形是二项展开式 a b n 的系数 共有 n 1 项 n 0 1 杨辉三角形在数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学校放学协议书模板
- 学校自愿补课协议书
- 大学资产移交协议书
- 委托投资船舶协议书
- 婉拒同学赔偿协议书
- 学校木工维修协议书
- 夫妻房子首付协议书
- 学校冲突家校协议书
- 委托加工药酒协议书
- 学校转让学生协议书
- 2025江苏苏州市常熟经开控股有限公司(系统)招聘16人备考题库附答案解析
- 2025年法律常识题库含完整答案
- 2026-2031中国废塑料破碎行业市场前景预测及投资价值评估分析报告
- 2025年如法网考试试题及答案
- 2025中国(教育部)留学服务中心下半年招聘11人备考题库附答案解析
- DGTJ08-12-2004 普通中小学校建设标准
- 2025北京市燃气集团面向社会招聘23人笔试考试参考试题及答案解析
- 委托出租居间合同范本
- 2026年智慧楼宇能源管理服务合同
- 旅游市场营销课件教学
- 2025至2030全球及中国热电模组行业项目调研及市场前景预测评估报告
评论
0/150
提交评论