清华大学“C语言程序设计”期末试卷
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
输入: 先读入一个字符串,字符总数不超过 100 并且不会有格式错误的代数式。 然后读入一实数作为 x0 的值。
输出:
7
包含两个实数,分别是函数值和导函数值。把所得结果保留 2 位小数输出。如果出 现分母为 0 的情况则只输出一个字符串"error"。
样例: 输入 x*(x+x/x) 100 输出 10100.00 201.00
输入: 第 1 行 1 个整数 n,表示被转换的数的进制(2 < = n < = 30) 第 2 行 1 个整数 m,表示转换后的数的进制(2 < = m < = 30) 第 3 行有 1 个 n 进制的数。
Байду номын сангаас
输出: 仅1行,为转换后的 m 进制的数。
样例: 输入 2 8 100110010 (注意:不要使用标准的进制转换函数) 输出 462
样例 2 输入 999999 999999 999999999 输出 999999000 999 0 0
第二部分
用指定方法设计程序 (每题 15 分,共 30 分)
2-1. 约数个数 ( 2-1.cpp ) 一个正整数的约数定义为能够整除它的所有正整数。如 24 的约数有:1, 2, 3, 4, 6, 8, 12, 24,共 8 个。我们称 24 的约数个数为 8。下面给出一种求约数个数的方法, 仍以 24 为例: 首先将 24 分解质因数,并表示成幂积的形式:24=23*31; 然后将每个质因数的幂加 1 后相乘,(3+1)*(1+1)=8,即 24 的约数有 8 个。 再以 90 为例:90=21*32*51,(1+1)*(2+1)*(1+1)=12,于是 90 共有 12 个约数, 它们分别是 1, 2, 3, 5, 6, 9, 10, 15, 18, 30, 45, 90。
1-5. 铅笔工厂 ( 1-5.cpp ) 在铅笔工厂里,一支铅笔要经过下列工序:首先在一台机器中喷上彩漆,随后在另 一台机器中喷上清漆。遗憾的是这两台机器都有一些毛病。上彩漆的机器在每处理 n 支铅笔后就“罢工”一次(也就是下一支铅笔将不被喷上彩漆),而上清漆机器在 处理 m 支铅笔后“罢工”一次。于是这所工厂出产四种铅笔,一种是成品铅笔,一种 是只上过彩漆的铅笔,一种是只上过清漆的铅笔,最后一种是没有上过任何漆的铅 笔。 请编写程序,对给定的 n, m 和 k (被处理的铅笔总数),计算四种铅笔的数量。 例如,n=3, m=5 以及 k=17,那么铅笔的处理情况如下图: 1 彩 漆 清 漆 17 支铅笔中,有 12 支是成品。而第 12 支是什么漆也没上的;第 6 支只上了彩漆, 还有 3 支只上了清漆。 √ √ √ √ √ × √ √ √ √ √ × √ √ √ √ √ √ 2 √ 3 √ 4 × 5 √ 6 √ 7 √ 8 × 9 √ 10 √ 11 √ 12 × 13 √ 14 √ 15 √ 16 × 17 √
1-4.竖式打印 ( 1-4.cpp ) 键盘输入两个两位正整数 a,b ( 11 < = a,b < = 99,且 a 和 b 都不包含数字’0’ ),在 屏幕上输出 a 与 b 相乘的竖式。注意尽量按照样例的格式进行输出。
2
样例: 输入 25 12 * 输出 25 12 50 25 -----300 ------
另外,你的程序应当有适当的注释(3 分)
输入: 输入仅一行,包含两个正整数 k, n,之间用空格隔开。其中 1 < k, n < 106。
输出: 输出仅一行,包含两个正整数 c 和 t,分别表示 k 的约数个数和 1~n 中约数个数不 同的类的数目。
样例: 输入 6 10 输出 44
5
2-2. 多项式加法 ( 2-2.cpp ) 我们可以用链表来表示一元多项式。多项式的每个非零项都用一个节点 P 表示,即 在 P 中储存该项的系数(coefficient)和指数(exponent),且不同的节点中指数必须不 同。这些非零项按照指数递增的顺序串在一起,形成一个链表。例如,多项式 -4+3x^2 可以这样表示:
键盘输入实数 a 和 b(0 < a, b < 100),计算该函数当 x=a, y=b 的值并输出到屏幕。输 入值最多有四位小数,输出时四舍五入保留两位小数。
1
样例: 输入 9.2 5.6 输出 36.47
1-3.进制转换 ( 1-3.cpp ) 请将一个 n 进制的数转换成 m 进制的数, 并输出.(在 10 进制以上的数中 A 代表 10, B 代表 11,以此类推)
输入:
3
仅一行,三个整数 n, m 和 k。0 < n < 106, 0 < m < 106, 0 < k < 109。
输出: 在一行中依次输出下列 4 个数: a) 铅笔成品数。 b) 没被上漆的铅笔数。 c) 上过彩漆而没上清漆的铅笔数。 d) 上过清漆而没上彩漆的铅笔数。
样例 1 输入 3 5 17 输出 12 1 1 3
coefficient -4
Exponent 0
next
coefficient 3
exponent 2
next NULL
用有序链表的插入的方法可以进行两个一元多项式的加法,我们称相加之后的多项 式为结果多项式。你应当写一个程序, 从键盘输入两个多项式,并计算出它们的和(需要合并同类项)。为了检验你的结 果是否正确,我们安排了两个任务进行独立评分。
输出: 仅 1 行,为运算的结果。
8
样例:计算 4287+463 输入 1 4 4 2 8 7 0 4 6 3 说明 1 表示做加法 4 表示 4 位数 最高位 次高位 …… 最低位 输出 4750
(注意:本题不得使用>64K 内存)
9
6
式的项数。以下 m 行每行两个整数 c 和 e,表示该项的系数和指数。两个多项式均 以升幂排列顺序给出,每项的系数 c 满足(-100 < = c < = 100),指数 e 满足 (0 < = e < = 10)。测试数据保证结果多项式的每一项当 x=x0 时的值都不大于 10000。
输出: 第一行包含一个整数,即多项式的值。即任务一。 第二行包含一个字符串,即多项式的手写表示,格式参考样例输出。即任务二。
输入: 第 1 行为一个整数 t,表示任务的类型,t=1 表示做加法,t=2 表示做减法。 第 2 行为 1 个整数 n,表示需要计算的数的位数。 以后 n 行,每行为 2 个数字,分别是同一位上的被加数和加数(当 t=1 时);或被 减数和减数(当 t=2 时)。从第 3 行起,位数依次由高到低,第 3 行为最高位,第 n+2 行为最低位。
样例: 输入 1 2 -4 0 32 1 -2 2 输出 3 -4+x^2
第三部分
综合问题 (任选一题完成,共 10 分)
3-A. 代数式处理 ( 3-A.cpp ) 读入一个仅含变量 x 的代数式和 x 的值, 输出该式在 x=x0 处的函数值和导函数的值。 表达式中除了字母 x 和+, -, *, /, (, )外没有其他字符
任务一 输入不超过 100 的正整数 x0,输出当 x=x0 时结果多项式的值。(6 分)
任务二 把结果多项式按照指数递增的顺序输出,格式参考样例输出。注意,你的输出应当 符合手写习惯,例如 “1x^2”应当写成”x^2”。(6 分)
另外,你的程序应当有适当的注释(3 分)。
输入 第一行包含一个正整数 x0,即任务一中变量 x 的值。 第二行包含一个整数 n,即第一个多项式的项数。从第 3 行开始的以下 n 行每行两 个整数 c 和 e,表示该项的系数和指数。再下一行包含一个整数 m,即第二个多项
4
根据上面的方法,你的程序需要完成两个任务:
任务一: 输入一个正整数 k,在屏幕上输出 k 的约数的个数 c。(6 分)
任务二: 输入一个正整数 n,将 1~n 按照约数个数的不同进行分类,在屏幕上输出约数个数 不同的类的数目 t。(6 分) 例如:当 n=10 时,约数个数不同的类共有 4 类,它们分别是: 约数个数为 1 的类:{ 1 }; 约数个数为 2 的类:{ 2, 3, 5, 7 }; 约数个数为 3 的类:{ 4, 9 }; 约数个数为 4 的类:{ 6, 8, 10 };
第一部分 基础问题 (每题 12 分,共 60 分)
1-1.自我介绍 ( 1-1.cpp ) 在屏幕上输出你的学号和姓名,各占一行。
1-2.递归函数 ( 1-2.cpp ) 有这样一个函数:
x y x x y 且x, y至少有一个小于1 0 F ( x, y ) F (0.7 x 3, y ) F ( x, y 8.4) x y 1 x y 1 y x 1 F ( x / 2, y 1) F ( x 1, y / 3) x y
清华大学本科《C 语言程序设计》期末考试试题
试卷说明: 考试形式为上机考试,考试时间总计 3 小时 请在 C 盘根目录下建立一个子目录,以自己的学号命名,并将所有的程序存入 此目录。如,学号为 010000 的同学,需要建立目录 C:\010000,并将程序存入 此目录。按照题目名称中指定文件名保存你的程序,并保存一个备份,以免程 序被意外破坏。例如,第一题应当保存一个叫做 1-1bak.cpp 的文件。 3-A 和 3-B 最多只能选择一道题目。如果同时存在 3-A.cpp 和 3-B.cpp,我们将 随机选择一道题目进行评分。 所有题目采用键盘输入和屏幕输出,你的程序不得访问任何文件。 评分时将查看源程序,请严格遵守题目中给出的限制。
3-B.宇宙加减法 ( 3-B.cpp ) 众所周知,我们现在的 c 语言用 int 或 long 来表示整数,但是在很多情况下,它们 的范围是远远不够的,这就需要我们自己来设计程序,计算比较大的数的加减法, 从现代科学角度来说 1000 位的数是足够的了, 但是我们希望你能计算 1000000 位数 以内的加减法,以适应未来的科学计算要求。