华科历年复试机试题汇总
上机考试。一般网站上公布上机环境要求是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
#include
#define max 1000
int pd(char c)
{
int i=0;
int num=0;
for(i=0;i<7;i++)
{
if(c&(1<
num++;
}
if(num%2==0)
return 1;
else
return 0;
}
void main()
{
char a[max];
scanf("%s",a);
int i,j;
int len=strlen(a);
for(i=0;i { if (pd(a[i])) { a[i]=a[i]|(1<<7); } for(j=7;j>=0;j--) if(a[i]&(1< else printf("0"); printf("\n"); } } b、设计8个任务函数task0()-task7()只输出一句话:如task0()输出“task0 is called!”;设计一个调度函数schedule ()输入一个字符串如"012345"然后返回一个函数指针数组和字符串的长度作为执行函数execute()的参数进行调度任务函数。主函数只有调度函数。(这个题难道很多同学因为很多同学不知道函数指针数组怎么用啊!) #include #include #include 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 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 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 #include #define max 1000 void add(char buff1[max],char buff2[max],int len1,int len2) { int num[max]; int s1,s2,flag=0,i; for(i=0;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) { 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 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 #include #include #define BUFFSIZE 1000 int 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; { i++; cnt++; } char tempMax[BUFFSIZE]; char tempMin[BUFFSIZE]; strcpy(tempMax,Line[0]); strcpy(tempMin,Line[0]); for(i=1;i if(strlen(Line[i])>strlen(tempMax)) strcpy(tempMax,Line[i]); if(strlen(Line[i]) strcpy(tempMin,Line[i]); } printf("The longest string :\n");