华南农业大学试卷

2018-2019学年第1学期        考试科目:高级语言程序设计

考试类型:(机考)        考试时间:150分钟


1. 部分
Description:
(1) 判断平方数
Description:
由键盘输入一个正整数,判断该数是否为平方数,是输出Y,否则输出N

Input:
一个整数

Output:
Y或者N

(2) 求数的位数
Description:
由键盘输入一个不多于9位的正整数,要求输出它是几位数。

Input:
一个整数

Output:
输出该数为几位数

(3) 判断点是否在圆上
Description:
由键盘输入一个点的坐标, 要求编程判断这个点是否在单位圆(圆心在坐标0,0)上,点在圆上输出Y, 不在圆上输出N。
使用小数点后3位精度进行判断。

(4) 前一个和后一个字符
Description:
编写程序,输入一个数字字符,输出其前一个和后一个的数字字符,如果输入的是0前一个输出
“first”,9后一个则输出“last”,输入的不是数学字符,输出“error”

Input:
一个字符

Output:
输出结果

2. 部分
Description:
(1) 计算阶乘
Description:
输入正整数n(n<12),计算n!(注n!=1*2*3*...*n)

(2) 计算简单数列和
Description:
有数列1,3,5,7,9,11,……
现要求由键盘输入n,计算输出该数列的前n项和。(给的n不会超过10000)

(3) 计算数列和
Description:
有数列:
编程实现,由键盘输入n,计算输出数列前n项和。(结果保留四位小数,提示:要使用double,否则精度不够)
Output:
请按格式输出

(4) 求最大公约数
Description:
由键盘输入两个正整数m、n(m、n<1000000),计算它们的最大公约数。

(5) 输出最小值
Description:
从键盘输入十个整数,输出最小值

Input:
输入的整数绝对值不会超过10000

Output:
按样例格式输出结果

(6) 字符变换
Description:
由键盘输入一个句子(字符个数不定,最多不超过80个,以'\n'结束),将其中的大写字符变成小写(其它类型的字符不变),
最后输出变换后的句子。

(7) 冒泡排序
Description:
由键盘输入10个数,用“冒泡法”对10个数从小到大排序,并按格式要求输出。代码如下,请填充完整。

(8) 选择排序
Description:
输入10个整数,编写一个实现对数组进行选择排序的函数

Input:
10个整数,以空格分隔

Output:
排序后的10个整数,一行一个数字

3. 部分
Description:
(1) 回文串
Description:
读入一行字符串(不多于80个字符,以回车结束),判断该字符串是否为回文串(即从左向右拼写与从

右向左拼写是一样的),是则输出Y,不是则输出N。

Input:
一行字符串

Output:
是则输出Y,不是则输出N

(2) 字母分类统计
Description:
输入一行以换行符结束的字符,统计并输出其中英文字母、数字、空格和其它字符的个数。

Input:
一行字符,以换行符结束

Output:
一行4个数字分别为:英文字母、数字、空格和其它字符的个数,两数据之间以一个空格分隔

(3) 自由落体
Description:
一个球从100米的高度自由落下,每次落地后弹起的原来高度的一半。计算并输出第n次落地时,共经过了多少米,第n次弹起的高度是多少?结果显示3位小数。

Input:
从键盘输入一个数n(n>0)

Output:
输出两个数,分别为共经过的米数和第n次弹起的高度,以一个空格分隔

(4) 迭代法求平方根
Description:
使用迭代法求a的平方根。求平方根的迭代公式如下,要求计算到相邻两次求出的x的差的绝对值小于1E-5时停止,结果显示4位小数

Input:
输入一个非负实数a

Output:
计算并输出平方根

4. 部分
Description:
(1) 分期还款(加强版)
Description:
从银行贷款金额为d,准备每月还款额为p,月利率为r。请编写程序输入这三个数值,计算并输出多少个月能够还清贷款,输出时保留1位小数。
如果无法还清,请输出“God”
计算公式如下:

Input:
三个数,分别为货款金额、每月还款和月利率,以空格分隔,均为非负数,其中d,p,r>=0

Output:
需要还款的月份

