华科计算机保研复试机试题目2.doc_第1页
华科计算机保研复试机试题目2.doc_第2页
华科计算机保研复试机试题目2.doc_第3页
华科计算机保研复试机试题目2.doc_第4页
华科计算机保研复试机试题目2.doc_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

华中科技大学复试机试题目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可以取63.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,92,输入一个5行4列的的矩阵,输出每列最大两个元素3.建立一个链表,以输入0为结束,删除其中数值最大的元素,并输出后删除元素后的链 表(不能用数组)2000年1. 输入n,求y1=1!+3!+.m!(m是小于等于n的最大奇数) y2=2!+4!+.p!(p是小于等于n的最大偶数)2。输入一个55的矩阵,判断是否对称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 81。求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文件中。匹配时不区分大小写,并且可以有一个用中括号表示的模式匹配。如“aa123bb”,就是说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 (%ds octal number is %on,a,a) ; (2)用户输入一个文本名,编程实现输出文本中最长的一行和最短的一行。如果最长和最短的不止一行,请全部输出。#include #include #include #define BUFFSIZE 1000 int main()FILE *fp;char filename255;char tempMaxBUFFSIZE;char tempMinBUFFSIZE;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 LineBUFFSIZEBUFFSIZE;while(fgets(Linei, BUFFSIZE, fp)&iBUFFSIZE) /printf(%s,Linei); i+; cnt+; strcpy(tempMax,Line0); strcpy(tempMin,Line0);/printf(%sn,tempMax);for(i=1;istrlen(tempMax) strcpy(tempMax,Linei); if(strlen(Linei)strlen(tempMin) strcpy(tempMin,Linei);printf(longest string:n);for(i=0;icnt;i+) if(strlen(Linei)=strlen(tempMax) printf(%sn,Linei); printf(nnshortest string:n);for(i=0;icnt;i+)if(strlen(Linei)=strlen(tempMin)printf(%s,Linei);fclose(fp);return 0; (3)输入学生信息:学号,三门课程的成绩,学号为0时结束,将其存储在链表A中,从中找出分数大于平均分的学生,并将该学生信息按平均分降序排列存入到链表B中,最后输出链表B。#include #include #include typedef struct nodechar xuehao20;int chengji3;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-chengji0); printf(input 成绩:); scanf(%d,&ui-chengji1); printf(input 成绩:); scanf(%d,&ui-chengji2); ui-av=(ui-chengji0+ui-chengji1+ui-chengji2)/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-chengji0; chengji2+=p-chengji1; chengji3+=p-chengji2; 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-avavfinal) printf(%sn,q-xuehao); printf(%fn,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) sk.av=tempB-av; sk.chengji0=tempB-chengji0; sk.chengji1=tempB-chengji1; sk.chengji2=tempB-chengji2; strcpy(sk.xuehao,tempB-xuehao); tempB=tempB-next; k+; int l,m; stud temps; for (l=0;lcnt-1;l+) for (m=l+1;mcnt;m+) if(sl.avsm.av) temps.chengji0=sl.chengji0;temps.chengji1=sl.chengji1;temps.chengji2=sl.chengji2;strcpy(temps.xuehao,sl.xuehao);sl.chengji0=sm.chengji0; sl.chengji1=sm.chengji1;sl.chengji2=sm.chengji2;strcpy(sl.xuehao,sm.xuehao);sm.chengji0=temps.chengji0;sm.chengji1=temps.chengji1;sm.chengji2=temps.chengji2;strcpy(sm.xuehao,temps.xuehao); for (int i=0;icnt;i+) printf(学号:%sn,si.xuehao); printf(成绩:%fn,si.chengji0); printf(成绩:%fn,si.chengji1); printf(成绩:%fn,si.chengji2); return 0;07年的华科招收研究生上机试题一、 编写一个程序输入一个5X6的矩阵存储并输出,并且求出每行的最大值和每行的总和要求把每行总和放入每行最大值的位置,最后把结果矩阵,每行最大值及其原下标及其总和输出。#include #include int getMat(int a56,int n,int m)int i;int j; for (i=0;in;i+) for(j=0;jm;j+) scanf(%d,&aij); return 0;int getMax(int a56,int n,int m,int b5,int c5,int d5,int sum5)int i;int j;for(i=0;in;i+) bi=0;ci=0;di=0;sumi=0; for(i=0;in;i+)int max=ai0;int col=0;int r=0; for(j=0;jm;j+) sumi+=aij; if(maxaij) max=aij; r=i; col=j; bi=max; ci=r; di=col;for(i=0;in;i+) acidi=sumi;return 0;void displayMat(int a56)int i;int j;for (i=0;i5;i+) printf(n);for(j=0;j6;j+)printf(%d ,aij);printf(n);int main() int a56; getMat(a,5,6); int c5,d5,b5,sum5;getMax(a,5,6,b,c,d,sum);printf(每行最大值:n);for (int i=0;i5;i+) printf(第%d行:n最大值:%dn列:%dn和:%dn,i+1,bi,di,sumi);printf(结果矩阵:n);displayMat(a); return 0;二、 编写程序判断输入的任意字符,任意长度的字符串是否回文(顺读,逆读均相同),最后输出原字符串和判断结果。#include #include #include void main() int i; int bIsSame = 1;/是否相同的标志int a=0,b; char f 255; scanf(%s,f); /读入字符串b = strlen(f)-1; /获得最后一个字符的序号(字符串总长度减)for(i=0;ib/2;i+) /循环,从到字符串中间的字符 if(fa+!=fb-) /首尾比较是否相同字符 bIsSame = 0; /有不同的就把标志置,并跳出循环break; if(bIsSame) /相同就输出Y printf (Y); else /不同就输出N printf (N); getchar();/按任意键退出三、 输入一个6X6的矩阵并存储,把该矩阵逆置并输出。要求:不得使用任何数组(就地逆置)。#include #include void TwoDto1D(int a66,int b36) int i,j; for (i=0;i6;i+) for (j=0;j6;j+) b6*i+j=aij; void TransposeInplace(int b36,int width,int height)int from, to, offset, step;int i, j;for (i = to = offset = 0, step = width; i width; +i, -step, offset += height-1) for (j = 0, from = i + offset; j height; +j, +to, from += step) int temp;temp=bto;bto=bfrom;bfrom=temp;/bto=bfrom;int temp;temp=width;width=height;height=temp;int getMat(int a66,int n,int m)int i;int j; for (i=0;in;i+) for(j=0;jm;j+) scanf(%d,&aij); return 0;void display(int b36) for (int i=0;i36;i+) if (i%6=0) printf(n); printf(%d ,bi); int main() int a66; int b36; getMat(a,6,6); TwoDto1D(a,b); int width=6; int height=6; TransposeInplace(b,width,height); display(b); return 0;06年的华科研究生复试上机试题:(1)采用命令行方式复制任意多个文件内容到一个文件中,如下所示:命令行形式:mycopy 1.txt 2.txt 3.txt 4.txt .功能:复制2.txt 3.txt 4.txt 的内容到1.txt中#include #include #include #define BUFFERSIZE 1000int main(int argc, char *argv) if (argc3) printf(参数不足n); return 0; /int cnt=argc-1;int i;FILE *fp;if(NULL=(fp=fopen(argv1,a) printf(目标文件打开失败!); return 0;fprintf(fp,%s,n);FILE *fpSRC;for (i=2;iargc;i+) if(NULL=(fpSRC=fopen(argvi,r) printf(源文件打开失败!); return 0; char tempBUFFERSIZE+1;while (fgets(temp,BUFFERSIZE,fpSRC) fprintf(fp,%sn,temp);fclose(fpSRC);printf(内容复制成功!n);fclose(fp);return 0;(2)判定一个C语言变量的命名是否正确#include int check(char *str) char *temp=str; if (!(*temp=_|(*temp=a&*temp=A&*temp=a&*temp=A&*temp=0&*temp=9) return 0; temp+; return 1;int main() while(1) printf(input var:); char haha255; scanf(%s,haha); if(check(haha) printf(CORRECTn); else printf(WRONGn); return 0;(3)建立一种数据结构,可以存储任意个、任意长度的整数,利用这个数据结构,输入一串数,排序,求累加和#include #include #include typedef struct node int i; struct node *next; struct node *pre;bigIntNode,*bigInt;bigInt getBigInt(char *s) bigInt bi; bi=(bigInt)malloc(sizeof(bigIntNode); bi-pre=NULL; bigInt temp=bi; char *p=s; while(*p!=0) bi-i=*p-48; bi-next=(bigInt)malloc(sizeof(bigIntNode); bigInt t=bi; bi=bi-next; bi-pre=t; p+; bi-next=NULL; return temp;int display(bigInt bi) bigInt p=bi; if(p-i) printf(%d,p-i); p=p-next; while(p-next) printf(%d,p-i); p=p-next; printf(n); return 1;bigInt add(bigInt bi1,bigInt bi2) bigInt p=bi1; bigInt q=bi2; while (p-next) p=p-next; while (q-next) q=q-next; bigInt ret=(bigInt)malloc(sizeof(bigIntNode); ret-next=NULL; ret-i=0; int finali=0; int add=0; while (p&q) int i=p-i+q-i; int t=0; int j=0; if(i9) j=i/10;t=i%10; else j=0; t=i; ret-i=t; bigInt tb=(bigInt)malloc(sizeof(bigIntNode); tb-i=0; tb-i+=j; ret-pre=tb; tb-next=ret; ret=tb; p=p-pre; q=q-pre; finali=j; if(p) int f=0; while(p) f=p-i+ret-i;int t=0;int j=0;if(f9)j=f/10;t=f%10;elsej=0;t=f;ret-i=t;bigInt tb=(bigInt)malloc(sizeof(bigIntNode);tb-i=0;tb-i+=j;ret-pre=tb;tb-next=ret;ret=tb;p=p-pre; if(q) int f=0; while(q) f=q-i+ret-i; int t=0; int j=0; if(f9)j=f/10;t=f%10; elsej=0;t=f; ret-i=t; bigInt tb=(bigInt)malloc(sizeof(bigIntNode); tb-i=0; tb-i+=j; ret-pre=tb; tb-next=ret; ret=tb; q=q-pre; ret-pre=NULL; return ret;int getlength(bigInt bi) bigInt p=bi; int i=0; while(p) p=p-next; i+; return i;int compare(bigInt bi1,bigInt bi2) bigInt p=bi1; bigInt q=bi2; if (getlength(p)getlength(q) return 1; else if (getlength(p)next,q=q-next) if (p-iq-i) return 1; else if (p-ii) return -1; return 0; int sort(bigInt *bi,int n) int i; int j; for (i=0;in-1;i+) bigInt temp; for (j=i+1;jn;j+) if (compare(bii,bij)=1) /memcpy(temp,bii,sizeof(bigInt);/memcpy(bii,bij,sizeof(bigInt);/memcpy(bij,temp,sizeof(bigInt);temp=bii;bii=bij;bij=temp; return 0;int main() bigInt *bia;/双重指针 bia=(bigInt*)malloc(1000*sizeof(bigInt); int cnt=0; char str1000; printf(输入大数n);int i; for (i=0;i1000;i+) scanf(%s,str); if(strcmp(str,0)=0) break; biai=getBigInt(str); cnt+; bigInt sum=bia0; for(i=1;icnt;i+) sum=add(sum,biai); printf(原来大数:n); for(i=0;icnt;i+) display(biai); sort(bia,cnt); printf(排序后大数:n); for(i=0;icnt;i+) display(biai); printf(和:n); display(sum); return 0;05-03年华科招收研究生复试上机试题汇总:(1)输入一个数列以0为结束标志,建立链式线性表,查找其中最大的数并输出删除释放节点,然后对剩余的进行排序,并输出释放节点。#include #include typedef struct node int value; struct node *next;LNode,*SqList;void createList(SqList &L) SqList p=L; while (1) int value; scanf(%d,&value); if (value=0) p=NULL; return; p-value=value; p-next=(SqList)malloc(sizeof(LNode); p=p-next; void display(SqList L) SqList p=L; while (p-value!=-1163005939) printf(%d ,p-value); SqList q=p-next; free(p); p=q; int getMax(SqList L) if (L) SqList p=L; int temp=p-value; p=p-next; while (p&p-value!=-1163005939) if (tempvalue) temp=p-value; p=p-next; return temp; void freeMax(SqList &L) if (L) SqList p=L; SqList q; while (p) if (p-value=getMax(L) q=p-next; free(p); L=q; break; p=p-next; void SortSqList(SqList &L) SqList p,q,small; int temp; for (p=L;p-next;p=p-next) small=p; for(q=p-next;q;q=q-next) if(q-valuevalue) small=q; if (small!=p) temp=p-value; p-value=q-value; q-value=temp; int main() SqList L;L=(SqList)malloc(sizeof(LNode); createList(L);int max=getMax(L);printf(最大值:%dn,max);freeMax(L);SortSqList(L);printf(排序后:n);display(L);(2)输入一个数列以0为结束标志,建立二叉遍历树,并对其进行逆中序遍历,释放空间。#include #include typedef struct tnodeint value;struct tnode *lchild;struct tnode *rchild;BTreeNode,*BTree;BTree createBTree()int value;BTree t;scanf(%d,&value);if (value=0) /* 判断当前子树是否创建完成*/ return NULL; else t=(BTree)malloc(sizeof(BTreeNode);t-value=value;t-lchild=createBTree();t-rchild=createBTree();return t;void ReInorderBTree(BTree B) BTree p=B; if(p) InorderBTree(p-rchild); printf(%dn,p-value); free(p); Ino

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论