手机版

华科计算机考研复试历年上机题汇总

发布时间:2024-11-17   来源:未知    
字号:

华科历年上机题汇总(欢迎补全) 代码都很多是我自己写的,不一定正确啊!错了可不负责任的,呵呵 ==》10年保送生上机试题

1、不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。

#include<stdio.h>

#include<stdlib.h>

int main(){

char s1[200],s2[100];

int i,len1,len2;

scanf("%s %s",s1,s2);

for(i=0;i<200;i++){

if(s1[i]=='\0'){

len1=i;

break;

}

}

for(i=0;i<100;i++){

if(s2[i]=='\0'){

len2=i;

break;

}

}

for(i=len1;i<len1+len2;i++){

s1[i]=s2[i-len1];

}

printf("%s\n",s1);

system("pause");

}

2、输入一串数,要求建平衡二叉排序树,然后先序遍历。

3.、有4个小问,是超长整数的存储、计算、输出。要把超长整数存在一个单向循环链表中,是每四位一个节点。

注:我是用单链表写的!感觉单循环链表没有什么用处么~~~ #include<stdio.h>

#include<string.h>

#include<stdlib.h>

#define MAXLEN 100

typedef struct node{

int data; struct node *next;

}LNode,*LinkList;

int changeString(char s[],int len){//把字符串长度变成4的整数倍;

}

LinkList createList(char *s,int len){//创建单链表;

int i,temp,add_len; LinkList L,p,start; if(len<=0){ } return NULL; int i,temp; char ss[MAXLEN]; if(len%4!=0){ } return temp; temp=4-len%4;//需要在前面添加的0的个数; for(i=0;i<len;i++){ } for(i=0;i<temp;i++){ } for(i=temp;i<temp+len;i++){ } s[i]=ss[i-temp]; s[i]='0'; ss[i]=s[i];

len+=add_len; i=0; temp=0; while(i<4&&i<len){//给头结点赋值; } L=(LinkList)malloc(sizeof(LNode));//头结点; L->data=temp; L->next=NULL; start=L; temp=0; while(i<len){//继续创建单链表; if((i+1)%4==1){//需新建一个结点; } temp=temp*10+s[i]-'0'; if((i+1)%4==0||i==len-1){//一个结点结束; p->data=temp; p->next=NULL; start->next=p;//插入结点; start=p; temp=0;//重新计数; p=(LinkList)malloc(sizeof(LNode)); temp=temp*10+s[i]-'0'; i++;

}

} i++; start->next=NULL; return L;

LinkList reverse(LinkList L){//逆转单循环链表;

} LinkList p,q,r; if(L!=NULL){ } return NULL; p=L->next; L->next=NULL; while(p!=NULL){ } return L; q=p; p=p->next; q->next=L; L=q; //printf("**%d\n",L->data);

