年湖南大学招收硕士研究生入学考试试题
考试科目名称:计算机程序设计总分:分
考生注意:所有答案必须写在答题纸(卷)上,写在本试题上一律不给分。
单项选择题(2*21=42分)以下叙述错误的是_____。A、C语言源程序经过编译后生成后缀名为.obj的目标程序。
B、C语言经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件。
C、用C语言编写的程序成为源程序,它以ASC2代码形式存放在一个文本文件中。
D、C语言中的每条可执行语句和非执行语句最终都将会被转换成二进制的机器指令。
若以下选项中的变量已经正确定义,则正确的赋值语句是_____。A、x1=26.8%3B、1-2=x2C、x3=0x12D、x4=1+2=3
有以下程序,程序运行后输出的结果是_____。main()
{
intm=3,n=4,x;
x=-m++;
x=x+8/++n;
printf(“%d\n”,x);
}
A、3B、5C、-1D、-2
若x和y代表整型数,以下表达式中不能正确表示的数学关系式
x-y
10的是_____。A、abs(x-y)10B、x-y-10x-y10
C、!(x-y)-10
!(y-x)10D、(x-y)*(x-y)
若有说明语句:inta,b,c,*d=c,则正确从键盘读入三个分别赋给变量a、b、c的语句是_____。A、scanf(“%d%d%d”,a,b,d);
B、scanf(“%d%d%d”,a,b,d);
C、scanf(“%d%d%d”,a,b,d);
D、scanf(“%d%d%d”,a,b,d);
有以下程序,程序运行后输出的结果是_____。main()
{
inta=3,b=4,c=5,d=2;
if(ab)
if(bc)
printf(“%d”,d+++1);
else
printf(“%d”,++d+1);
printf(“%d\n”,d);
}
A、2B、3C、43D、44
有如下程序,该程序输出的结果是_____。main()
{
intx=1,a=0,b=0;
switch(x)
{
case0:b++;
case1:a++;
case2:a++;b++;
}
printf(“a=%d,b=%d\n”,a,b);
}
a=2,b=1B、a=1,b=1C、a=1,b=0D、a=2,b=2有如下程序,该程序输出的结果是_____。main()
{
inti,s=0;
for(i=1,i10;i+=2)s+=i+1;
printf(“%d\n”,s);
}
自然数1-9的累加和B、自然数1-10的累加和C、自然数1-9中奇数之和D、自然数1-10中偶数之和
有如下程序main()
{
inti,sum=0;
for(i=1;i=3;sum++)sum+=i;
printf(“%d\n”,sum);
}
6B、3C、死循环D、0下列叙述中正确的是_____。A、C语言预编译时不检查语法
B、C语言的子程序有过程和函数两种
C、C语言的函数可以嵌套定义
D、C语言中所有的函数都是外部函数
以下能正确定义一维数组的选项是_____。A、intnum[];
B、#defineN
intnum[N];
C、intnum[0...];
intN=;intnum[N];
设有数组定义:chararray[]=“China”;则数组array所占有的空间为_____。A、4个字节B、5个字节C、6个字节D、7个字节
若有定义:int*p[3];则以下叙述正确的是_____。A、定义了一个基本类型为int的指针变量p,该变量具有三个指针
B、定义了一个指针数组P,该数组含有三个元素,每个元素都是基类型为int的指针
C、定义了一个名为*p的整型数组,该数组含有三个int类型的元素
D、定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素
已定义如下函数fun(char*p2,char*p1)
{
while((*p2=*p1)!=‘\0’)
{p1++;p2++}
}
A、将p1所指的字符串复制到p2所指的内存空间
B、将p1所指的字符串的地址赋给指针p2
C、对p1和p2两个指针所指的字符串进行比较
D、检查p1和p2两个指针所指字符串中是否有‘\0’
设有如下枚举类型定义enumlanguage{Basic=3,Assembly,Ada=,COBOL,Fortran};
枚举量Fortran的值为_____。
A、4B、7C、D、
设有以下说明语句structex
{
intx;
floaty;
charz;
}example;
则下面的叙述中不正确的是_____。
A、struct是结构体类型的关键字B、example是结构体类型名
C、x,y,z都是结构体成员D、structex是结构体类型
在C程序中,可以把整型数以二进制形式存放到文件中的函数是_____。A、fprintf函数B、fread函数C、fwrite函数D、fputc函数
有以下程序#includestdio.h
intmain()
{
FILE*f;
f=fopen(“filea.txt”,“w”);
fprintf(f,“abc”);
fclose(f);
}
若文本文件filea.txt中原有内容为:hello,则运行以上程序后,文件filea.txt中的内容为_____。
A、helloabcB、bcloC、abcD、abchello
若有以下程序段intr=8;
printf(“%d\n”,r1);
输出结果是_____。
16B、8C、4D、2设char型变量中x中的值为11,则表达式(2+x)^(~3)的值是_____。A、01B、10C、D、
若有说明语句:charc=‘\’;则变量c是_____。A、包含一个字符B、包含两个字符C、包含三个字符D、说明不合法
程序理解题,阅读下面程序,写出程序结果(5*6=30分)#includestdio.hintmain()
{
inta[]={2,3,5,4},i;
for(i=0;i4;i++)
switch(i%2)
{
case0:switch(a%2)
{case0:a++;break;
case1:a--;
}break;
case1:a=0;
}
for(i=0;i4;i++)
printf(“%d”,a);
printf(“\n”);
}
#includestdio.hintmain()
{
inti,n=0;
for(i=2;i5;i++)
{
do
{
if(i%3)continue;
n++;
}whi1e(!i);
n++;
}
printf(“n=%d\n”,n);
}
#includestdio.hintmain()
{
inti,j,sum;
for(i=3;i=1;i--)
{
sum=0;
for(j=1;j=i;j++)
sum+=i*j;
}
printf(“%d\n”,sum);
}
#includestdio.hvoidf(inty,int*x)
{
y=y+*x;*x=*x+y;
}
intmain()
{
intx=2,y=4;
f(y,x);
printf(“%d%d\n”,x,y);
}
#includestdio.hinta=5;
fun(intb)
{
staticinta=10;
a+=b++;
printf(“%d\n”,a);
}
intmain()
{
intc=20;
fun(c);
a+=c++;
printf(“%d\n”,a);
}
#includestdio.hintmain()
{
inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};
intb[3]={0},i,j;
for(i=0;i3;i++)
for(j=0;j=i;j++)
b=b+a[j]*a[j];
for(i=0;i3;i++)
printf(“%d”,b);
}
程序填空题(6*5=30分)以下程序的功能是:输出以内(不含)能被3整除且个位数为6的所有整数。#includestdio.h
intmain()
{
inti,j;
for(i=0;__________;i++)
{
j=i*10+6;
if(__________)
continue;
printf(“%d”,j);
}
}
以下程序通过函数SunFun求f(0)f(1)f(2)f(3)…(9)f(10)这十一项之和。其中,f(x)=x*x+1,由F函数实现。#includestdio.h
SunFun(int);
F(int);
intmain()
{
printf(“Thesum=%d\n”,SumFun(10));
}
SunFun(intn)
{
intx,s=0;
for(x=0;x=n;x++)
s+=F(__________);
returns;
}
F(intx)
{
return(__________);
}
以下程序的功能是删除字符串s中的所有数字字符。voiddele(char*s)
{
intn=0,i;
for(i=0;s;i++)
if(!(s=‘0’________))
s[n++]=s;
s[n]=‘__________’;
}
以下程序用来统计文件中字符的个数,请填空。#includestdio.h
intmain()
{
FILE*fp;
1ongnum=0L;
if((fp=fopen(“fname.dat”,“r”))==NULL)
{
printf(“openerror\n”);
exit(0);
}
whi1e(__________)
{
fgetc(fp);num++;
}
__________;
printf(“characternumberis%d”,num);
}
建立职工情况链表,每个节点包含的成员为:姓名(name)、工资(salary)。从键盘输入节点中的所有数据,然后依次把这些节点的数据显示在屏幕上。#includestdio.h
#includestdlib.h
#defineN3
intmain()
{
structnode
{
charname[9];
intsarlay;
structnode*next;
};
structnode*head,*p;
inti;
head=NULL;
for(i=0;iN;i++)
{
p=(structnode*)malloc(sizeof(structnode));
printf(“Inputname:”);
scanf(“%s”,p-name);
printf(“Inputsalary:”);
scanf(“%d”,p-salary);
____________________;
head=p;
}
printf(“\n”);
p=head;
while(__________)
{
printf(“%s%d\n”,p-name,p-salary);
p=p-next;
}
}
编程题(12*4=48分)完成下列各程序中的函数定义(请勿修改主函数main中的语句)。
程序trans的功能是将十进制整数m转换成k进制(2=k=9)数的数字输出,例如输入78和8,则应该输出。#includestdio.h
voidtrans(intm,intk);
intmain()
{
intb,n;
printf(“\nPleaseenteranumberandabase:\n”);
scanf(“%d%d”,n,b);
trans(n,b);
}
函数fun的功能是:统计跟年龄段的人数并存到b数组中,n个人员的年龄放在n数组中,年龄为1-9的人数存到b[0]中,年龄为10-19的人数存在b[1]中,年龄为20-29的人数存到b[2]中,年龄为30-39的人数存到b[3]中,年龄为40-49的人数存到b[4]中,年龄为50岁以上的人数存到b[5]中,例如:当n数组中的数据为:9、18、27、38、59、33、14、75、38,调用该函数后,b数组中存放的数据应该是:1、2、1、3、0、2。#includestdio.h
voidfun(inta[],intb[],intn);
intmain()
{
inti,b[6];
inta[]={9,18,27,38,59,33,14,75,38};
fun(a,b,9);
for(i=0;i6;i++)
printf(“%d”,a);
printf(“\n”);
}
函数fact的功能是求k!({k=),要求使用递归定义该函数,并通过函数名传回主函数,例如:若k=10,则应该输出:。#includestdio.h
doublefact(intk);
intmain()
{
intb;
printf(“Pleaseinputaninteger1essthan”);
scanf(“%d”,b);
printf(“%d!=%.0f\n”,b,fact(b));
}
函数deletestr的功能是将在字符串s中出现、而未在字符串t中出现的字符形成一个新的字符串放在u中,u中字符按原来字符串中字符顺序排列,不去掉重复字符。例如:当s=“”,t=“”时,u中的字符串为“”。#includestdio.h
#includestring.h
voiddeletestr(char*s,char*t,char*u);
intmain()
{
chars[],t[],u[];
printf(“\nPleaseenterstrings:”);
scanf(“%s”,s);
printf(“\nPleaseenterstringt:”);
scanf(“%s”,t);
deletestr(s,t,u);
printf(“Theresultis:%s\n”,u);
}
年湖南大学招收硕士研究生入学考试试题解析
考试科目名称:计算机程序设计总分:分
考生注意:所有答案必须写在答题纸(卷)上,写在本试题上一律不给分。
一、选择题
DCDCAAADCDBCBACBCCCDA
二、程序理解题
1、
2、n=4
3、1
4、84
5、
6、133
三、程序填空题
1、i10j%3
2、xx*x+1
3、s=9\0
4、!feof(fp)fclose(fp)
5、p-next=headp!=NULL
四、编程题
1、voidtrans(intm,intk)
{
if(m0)
{
printf(“-”);
m=-m;
}
charchK[9]={0,1,2,3,4,5,6,7,8};
intresult[32];
inti=0,j;
do
{
result=m%k;
i++;
m=m/k;
}while(m!=0);
for(i--;i=0;i--)
{
j=result;
printf(“%c”,chK[j]);
}
2、voidfun(inta[],intb[],intn)
{
inti;
for(i=0;i6;i++)
b=0;
for(i=0;in;i++)
{
if(a=50)
b[5]++;
else
b[a/10]++;
}
}
3、doublefact(intk)
{
doublec;
if(k==0
k==1)
c=1;
else
c=k*fact(k-1);
returnc;
}
4、voiddeletestr(char*s,char*t,char*u)
{
inti,j,ms,mt;
ms=strlen(s);
mt=strlen(t);
for(i=0;ims;i++)
{
for(j=0;jmt;j++)
{
if(s==t[j])
break;
}
if(j=mt)
*u++=s;
}
*u=\0;
}
年湖南大学招收硕士研究生入学考试试题
考试科目名称:计算机程序设计总分:分
考生注意:所有答案必须写在答题纸(卷)上,写在本试题上一律不给分。
单项选择题(3*10=30分)在C语言中,下面有关for循环的正确描述是_____。A、for循环只能用于循环次数已经确定的情况
B、for循环是先执行循环体语句,后判断表达式
C、在for循环中,不能用break语句跳出循环体
D、for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
C语言程序中必须有的函数是_____。A、#include“stdio.h”B、mainC、printfD、scanf
在C语言中,引用数组元素时,其数组下标的数据类型允许是_____。A、整型常量B、整型表达式
C、整型常量或整型表达式D、任何类型的表达式
若已定义x和y是整型变量,x=2;,则表达式y=3.75+x/2的值是_____。A、6.5B、6C、4D、5.0
对于语句int*px[10],以下说法正确的是_____。A、px是一个指针,指向一个数组,数组的元素是整型
B、px是一个数组,其数组的每一个元素都是指向整数的指针
C、A和B均错,但在C语言中允许用*px来定义数组
D、C语言不允许有这样的定义方式
一个算法应该具有“确定性”等5个特性,下面对其他特性的描述中错误的是_____。A、有零个或多个输入B、只能有零个或者一个输出
C、有穷性D、有效性
以下说法中正确的是_____。A、C语言程序总是从第一个定义的函数开始执行
B、在C语言程序中,要调用的函数必须在main()函数中定义
C、C语言程序总是从main()函数开始执行
D、C语言程序中的main()函数必须放在程序的开始部分
下面程序的输出是_____。#includestdio.h
intm=13;
intfun(intx,inty)
{
intm=3;
return(x*y-m);
}
voidmain()
{
inta=7,b=5;
printf(“%d\n”,fun(a,b)/m);
}
A、1B、2C、7D、10
以下数组定义中不正确的是_____。A、inta[2];B、intb[]={0,1,2,5,8};
C、floata[][];D、intd[3][3]={{1,2}{1,2,3},{1,2,3,4}};
下列程序段的输出结果是_____。floatx=.;
printf(“%3d”,(int)x);
A、.82B、.83C、D、3.81
填空题(3*10=30分)计算机内部运算使用的数是_____进制。C语言源程序的基本单位是_____,它由多条语句组成,用来实现一个特定功能,通过调用来使用。假定x=10,则表达式x=10?70:34的值为_____。若x=5,y=10,则计算y*=++x表达式后,x和y的值分别是_____和_____。数值常量0x62对应的十进制值是_____。在C语言程序的循环体中,使用_____语句可以跳出循环体,执行循环体后面的语句。下面程序的运行结果是_____。#includestdio.h
main()
{
inti,x,y;
i=x=y=0;
do
{
++i;
if(i%2!=0)
{x=x+i;i++;}
y=y+i++;
}whi1e(i=7);
printf(“x=%d,y=%d\n”,x,y);
}
请填写下列程序中的两个语句,每个语句作为一个填空。/*用辗转相除法求两个整数的最大公约数*/
main()
{
inta,b,r;
scanf(“%d%d”,a,b);
____________________;
while(r!==0)
{
a=b;
____________________;
r=a%b;
}
printf(“%d”,b);
}
判断题(2*10=20分)递归调用不能直接或者间接调用该函数本身。()计算机不能直接识别和执行用C语言写的源程序,必须用编译程序把C源程序翻译成二进制形式的目标程序后,才能正常执行。()数组中的每一个元素都必须属于同一数据类型。()C语言中的continue语句只结束本次循环,而不是终止整个循环的执行。()对于全局变量,在程序开始执行时给其分配存储区,程序执行完毕就释放()算法是为了解决一个问题而采取的方法和步骤,算法=数据结构+程序。()采用strcmp函数可以将两个字符数组中的字符串连接起来。()do...while语句的执行过程是,先无条件的执行循环体,然后判断循环条件是否成立。()C语言规定标识符只能由字母、数字和下划线3种字符组成,第一个字符可以是数字。()采用fclose函数可以关闭数据文件,关闭就是撤销文件信息区和文件缓冲区,使文件指针变量不再指向该文件。()简答题(5*10=50分)简要陈述指针的优缺点。机器语言和高级语言各有什么特点。用数组方式求出Fibonacci数列前50个的值并输出到屏幕。有一个含n个整数的数组a,写一个C语言程序,要求调用函数实现n个整数反向顺序重新排列存放。一个球从米高度自由下落,落地后弹起高度为原来高度的一半,写一个C语言程序,求他第十次落地时的总运动距离,第十次反弹多高。案例分析(20分)问题描述,从键盘输入任意一个四位数的整数,然后检查其是否为11的整数倍;
(1)如果是11的整数倍,则输出该数到屏幕。
(2)如果不是11的整数倍,则将组成该数的四个数字重新排列形成一个新的四位整数,对能形成的所有四位整数中,对那些为11的整数倍的数全部输出到磁盘文件C:\output.dat(数之间用逗号分隔),然后,读取磁盘文件C:\output.dat,求出最大数并输出到屏幕。
(3)如果在第二步中不存在是11整数倍的数,则在屏幕上输出“无”。
1、简述算法思路并画出其流程图。(10分)
2、用C语言写出上述需求的实现代码。(10分)
年湖南大学招收硕士研究生入学考试试题解析
考试科目名称:计算机程序设计总分:分
考生注意:所有答案必须写在答题纸(卷)上,写在本试题上一律不给分。
一、选择题
DBCCBBCBDC
二、填空题
1、二
2、函数
3、70
4、
5、98
6、Break
7、x=1,y=20
8、r=a%bb=r
三、判断题
错对对对对错错对错对
四、简答题
1、优点:提高程序编译效率和执行速度,使之更加简洁;
利用指针直接操作内存地址;
函数通过指针传参,实现地址共享,双向传值;
利用指针动态分配内存;
实现复杂的数据结构,如链表;
缺点:容易出错,且错误往往比较隐蔽,使用不当会出现隐蔽的、难以发现和排除的故障。
2、机器语言:能够被机器立即识别并加以执行,具有执行速度快,占用内存小等优点,但难学、难记、难以推广使用。
高级语言:弥补了机器语言的不足,不依赖于具体机器,容易理解,较为方便。
3、#includestdio.h
intmain()
{
inti;
doublef[50]={1.0,1.0};//不能用int,第47个开始溢出
for(i=2;i50;i++)
f=f[i-1]+f[i-2];
for(i=0;i50;i++)
{
if(i%5==0)
printf(“\n”);
printf(“%15.01f”,f);
}
printf(“\n”);
return0;
}
4、#includestdio.h
intinvet(inta[],intn);
intmain()
{
inti;
inta[10]={0,1,2,3,4,5,6,7,8,9};
intn=10;
invet(a,10);
for(i=0;in;i++)
printf(“%d\n”,a);
return0;
}
intinvet(inta[],intn)
{
inti,b[n];
for(i=0;in;i++)
b[n-i-1]=a;
for(i=0;in;i++)
a=b;
}
5、#includestdio.h
intmain()
{
floatsn=.0;
floathn=sn/2;
intn;
for(n=2;n=10;n++)
{
sn=sn+2*hn;
hn=hn/2;
}
printf(“thetotalofroadis%f\n”,sn);
printf(“thetenthis%fmeter\n”,hn);
return0;
}
五、案例分析
#includestdio.h
#includestdlib.h
intcheckFun(intnum,intnum_11[]);
voidsave(intnum_11[],intcount);
voidprintMax();
intmain()
{
intnum_in;
intnum_11[24];
intcount=0;
printf(“Enteranintegeroffourdigits:”);
scanf(“%d”,num_in);
if(num_in
num_in0)
{
printf(“Enterintegererror!\n”);
return1;
}
if(num_in%11==0)//是11的整数倍
{
printf(“%d\n”,num_in);
return0;
}
count=checkFun(num_in,num_11);
if(count0//重组存在11的整数倍数字
{
save(num_11,count);
printMax();
}else//不存在
{
printf(“无”);
}
return0;
}
intcheckFun(intnum,intnum_11[]//检查重组被11整除情况
{
intdiv[4];//保存四位数字
intnumTemp;
intcount=0;//计数重组能被11整除个数
inti1,i2,i3,i4,j;
for(j=3;j=0;j--)//求出各个位数上的数字
{
div[j]=num%10;
num/=10;
}
for(i1=0;i14;i1++)
for(i2=0;i24;i2++)
for(i3=0;i34;i3++)
for(i4=0;i44;i4++)
{
if(i1!=i2i1!=i3i1!=i4i2!=i3i2!=i4i3!=i4div[i1]!=0)
{/判别四位数,且千位不能为0
numTemp=div[i1]*0+div[i2]*+div[i3]*10+div[4];
if(numTemp%11==0)
{
for[j=0;jcount;j++)
{
if(numTemp==num_11[j])
break;
}
if(j=count)//忽略重复数字
{
num_11[count++]=numTemp;
}
}
}
}
returncount;
}
voidsave(intnum_11[],intcount)//保存到文件
{
FILE*fp;
inti;
if((fp=fopen(“C:l\output.txt”,“w”))==NULL)
{
printf(“Cannotopenfile!\n”);
exit(0);
}
for(i=0;icount-1;++)
{
fprintf(fp,“%d,”,num_11[]);//用逗号隔开
}
fprintf(fp,“%d”,num_11[count-1]);
fclose(fp);
}
voidprintMax()//从文件中找出最大数
{
inti;
intnumTemp;
intmax=0;
FILE*fp;
if((fp=fopen(“C:\\output.txt”,“r”))==NULL)
{
printf(“Cannotopenfile!\n”);
exit(0);
}
while(!feof(fp))
{
fscanf(fp,“%d,”,numTemp);
if(numTempmax)
max=numTemp;
}
printf(“TheMaxnumis:%d\n”,max);
fclose(fp);
}
还有什么想了解的呢,欢迎在下方留言哦~,包括但不限于招生情况,初复试资料和找直系学长学姐
整理不易,点赞