《高级语言程序设计》期末考试试题
清华大学计1年级《高级语言程序设计》期末考试试题
(3小时上机完成)
试卷说明:
请在C盘根目录下建立一个子目录,以自己的学号命名,并将所有的程序存入此目录。如,学号为010000的同学,需要建立目录C:\010000,并将程序存入此目录。按照题目名称中指定文件名保存你的程序,并保存一个备份,以免程序被意外破坏。例如,第一题应当保存一个叫做1-1bak.cpp的文件。
3-A和3-B最多只能选择一道题目。如果同时存在3-A.cpp和3-B.cpp,我们将随机选择一道题目进行评分。
所有题目采用键盘输入和屏幕输出,你的程序不得访问任何文件。
评分时将查看源程序,请严格遵守题目中给出的限制。
第一部分 基础问题 (每题12分,共60分)
1-1.自我介绍 ( 1-1.cpp )
在屏幕上输出你的学号和姓名,各占一行。
1-2.递归函数 ( 1-2.cpp )
有这样一个函数:
键盘输入实数a和b(0 < a, b < 100),计算该函数当x=a, y=b的值并输出到屏幕。输入值最多有四位小数,输出时四舍五入保留两位小数。
样例:
输入输出9.2 5.636.47
1-3.进制转换 ( 1-3.cpp )
请将一个n进制的数转换成m进制的数,并输出.(在10进制以上的数中A代表10,B代表11,以此类推)
输入:
第1行1个整数n,表示被转换的数的进制(2 < = n < = 30)
第2行1个整数m,表示转换后的数的进制(2 < = m < = 30)
第3行有1个n进制的数。
输出:
仅1行,为转换后的m进制的数。
样例:
输入输出2
8
100110010462(注意:不要使用标准的进制转换函数)
1-4.竖式打印 ( 1-4.cpp )
键盘输入两个两位正整数a,b ( 11 < = a,b < = 99,且a和b都不包含数字’0’ ),在屏幕上输出a与b相乘的竖式。注意尽量按照样例的格式进行输出。
样例:
输入输出25 12 25
* 12
------
50
25
------
300
1-5. 铅笔工厂 ( 1-5.cpp )
在铅笔工厂里,一支铅笔要经过下列工序:首先在一台机器中喷上彩漆,随后在另一台机器中喷上清漆。遗憾的是这两台机器都有一些毛病。上彩漆的机器在每处理n支铅笔后就“罢工”一次(也就是下一支铅笔将不被喷上彩漆),而上清漆机器在处理m支铅笔后“罢工”一次。于是这所工厂出产四种铅笔,一种是成品铅笔,一种是只上过彩漆的铅笔,一种是只上过清漆的铅笔,最后一种是没有上过任何漆的铅笔。
请编写程序,对给定的n, m 和 k (被处理的铅笔总数),计算四种铅笔的数量。
例如,n=3, m=5 以及k=17,那么铅笔的处理情况如下图:
?1234567891011121314151617彩漆√√√×√√√×√√√×√√√×√清漆√√√√√×√√√√√×√√√√√17支铅笔中,有12支是成品。而第12支是什么漆也没上的;第6支只上了彩漆,还有3支只上了清漆。
输入:
仅一行,三个整数 n, m 和 k。0 < n < 106, 0 < m < 106, 0 < k < 109。
输出:
在一行中依次输出下列4个数:
a) 铅笔成品数。
b) 没被上漆的铅笔数。
c) 上过彩漆而没上清漆的铅笔数。
d) 上过清漆而没上彩漆的铅笔数。
样例1
输入输出3 5 1712 1 1 3
样例2
输入输出999999 999999 999999999999999000 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。
根据上面的方法,你的程序需要完成两个任务:
任务一:
输入一个正整数k,在屏幕上输出k的约数的个数c。(6分)
任务二:
输入一个正整数n,将1~n按照约数个数的不同进行分类,在屏幕上输出