华中科技大学计算机考研复试机试题含代码资料.docx
- 文档编号:28009462
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:52
- 大小:48.77KB
华中科技大学计算机考研复试机试题含代码资料.docx
《华中科技大学计算机考研复试机试题含代码资料.docx》由会员分享,可在线阅读,更多相关《华中科技大学计算机考研复试机试题含代码资料.docx(52页珍藏版)》请在冰豆网上搜索。
华中科技大学计算机考研复试机试题含代码资料
华科历年复试机试题汇总
上机考试。
一般网站上公布上机环境要求是TC2.0,但实际上是可以使用VC的。
这里有一点特别要大家注意:
TC2.0只支持纯C代码,不支持C++风格代码。
华科的计算机学生称,不管你是用VC还是TC,老师都要在TC2.0上进行验收程序,以确认你的代码是纯C。
比如:
p=newNode;的代码写法在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
#definemax1000
intpd(charc)
{
inti=0;
intnum=0;
for(i=0;i<7;i++)
{
if(c&(1<
num++;
}
if(num%2==0)
return1;
else
return0;
}
voidmain()
{
chara[max];
scanf("%s",a);
inti,j;
intlen=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< printf("1"); else printf("0"); printf("\n"); } } b、设计8个任务函数task0()-task7()只输出一句话: 如task0()输出“task0iscalled! ”;设计一个调度函数schedule()输入一个字符串如"012345"然后返回一个函数指针数组和字符串的长度作为执行函数execute()的参数进行调度任务函数。 主函数只有调度函数。 (这个题难道很多同学因为很多同学不知道函数指针数组怎么用啊! ) #include #include #include typedefvoid(*ptask)(); //8个任务函数; voidtask0(){ printf("task0iscalled! \n"); } voidtask1(){ printf("task1iscalled! \n"); } voidtask2(){ printf("task2iscalled! \n"); } voidtask3(){ printf("task3iscalled! \n"); } voidtask4(){ printf("task4iscalled! \n"); } voidtask5(){ printf("task5iscalled! \n"); } voidtask6(){ printf("task6iscalled! \n"); } voidtask7(){ printf("task7iscalled! \n"); } ptaskfun[9]={task0,task1,task2,task3,task4,task5,task6,task7,}; voidexecute(ptask*fun,intlen){//执行函数 for(inti=0;i ptaskpfun=fun[i]; pfun(); } } voidschedule(){//调度函数; ptaskfun[100];//定义函数指针数组; intlen;//字符串长度; chars[1000]; printf("请输入字符串: \n"); scanf("%s",s); len=strlen(s); for(inti=0;i inttemp; temp=s[i]-'0'; if(temp==0)fun[i]=task0; elseif(temp==1)fun[i]=task1; elseif(temp==2)fun[i]=task2; elseif(temp==3)fun[i]=task3; elseif(temp==4)fun[i]=task4; elseif(temp==5)fun[i]=task5; elseif(temp==6)fun[i]=task6; elseif(temp==7)fun[i]=task7; } execute(fun,len); } intmain(){ schedule(); system("pause"); } c、实现一个加法器,保证两个加数是任意长的整数。 (这个题的加数由于是任意长所以把它声明成什么类型(long、int)的都是不对的,要用到结构体)。 (所以这应该是个串行加法器) #include #include #definemax1000 voidadd(charbuff1[max],charbuff2[max],intlen1,intlen2) { intnum[max]; ints1,s2,flag=0,i; for(i=0;i num[i]=0; intn1=len1-1,n2=len2-1; intk=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"); } voidmain() { charbuff1[max]; charbuff2[max]; intlen1,len2; scanf("%s",buff1); scanf("%s",buff2); len1=strlen(buff1); len2=strlen(buff2); add(buff1,buff2,len1,len2); } ==》08年的华科招收研究生上机试题: (1)输入一个十进制数,将其先转化为八进制数,然后再输出 #include main() { inta=0; printf("Pleaseenteradecimalnumber: "); scanf("%d",&a); printf("%d'soctalnumberis%o\n",a,a); } (2)用户输入一个文本名,编程实现输出文本中最长的一行和最短的一行。 如果最长和最短的不止一行,请全部输出。 #include #include #include #defineBUFFSIZE1000 intmain(){ FILE*fp; charfilename[255]; printf("Pleaseinputthenameofthefile: \n"); scanf("%s",filename); if((fp=fopen(filename,"r"))==NULL){ printf("Fileopenerror! "); } charLine[BUFFSIZE][BUFFSIZE]; inti,cnt; i=0; cnt=0; while((fgets(Line[i],BUFFSIZE,fp))&&i { i++; cnt++; } chartempMax[BUFFSIZE]; chartempMin[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("Thelongeststring: \n"); for(i=0;i if(strlen(Line[i])==strlen(tempMax)) printf("%s\n",Line[i]); } printf("Theshorteststring: \n"); for(i=0;i if(strlen(Line[i])==strlen(tempMin)) printf("%s\n",Line[i]); } //system("pause"); } 本文来自CSDN博客,转载请标明出处: (3)输入学生信息: 学号,三门课程的成绩,学号为0时结束,将其存储在链表A中,从中找出分数大于平均分的学生,并将该学生信息按平均分降序排列存入到链表B中,最后输出链表B。 #include #include #include typedefstructnode {charxuehao[20]; intchengji[3]; floatav; structnode*next; }stud,*UerInfo; intmain() { UerInfoui; ui=(UerInfo)malloc(sizeof(stud)); UerInfop=ui; UerInfoq=ui; UerInfotempB=ui; printf("inputstudents'information: \n"); intcnt=0; while (1) { printf("input学号: "); scanf("%s",ui->xuehao); if(strcmp(ui->xuehao,"0")==0) break; printf("input成绩: "); scanf("%d",&ui->chengji[0]); printf("input成绩: "); scanf("%d",&ui->chengji[1]); printf("input成绩: "); scanf("%d",&ui->chengji[2]); ui->av=((ui->chengji[0]+ui->chengji[1]+ui->chengji[2])/3); ui->next=(UerInfo)malloc(sizeof(stud)); ui=ui->next; cnt++; } intchengji1=0; intchengji2=0; intchengji3=0; while(p&&strcmp(p->xuehao,"0")! =0) { chengji1+=p->chengji[0]; chengji2+=p->chengji[1]; chengji3+=p->chengji[2]; p=p->next; } floatchengji1av=0.0; floatchengji2av=0.0; floatchengji3av=0.0; floatavfinal=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->av>avfinal) { printf("%s\n",q->xuehao); printf("%f\n",q->av); } q=q->next; } printf("\n降序排列如下: \n"); UerInfos; s=(UerInfo)malloc(cnt*sizeof(stud)); intk=0; UerInfotemp=tempB; while(tempB&&strcmp(tempB->xuehao,"0")! =0) { s[k].av=tempB->av; s[k].chengji[0]=tempB->chengji[0]; s[k].chengji[1]=tempB->chengji[1]; s[k].chengji[2]=tempB->chengji[2]; strcpy(s[k].xuehao,tempB->xuehao); tempB=tempB->next; k++; } intl,m; studtemps; for(l=0;l { for(m=l+1;m { if(s[l].av { temps.chengji[0]=s[l].chengji[0]; temps.chengji[1]=s[l].chengji[1]; temps.chengji[2]=s[l].chengji[2]; strcpy(temps.xuehao,s[l].xuehao); s[l].chengji[0]=s[m].chengji[0]; s[l].chengji[1]=s[m].chengji[1]; s[l].chengji[2]=s[m].chengji[2]; strcpy(s[l].xuehao,s[m].xuehao); s[m].chengji[0]=temps.chengji[0]; s[m].chengji[1]=temps.chengji[1]; s[m].chengji[2]=temps.chengji[2]; strcpy(s[m].xuehao,temps.xuehao); } } } for(inti=0;i { printf("学号: %s\n",s[i].xuehao); printf("成绩: %f\n",s[i].chengji[0]); printf("成绩: %f\n",s[i].chengji[1]); printf("成绩: %f\n",s[i].chengji[2]); } return0; } ==》07年的华科招收研究生上机试题 一、编写一个程序输入一个5X6的矩阵存储并输出,并且求出每行的最大值和每行的总和要求把每行总和放入每行最大值的位置,最后把结果矩阵,每行最大值及其原下标及其总和输出。 我的代码: #include #include intgetMat(inta[5][6],intn,intm){ inti,j; for(i=0;i for(j=0;j scanf("%d",&a[i][j]); } intgetMax(inta[5][6],intn,intm,intb[5],intc[5],intd[5],intsum[5]){ inti,j;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华中科技大学 计算机 考研 复试 试题 代码 资料