华科计算机考研复试历年上机题汇总24页_第1页
华科计算机考研复试历年上机题汇总24页_第2页
华科计算机考研复试历年上机题汇总24页_第3页
华科计算机考研复试历年上机题汇总24页_第4页
华科计算机考研复试历年上机题汇总24页_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、华科历年上机题汇总(欢迎补全)代码都很多是我自己写的,不一定正确啊!错了可不负责任的,呵呵仅供参考!=10年保送生上机试题1、不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。 #include<stdio.h>#include<stdlib.h>int main() char s1200,s2100; int i,len1,len2; scanf("%s %s",s1,s2); for(i=0;i<200;i+) if(s1i='0') len1=i; break; for(i=0;i<100

2、;i+) if(s2i='0') len2=i; break; for(i=len1;i<len1+len2;i+) s1i=s2i-len1; printf("%sn",s1); system("pause"); 2、输入一串数,要求建平衡二叉排序树,然后先序遍历。 3.、有4个小问,是超长整数的存储、计算、输出。要把超长整数存在一个单向循环链表中,是每四位一个节点。注:我是用单链表写的!感觉单循环链表没有什么用处么#include<stdio.h>#include<string.h>#include<

3、;stdlib.h>#define MAXLEN 100typedef struct nodeint data;struct node *next;LNode,*LinkList;int changeString(char s,int len)/把字符串长度变成4的整数倍;int i,temp;char ssMAXLEN;if(len%4!=0)temp=4-len%4;/需要在前面添加的0的个数;for(i=0;i<len;i+)ssi=si;for(i=0;i<temp;i+)si='0'for(i=temp;i<temp+len;i+)si=ssi

4、-temp;return temp;LinkList createList(char *s,int len)/创建单链表;int i,temp,add_len;LinkList L,p,start;if(len<=0)return NULL;add_len=changeString(s,len);len+=add_len;i=0;temp=0;while(i<4&&i<len)/给头结点赋值;temp=temp*10+si-'0'i+;L=(LinkList)malloc(sizeof(LNode);/头结点;L->data=temp;L

5、->next=NULL;start=L;temp=0;while(i<len)/继续创建单链表;if(i+1)%4=1)/需新建一个结点;p=(LinkList)malloc(sizeof(LNode);temp=temp*10+si-'0'if(i+1)%4=0|i=len-1)/一个结点结束;p->data=temp;p->next=NULL;start->next=p;/插入结点;start=p;temp=0;/重新计数;i+;start->next=NULL;return L;LinkList reverse(LinkList L)/