(2) 20秒后的时间
Description:
编写程序,输入三个整数变量hour(小时)、minute(分钟)、second(秒)代表一个时间,
输出该时间20秒以后的时间。

Input:
一行三个整数,分别代表小时、分钟、秒,中间使用冒号分隔

Output:
输出一个时间,数字间用冒号分隔
小时、分钟、秒均占两个数字位,不足位用0补足

(3) 勾股数
Description:
若三个正整数a、b、c,其中a<=b<=c,满足a^2+b^2=c^2,其中^表示上标,称这三个数为“勾股数”,例如:3、4、5是勾股数。编程输出不大于n的所有勾股数。

Input:
输入一个数(n<=100)

Output:
输出所有勾股数,按第1个数字由小到大排列(若第1个数字相同,按第2个数字排)

(4) 插入数据
Description:
已经有一个按升序排列的数组,编写程序输入一个整数x,把x插入到数组中,使数组仍然保持升序。
数组如下:
2 3 5 7 11 13 17 23 29 31 34 71 79 97 103

Input:
输入一个整数x

Output:
输出更新后的数组元素

(5) 大于平均分
Description:
输入10个整数,计算它们的平均值,并统计有多少个数比平均值大。

Input:
10个整数

Output:
比平均值在的数的个数

(6) 输出不同的数
Description:
输入10个整数,输出其中不同的数,即如果一个数出现了多次,只输出一次。

Input:
输入10个整数

Output:
依次输出不同的数字(一行一个,从上到下依次输出先出现的数)

(7) 主对角线上的元素之和
Description:
输入一个3行4列的整数矩阵,计算并输出主对角线上的元素之和

Input:
3行4列整数矩阵

Output:
主对角线上的元素之和

(8) 字母统计
Description:
输入三行字符串(每行以换行回车为结束符),每行不超过80个字符。统计并输出其有多少个大写字母。

Input:
三行字符串

Output:
大写字母个数

(9) ASCII码值之和的差
Description:
输入两个字符串s1和s2(每个串占一行,以换行回车符结束),计算两个字符串的所有字符的ASCII码值之和的差。

Input:
两行字符,第行字符不超过80个字符

Output:
ASCII码值之和的差

(10) 所有数字之和
Description:
编写一个函数,计算一个整数的所有数字之和

Input:
由键盘输入一个整数

Output:
输出该数各位数字之和

(11) 元音字母
Description:
编写一个函数,挑选一个字符串中的所有元音字母构成并返回一个新的字符串

Input:
由键盘输入一行字符,以'\n'结束

Output:
输出新构成的字符串

(12) 字符统计
Description:
编写一个函数,统计一个字符串中字母、数字和空格的个数。使用全局变量存放字母和数字个数,函数返回值是空格个数

Input:
输入一行字符,以'\n'符结束

Output:
统计结果

(13) 一年的第几天
Description:
定义一个结构体类型表示日期类型(包括年、月、日)。程序中定义一个日期类型的变量,输入该日期的年、月、日,
计算并输出该日期是一年的第几天。

Input:
年月日,格式如样例

Output:
该年的第几天

(14) 学生成绩表
Description:
输入10个学生,每个学生的数据包括学号、姓名、3门课的成绩。定义结构体类型表示学生类型,输入10个学生的数据,
计算每个学生的平均成绩。按平均成绩由高到低输出所有学生信息,成绩相同时按学号从小到大输出。

Input:
10个学生信息,每行一个学生

Output:
如题

(15) 删除空格
Description:
用指针方法解决,输入一个字符串,删除字符串中所有空格后,输出字符串

Input:
一行字符,以换行回车结束,最多不超过80个字符

Output:
删除所有空格后输出

(16) 数的交换
Description:
输入10个整数,把其中最小的数与第一个数交换,最大的数与最后一个数交换。使用3个函数解决问题:
(1) 输入10个整数的函数
(2) 进行交换处理的函数
(3) 输出10个数的函数

Input:
输入10个整数

Output:
输出结果,一行一个数字

(17) 二维数组每行中的最大值
Description:
输入一个4*4的二维整型数组,使用指针变量查找并输出二维整型数组中每一行的最大值。

Input:
4*4的整数矩阵

Output:
每行最大值,一行一个

