华科计算机保研复试机试题目2.docx
- 文档编号:27117528
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:54
- 大小:33.73KB
华科计算机保研复试机试题目2.docx
《华科计算机保研复试机试题目2.docx》由会员分享,可在线阅读,更多相关《华科计算机保研复试机试题目2.docx(54页珍藏版)》请在冰豆网上搜索。
华科计算机保研复试机试题目2
华中科技大学复试机试题目
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
第二题:
输入一个四行五列的矩阵,找出每列最大的两个数,如:
输入:
12349
-14988
129870
78970
输出:
129989
78978
第三题:
输入一个字符串,建立一个二叉排序树,并中序遍历输出;
其它年份题目
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)采用命令行方式复制任意多个文件内容到一个文件中,如下所示:
命令行形式:
mycopy1.txt2.txt3.txt4.txt...
功能:
复制2.txt3.txt4.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###
其中“#”表示的是空格,空格字符代表空树。
建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。
屏幕的格式化输出:
给出一幅图形,用程序实现。
如下所示。
AAAA
ABBAABBA
ABCCBAAA
ABBA(输入字符B)
AA
(输入字符C)
指针构建链表结构:
输入一组数据,构建一个升序链表,完成插入,删除,遍历功能。
例如,输入18543;
构建head->1->3->4->5->8->NULL;
遍历13458;
插入6遍历134568
删除5遍历13458
1。
求N的阶乘,其中0<=N<=1000(35分)
2。
求最长的子序列和。
比如1+3-2,结果是4;
1+3-2+5,结果是7;
-1-2-3,结果是-1.
另外要求运行时间不超过1s,就是要求算法的复杂度要好(25分)
3。
已知二叉树的前序和中序序列,要求写出后序序列。
(40分)
如果给的前序和中序序列是错误的,就要输出"NOANSWER!
"
//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()输出“task0iscalled!
”;设计一个调度函数schedule()输入一个字符串如"012345"然后返回一个函数指针数组和字符串的长度作为执行函数execute()的参数进行调度任务函数。
主函数只有调度函数。
(这个题难道很多同学因为很多同学不知道函数指针数组怎么用啊!
)
c、实现一个加法器,保证两个加数是任意长的整数。
(这个题的加数由于是任意长所以把它声明成什么类型(long、int)的都是不对的,要用到结构体)。
(所以这应该是个串行加法器)
面试的时候,基本上就是问你做了什么项目,什么毕业论文之类的,不会涉及专业知识!
======================================================================
08年的华科招收研究生上机试题:
(1)输入一个十进制数,将其先转化为八进制数,然后再输出
#include
main()
{
inta=0;
printf("Pleaseenteradecimalnumber:
");
scanf("%d",&a);
printf("%d'soctalnumberis%o\n",a,a);
}
(2)用户输入一个文本名,编程实现输出文本中最长的一行和最短的一行。
如果最长和最短的不止一行,请全部输出。
#include
#include
#include
#defineBUFFSIZE1000
intmain()
{
FILE*fp;
charfilename[255];
chartempMax[BUFFSIZE];
chartempMin[BUFFSIZE];
inti=0;
intcnt=0;
printf("inputfilename:
");
scanf("%s",filename);
if(NULL==(fp=fopen(filename,"r")))
{
printf("fileopenerror!
");
return0;
}
charLine[BUFFSIZE][BUFFSIZE];
while((fgets(Line[i],BUFFSIZE,fp))&&i { //printf("%s",Line[i]); i++; cnt++; } 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("longeststring: \n"); for(i=0;i { if(strlen(Line[i])==strlen(tempMax)) { printf("%s\n",Line[i]); } } printf("\n\nshorteststring: \n"); for(i=0;i { if(strlen(Line[i])==strlen(tempMin)) { printf("%s",Line[i]); } } fclose(fp); return0; }(3)输入学生信息: 学号,三门课程的成绩,学号为0时结束,将其存储在链表A中,从中找出分数大于平均分的学生,并将该学生信息按平均分降序排列存入到链表B中,最后输出链表B。 #include #include #include typedefstructnode {charxuehao[20];intchengji[3];floatav;structnode*next; }stud,*UerInfo; intmain() { UerInfoui; ui=(UerInfo)malloc(sizeof(stud)); UerInfop=ui; UerInfoq=ui; UerInfotempB=ui; printf("inputstudents'information: \n"); intcnt=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++; } intchengji1=0; intchengji2=0; intchengji3=0; while(p&&strcmp(p->xuehao,"0")! =0) { chengji1+=p->chengji[0]; chengji2+=p->chengji[1]; chengji3+=p->chengji[2]; p=p->next; } floatchengji1av=0.0; floatchengji2av=0.0; floatchengji3av=0.0; floatavfinal=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"); UerInfos; s=(UerInfo)malloc(cnt*sizeof(stud)); intk=0; UerInfotemp=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++; } intl,m; studtemps; for(l=0;l { for(m=l+1;m { if(s[l].av { temps.chengji[0]=s[l].chengji[0]; temps.chengji[1]=s[l].chengji[1]; temps.chengji[2]=s[l].chengji[2]; strcpy(temps.xuehao,s[l].xuehao); s[l].chengji[0]=s[m].chengji[0]; s[l].chengji[1]=s[m].chengji[1]; s[l].chengji[2]=s[m].chengji[2]; strcpy(s[l].xuehao,s[m].xuehao); s[m].chengji[0]=temps.chengji[0]; s[m].chengji[1]=temps.chengji[1]; s[m].chengji[2]=temps.chengji[2]; strcpy(s[m].xuehao,temps.xuehao); } } } for(inti=0;i { printf("学号: %s\n",s[i].xuehao); printf("成绩: %f\n",s[i].chengji[0]); printf("成绩: %f\n",s[i].chengji[1]); printf("成绩: %f\n",s[i].chengji[2]); } return0; } 07年的华科招收研究生上机试题 一、编写一个程序输入一个5X6的矩阵存储并输出,并且求出每行的最大值和每行的总和要求把每行总和放入每行最大值的位置,最后把结果矩阵,每行最大值及其原下标及其总和输出。 #include #include intgetMat(inta[5][6],intn,intm) { inti; intj; for(i=0;i { for(j=0;j { scanf("%d",&a[i][j]); } } return0; } intgetMax(inta[5][6],intn,intm,intb[5],intc[5],intd[5],intsum[5]) { inti; intj;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 复试 试题