6、逆转单循环链表;LinkList p,q,r;if(L!=NULL)p=L->next;L->next=NULL;while(p!=NULL)q=p;p=p->next;q->next=L;L=q;/printf("*%dn",L->data);return L;return NULL;void display(LinkList L)/打印输出单链表;LinkList p;printf("%d ",L->data);p=L->next;while(p!=NULL)printf("%d ",p-

7、>data);p=p->next;printf("n");LinkList add_LNumber(LinkList L1,LinkList L2)/2大数相加,单链表实现;LinkList L,p,q,head,r;int c;/进位;int temp;L=(LinkList)malloc(sizeof(LNode);head=(LinkList)malloc(sizeof(LNode);head->next=NULL;L=head;p=L1;q=L2;c=0;while(p!=NULL&&q!=NULL)r=(LinkList)mall

8、oc(sizeof(LNode);temp=p->data+q->data+c;r->data=temp%10000;/printf("*%dn",r->data);r->next=NULL;c=temp/10000;head->next=r;head=r;p=p->next;q=q->next;while(p!=NULL)/L1剩余部分非空;r=(LinkList)malloc(sizeof(LNode);temp=p->data+c;r->data=temp%10000;r->next=NULL;c=te

9、mp/10000;head->next=r;head=r;p=p->next;while(q!=NULL)/L2剩余部分非空;r=(LinkList)malloc(sizeof(LNode);temp=q->data+c;r->data=temp%10000;r->next=NULL;c=temp/10000;head->next=r;head=r;q=q->next;if(c!=0)/还有进位;r=(LinkList)malloc(sizeof(LNode);r->data=c;r->next=NULL;head->next=r;r

10、eturn L->next;int main()char s1MAXLEN,s2MAXLEN;int len1,len2,add_len,i;LinkList L1,L2,L;L1=(LinkList)malloc(sizeof(LNode);L2=(LinkList)malloc(sizeof(LNode);printf("请输入第一个大数:n");scanf("%s",s1);len1=strlen(s1);L1=createList(s1,len1);printf("请输入第二个大数:n");scanf("%s&

11、quot;,s2);len2=strlen(s2);L2=createList(s2,len2);L1=reverse(L1);L2=reverse(L2);/display(L1);/display(L2);L=add_LNumber(L1,L2);/display(L);L=reverse(L);display(L);=09年09华中科技大学复试有关题目嵌入式方向笔试是数据库和算法概论数据库考了查询语言,死锁,等等算法概论:1题:好像是螺丝和螺母问题,每个螺丝对应一个螺母,大概有100对吧,找出相应对,最后计算时空复杂度。还有,关于排列树,好像还有个回溯法。前面几道简答题上机题目:环境:T

12、C,VC+1.输入一串数,然后,建立链表,排序输出。2.计算26个字母的输入次数,好像不区分大小写。3.用一维数组存储学号和成绩,然后,按成绩排序输出。=09年系统结构上机试题09年系统结构上机题.输入四个数,分别创建四个链表A,B,C,D. 打印四个链表.A按升序排列,D按降序排列.把B中第一个数插入A中,保持A的升序排列,把C中第一个数插入D中,保持D的降序排列.把链表A中每个数的个位数打印出来.合并链表AD,保持升序排列。 华中科技大学复试机试题目2008年一1、狼过河问题(运用到回溯)2、统计文件中单词数目3、N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式。(递归)4、链表

13、操作二第一个是一个上楼梯的种数的统计,本来是一个用递归可以解决的问题,但是题目偏偏要求编写快速算法,言下之意就是要求你把递归转化成非递归。#include"stdio.h"#include"stdlib.h"#include"string.h"main()int n,i;long a10000;printf("please input n :");scanf("%d",&n);for(i=1;i<=n;i+)if(i=1)ai=1;else if(i=2)ai=2;elseai=a

14、i-1+ai-2;printf("a%d=%ldn",i,ai);printf("the sum of methords is:%ldn",an);system("pause");#include <stdio.h>/*函数count计算一共有多少种上楼方式+非递归方式*/int count(int i) int a3,j; a1=1; a2=2; if(i=1) return 1; else if(i=2) return 2; else for(j=3; j<=i; j+) aj%3 = a(j-1)%3 + a(

15、j-2)%3; return a(j-1)%3; int main() int i,j; i=11; j=0; j=count(i); printf("%d层阶梯的上楼方式一共%d种!",i,j); getchar(); return 0; 第二个题是链表的,要求依照给出的结构体依次实现输入链表,保存链表,删除链表,从磁盘读取链表,显示链表这几个操作。做这个题,如果不记得保存文件的函数,很可能做不全或者做不出来。 第三个是要求根据 - | / 四个字符来实现题目所规定的一个长方体。并能使这个长方体适当的放大。这个是一个递归问题,但是我想了半天也没有做出来。2006第一题是

16、对输入的5个数排序,输出的结果到文件里。#include<stdio.h>#include<stdlib.h>int cmp(const void *a,const void *b)return (*(int *)a)-(*(int *)b);int main()int a5,i;/char s5;FILE *foutput;printf("请输入5个待排序的数:n");for(i=0;i<5;i+)scanf("%d",&ai);qsort(a,5,sizeof(int),cmp);if(foutput=fopen

17、("0000华科复试机试题(4).txt","w")=NULL)printf("File open error!n");for(i=0;i<5;i+)fputc(ai+'0',foutput);fclose(foutput);第二题是 用链表去对上面的5个数字排序。第三题是 输入一个ip地址串,判断是否合法。#include<stdio.h> #include<string.h> int IllegleChar(char c) if(c>='0'&&c

18、<='9')|c='.') return 1; else return 0; int main() char s20; int len,i,j,flag,a3,b4,cnt; while(gets(s)!=NULL) len=strlen(s); flag=1; for(i=0;i<len;i+) if(IllegleChar(si)=0) flag=0;/判断是否含非法字符; break; cnt=0; for(i=0;i<len;i+) if(si='.') cnt+;/记录"."的个数; if(cnt!

19、=3)/判断“.”的个数是否等于3; flag=0; else j=0; for(i=0;i<len;i+) if(si='.') aj+=i;/记录“.”的下标; for(i=0;i<3;i+) if(ai+1-ai<=1) flag=0; b0=b1=b2=b3=0;/记录4部分的数值; for(i=0;i<a0;i+) b0=b0*10+si-'0' for(i=a0+1;i<a1;i+) b1=b1*10+si-'0' for(i=a1+1;i<a2;i+) b2=b2*10+si-'0'

20、; for(i=a2+1;i<len;i+) b3=b3*10+si-'0' for(i=0;i<4;i+) /printf("%dn",bi); if(bi<0|bi>255)/判断每一部分数值是否在0到255之间。 flag=0; if(flag=1) printf("YESn"); else printf("NOn"); 2005第一题:对给定的一个字符串,找出有重复的字符,并给出其位置,如:输入:abcaaAB12ab12输出:a,1;a,4;a,5;a,10 b,2;b,11 1,8;

21、1,12 2,9;2,13参考代码:#include<stdio.h>#include<string.h>#include<stdlib.h>int main() char s1000; int len,i,j,k,flag,cnt,a1000,temp; while(gets(s)!=NULL) len=strlen(s); for(i=0;i<len;i+) flag=0;/标记是否出现重复。 cnt=0;/记录重复出现次数。 temp=0;/记录字符是否在前已经出现过。 for(k=0;k<i-1;k+) if(sk=si) temp=1;

22、 for(j=i+1;j<len;j+) if(sj=si&&temp=0) flag=1; acnt+=j;/记录重复出现的下标。 if(flag=1) printf("%c,%d;",si,i+1); for(j=0;j<cnt;j+) printf("%c,%d;",saj,aj+1); printf("n"); 第二题:输入一个四行五列的矩阵,找出每列最大的两个数,如:输入: 1 2 4 9 8 -1 4 9 8 8 12 9 8 7 0 7 8 9 7 0输出:12 9 9 8 9 7 8 9 7

23、 8#include<stdio.h>#include<stdlib.h>int cmp(const void *a,const void *b)/qsort的比较函数;return (*(int *)a)-(*(int *)b);int main()int a45,i,j,b54;for(i=0;i<4;i+)for(j=0;j<5;j+)scanf("%d",&aij);for(i=0;i<5;i+)for(j=0;j<4;j+)bij=aji;/逆置数组a;for(i=0;i<5;i+)qsort(bi,4

24、,sizeof(int),cmp);printf("%d %dn",bi2,bi3);第三题:输入一个字符串,建立一个二叉排序树,并中序遍历输出;#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct node/二叉树结点数据结构定义;char value;struct node *lchild,*rchild;BTNode,*BTree;void insertNode(BTree &t,char c)/向二叉排序树中插入节点;BTree p,q,te

25、mp;p=(BTree)malloc(sizeof(BTNode);p->value=c;p->lchild=NULL;/貌似没有这2行不行,纠结了半天啊! p->rchild=NULL;if(t=NULL)t=p;elseq=t;while(q!=NULL)temp=q;if(c<q->value)q=q->lchild;elseq=q->rchild;if(c<temp->value)temp->lchild=p;elsetemp->rchild=p; void inOrderTra(BTree t)/中序遍历二叉排序树;i

26、f(t!=NULL)inOrderTra(t->lchild);printf("%c ",t->value);inOrderTra(t->rchild);int main()char s1000;int len,i;while(gets(s)!=NULL) len=strlen(s); BTree t; t=NULL; for(i=0;i<len;i+) insertNode(t,si); inOrderTra(t); printf("n"); 2000年1. 输入n,求y1=1!+3!+.m!(m是小于等于n的最大奇数) y2=

27、2!+4!+.p!(p是小于等于n的最大偶数)#include<stdio.h>int main()_int64 a100,y1,y2;/存放阶乘;int i,n,p,m;while(scanf("%d",&n)!=EOF)if(n%2=0)m=n-1;p=n;elsep=n-1;m=n;a1=1;for(i=2;i<100;i+)ai=ai-1*i;y1=0;y2=0;/printf("m=%d,p=%dn",m,p);i=1;while(i<=m)y1+=ai;i+=2;i=2;while(i<=p)y2+=ai

28、;i+=2;printf("y1=%I64d,y2=%I64dn",y1,y2);2。输入一个5×5的矩阵,判断是否对称#include<stdio.h>int main()int a66,i,j,flag;flag=1;/标记矩阵是否对称;for(i=1;i<=5;i+)for(j=1;j<=5;j+)scanf("%d",&aij);for(i=2;i<=5;i+)for(j=1;j<i;j+)if(aij!=aji)flag=0;if(flag=1)printf("YESn"

29、);elseprintf("NOn");3。建立一个升序链表并遍历#include<stdio.h>#include<stdlib.h>typedef struct node/链表结点数据结构定义;int data;struct node *next;LNode,*LinkList;void insert_node(LinkList &L,int a)/向单链表中插入结点,并保持升序;LinkList t,temp,p;t=(LinkList)malloc(sizeof(LNode);/新建结点;t->data=a;t->next

30、=NULL;if(L=NULL)/是第一个结点;L=t;elsetemp=L;p=L;if(a<=temp->data)/结点插在表头;t->next=temp;L=t;elsewhile(temp!=NULL&&temp->data<a)/向后移动;/while(temp->data<a&&temp!=NULL)/向后移动;p=temp;/p指向前驱;temp=temp->next;t->next=p->next;/插入结点;p->next=t;/printf("*n");v

31、oid print(LinkList L)/遍历链表;LinkList temp;if(L!=NULL)temp=L;while(temp!=NULL)printf("%d ",temp->data);temp=temp->next;printf("n");int main()int a;LinkList L;L=NULL;printf("输入链表各结点值,以10000结束!n");while(scanf("%d",&a)!=EOF)if(a=10000)break;insert_node(L,

32、a);print(L);2002年1、 编一个程序,读入用户输入的,以“.”结尾的一行文字,统计一共有多少个单词,并分别输出每个单词含有多少个字符。(凡是以一个或多个空格隔开的部分就为一个单词)2、 #include<stdio.h>3、 #include<string.h>4、 int main()5、 char s1000;6、 int len,a1000=0,i,cnt;7、 gets(s);8、 len=strlen(s);9、 printf("len=%dn",len);10、 cnt=0;/记录单词数;11、 i=0;12、 while(

33、i<len-1&&si=' ')/去掉开头的空格;13、 i+;14、 15、 while(i<len-1)16、 if(si!=' ')/遇到字符;17、 acnt+=1;18、 i+;19、 20、 else/遇到空格;21、 cnt+;/下一个单词;22、 while(i<len-1&&si=' ')/去掉中间的连续空格;23、 i+;24、 25、 26、 27、 printf("单词个数:%d.n",cnt+1);28、 printf("每个单词所含有的字符

34、数是:n");29、 for(i=0;i<cnt+1;i+)30、 printf("%d ",ai);31、 32、 2、守形数是这样一种整数,它的平方的低位部分等于它本身。比如25的平方是625,低位部分是25,因此25是一个守形数。编一个程序,找出2-100之间所有的守形数。#include<stdio.h> #include<stdlib.h> int shouxingshu(int n) int num,count,temp,a; a=n; num=n*n;/n的平方 ; count=0;/记录n的位数; while(n>

35、;0) count+; n=n/10; temp=1; while(count>0) temp*=10; count-; if(num%temp=a) return 1; else return 0; int main() int i; for(i=2;i<=100;i+) if(shouxingshu(i)=1) printf("%dn",i); /system("pause"); 3、编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。例如如下的先序遍历字符串:ABC#DE#G#F#其中“#”表示的

36、是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。#include<stdio.h>#include<stdlib.h>typedef struct node/二叉树结点数据结构定义;char data;struct node *lchild,*rchild;BTNode,*BTree;void createBTree(BTree &T)char c;scanf("%c",&c);if(c='#')T=NULL;elseBTree t;t=(BTree)malloc(sizeof(BT

37、Node);t->data=c;t->lchild=NULL;t->rchild=NULL;T=t;createBTree(T->lchild);createBTree(T->rchild);void inOrderTra(BTree T)if(T!=NULL)inOrderTra(T->lchild);printf("%c ",T->data);inOrderTra(T->rchild);int main()BTree T;printf("请输入二叉树的先序遍历序列:n");createBTree(T);

38、printf("中序遍历二叉树序列:n");inOrderTra(T);printf("n");屏幕的格式化输出:给出一幅图形,用程序实现。如下所示。 AA AA AB BA AB BA ABC CBA AA AB BA (输入字符B) AA(输入字符C)#include<stdio.h>int main()char c;int sum,i,j;while(scanf("%c",&c)!=EOF)sum=c-'A'+1;for(i=0;i<sum;i+)for(j=0;j<2*(sum-

39、1-i);j+)printf(" ");/输出前边的空格;for(j=0;j<=i;j+)printf("%c",'A'+j);/输出前边一串字符串;for(j=0;j<i;j+)printf(" ");/输出中间的字符串;for(j=i;j>=0;j-)printf("%c",'A'+j);printf("n");for(i=sum-2;i>=0;i-)for(j=0;j<2*(sum-1-i);j+)printf(" &

40、quot;);/输出前边的空格;for(j=0;j<=i;j+)printf("%c",'A'+j);/输出前边一串字符串;for(j=0;j<i;j+)printf(" ");/输出中间的字符串;for(j=i;j>=0;j-)printf("%c",'A'+j);printf("n");getchar();/接受回车符;2。求最长的子序列和。 比如1+3-2,结果是4; 1+3-2+5,结果是7; -1-2-3,结果是-1. 另外要求运行时间不超过1s,就是要求

