武汉大学计算机学院C语言历年试题1Word格式文档下载.docx
《武汉大学计算机学院C语言历年试题1Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《武汉大学计算机学院C语言历年试题1Word格式文档下载.docx(48页珍藏版)》请在冰豆网上搜索。
#defineLENGTHWIDTH+1
则执行赋值语句v=LENGTH*20;
/*v为int型变量*/后,v的值为______。
1620
1601
100
1600
()6.
假如指针p已经指向某个整型变量,语句____使指针q与p指向同一变量。
q=**p
q=*&
p
q=&
q=*p
()7.
设longa[50],*p;
执行p=a;
p+=4;
后*(p+4)等价于____。
a[8]
a[4]
a[2]
无法确定
()8.
执行fp=fopen(”A:
Exam1_8.txt”,”wb”);
后fp为null,最可能的原因是____。
按二进制方式打开文本文件
文件A:
Exam1_8.txt不存在
文件写保护
Exam1_8.txt大小写不一致
()9.
______不是对象的基本特性。
封装
多态(重载)
非结构
继承
()10.
结构化程序设计追求的首要目标是程序的______。
运行速度快
存储空间少
结构优
代码长度最短
二.程序纠错(10分)
下列两个程序段有若干错误,请你错误之处下方标明,如有必要可以简要说明原因(在程序右侧)。
重要提示:
任何一种程序语言其数据类型的存储空间将受到计算机制约。
程序段A
/*输入不超过20个正整数,计算其乘积*/
#definenum20
inta[num],count=0,buf=1;
for(inti=0;
(i<
num)&
(buf>
0);
i++)
{scanf(“%u”,buf);
a[++count]=buf;
}
num=count;
longsum=0;
for(i=0;
i<
count;
i++)sum*=a[i];
程序段B
/*下列函数递归函数求f(n)=(2n)!
*/
longf(intn)
{inttmp
if(n<
2)tmp=1;
tmp=(2*n)*(2*n-1)*f(n-2);
return(long)tmp;
三.程序阅读与分析(32分)
1.
(6分)下面的程序求矩阵A(m,m)的右下三角区的所有元素的和,请在程序的空白处填上适当的内容。
#definem100
main()
{inta[m][m];
inti,j;
①sum=0;
for(i=0;
m;
for(j=0;
j<
j++)scanf(“%d”,②);
for(i=③;
④;
for(j=⑤;
⑥;
j++)sum+=(double)a[i][j];
}
2.
(6分)写出下列程序的运行结果。
#include<
stdio.h>
{inti,b,k=0;
for(i=1;
i<
=5;
i++)
{b=i%2;
while(b-->
=0)k++;
printf(“%d,%d”,k,b);
3.
intfat(intn)
{staticintf=1;
f=f*n*2;
return(f);
{inti,j;
++i)
printf(“%d\t”,fat(i));
4.
(6分)下列程序段将一个单链表写入一个文件:
p=head;
if(fp=fopen(“Exam5.dat”,”w”)!
=null)
{while(p!
{
fwrite(p,sizeof(structnode),1,fp);
p=(*p).next;
};
请问用下面的程序段,可以将这个链表从该文件中生成到内存中吗?
为什么?
if(fp=fopen(“Exam5.dat”,”r”)!
{while!
feof(fp)
{p=malloc(sizeof(structnode))
fread(p,sizeof(structnode),1,fp);
5.
(8分)阅读以下递归函数,并用非递归方法改写该函数。
#include<
voidconvert(intn)
{inti;
if((i=n/7)!
=0)convert(i);
putchar(n%7+’0’);
四.子程序设计(每题10分,共30分)
本题说明:
完成函数设计时,请自行说明所有的形式参数的类型
设计一个函数arrsum(a,n)计算一维整数数组a中前n个元素的平均值。
设计函数prime(n),其中n为任意一个整数,当n为素数时,函数返回真,否则返回假。
调用函数reverse(h)将h指向的单链表倒置。
实在参数h应该指向倒置后链表的头节点。
五.算法设计(选做一题18分)
说明:
●
仅需任意选做一题。
多选者,以卷面先列出的为判分依据;
分析思路、重要数据类型的定义、模块的功能、形式参数、函数返回值说明;
(9分)
用伪代码或其它方法描述子程序;
不必完整写出函数程序的代码,完整代码将不作为判分依据。
用字符数组模拟实现字符串,给出下列函数:
两个字符串的并接、找一个字符在串中的位置、统计一个字符在串中的数目。
模拟实现大小写(52个)英文字母的集合运算,给出集合的表示方法,及运算属于∈、并∪、差─的子程序。
模拟实现复数类型,给出复数的加法、减法和乘法的子程序。
2002-2003学年度第一学期2002级
一.选择最合适的答案填空(每题2分,共20分)
()1.在一个整常量后面加一个字母,如213L,则表示该常量为型常量。
长整数
常量
地址
八进制
定义变量时冠以关键字,则表示此标识符是静态外部变量,可以供其他文件共用。
register
extern
void
static
表达式0x0fff&
0x3345的值为______。
3345
0x3345
0x345
0x3fff
设变量intx=10,y=20,则执行x=x+y;
y=x-y;
x=x-y后x为______。
30
20
10
0
表达式27<
2的值为______。
54
13
81
108
设有如下宏定义#defineWIDTHf(x,y)(x>
y)?
x-y:
x+y;
则表达式f(10,20)的值为______。
-10
与*p.data指等价的表达式为____。
*&
p->
data
*data
设inta[50],q;
long*p;
执行p=(long*)a;
q=(int*)p;
后*(q+2)等价于____。
a[6]
a[10]
Exam1_8.txt”,”rb”);
源文件不是二进制文件
Exam1_8.txt长度太大
二.文字填空(15分)
1.变量名实际上是一个符号地址,对于已经定义的一个整型变量X,要获取其地址则可以用操作来实现。
2.如果将变量c定义为无符号字符类型,定义形式为,其数值取值范围(写成十六进制)为至。
3.设有inta=2,b=3;
floatc=2.5;
则算术表达式(a+b)/(int)c+(float)(a+b)/c的值是。
4.对于c=a<
b?
b:
a;
如果已知a=5;
b=4;
则c的值为。
5.已知char*name[]={“Basic”,“C”,”Pascal”,“VB”,“VC++”};
char**p;
p=name+2;
则语句printf(“%o\n”,*p);
的输出为,语句printf(“%s\n”,*p);
的输出为。
6.在定义函数时,如果在函数首部的最左端冠以关键字,则表示此函数是外部函数,可以供其他文件调用。
7.声明一个结构体类型的一般形式为。
三.程序阅读与分析(20分)
一个int型变量的最大允许值为32767,请写出程序的执行结果。
(6分)
main()
{inta,b;
longc;
a=32767;
b=a+1;
c=a+1;
printf(“%d,%d,%u”,a,b,c);
}
(6分)下面的程序对数组A[m]进行排序,并计算它们的和。
请在程序的空白处填上适当的内容。
#definem50
{inta[m];
inti,j,K;
i++)scanf(“%d”,②);
for(i=1;
m-1;
for(j=③;
j++)
{sum+=(double)a[i][j];
if⑤
{K=a[i];
a[i]=⑥;
a[j]=K;
(8分)说明子程序的功能
voidReverse(charch)
{
ch=getchar();
ifch!
=’#’
Reverse(ch);
putchar(ch);
};
};
给定输入字符串ABCDXF%&
123#KK调用该过程Reverse(C)后,产生的输出是什么?
实在参数C(字符变量)的值为什么?
四.子程序设计(共30分)
每题15分,仅需任意选做两题。
完成函数设计时,请自行说明所有的形式参数。
1.1.左图为设定的有关结点及指针的取值示意,如果执行Try(p1,p2,p3)后,有关结点、指针的值如右图所示。
请你用C语言:
∙
给出结点、指针的类型定义形式
写出子程序Try的定义。
(提示:
形式参数应该适当作变化)
2.2.编写递归函数f(n)求Fibonacci数列的第n个数。
3.3.函数intgetbin(int*bitno);
完成从键盘上读入二进制字符串将它的值作为函数值返回。
其中,bitno返回二进制串的长度。
(该串以非0、1的字符为结尾)
如 输入:
101010B 函数结果为:
42
输入:
111111# 函数结果为:
63
五.算法设计(选做一题15分)
任意选做一题。
1.1.
任意给定一个年份year、月份month。
设计一个输出月历的算法。
2.2.
用字符数组存储整数,如123则数组的前四个元素为’1’、‘2’、‘3’、‘\0’设计一个整数乘法、加法的子程序。
2003-2004学年度第一学期2003级
一.
单项选择题:
(选择最合适的答案填空,每小题2分,共20分)
()1.不正确的字符常量是______。
‘2’
‘\\’
“q”
‘*’
()2.表达式7.5+7%2-5/2*3的结果为______。
1.0
2.5
3.0
4.5
()3.设变量intm,n,a,b的值均为0,则执行表达式(m=a>
=b)||(n=a>
=b)后,m,n
的值为______。
()4.表达式35>
>
8
9
16
17
()5.设有如下宏定义#defineweight50
#defineprice1+weight
则执行赋值语句v=price*20;
510
501
61
500
()6.在定义函数时,在局部变量前面加上____前缀,则在多次调用该函数
时,该局部变量值保持一致。
auto
执行p=a+2;
后*(p+4)等价于________。
()8.staticchara1={‘h’,’e’,’l’,’l’,’o’};
staticchara2=”hello”;
以上定义的数组a1和a2的数组长度为________。
6和6
6和5
5和5
5和6
()9.表达式0x7586&
~0xff结果为______。
0x86
0x7586
7500
0x7500
inta[10][10];
int(*p)[10];
p=a;
则*p+3表示____。
&
a[0][3]
a[0][3]
a[3][0]
a[3][0]
二.
文字填空(共15分
1.
为了判断两个字符串s1和s2是否相等,应当使用库函数______________。
2.
*作为单目运算符表示____________________。
3.
在C语言中,存储类别为________和____________的变量只有在使用它们时才占用内存空间。
4.
设x、y为int类型变量,请写出以下命题:
(1)x和y都大于10_________________________________
(2)x、y中有一个为负数______________________________________
5.
C语言的编译系统对于预处理中的宏命令是在_______________________进行处理的。
6.
设有如下定义int(*ptr)();
则表示ptr是____________________变量。
7.
设intx,y,z;
初值分别为2、3、4,则表达式(x>
=y>
=z)?
1:
0的结果为__________。
8.
用于定义枚举类型的关键字为____________。
三.程序填空(请在空白处填写合适内容以完成整个程序,共10分)
将文本文件file1.txt复制到文件file2.dat中,复制时只复制小写字母。
#incude<
voidmain()
{FILE*f1,*f2;
charc;
if((
(1)==NULL)
{printf(“file1.txtcannotopen\n”);
return;
if(
(2)==NULL)
{printf(“file2.datcannotopen”\n);
while((3))
{c=getc(f1);
if((4))
putc(c,f2);
fclose(f1);
fclose(f2);
下面程序从字符串s中去掉重复出现的字符,例如s的内容为”asdadf12”,则处理后为”asdf12”。
string.h>
{chars[50];
(5)*p,*q;
scanf(“%s”,(6));
for((7);
(8);
p++)
{q=p+1;
while(*q)
if((9))
strcpy(q,q+1);
else
(10);
printf(“%s\n”,s);
四.程序阅读与分析(每小题5分,共10分)
写出下列程序的运行结果。
f=f*n-1;
阅读以下递归函数,分析进行funx(6,&
x)调用时程序运行过程;
调用完成后变量x的值为多少?
voidfunc(intn,int*s)
{intf1,f2;
if(n==1||n==2)*s=1;
else
{func(n-1,&
f1);
func(n-2,&
f2);
*s=f1+f2;
五.子程序设计(每题10分,共30分)
设计函数count(s,c),统计字符c在字符串s中出现的次数。
设计一个函数arrsum(a,b,c,m,n),a、b为两个已经按照从小到大排列的一维整数数组(数组元素的个数分别为m和n),将数组a、b合并为一个有序的数组c。
六.算法设计(选做一题15分)
函数reverse(h)从读入若干正整数(以-1结束),组成一个单链表。
实在参数h应该指向创建后链表的头结点,函数返回值为链表中结点个数。
给出reverse(h)的定义。
具体要求如下:
A)说明链表结点类型的C定义形式;
B)用图示的方法说