当前位置:文档之家› 华中科技大学计算机考研复试机试题(含代码)

华中科技大学计算机考研复试机试题(含代码)

华科历年复试机试题汇总上机考试。

一般网站上公布上机环境要求是TC2.0,但实际上是可以使用VC的。

这里有一点特别要大家注意:TC2.0只支持纯C代码,不支持C++风格代码。

华科的计算机学生称,不管你是用VC还是TC,老师都要在TC2.0上进行验收程序,以确认你的代码是纯C。

比如:p = new Node ; 的代码写法在TC2.0下是通不过的,只能写p = (Node *)malloc (sizeof (Node)) ; 。

另外TC2.0不支持引用,如:Pop (Stack &s , ElemType &e)中含有“&”的引用,在TC2.0下无法通过。

华科的上机题目每年都差不多,经常考的就是排序、链表和树的操作等。

建议在去复试前一定要进行专门练习上机。

Note:上机时间为1个半小时,题目一般为三道题,前两道一般代码不会超过70行,最后一道会达到150~200行。

上机时做题速度一定要快,不要总抓着一个不放,时间在不知不觉中过的是很快的。

2010年的机试题:a、输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数!(如‘3’,输出:10110011);#include <stdio.h>#include <string.h>#define max 1000int pd(char c){int i=0;int num=0;for(i=0;i<7;i++){if(c&(1<<i))num++;}if(num%2==0)return 1;elsereturn 0;}void main(){char a[max];scanf("%s",a);int i,j;int len=strlen(a);for(i=0;i<len;i++){if (pd(a[i])){a[i]=a[i]|(1<<7);}for(j=7;j>=0;j--)if(a[i]&(1<<j))printf("1");elseprintf("0");printf("\n");}}b、设计8个任务函数task0()-task7()只输出一句话:如task0()输出“task0 is called!”;设计一个调度函数schedule ()输入一个字符串如"012345"然后返回一个函数指针数组和字符串的长度作为执行函数execute()的参数进行调度任务函数。

主函数只有调度函数。

(这个题难道很多同学因为很多同学不知道函数指针数组怎么用啊!)#include<stdio.h>#include<string.h>#include<stdlib.h>typedef void (*ptask)();//8个任务函数;void task0(){printf("task0 is called!\n");}void task1(){printf("task1 is called!\n");}void task2(){printf("task2 is called!\n");}void task3(){printf("task3 is called!\n");}void task4(){printf("task4 is called!\n");}void task5(){printf("task5 is called!\n");}void task6(){printf("task6 is called!\n");}void task7(){printf("task7 is called!\n");}ptask fun[9]={task0,task1,task2,task3,task4,task5,task6,task7,};void execute(ptask* fun,int len){//执行函数for(int i=0;i<len;i++){ptask pfun=fun[i];pfun();}}void schedule(){//调度函数;ptask fun[100];//定义函数指针数组;int len;//字符串长度;char s[1000];printf("请输入字符串:\n");scanf("%s",s);len=strlen(s);for(int i=0;i<len;i++){int temp;temp=s[i]-'0';if(temp==0)fun[i]=task0;else if(temp==1)fun[i]=task1;else if(temp==2)fun[i]=task2;else if(temp==3)fun[i]=task3;else if(temp==4)fun[i]=task4;else if(temp==5)fun[i]=task5;else if(temp==6)fun[i]=task6;else if(temp==7)fun[i]=task7;}execute(fun,len);}int main(){schedule();system("pause");}c、实现一个加法器,保证两个加数是任意长的整数。

(这个题的加数由于是任意长所以把它声明成什么类型(long、int)的都是不对的,要用到结构体)。

(所以这应该是个串行加法器)#include <stdio.h>#include <string.h>#define max 1000void add(char buff1[max],char buff2[max],int len1,int len2){int num[max];int s1,s2,flag=0,i;for(i=0;i<max;i++)num[i]=0;int n1=len1-1,n2=len2-1;int k=max-1;while((n1>=0)&&(n2>=0)){s1=buff1[n1]-'0';s2=buff2[n2]-'0';if(s1+s2+flag>9){num[k]=(s1+s2+flag)%10;flag=1;}else{num[k]=(s1+s2+flag)%10;flag=0;}n1--;n2--;k--;}if(n1>=0){while(n1>=0){s1=buff1[n1]-'0';if(s1+flag>9){num[k]=(s1+flag)%10;flag=1;}else{num[k]=(s1+flag)%10;flag=0;}n1--;k--;}}if(n2>=0){while(n2>=0){s1=buff2[n1]-'0';if(s1+flag>9){num[k]=(s1+flag)%10;flag=1;}else{num[k]=(s1+flag)%10;flag=0;}n2--;k--;}}if(flag){num[k]=1;k--;}for(i=k+1;i<=max-1;i++)printf("%d",num[i]);printf("\n");}void main(){char buff1[max];char buff2[max];int len1,len2;scanf("%s",buff1);scanf("%s",buff2);len1=strlen(buff1);len2=strlen(buff2);add(buff1,buff2,len1,len2);}==》08年的华科招收研究生上机试题:(1)输入一个十进制数,将其先转化为八进制数,然后再输出#include <stdio.h>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<stdio.h>#include<string.h>#include<stdlib.h>#define BUFFSIZE 1000int main(){FILE *fp;char filename[255];printf("Please input the name of the file:\n");scanf("%s",filename);if((fp=fopen(filename,"r"))==NULL){printf("File open error!");}char Line[BUFFSIZE][BUFFSIZE];int i,cnt;i=0;cnt=0;while((fgets(Line[i],BUFFSIZE,fp))&&i<BUFFSIZE){i++;cnt++;}char tempMax[BUFFSIZE];char tempMin[BUFFSIZE];strcpy(tempMax,Line[0]);strcpy(tempMin,Line[0]);for(i=1;i<cnt;i++){if(strlen(Line[i])>strlen(tempMax))strcpy(tempMax,Line[i]);if(strlen(Line[i])<strlen(tempMin))strcpy(tempMin,Line[i]);}printf("The longest string :\n");for(i=0;i<cnt;i++){if(strlen(Line[i])==strlen(tempMax))printf("%s\n",Line[i]);}printf("The shortest string :\n");for(i=0;i<cnt;i++){if(strlen(Line[i])==strlen(tempMin))printf("%s\n",Line[i]);}//system("pause");}本文来自CSDN博客,转载请标明出处:/xiajun07061225/archive/2011/03/18/6259774.aspx(3)输入学生信息:学号,三门课程的成绩,学号为0时结束,将其存储在链表A中,从中找出分数大于平均分的学生,并将该学生信息按平均分降序排列存入到链表B中,最后输出链表B。

相关主题