41、算法的复杂度要好(25分) 3。已知二叉树的前序和中序序列,要求写出后序序列。(40分) 如果给的前序和中序序列是错误的,就要输出"NO ANSWER!" #include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct node char data; struct node *lchild,*rchild;BTNode,*BTree;BTree createBTree(char *pre,int st1,int en1,char *in,int st2,int en2

42、)BTree boot;boot=(BTree)malloc(sizeof(BTNode);int temp;temp=st2;int len_left;/左子树长度;/printf("*n");if(en2-st2)!=(en1-st1)printf("No Answer!n");/不能构成一棵树; exit(0);if(en1-st1<0|en2-st2<0)boot=NULL;return boot;while(temp<=en2&&intemp!=prest1) temp+; if(temp>en2)/注意

43、:没有等号! printf("No Answer!n");/不能构成一棵树; exit(0); boot->data=prest1;len_left=temp-st2;boot->lchild=createBTree(pre,st1+1,st1+len_left,in,st2,temp-1);/构造左子树; boot->rchild=createBTree(pre,st1+len_left+1,en1,in,temp+1,en2);/构造左子树; return boot;void display(BTree T)/后序遍历二叉树;if(T!=NULL)display(T->lchild);display(T->rchild);printf("%c",T

温馨提示

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

评论

0/150

提交评论