注意:此复试题目是根据CSDN博客逃离地球的小小呆上发布的回忆版整理复原。为了恢复试题的原貌,我根据试题要求进行合理的脑补,按照oj系统的风格补全了试题的Problem Description、Input、Output、Sample Input、Sample Out等内容,并加入了详解、具体的代码实现。因为是复原版,不能保证当时的题目就是这么呈现的,也不能说明考场上的试题就是oj风格叙述的,仅供大家参考。有什么错误、不合理的地方欢迎指出。
原创不易,还请大家多支持
第一题
Problem Description
Input
Output
Sample Input
Sample Output
这道题相当简单,应该属于大一入学c语言的期末考试题那种水平。简单判断下随机数与输入的大小关系,根据题意输出结果即可。但有一点需要注意,题目要求随机数应是一个三位数,而C/C++
语言中的rand()
的范围是[0-RAND_MAX],所以要对rand()
的返回值做一些处理rand() % 900 + 100
使之满足题意。同时,由于rand()产生的是伪随机数,他需要一个随机种子才可以产生随机数,若随机种子没有变化,产生的随机数也不会有变化,所以使用它之前,要调用srand()
函数初始化一下。一般大家都喜欢用,系统当前时间来初始化它srand(time(NULL))
1 |
|
第二题
Problem Description
Input
Output
Sample Input
124and 1524
Sample Output
1648
这道题主要是考察对C/C++语言内置基本函数的使用,首先要注意到因为输入的字符串中含有空格,所以应使用gets()
函数进行输入。当程序运行至gets()
语句后,它将依次读入遗留在输入缓冲中的数据直到出现换行符,并将除换行符外的所有已读字符保存在字符数组中,同时从输入缓冲中去除该换行符。而scanf ("%s",str)
函数读取输入缓冲的字符直到出现空格、换行字符,它将读到的字符保存至字符数组str
中,但并不删除缓冲中紧接的空格与换行。假设输入数据格式为:第一行为两个整数,第二行为一个字符串,如:
2 3(换行)
Test(换行)
为了读入输入数据,我们使用语句
1 | scanf ("%d%d",&a,&b); |
我们来分析其运行过程,当程序运行至scanf时,程序读入输入缓冲中的数据2 3,并将数字2、3分别保存至变量a、b中,此时输入缓冲中遗留的数据为第一行一个换行符,第二行一个字符串,即
(换行)
Test(换行)
1 |
|
在此程序中,为使字符串中的数字转换为整形数字,我们使用了atoi()
,因此只需将输入字符串中的数字保存在字符串num
中调用atoi(num)
即可
第三题
Problem Description
Input
Output
Sample Input
此为文件内容:
3张三 20100601 78 89 62 75
李四 20100602 78 54 98 86
王五 20100603 78 69 85 75
5
张三 20100601 78 89 62 75
李四 20100602 78 54 98 86
王五 20100603 78 69 85 100
赵六 20100604 78 60 98 86
田七 20100605 78 69 85 75
Sample Output
王五 赵六 李四 田七 张三
这是一道排序的问题,使学生按照总成绩的降序排列,我们可以使用sort
库函数来实现。我们在头文件方面包含了algorithm
头文件,并使用 using namespace std
语句声明了我们将会使用标准命名空间(sort
被定义在其中)。但是,学生结构是我们自定义的数据结构计算机并不知道如何对该结构进行排序,我们要做的即是向计算机说明该排序依据。我们可以直接定义该结构体的小于运算符来说明排序规则。sort
函数的两个参数代表待排序内存的起始地址和结束地址(sort
函数还有另外的重载形式,可自行上网查阅或参考《王道论坛计算机考研机试指南》第二章第一节排序相关内容),在此例中起始地址为 stu
,结束地址为 stu+ n
。该函数调用完成后,stu
数组中的数字就已经通过快速排序升序排列。我们只需对其输出即可。
1 |
|
同样需要注意的是C/C++
的文件操作,这里使用的是包含在stdio.h
头文件中的文件操作方法,fscanf
方法与从键盘上输入scanf
基本一致,都是直到遇到第一个空格或第一个回车结束。