C语言程序设计B卷.docx
《C语言程序设计B卷.docx》由会员分享,可在线阅读,更多相关《C语言程序设计B卷.docx(17页珍藏版)》请在冰豆网上搜索。
C语言程序设计B卷
哈尔滨工业大学(威海)2010/2011学年秋季学期
C语言程序设计笔试试题(B卷)
题号
一
二
三
四
五
六
笔试(70%)
综合
(30%)
总分
分数
号
学
名
姓
试卷说明:
1.笔试卷面总分100分,取卷面成绩的70%计入总分;
2.综合成绩为平时成绩(10%)和实验成绩(20%)之和,占总分的30%;
3.答题时禁止拆开试卷钉,试卷背面即为草稿纸;
4.答题时间120分钟。
一、单项选择题。
请把答案填入下面框中,
不允许出框线。
(本题16分,每小题2分)
题号
1
2
3
4
5
6
7
8
答案
注意行为规范
遵守考试纪律
1.关于printf函数的使用,下列正确的是()。
A)printf(“helloworld\n\n”);
B)printf(“a=%d”,);
C)printf(“s=%f,s”);
D)printf(“%d=%d+%d\n”,a=b+c);
2.有以下程序
main()
{
shortinta=-1;
printf("%d",a);
}则程序输出()。
A)0B)-1
C)65535D)4294967295
教研室主任签字:
3.VC++中,int型变量取值范围是:
()。
A)[-2^31,2^31]B)[-2^32,2^32-1]
C)[-2^31,2^31]D)[-2^31,2^31-1]
4.有以下程序段
main()
{
inta=9&3;
printf("%d",a);
}
则最后的输出结果是:
()。
A)1B)13
C)3D)0
5.有以下程序:
main(){
intx=-1;
do{
x=x*x;
}while(!
x--);
printf("%x\n",x);
}
执行后的输出结果为()。
A)-1B)1C)0D)ffff
6.voidmain(){
doublex=1;
switch(x)
{
case0:
printf("A");
case1:
printf("B");
default:
printf("C");
}
}程序输出结果是()
A)ABCB)BCC)BD)编译有错
7.printf("%x",0x13|017)输出的结果是()。
A)13B)17C)1fD)23
8.关于malloc()函数,下面叙述中错误的是()。
A)这是一个分配内存的函数B)需要2个参数
C)返回一个指针
D)该函数申请的内存不被free()会产生“内存泄露”
二、填空题。
请按序号把答案填入下面框中,
不允许出框线。
(本题20分,每空1分)
题号
答案
题号
答案
1
11
2
12
3
13
4
14
5
15
6
16
7
17
8
18
9
19
10
20
1.使用动态内存分配方式完成下列程序:
#include
【1】
voidmain(){
int*p;
【2】
*p=20;
printf("*p=%d\n",*p);
}
2.有以下函数
longP(intn,intk)
{
longPowerVal=n;
inti;
for(i=1;iPowerVal*=n;
returnPowerVal;
}
该函数的功能是【3】。
3.下面是一个十进制整数转二进制的程序,请补全。
voidFUN1(intx)
{
inta[100];
inti=0;
while(x>0)
{【4】
【5】
i++;
}
for(intk=i-1;k>=0;k--)
{printf("%d",【6】);
}
}
4.下列程序段为链表结点类型定义,请填空。
【7】point{
doublex;
doubley;
【8】next;
};
5.下面的函数将遍历输出一个链表的内容,请补全程序。
注:
VCT是一个结构体类型名称,指针域变量为next
voidlink1_show(VCT*head)
{
VCT*p;
【9】
while(p!
=NULL)
{
printf("%s\n",p->s);
【10】
}
}
6.下面的函数功能是取子字符串,例如
puts(substring("ABCDEFG",1,4));输出结果是BCD,请填空:
char*substring(char*s,inta,intb)
{
char*ans;
ans=(【11】)malloc(【12】);
for(inti=a;i
{
ans[i-a]=s[i];
}
ans[i-a]=【13】;
returnans;
}
7.下面程序的运行结果为【14】。
main()
{
enumweekday
{sun,mon,tue=6,wed,thu,fri,sat}a,b,c;
a=sun;b=tue;c=sat;
printf("%d%d%d",a,b,c);
}
8.下列函数用来计算某年某个月的天数,请填空:
intmonth_day(intyear,intmonth)
{
intd[12]={【15】,30,31,30,31,31,30,31,30,31};
if(year%4==100&&year%100!
=0&&year%100==0)
{
【16】
}
returnd[month-1];
}
9.ft为结构体类型名,下面的函数将ft1写入文件,请补全程序:
voidwrite_ft(ftft1,char*filename)
{
/*writefttofile*/
【17】
fp=fopen(filename,"w");
if(fp!
=NULL)
fwrite(【18】,sizeof(ft),1,fp);
fclose(fp);
}
10.递归方式求阶乘,请填空:
longfac(intn)
{
longf;
if(n<0)
printf("n<0,dataerror!
");
elseif(【19】)f=1;
elsef=【20】
return(f);
}
三、请把下列程序运行结果填入答案框中,不允
许出框线,用“↙”表示回车。
(本题24分,每小题3分)
题号
1
2
3
4
5
6
7
8
答案
1.
main(){
inty=2,a=1;
while(y--!
=-1)
do{
a*=y;
a++;
}while(y--);
printf(“%d,%d\n”,a,y);
}
2.#include
voidswap(int*a,int*b)
{
intt;
t=*a;*a=*b;*b=t;
}
voidmain()
{
intx=3,y=5,*p=&x,*q=&y;
swap(p,q);
printf("%d,%d\n",*p,*q);
}
3.intM(intx,inty,intz)
{
intp;
p=x*y-z;
return(p);
}
voidmain()
{
inta=1,b=2,c=3;
printf("%d\n",M(a+b,b+c,c+a));
}
4.#include
main()
{
inta[]={1,2,3,4,5,6},*p=a+2;
*(p+3)+=3;
printf("%d,%d",*p,*(p+3));
}
5.voidmain()
{
chars[80]="abcd",t[80]="1234";
strcpy(s,"ABC");
strcat(t,s);
puts(t);
}
6.voidWriteStr(char*fn,char*str)
{FILE*fp;
fp=fopen(fn,"w");fputs(str,fp);fclose(fp);
}
main()
{
WriteStr("t1.dat","start");
WriteStr("t1.dat","end");
}
程序运行后,文件t1.dat中的内容是。
7.#include
voidmain()
{
intn=60,i;
printf("%d=",n);
for(i=2;i{
if(n%i==0)
{
printf("%d*",i);n/=i;i--;
}
}printf("%d",n);
}
8.
#defineSQ1(y)(y)*(y)
#defineSQ2(y)y*y
voidmain()
{
intn=3,nsq1,nsq2;
nsq1=SQ1(n+1);
nsq2=SQ2(n+1);
printf("nsq1=%dnsq2=%d",nsq1,nsq2);
}
四、根据功能描述改正程序中的错误。
不得增行或删行,不得更改程序结构。
(本题10分)
1.要求以下程序的功能是计算100*99*……*81*80的值。
(本小题4分)
#include
voidmain()
{
doublen=100,i,ans;
for(i=n;i>=n-20;i--)
{
ans*=n;
}
printf("ans=%.0lf\n",ans);
}2.下面函数link1_get的功能是返回链表第i个结点的字符串地址。
(本小题6分)
structvector
{char*s;
structvector*next;}
typedefstructvectorVCT;
char*link1_get(VCT*p,inti)
{
char*ans;
intcount=0;
while(p->next!
=NULL&&count
{p=p->next;i++;}
if(count==i)
{ans=p.s;
returnans;}
else
returnNULL;
}
五、请用标准程序流程图描述下列问题的算法
(本题10分,每小题5分)
六、编程题(本题20分)
1.使用下面的结构体,编写两个函数。
(本小题10分)
dis函数用来求两点距离;middle_point函数求两点中点
#include
#include
structpoint
{
doublex;
doubley;
};
voidmain()
{
structpointp1={0,0};
structpointp2={3,4};
structpointp_m;
printf("%lf\n",dis(p1,p2));/*求p1点和p2点的距离*/
p_m=mid_point(p1,p2);/*返回p1点和p2点的中点*/
printf("中点为(%lf,%lf)\n",p_m.x,p_m.y);
}
2.计算一个数组(10个元素,数据从键盘接收)的最大值、最小值、平均值,并将计算结果在main函数中输出到屏幕,要求用函数实现。
(本小题10分)
voiddata_ana(int*s,int*max,int*min,int*avg){
}
main(){
}