5. 部分
Description:
(1) 统计单词个数
Description:
写一个函数实现:输入一行字符,以空格分割单词,回车结束输入,输出单词的个数

(2) 求素数
Description:
输出2到200之间(包括2、200)的所有素数(注:要求1行1个素数,按由小到大的顺序输出)。

(3) 打印菱形图案
Description:
由键盘输入正数n(n<30),要求输出如下2*n+1行的菱形图案。

Output:
菱形右边不留多余空格

(4) 打印图案
Description:
由键盘输入正数n(n<10),要求输出如下中间数字为n的菱形图案。

Output:
菱形右边不留多余空格

(5) 统计不同数字的个数
Description:
由键盘输入20个整数,统计不同数字的个数。

(6) 打印三角形
Description:
编写程序,输入整数n,输出n行的字符图案。例如n=5时输出:
    *
   **
  ***
 ****
*****
 ****
  ***
   **
    *


Input:
输入一个整数

Output:
输出2*n-1行的三角形

6. 部分
Description:
(1) 编写函数计算阶乘
Description:
下面程序实现由键盘读入整数n,计算并输出n!,请补充完整计算阶乘的函数。

(2) [填空题]十进制数转二进制数
Description:
下面程序,实现由键盘输入一个正整数(不大于100000000),输出其对应的二进制数(原码表示)。
请填空:

(3) 求函数值
Description:
输入x(x为整数),求函数值
函数定义如下:
F(x)=x          	         x小于3
F(x)=F(x/3)*2   	         x大于等于3且x为3的倍数
F(x)=F((x-1)/3)+1   	x大于等于3且x除3余1
F(x)=F((x-2)/3)+2   	x大于等于3且x除3余2

Input:
一个整数

Output:
结果

(4) x的n次方
Description:
输入正整数x和n,编写递归函数求x的n次方。

Input:
两个正整数,x和n

Output:
x的n次方,假定结果不会超过10的次方。

(5) 矩阵行交换或列交换
Description:
输入一个4*4矩阵,编写两个函数分别实现对二维数组元素的行与行进行交换,以及列与列进行交换

Input:
输入一个4*4矩阵

Output:
输出经过变换的矩阵

(6) 学生信息统计
Description:
输入10个学生5门课的考试成绩,分别用函数实现以下功能:
(1) 计算一个学生的平均分。
(2) 计算每门课程的平均分。
(3) 找出每门课程的最高分。
显示结果,显示两位小数。

Input:
输入10个学生5门课成绩

Output:
输出每个学生的平均分,以空格分隔
输出每门课的平均分,以空格分隔
输出每门课的最高分,以空格分隔

7. 部分
Description:
(1) 链表创建与插入结点(填空)
Description:
代码实现先创新一个链表,然后显示该链表,之后插入一个结点,再显示插入结点的链表。
请填空,完成该代码

输入样例
3			(3 students)
1			(code of no.1 student)
98			(score of no.1 student)
3			(code of no.2 student)
99			(score of no.2 student)
5			(code of no.3 student)
87			(score of no.3 student)
4			(code of no.3 student needs be inserted)
77			(score of no.3 student needs be inserted)

输出样例
1	98
3	99
5	87
1	98
3	99
4	77
5	87

(2) 链表创建与插入结点(填空)
Description:
代码实现先创新一个链表,然后显示该链表,之后插入一个结点,再显示插入结点的链表。
请填空,完成该代码


输入样例
3			(3 students)
1			(code of no.1 student)
98			(score of no.1 student)
3			(code of no.2 student)
99			(score of no.2 student)
5			(code of no.3 student)
87			(score of no.3 student)
4			(code of no.3 student needs be inserted)
77			(score of no.3 student needs be inserted)

输出样例
1	98
3	99
5	87
1	98
3	99
4	77
5	87

(3) 链表创建与插入结点(填空)
Description:
代码实现先创新一个链表,然后显示该链表,之后插入一个结点,再显示插入结点的链表。
请填空,完成该代码

(4) 链表创建与插入结点(填空)
Description:
代码实现先创新一个链表,然后显示该链表,之后插入一个结点,再显示插入结点的链表。
请填空,完成该代码

