c语言机试经典编程题(重点资料)!!!!!!_第1页
c语言机试经典编程题(重点资料)!!!!!!_第2页
c语言机试经典编程题(重点资料)!!!!!!_第3页
c语言机试经典编程题(重点资料)!!!!!!_第4页
c语言机试经典编程题(重点资料)!!!!!!_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

本学期 程序设计基础 课程实行上机考核 现将考核有关事项通知如下 1 考核时间 本学期最后一次上机时间为机试 2 考核内容 主要是算法设计与实现 考题来自本学期布置的作业 例 题及一些补充的题目 3 考试形式 机试前进入机房时 每人随机抽取一道题 同一个组的同 学保证不抽到同一题 然后上机编程 调试通过后报告监考人员审核 审核通过后将源程序拷贝到监考人员 U 盘上 然后可以离开机房 源 程序文件明必须是 学号姓名 cpp 如 2012216827 王梓丞 cpp 4 考试要求 机试时考试规则同课堂考试一致 不允许带书 纸张等 不能携带任何可用计算机处理的软件或数据 不允许任何私人携带的 U 盘 磁盘或计算器 不能携带任何类型的通讯工具 包括无线电接 收器 移动电话 5 考试成绩 本次机试成绩将在 程序设计基础 课程成绩中占 25 的 比重 6 其它有关事项由主考教师和监考人员负责处理 附 考试题集附 考试题集 1 学校曾经组织一次 程序设计大奖赛 规定本学期 程序设计 课程的成绩可以因 为在大奖赛上获奖而加 5 分 总分不超过 100 分 编程序 输入某同学的考试成绩 回答是否在竞赛中获奖 计算并输出该某同学的程序设计课成绩 include void main int m n printf 请输入考试成绩 n scanf d printf 请选择获奖情况 1 获奖 2 未获奖 n scanf d switch n case 1 m m 5 break case 2 m if m 100 m 100 printf 你的最终成绩为 d n m 2 编写一个程序 用户输入年份及月份两个数据 程序输出该月份的天数 提示 对 2 月要考虑是否闰年 闰年年份要么能被 4 整除且不能被 100 整除 要么能被 400 整 除 除此之外都不是闰年 include int year a void main printf 请输入年份 月份 scanf d d if a 1 a 3 a 5 a 7 a 8 a 10 a 12 printf 这个月有 31 天 n else if a 2 if year 4 0 else printf 这个月有 28 天 n else printf 这个月有 30 天 n 3 求一元二次方程 ax2 bx c 0 的根 要考虑 a b c 三个系数不同的取值 include include void main float a b c d printf 请输入一元二次方程的三个系数 a b c n scanf f f f if a 0 d b b 4 a c if d 0 printf x1 f x2 f b sqrt d 2 a b sqrt d 2 a else if d 0 printf x1 x2 f b 2 a else printf x1 f fi x2 f fi b 2 a sqrt d 2 a b 2 a sqrt d 2 a else if b 0 printf x f n c b else if c 0 printf 0 0 n else printf f 0 矛盾 n c 4 学校曾经组织一次 程序设计大奖赛 规定本学期 程序设计 课程的成绩可以根 据大奖赛的成绩适度加分 加分规则是 参赛者加 5 分 三等奖加 15 分 二等奖加 20 分 一等奖加 30 分 总分不超过 100 分 编程序 输入某同学的考试成绩 回答 在竞赛中获奖等级 计算并输出该某同学的程序设计课成绩 include void main int a b printf 请输入你的考试成绩 n scanf d printf 请选择你程序设计情况 0 未参加 1 参赛 2 三等奖 3 二等奖 4 一等奖 n scanf d switch b case 0 break case 1 a a 5 break case 2 a a 15 break case 3 a a 20 break case 4 a a 30 if a 100 a 100 printf 你的最终成绩为 d a 5 高速公路每公里的收费标准按不同种类汽车如下 小汽车 car 0 50 元 卡车 truck 1 00 元 大客车 bus 1 50 元 编程序 为某高速公路收费站计算各种车辆的收费额 include void main float a c int b printf 请选择车辆类型 1 小汽车 2 卡车 3 大客车 n scanf d printf 请输入车辆行驶的公里数 n scanf f switch b case 1 c 0 5 a break case 2 c 1 0 a break case 3 c 1 5 a printf 收费额为 3f 元 c 6 设计一个模拟单步计算器的程序 设该计算器只能作加 减 乘 除运算 用户输入 形如 m n 的算式 其中 m n 为运算数 为运算符 需考虑运算符不合法 及除数为 0 的情况 include void main float m n char ch printf 请输入运算式 m n n scanf f c f if ch else switch ch case printf 2f m n break case printf 2f m n break case printf 2f m n break case if n 0 printf 2f m n else printf 分母为 0 无意义 n 7 编写程序 输入一个一个 4 位自然数 n 判断 n 是否是降序数 降序数是指对于 n d1d2 dk有 d1 d2 dk include void main int n a b c d printf 请输入一个四位自然数 n scanf d a n 1000 b n 1000 100 c n 100 10 d n 10 if a b else printf 该四位数不是降序数 n 8 编写程序 输入一个 5 位自然数 n 判断 n 是否对称数 对称数是指正序和反序读都 相等的整数 如 96769 为对称数 include void main int n a b c d e printf 请输入一个五位数 n scanf d a n 10000 b n 10000 1000 c n 1000 100 d n 100 10 e n 10 if a e else printf 该五位数不是对称数 9 编写程序 判断给定的 3 位数是否为 Armstrong 数 Armstrong 数是指其值等于它每 位数字立方和的数 如 153 就是一个 Armstrong 数 include void main int n a b c printf 请输入一个三位数 n scanf d a n 100 b n 100 10 c n 10 if n a a a b b b c c c printf 该三位数为 armstrong 数 else printf 该三位数不是 armstrong 数 10 编写程序 输入一个整数 判断它能否被 3 5 7 整数 并输出如下信息 1 能同时被 3 5 7 整数 2 能同时被两个数整数 并指明是被哪两个数整除 3 能被一个数整数 并指明这是哪个数 4 不能被所有 3 个数整除 include void main int x printf 请输入一个整数 x scanf d if x 3 0 if x 3 0 if x 3 0 if x 3 0 if x 3 0 if x 3 0 if x 3 0 if x 3 0 11 邮局寄包裹的费用是根据包裹的重量来收取的 一个重量为 2kg 或低于 2kg 的包裹收 取 3 25 元 高于 2kg 的包裹 超出部分每千克收取 1 05 元 超出部分不足 1kg 按 1kg 计算 因此如果发件人发送重达 5 63kg 的包裹 就需要缴纳 7 45 元 编写程序 输入包裹的重量 计算并输出发件人须缴纳的费用 笔记本调试不成功 include void main float m n int a printf 请输入包裹的重量 n scanf f if m 2 n 3 25 else a m 1 if m a 0 n 3 25 a 2 1 05 else n 3 25 a 1 1 05 printf 您需缴纳的费用为 f 元 n 12 一个临时照顾孩子的人的收费标准是 18 00 到 21 30 间每小时 2 元 21 30 到午夜间 每小时 4 元 18 00 以前和午夜以后不照顾孩子 编写程序 输入开始时间和结束时间 计算并输出某一个雇工的薪酬 程序应检查 无效的开始和结束时间 include void main float m n j printf 请输入工作的起止时间 n scanf f f if n24 m24 printf 输入的时间无效 n else if m 18 else if m21 5 j 21 5 m 2 n 21 5 4 else j n m 4 printf 您获得的钱数为 f 元 n j 13 编写程序 按下述公式求自然对数底 e 的近似值 1 1 1 i i e include define eps 1e 5 void main int n float e r e 1 0 n 1 r 1 0 while r eps e e r n n 1 r r n printf e f n e 14 编写程序 统计以 100 位结束符的整数输入流中 1 0 1 的出现次数并将其输出 include void main int n i j k i 0 j 0 k 0 printf 请输入一个整数 n scanf d while n 100 if n 1 i if n 0 j if n 1 k printf 请输入一个整数 n scanf d printf 整数流中出现 1 d 次 n i printf 整数流中出现 0 d 次 n j printf 整数流中出现 1 d 次 n k 15 编写程序 打印 99 乘法表 1 1 2 2 4 3 3 6 9 4 4 8 12 16 5 5 10 15 20 25 6 6 12 18 24 30 36 7 7 14 21 28 35 42 49 8 8 16 24 32 40 48 56 64 9 9 18 27 36 45 54 63 72 81 1 2 3 4 5 6 7 8 9 include void main int i j for i 1 i 10 i printf 4d i for j 1 j i j printf 4d i j printf n printf 4c for i 1 i 9 i printf 4d i 16 编写程序 打印 200 以内的素数 要求每行输出 10 个数 include void main int i j k 0 bool flag for i 2 i 2 j if i j 0 flag false if flag printf d i k if k 10 0 printf n 17 编写程序 输出如下序列的前 50 项 此序列的第一项为 0 第二项为 1 以后的奇数 项为其前两项之和 偶数项为其前两项之差 要求每行输出 10 个数 include void main int u v w k u 0 v 1 printf 5d 5d u v for k 3 k 50 k if k 2 0 w v u else w u v printf 7d w if k 10 0 printf n u v v w 18 编写程序 输入正整数 N 计算 r1 r2 rn 并输出 其中 N r1r2 rn include void main int n s p u r printf 请输入正整数 n scanf d s 0 while n 0 r n 10 n n 10 p 1 u 1 while u r p p u u u 1 s s p printf d s 19 完数问题 若有一数 其值等于它的因子之和 则该数称为完数 例如 6 的因子为 1 2 3 而 6 1 2 3 故 6 是完数 编程输出 1000 之内的所有完数及其因子 include void main int i j k l for i 2 i 1 j if i j 0 k k j if k i printf d k printf 因子为 for l 1 l k 2 l if k l 0 printf d l printf n 20 把一张 1 元钞票换成 1 分 2 分和 5 分的硬币 每种至少有 1 枚 问有多少种换法 include void main int i j k l 0 for i 1 i 10 i for j 1 j 5 j for k 1 k 2 k if i 2 j 5 k 10 l printf d n l 21 21 斐波那契 Fibonacci 数列问题 Fibonacci 数列递归定义为 x0 0 x1 1 xi 1 xi xi 1 i 2 3 即从第二项开始 数列中的每一个元素等于前面两个元素之和 编程输出前 20 项 Fibonacci 数 提示可以用递归或迭代两种方式编程 答案 include void main int i a 20 printf 0 printf 1 for i 2 i 20 i a 0 0 a 1 1 a i a i 2 a i 1 printf d a i 另解 include stdio h include math h void main int f1 f2 f3 i f1 0 f2 1 printf d n f1 printf d n f2 for i 1 i 18 i f3 f1 f2 f1 f2 f2 f3 printf d n f3 printf n 22 公鸡 5 元 1 只 母鸡 3 元 1 只 小鸡 1 元 3 只 花了 100 元钱买 100 只鸡 问公鸡 母鸡 小鸡各多少只 include void main int x y z for x 1 x 20 x for y 1 y 33 y for z 3 z 99 z z 3 if x y z 100母鸡 d 小鸡 d n x y z 23 编写程序 用循环语句控制打印如图所示的字符图形 A B C D E F G H I B C D E F G H I A C D E F G H I A B D E F G H I A B C E F G H I A B C D D E F G H I A B C C D E F G H I A B B C D E F G H I A A B C D E F G H I include void main char x y for x A x E x for y x y I y printf c y for y A y A x for y x y I y printf c y for y A y x 1 y printf c y printf n 24 编写程序 打印如下图所示的图形 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 6 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 0 9 8 7 6 5 4 3 2 1 include void main int i j k l m n for i 1 i i j printf for k 1 k 1 l printf d l printf n for m 1 m 1 n printf d n 25 验证哥德巴赫猜想 任意一个大偶数都可以分解为两个素数之和 用户输入一个大于 6 的偶数 程序计算并输出分解结果 26 编写一个程序解决爱因斯坦台阶问题 有人走以台阶 若以每步走 2 级则最后剩 1 级 若每步走 3 级则最后剩 2 级 若以每步走 4 级则最后剩 3 级 若以每步走 5 级则最后 剩 4 级 若以每步走 6 级则最后剩 5 级 若以每步走 7 级则最后刚好不剩 问台阶共 有几级 27 编写程序 输出所有小于 100 的可以被 11 整除的自然数 以及这些数之和 include void main int n m n 0 for m 1 m 100 m if m 11 0 printf d m n n m printf 和为 d n n 28 一辆汽车装满油料可以行驶 300km 从存放有 n 车油料的油库出发 通过在途中建立 加油站的方法 它可以行驶 12 1 5 1 3 1 1 300 n L 千米 编写程序 给定 L 以计算 n 29 编写函数 判定它的 4 个整型参数中是否有两个数的值相等 主函数读入 4 个数 调 用该函数 输出判定结果 include int y int a int b int c int d if a b a c a d b c b d c d printf 存在俩个参数相等 n else printf 不存在俩个参数相等 n return 0 int main int a b c d printf 请输入四个参数 n scanf d d d d y a b c d 30 编写以一个函数 reverse int n 求任意 4 位整数的逆序数 如 n 2637 时 函数返回值 是 7362 主函数读入一个整数 判断其合法性 调用函数得到结果输出 include int reverse int n int a b c d s a n 1000 b n 1000 100 c n 100 10 d n 10 s d 1000 c 100 b 10 a return s void main int i j printf 请输入一个四位数 n scanf d if i9999 printf 您输入的数据有误 n else j reverse i printf 逆序数为 d j 31 编写程序 输入 m n 的值计算并输出 nnm m 要求编写一函数 f int num 求正整数 num 的阶乘 include int f int num int i j j 1 for i 1 i num i j j i return j void main int m n a b c s printf 请输入 m n 的值 n scanf d d a f m b f m n c f n s a b c printf d n s 32 下面是一个有效的计算 xn的方法 初始化 answer 1 power x m n 当 m 0 时 重复计算 若 m 是奇数 则令 answer answer power m m 1 否则 令 power power power m m 2 重复计算至 m 0 结果为 answer 编写函数 power float x int n 实现上述算法 主函数读入 x 和 n 调用函数得到返 回值输出 include float power float x int n float answer power int m answer 1 power x m n while m 0 if m 2 0 answer answer power m m 1 else power power power m m 2 return answer void main float a s int b printf 请输入 x n n scanf f d s power a b printf f s 33 编写函数 以两个正整数位参数 如果这两个数是友好的 返回 true 否则返回 false 如果这两个整数的约数之和 除了它本身之外 等于对方 就称这对数是友好 的 例如 1184 和 1210 1184 的约数之和为 1 2 4 8 16 32 74 148 296 592 1210 1210 的约束之和为 1 5 10 11 22 55 110 121 242 605 1184 答案不正确 需修改 问题可能出在 true false 上 include int f int m int n int i j k q j 0 k 0 for i 1 i m 2 i if m i 0 j j i for q 1 q n 2 q if n q 0 k k q if j n else return false void main int a b bool flag printf 请输入两个正整数 n scanf d d flag f a b if flag printf 这两个数是友好的 else printf 这两个数不是友好的 34 编写程序计算调和级数的前 N 项和 要求结果是一个准确的分数 A B 形式 n Hn 1 3 1 2 1 1 1 include int f int n int a 1 b 1 c 0 i e f do a a b c c b a b b while b n e c f a while i 0 i e f e f f i c c e a a e printf d d c a return 0 void main int n printf please input n n scanf d f n 35 编写程序 输入 n 个整数 用 主元排序 法 将其升序排序 从小到大 输出 include define n 10 void main int i j k r a n printf 请输入十个数据 n for i 0 i n i scanf d for i 0 i 9 i j i for k i 1 k 10 k if a k a j j k r a i a i a j a j r printf answer n for i 0 i 10 i if i 10 0 printf n printf 4d a i 36 编写一个程序 输入全班同学某门课考试成绩 计算平均成绩并统计大于等于平均成 绩的人数 提示 批量数据通常不事先规定输入的数据数量 而是以一个特殊的标 志作为输入结束 程序根据结束标志统计人数 37 打印杨辉三角形的前 10 行 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 include define n 10 define w 6 void main int a 11 i j for i 0 i0 j a j a j 1 a j for j 0 j 40 i w 2 j printf c for j 0 j i j printf 6d a j printf n 另解 include define n 10 define w 6 void main int a 11 b 11 i j for i 0 i n i for j 1 j i j a j b j 1 b j a i 1 for j 0 j i j b j a j for j 0 j 40 i w 2 j printf c for j 0 j i j printf 6d a j printf n 38 编写程序 输入 n 个整数 用 冒泡排序 法 将其升序排序 从小到大 输出 include define n 10 void main int a n int i j t printf 请输入全部数据 n for i 0 i n i scanf d for i 0 i n 1 i for j 0 ja j 1 t a j a j a j 1 a j 1 t printf 顺序为 n for i 0 i n i printf d a i 39 编写程序 输入 n 个整数 用 逐步增加递增子序列 法 或称插入排序 将其升 序排序 从小到大 输出 include void sort int n int a int i j k r for i 1 ia i r a i for k i 1 k j 1 k a k 1 a k a k 1 r void main int a 10 i for i 0 i 10 i scanf d sort 10 a for i 0 i 10 i printf 4d a i 40 40 编程实现二分查找算法 设数组以按升序排序 对半检索 亦称 两分法检索 在 检索过程中用到三个变量 lower 记录检索区间下界 初值是 0 upper 记录检索区间上界 初值是 n 1 j 标记当前检索位置 检索思想令 j lower upper 2 key a j 找到 位置为 函数 search 返回 j keya j key 在 a j 与 a upper 之间 检索区间缩小一半 lower j 1 重复上述过程 重复的终止条件为 upper lower 0 表示未找到 返回 1 要求编写一函数 int half search int n int a int key 其中 n 为数组长度 a 为一维数组 key 为要查找的关键字 若找到 key 函数返回对应的数组下标 未找到返回 1 主函数 读入一数组 先调用排序函数 sort int a int n 排序算法任选 对数组排序 然后调用搜 索函数 输出搜索结果 include void sort int n int a int i r bool flag flag true while flag flag false for i 0 ia i 1 r a i a i a i 1 a i 1 r flag true int half search int n int a int key int lower upper j lower 0 upper n 1 while upper lower 0 j lower upper 2 if key a j return j else if key a j lower j 1 else upper j 1 return 1 void main int i a 10 key printf 请输入 10 个数 for i 0 i 10 i scanf d printf 请输入你要检索的数 scanf d sort 10 a printf 对应数组下表为 d half search 10 a key 1 41 编写函数 对给定的数组组成的序列排序输出 并输出每个数组元素在排序之前的序 号 设函数为 sortofup int a int b int n 其中 a 中存放要排序的数组元素 b 存放其排 序前的序号 n 为数组长度 主函数读入数组 a 并给数组元素置序号 为简单起序号从 0 至 n 1 调用函数结束后 分别输出数组 a b 个元素值 include void main int a b n int i j k printf 请输入十个数据 n for i 0 i n i scanf d 42 编写一个函数 把给定的一维数组的诸元素循环右移 j 位 要求编写主函数 读入数 组 调用函数 然后输出移位后的数组各元素 include define n 10 void main int i j k a n 1 2 3 4 5 6 7 8 9 10 b n printf 请输入元素循环右移的位数 n scanf d for i 0 i n i if i j 1 k i n j else k i j b i a k printf answer n for i 0 i n i printf 3d b i 另解 include include main int a n N i j tmp printf 输入数组元素个数 scanf d a int malloc sizeof int n printf 输入数组元素 for i 0 i n i scanf d printf 输入循环移动的位数 scanf d printf 移位前数组 for i 0 i n i printf d a i printf n for i 0 j n 1 i j i j tmp a i a i a j a j tmp for i 0 j N 1 i j i j tmp a i a i a j a j tmp for i N j n 1 i j i j tmp a i a i a j a j tmp printf 移位后数组 for i 0 i n i printf d a i printf n free a 43 编写函数 把整数数组中值相同的元素删除的只剩一个 并把剩余元素全部顺移到前 面 要求编写主函数 读入数组 调用函数 然后输出删除相同元素后的数组各元素 include stdio h void f int num 10 i j count 0 delflag 10 for i 0 i 10 i printf 第 d 个 i 1 scanf d num i delflag i 0 标记相同的数据 for i 0 i 9 i for j i 1 j 10 j if num i num j delflag j 1 数据向前移动 j 0 for i 0 i 10 i if delflag i 0 num j num i j 输出 printf 去重后的数据 for i 0 i j i printf d num i int main 输入数据 printf 输入 10 个数字 n f return 0 44 编写函数 求给定一维数组中出现频率最高的数 如 在 2 3 4 3 5 7 5 5 中 数字 5 出现的频率最高 要求编写主函数 读入数 组 调用函数 在函数中输出出现频率最高的数及出现的次数 include stdio h include math h define m 5 void main int x m y m i j k maxf printf please input the x m n for i 0 i 5 i scanf d for i 0 i 5 i y i 0 for j 0 j 5 j if x i x j y i k y 0 for i 0 i k k y i maxf x i printf the frequency max is d the times is d n maxf k printf n 45 编写程序 读入一个二维数组 求该二维数组中最大的元素 设个元素值不同 输 出该元素及其行 列下标 include define m 2 define n 2 void main int a m n i j max c b printf 请输入九个整数组成的二维数组 n for i 0 i m i for j 0 j n j scanf d max a 0 0 for i 0 i m i for j 0 jmax max a i j c i b j printf 二维数组中最大元素为 d n max printf 行下标为 d 列下标为 d c b 46 编写程序 读入一个二维数组 求该二维数组

温馨提示

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

评论

0/150

提交评论