void display(LinkList L){//打印输出单链表;

}

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){ LinkList p; printf("%d ",L->data); p=L->next; while(p!=NULL){ } printf("\n"); printf("%d ",p->data); p=p->next;

} temp=p->data+q->data+c; r->data=temp%10000; //printf("***%d\n",r->data); r->next=NULL; c=temp/10000; head->next=r; head=r; p=p->next; q=q->next; while(p!=NULL){//L1剩余部分非空; } while(q!=NULL){//L2剩余部分非空; r=(LinkList)malloc(sizeof(LNode)); temp=q->data+c; r=(LinkList)malloc(sizeof(LNode)); temp=p->data+c; r->data=temp%10000; r->next=NULL; c=temp/10000; head->next=r; head=r; p=p->next;

}

} r->next=NULL; c=temp/10000; head->next=r; head=r; q=q->next; if(c!=0){//还有进位; } return L->next; r=(LinkList)malloc(sizeof(LNode)); r->data=c; r->next=NULL; head->next=r;

int main(){

char s1[MAXLEN],s2[MAXLEN]; 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);

} L1=createList(s1,len1); printf("请输入第二个大数:\n"); scanf("%s",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对吧,找出相应对,最后计算时空复杂度。

还有,关于排列树,好像还有个回溯法。

前面几道简答题

上机题目:

环境:TC,VC++

1.输入一串数,然后,建立链表,排序输出。

2.计算26个字母的输入次数,好像不区分大小写。

3.用一维数组存储学号和成绩,然后,按成绩排序输出。

==》09年系统结构上机试题

09年系统结构上机题1.输入四个数,分别创建四个链表A,B,C,D. 打印四个链表 2.A按升序排列,D按降序排列

3.把B中第一个数插入A中,保持A的升序排列,把C中第一个数插入D中,保持D的降序排列

4.把链表A中每个数的个位数打印出来

5.合并链表A\D,保持升序排列。

华中科技大学复试机试题目 2008年

一.

1、狼过河问题(运用到回溯)

2、统计文件中单词数目

3、N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式。(递归)

4、链表操作

二.

第一个是一个上楼梯的种数的统计,本来是一个用递归可以解决的问题,但是题目偏偏要求编写快速算法,言下之意就是要求你把递归转化成非递归。

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

main()

{

int n,i;

long a[10000];

printf("please input n :");

scanf("%d",&n);

for(i=1;i<=n;i++)

{

if(i==1)

a[i]=1;

else if(i==2) a[i]=2;

else

a[i]=a[i-1]+a[i-2];

printf("a[%d]=%ld\n",i,a[i]);

}

printf("the sum of methords is:%ld\n",a[n]);

system("pause");

}

#include <stdio.h>

/*函数count计算一共有多少种上楼方式+++非递归方式*/

int count(int i)

{

int a[3],j;

a[1]=1;

a[2]=2;

if(i==1)

return 1;

else if(i==2)

return 2;

else

{

for(j=3; j<=i; j++)

{

a[j%3] = a[(j-1)%3] + a[(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

第一题是 对输入的5个数排序,输出的结果到文件里。

#include<stdio.h>

#include<stdlib.h>

int cmp(const void *a,const void *b){

return (*(int *)a)-(*(int *)b);

int main(){

int a[5],i;

//char s[5];

FILE *foutput;

printf("请输入5个待排序的数:\n");

for(i=0;i<5;i++){

scanf("%d",&a[i]);

}

qsort(a,5,sizeof(int),cmp);

if((foutput=fopen("0000华科复试机试题(4).txt","w"))==NULL){

printf("File open error!\n");

}

for(i=0;i<5;i++){

fputc(a[i]+'0',foutput);

}

fclose(foutput);

}

第二题是 用链表去对上面的5个数字排序。

第三题是 输入一个ip地址串,判断是否合法。

#include<stdio.h>

#include<string.h>

int IllegleChar(char c){

if((c>='0'&&c<='9')||c=='.'){

return 1;

}

else{

return 0;

}

}

int main(){

char s[20];

int len,i,j,flag,a[3],b[4],cnt;

while(gets(s)!=NULL){

len=strlen(s);

flag=1;

for(i=0;i<len;i++){

if(IllegleChar(s[i])==0){

flag=0;//判断是否含非法字符;

break;

}

}

cnt=0;

for(i=0;i<len;i++){

if(s[i]=='.'){

cnt++;//记录"."的个数;

}

}

if(cnt!=3){//判断“.”的个数是否等于3;

flag=0;

}

else{

j=0;

for(i=0;i<len;i++){

if(s[i]=='.'){

a[j++]=i;//记录“.”的下标;

}

}

for(i=0;i<3;i++){

if(a[i+1]-a[i]<=1){

flag=0;

}

}

b[0]=b[1]=b[2]=b[3]=0;//记录4部分的数值;

for(i=0;i<a[0];i++){

b[0]=b[0]*10+s[i]-'0';

}

for(i=a[0]+1;i<a[1];i++){

b[1]=b[1]*10+s[i]-'0';

}

for(i=a[1]+1;i<a[2];i++){

b[2]=b[2]*10+s[i]-'0';

}

for(i=a[2]+1;i<len;i++){

b[3]=b[3]*10+s[i]-'0';

}

for(i=0;i<4;i++){

//printf("%d\n",b[i]);

if(b[i]<0||b[i]>255){//判断每一部分数值是否在0到255之间。 flag=0;

}

}

}

if(flag==1){

printf("YES\n");

}

else{

printf("NO\n");

}

}

}

2005

第一题:对给定的一个字符串,找出有重复的字符,并给出其位置,如:

输入:abcaaAB12ab12

输出:a,1;a,4;a,5;a,10

b,2;b,11

1,8;1,12

2,9;2,13

参考代码:

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

int main(){

char s[1000];

int len,i,j,k,flag,cnt,a[1000],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(s[k]==s[i]){

temp=1;

}

}

for(j=i+1;j<len;j++){

if(s[j]==s[i]&&temp==0){

flag=1;

a[cnt++]=j;//记录重复出现的下标。

}

}

if(flag==1){

printf("%c,%d;",s[i],i+1);

for(j=0;j<cnt;j++){

printf("%c,%d;",s[a[j]],a[j]+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 8

#include<stdio.h>

#include<stdlib.h>

int cmp(const void *a,const void *b){//qsort的比较函数;

return (*(int *)a)-(*(int *)b);

}

int main(){

int a[4][5],i,j,b[5][4];

for(i=0;i<4;i++){

for(j=0;j<5;j++){

scanf("%d",&a[i][j]);

}

}

for(i=0;i<5;i++){

for(j=0;j<4;j++){

b[i][j]=a[j][i];//逆置数组a;

}

}

for(i=0;i<5;i++){

qsort(b[i],4,sizeof(int),cmp);

printf("%d %d\n",b[i][2],b[i][3]);

}

}

第三题:输入一个字符串,建立一个二叉排序树,并中序遍历输出;

#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,temp;

p=(BTree)malloc(sizeof(BTNode));

p->value=c;

p->lchild=NULL;//貌似没有这2行不行,纠结了半天啊!!!

p->rchild=NULL;

if(t==NULL){

t=p;

}

else{

q=t;

while(q!=NULL){

temp=q;

if(c<q->value){

q=q->lchild;

}

else{

q=q->rchild;

}

}

if(c<temp->value){

temp->lchild=p;

}

else{

temp->rchild=p;

}

}

}

void inOrderTra(BTree t){//中序遍历二叉排序树;

if(t!=NULL){

inOrderTra(t->lchild);

printf("%c ",t->value);

inOrderTra(t->rchild);

}

}

int main(){

char s[1000];

int len,i;

while(gets(s)!=NULL){

len=strlen(s);

BTree t;

t=NULL;

for(i=0;i<len;i++){

insertNode(t,s[i]);

}

inOrderTra(t);

华科计算机考研复试历年上机题汇总.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)