输入样例
3			(3 students)
1			(code of no.1 student)
98			(score of no.1 student)
3			(code of no.2 student)
99			(score of no.2 student)
5			(code of no.3 student)
87			(score of no.3 student)
4			(code of no.3 student needs be inserted)
77			(score of no.3 student needs be inserted)

输出样例
1	98
3	99
5	87
1	98
3	99
4	77
5	87

(5) 链表创建与插入结点(填空)
Description:
代码实现先创新一个链表,然后显示该链表,之后插入一个结点,再显示插入结点的链表。
请填空,完成该代码

输入样例
3			(3 students)
1			(code of no.1 student)
98			(score of no.1 student)
3			(code of no.2 student)
99			(score of no.2 student)
5			(code of no.3 student)
87			(score of no.3 student)
4			(code of no.3 student needs be inserted)
77			(score of no.3 student needs be inserted)

输出样例
1	98
3	99
5	87
1	98
3	99
4	77
5	87

8. 部分
Description:
(1) [填空]文本文件操作_字符读入
Description:
在当前目录中存在文件名为"case1.in"的文本文件,现要求你使用fopen函数命令打开该文件,读出里面的所有字符, 遇到大写字母的,将其变为小写字母,其它字符不变,最后将所有字符按顺序在屏幕上输出。请填空完成程序, (注意,填空题,请不要使用return 0结束,否则会影响评判而判错)
(如case1.in内容如下)
Hello my Dear:
Have a GooD Time!
(在屏幕上输出结果如下)
hello my dear:
have a good time!

(提示,在提交前要测试自己的代码是否正确,可在源文件所有目录自己创建一个名为case1.in的文本文件,
在文件中自己打入一些字母,以便测试自己的代码是否正确)

(2) 文本文件操作_读取与选择显示
Description:
    在当前目录中存在文件名为"case1.in"的文本文件,现要求打开该文件,读出里面的所有字符,只将其中的数字字符按先后顺序显示在屏幕上。

(如case1.in内容如下) 
13 cats and 22 bikes
(在屏幕上输出结果如下) 
1322

(3) 文本文件操作_字符写入(填空)
Description:
由键盘输入任意个字符(以连着的三个小写字符bye做为结束标志),将所有字符(包括bye),写入新建的文件answer.txt中(注:文件放在当前目录)。 
请完成该功能,(注意,填空题,请不要使用return 0结束,否则会影响评判而判错)
(如键盘输入内容如下)
He, can you write the code?
Yes, you can.bye
No, you can't.
(程序执行后,在文件answer.txt中内容如下)
He, can you write the code?
Yes, you can.bye

(注:因No, you can't.在bye之后,所以不输出)
(注:代码中不要使用return及exit()函数,以免误判)

(4) 文本文件操作_单词的排序(填空)
Description:
在当前目录有文件“case1.in”,文件里存放有多个(总个数不超过10000个)英文单词(每个英文单词不会超过10个字文字符), 
每行一个,单词未排序。现要求,将文件中的所有单词按字典顺序排序,然后将排序好的单词写入新建的文件answer.txt中(注:文件存放于当前目录)。 
请完成程序,实现该功能,(注意,填空题,请不要使用return 0结束,否则会影响评判而判错)
(如case1.in文件中原内容如下)
hello
bye
yes
(程序执行后,在文件answer.txt中内容如下)
bye
hello
yes

9. 部分
Description:
(1) 数字字符序列
Description:
有一个数字字符序列,它是由斐波那契数列1,1,2,3,5,8,13,21,34,……(最多45项斐波那契数)按顺序拼接而成,如下:
112358132134……
如下程序实现输入一个非0整数N,则输出该字符序列第N个数字字符,直到输入的N为0时结束(N为0时不用输出)

Input:
一行一个数字,最后一行是0

Output:
每行输出第N个数字字符

10. 部分
Description:
(1) 矩阵旋转
Description:
给定一个N行N列的数字矩阵。
下面程序实现将矩阵顺时针旋转W度,W是90度的倍数。

Input:
第一行是数字N,N小于等于10
之后是N行,每行N个整数,由空格分开
最后一行是一个非负整数,表示旋转W度,W是90的倍数

Output:
旋转后的矩阵,数字之间用一个空格分格