华中科技大学复试机试题目
2008年
一.
1、狼过河问题(运用到回溯)
2、统计文件中单词数目
3、N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式。(递归)
4、链表操作
二.
第一个是一个上楼梯的种数的统计,本来是一个用递归可以解决的问题,但是题目
偏偏要求编写快速算法,言下之意就是要求你把递归转化成非递归。
第二个题是链表的,要求依照给出的结构体依次实现输入链表,保存链表,删除链表,从磁盘读取链表,显示链表这几个操作。做这个题,如果不记得保存文件的函数,很可能做不全或者做不出来。
第三个是要求根据- | \ / 四个字符来实现题目所规定的一个长方体。并能使这个长方体适当的放大。这个是一个递归问题,但是我想了半天也没有做出来。
2006
1.输入一个数列以0位结束标志,建立链式线性表,查找其中最大的数并输出删除释放节点,然后对剩余的进行排序,并输出释放节点
2.输入一个数列以0位结束标志,建立二叉遍历数,并对其进行逆中序遍历,释放空
间
第一题是对输入的5个数排序,输出的结果到文件里。
第二题是用链表去对上面的5个数字排序。
第三题是输入一个ip地址串,判断是否合法。
2005
第一题:对给定的一个字符串,找出有重复的字符,并给出其位置,如:
输入:abcaaAB12ab12
输出:a,1;a,4;a,5;a,10
b,2;b,11
1,8;1,12
2,9;2,13
第二题:输入一个四行五列的矩阵,找出每列最大的两个数,如:
输入:1 2 3 4 9
-1 4 9 8 8
12 9 8 7 0
7 8 9 7 0
输出:12 9 9 8 9
7 8 9 7 8
第三题:输入一个字符串,建立一个二叉排序树,并中序遍历输出;
其它年份题目
1.给出年分m和一年中的第n天,算出第n天是几月几号(提示中给出了判断闰年的方法),按yyyy-mm-dd的格式打印出来
2.职工有职工号,姓名,年龄.输入n个职工的信息,找出3个年龄最小的职工打印出来,n可以取6
3.n个人排一圈123报数,报到3的人退到圈外,直到剩最后一个人为止
4.冒泡排序。
5.建立二叉树,并中序遍历。
6.生成一个长度为21的数组,依次存入1到21;建立一个长度为21的单向链表,将上述数组中的数字依次存入链表每个结点中;将上述链表变为单向封闭(循环)链表;从头结点开始数,将第17个结点删除,将它的下一个结点作为新的头结点;重复上述过程,直到该链表中只剩一个结点,显示该结点中存入的数字。
08年的华科招收外校保送生上机试题:
(1)输入一个十进制数,将其先转化为八进制数,然后再输出
(2)用户输入一个文本名,编程实现输出文本中最长的一行和最短的一行。如果最长和最短的不止一行,请全部输出。
(3)输入学生信息:学号,三门课程的成绩,学号为0时结束,将其存储在链表A中,从
中找出分数大于平均分的学生,并将该学生信息按平均分降序排列存入到链表B中,最后输出链表B。
08年的华科本校生保送上机试题:
(1)采用命令行方式复制任意多个文件内容到一个文件中,如下所示:
命令行形式:mycopy 1.txt 2.txt 3.txt 4.txt ...
功能:复制2.txt 3.txt 4.txt …的内容到1.txt中
(2)判定一个C语言变量的命名是否正确
(3)建立一种数据结构,可以存储任意个、任意长度的整数,利用这个数据结构,输入一串数,排序,求累加和
2001年保研复试题目
1.统计一字符串字符重复的个数;
例如:输入q3s4sa1aa
输出s,3; s,5
a,6; a,8; a,9
2,输入一个5行4列的的矩阵,输出每列最大两个元素
3.建立一个链表,以输入0为结束,删除其中数值最大的元素,并输出后删除元素后的链
表(不能用数组)
2000年
1. 输入n,
求y1=1!+3!+...m!(m是小于等于n的最大奇数)
y2=2!+4!+...p!(p是小于等于n的最大偶数)
2。输入一个5×5的矩阵,判断是否对称
3。建立一个升序链表并遍历
2002年
1、编一个程序,读入用户输入的,以“.”结尾的一行文字,统计一共有多少个单词,并分别输出每个单词含有多少个字符。(凡是以一个或多个空格隔开的部分就为一个单词)
2、守形数是这样一种整数,它的平方的低位部分等于它本身。比如25的平方是625,低位部分是25,因此25是一个守形数。编一个程序,找出2--100之间所有的守形数。
3、编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以
指针方式存储)。例如如下的先序遍历字符串:
ABC##DE#G##F###
其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。
屏幕的格式化输出:给出一幅图形,用程序实现。如下所示。
AA AA
AB BA AB BA
ABC CBA AA
AB BA (输入字符B)
AA
(输入字符C)
指针构建链表结构:输入一组数据,构建一个升序链表,完成插入,删除,遍历功能。
例如,输入 1 8 5 4 3;
构建head->1->3->4->5->8->NULL;
遍历 1 3 4 5 8;
插入 6 遍历 1 3 4 5 6 8
删除 5 遍历 1 3 4 5 8
1。求N的阶乘,其中0<=N<=1000 (35分)
2。求最长的子序列和。
比如1+3-2,结果是4;
1+3-2+5,结果是7;
-1-2-3,结果是-1.
另外要求运行时间不超过1s,就是要求算法的复杂度要好(25分)
3。已知二叉树的前序和中序序列,要求写出后序序列。(40分)
如果给的前序和中序序列是错误的,就要输出"NO ANSWER!"
//1 生成一个长度为21的数组,依次存入1到21
//2 建立一个长度为21的单向链表,将上述数组中的数字依次存入链表每个结点中
//3 将上述链表变为单向封闭(循环)链表
//4 从头结点开始数,将第17个结点删除,将它的下一个结点作为新的头结点
//5 重复上述过程,直到该链表中只剩一个结点,显示该结点中存入的数字
北航:
1.素数
输入一个整数,要求输出所有从1到这个整数之间个位为1的素数,如果没有则输出-1(30分)
2.旋转矩阵
任意输入两个9阶以下矩阵,要求判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。
要求先输入矩阵阶数,然后输入两个矩阵,每行两个数之间可以用任意个空格分隔。行之间用回车分隔,两个矩阵间用任意的回车分隔。(60分)
3.字符串匹配
从string.in中读入数据,然后用户输入一个短字符串。要求查找string.in中和短字符串的所有匹配,输出行号、匹配字符串到string.out文件中。匹配时不区分大小写,并且可以有一个用中括号表示的模式匹配。如“aa[123]bb”,就是说aa1bb、aa2bb、aa3bb都算匹配。(60分)
其它:
上机:(一个小时,时间很紧,使用VC6.0系统 C或C++都行)考文件操作的很多,所以文件操作要熟。
第一题:两个整数异或,然后以二进制形式输出异或结果。
第二题:一个组合问题。大意是红、黑、白球各若干个,每次取出8个,求不同的组合数。个数从键盘输入,结果保存到文件。
第三题:然后给定一个字符串,读文件后查找与给定串的匹配,找到后输出,找不到返回。第四题:一个二叉树的结点信息(值、层数等,记不大清楚了)保存在文件里,读文件建立二叉树,好像还要遍历一下。
a、输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数!(如…3?,输
出:10110011);
b、设计8个任务函数task0()-task8()只输出一句话:如task0()输出“task0 is called!”;设计一个调度函数schedule()输入一个字符串如"012345"然后返回一个函数指针数组和字符串的长度作为执行函数execute()的参数进行调度任务函数。主函数只有调度函数。(这个题难道很多同学因为很多同学不知道函数指针数组怎么用啊!)
c、实现一个加法器,保证两个加数是任意长的整数。(这个题的加数由于是任意长所以把它声明成什么类型(long、int)的都是不对的,要用到结构体)。(所以这应该是个串行加法器)
面试的时候,基本上就是问你做了什么项目,什么毕业论文之类的,不会涉及专业知识!
====================================================================== 08年的华科招收研究生上机试题:
(1)输入一个十进制数,将其先转化为八进制数,然后再输出
#include
main()
{
int a = 0 ;
printf ("Please enter a decimal number:") ;
scanf ("%d",&a) ;
printf ("%d's octal number is %o\n",a,a) ;
}
(2)用户输入一个文本名,编程实现输出文本中最长的一行和最短的一行。如果最长和最短的不止一行,请全部输出。
#include
#include
#include
#define BUFFSIZE 1000
{
FILE *fp;
char filename[255];
char tempMax[BUFFSIZE];
char tempMin[BUFFSIZE];
int i=0;
int cnt=0;
printf("input file name:");
scanf("%s",filename);
if (NULL==(fp=fopen(filename,"r")))
{
printf("file open error!");
return 0;
}
char Line[BUFFSIZE][BUFFSIZE];
while((fgets(Line[i], BUFFSIZE, fp))&&i //printf("%s",Line[i]); i++; } strcpy(tempMax,Line[0]); strcpy(tempMin,Line[0]); //printf("%s\n",tempMax); for(i=1;i { if(strlen(Line[i])>strlen(tempMax)) strcpy(tempMax,Line[i]); if(strlen(Line[i]) strcpy(tempMin,Line[i]); } printf("longest string:\n"); for(i=0;i { if(strlen(Line[i])==strlen(tempMax)) { printf("%s\n",Line[i]); } } printf("\n\nshortest string:\n"); for(i=0;i { if(strlen(Line[i])==strlen(tempMin)) { printf("%s",Line[i]); } } fclose(fp); return 0; } (3)输入学生信息:学号,三门课程的成绩,学号为0时结束,将其存储在链表A中,从中找出分数大于平均分的学生,并将该学生信息按平均分降序排列存入到链表B中,最后输出链表B。 #include #include #include typedef struct node {char xuehao[20];int chengji[3];float av;struct node *next; }stud,*UerInfo; int main() { UerInfo ui; ui=(UerInfo)malloc(sizeof(stud)); UerInfo p=ui; UerInfo q=ui; UerInfo tempB=ui; printf("input students' information:\n"); int cnt=0; while (1) { printf("input 学号:"); scanf("%s",ui->xuehao); if(strcmp(ui->xuehao,"0")==0) break; printf("input 成绩:"); scanf("%d",&ui->chengji[0]); printf("input 成绩:"); scanf("%d",&ui->chengji[1]); printf("input 成绩:"); scanf("%d",&ui->chengji[2]); ui->av=((ui->chengji[0]+ui->chengji[1]+ui->chengji[2])/3); ui->next=(UerInfo)malloc(sizeof(stud)); ui=ui->next; cnt++; } int chengji1=0; int chengji2=0; int chengji3=0; while (p&&strcmp(p->xuehao,"0")!=0) { chengji1+=p->chengji[0]; chengji2+=p->chengji[1]; chengji3+=p->chengji[2]; p=p->next; } float chengji1av=0.0; float chengji2av=0.0; float chengji3av=0.0; float avfinal=0.0; if(cnt) { chengji1av=(float)chengji1/(float)cnt; chengji2av=(float)chengji2/(float)cnt; chengji3av=(float)chengji3/(float)cnt; avfinal=(chengji1av+chengji2av+chengji3av)/3; } printf("高于平均分的有:\n"); while (q&&strcmp(q->xuehao,"0")!=0) { if(q->av>avfinal) { printf("%s\n",q->xuehao); printf("%f\n",q->av); } q=q->next; } printf("\n降序排列如下:\n"); UerInfo s; s=(UerInfo)malloc(cnt*sizeof(stud)); int k=0; UerInfo temp=tempB; while (tempB&&strcmp(tempB->xuehao,"0")!=0) { s[k].av=tempB->av; s[k].chengji[0]=tempB->chengji[0]; s[k].chengji[1]=tempB->chengji[1]; s[k].chengji[2]=tempB->chengji[2]; strcpy(s[k].xuehao,tempB->xuehao); tempB=tempB->next; k++; } int l,m; stud temps;