《C语言程序设计》 2016-2017学年第一学期期末试卷B卷
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
河海大学2016—2017学年第一学期
《C语言程序设计》期末试卷(B)
(本试卷包括第一卷和第二卷,答卷时间总共120分钟)
第一卷
第一部分:基础知识(20项,共40分)
1.一个C语言程序是由()组成的。
A.主程序B.子程序C.函数D.过程
2.转换说明符%x的输出形式是()。
A.十进制B.八进制C.十六进制D.二进制
3.若a、b均为int型变量,且a=100,则关于循环语句for(b=100;a!=b;++a,++b) printf ( “------------“) ;的正确说法是()。
A.循环体只执行一次B.死循环
C.循环体一次也不执行D.输出-----------
4.若x、y、z均为int 型变量,则执行下列语句后的z值为()。
x=1; y=2; z=3; z=(x>y)?z :y ; z = (z<y)?z:x;
A.1 B.4 C.2 D.3
5.下面标识符中,合法的用户标识符为()。
A.P#Ad B.12a C.char D._int
6.‘A’+ 3 的结果是()。
A.’A’B.’D’的ASCⅡ码C.65 D.3
7.语句char str[20];说明str是一个字符串,最多能表示()。
A.20个字符B.19个字符C.18个字符D.21个字符
8.将int 型变量n转换成float型变量的方法是()。
A.float n B.(float)n C.float(n) D.21个字符
9.以下不正确的描述是()。
A.使用while和do-while循环时,循环变量初始化的操作应在循环语句之前完成B.while循环是先判断表达式后执行循环体语句
C.do-while和for循环均是先执行循环体语句,后判断表达式
D.for、while、do-while循环中的循环体均可以由空语句构成
10.在循环中使用break 语句的功能是()。
A.使程序的执行跳出break所在的那一重循环
B.使程序执行结束
C.跳出包含此break语句的所有循环
D.终止本次循环,继续下次循环
11.下面是一个初始化指针的语句:int *px = &a;其中指针变量的名字应该是()。
A.*pz B.a C.px D.&a
12.若指针px为空指针,则()。
A.px指向不定B.px的值为零
C.px的目标为零D.px的地址为零
13.对于语句int *px[10],以下说法正确的是()。
A. px是一个指针,指向一个数组,数组的元素是整数型。
B. px是一个数组,其数组的每一个元素是指向整数的指针。
C. A和B均错,但它是C语言的正确语句。
D. C语言不允许这样的语句。
14.具有相同基类型的指针变量P和数组变量Y,下列写法中不合法的是()。
A.P = Y B.*P = Y[i]
C.P + &Y[i] D.P = &Y
15.已知static int a[]={5,4,3,2,1},*p[]={a+3,a+2,a+1,a},**q=p,则表达式*(p[0]+1)+**(q+2)的值是()。
A.5 B.4 C.6 D.7
16.已知for(;n>=1;n--),下列语句实现将S2所指字符数组中前n个字符复制到S1所指字符数组中,其中代码不正确的是()。
A.*S1++=*S2++ B.S1[n-1]=S2[n-1]
C.*(S1+n-1)=*(S2+n-1) D.*(++S1)=*(++S2)
17.调用函数的实参与被调用函数的形参应该有如下关系()。
A.只要求实参和形参个数相等B.只要求形参和实参顺序相同
C.只要求实参和形参数据类型相同D.上述三点均需具备
18.联合体成员的数据类型()。
A.相同B.可以不同也可以相同
C.长度一样D.是结构体变量
19.由系统分配和控制的标准输出文件为()。
A.键盘B.磁盘C.打印机D.显示器
20.C语言标准库函数fread(fd,buffer,n)的功能是()。
A.从文件fd中读取长度不超过n个字节的数据送入buffer指向的内存区域
B.从文件fd中读取长度不超过n-1个字节的数据送入buffer指向的内存区域
C.从文件fd中读取长度不超过n个字符送入buffer指向的内存区域
D.从文件fd中读取长度不超过n-1个字符送入buffer指向的内存区域
第二部分:简单程序(12项,共30分)
21.下列程序
main()
{ int x,y,z;
x=y=2;z=3;
y=z++-1;
printf(“%d\t%d\t”,x,y);
y=++x-1;
printf(“%d \t%d\n”,x,y);
y=z---1;
printf(“%d\t%d\t”,z,y);
y=--z-1;
printf(“%d\t%d\n”,z,y);
}
运行后输出的数据为¬¬¬_______。
A. 3 1 4 2
B. 3 1 3 3
C. 2 2 3 2
D. 2 1 3 2
2 4 1
3 2
4 2 2 3 3 2 1 1 3 1 2 22.下列程序
main()
{ int i,j;char *a,c;
a=”computer”;
printf(“%s”,a);
for(i=0,j=7;i<j;i++,j--)
{ c=a[i];
*(a+i)=*(a+j);
a[j]=c;
}
printf(“->%s\n”,a);
c=a[j-1,i=2+j];
printf(“a[%d]=%c\n”,i,c);
}
运行后输出的数据为___ .
A. computer->computer
B. computer->retupmoc
a[3]=u a[5]=m
C. computer->retupmoc
D. computer->retupmoc
a[4]=p a[2]=t
23.下列程序
int sum(int n)
{ int p=1,s=0,i;
for(i=1;i<=n;i++) s+=(p*=i);
return s;
}
main()
{ printf(“sum(5)=%d\n”,sum(5));
}
运行后输出的数据为_ ___
A.sum(5)=151
B.sum(5)=152
C.sum(5)=153 Dsum(5)=155
24.下列程序
main()
{ static int a[]={5,6,7,3,2,9};
int s1,s2,i,*ptr;
s1=s2=0;
ptr=&a[0];
for(i=0;i<5;i+2=2)
{ s1+=*(ptr+i);
s2+=*(ptr+i+1);
}
printf(“s1=%d,s2=%d\n”,s1,s2);
}
运行后输出的数据为_____
A.s1=18,s2=14
B.s1=14,s2=32
C.s1=14,s2=18
D.s1=15,s2=19
25.下列程序
int c=1;
main()
{static int a=5;int b=6;
printf(“a=%d b=%d c=%d\n”,a,b,c);
func();
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
func();
}
func()
{ static int a=4;int b=10;
a+=2;
c+=10;
b+=c;
printf((“a=%d,b=%d,c=%d\n”,a,b,c);
}
运行后输出的数据为_ ___.
A. a=5 b=6 c=1
B. a=5 b=6 c=1
a=6 b=21 c=11 a=7 b=17 c=11
a=5 b=6 c=11 a=5 b=6 c=11
a=8 b=31 c=21 a=9 b=17 c=21
C. a=5 b=6 c=1
D. a=5 b=6 c=1
a=6 b=21 c=11 a=7 b=17 c=11
a=6 b=21 c=11 a=7 b=17 c=11
a=8 b=31 c=21 a=9 b=38 c=21
26.已知
struct student
{char ﹡name;
int student_n;
char grade;
};
struct student temp,*p=&temp;
=”chou”;
则下面不正确的是_______。
表达式值
A.p→name chou
B.(*p)→name+2 h
C.*p→name+2 e
D.*(p→name+2) o
27.下列程序
#define MAX 10
main()
{ int i,sum,a[ ]={1,2,3,4,5,6,7,8,9,10};
sum=1;
for(i=0;i<MAX;i++)
sum-=a[i];
printf(“SUM=%d”,sum);
}
程序运行结果是:
A.SUM=55
B.SUM=-54
C.SUM=-55
D.SUM=54
28.下列程序
void inv(int*x,int n)
{int *p,t,*i,*j,m=(n-1)/2;
i=x;
j=x+n-1;
p=x+m;
for(;i<p;i++,j--)
{ t=*i;
*i=*j;
*j=t;
}
return;
}
main( )
{ static int i,a[10]={3,7,9,11,0,6,7,5,4,2};
inv(a,10);
for(i=0;i<10;i++)
printf(“%d,”,a[i]);
}
程序运行结果:
A.0,2,3,4,5,6,7,7,9,11
B.11,9,7,7,6,5,4,3,2,0
C.3,7,9,11,0,6,7,5,4,2
D.2,4,5,7,6,0,11,9,7,3
29.下列程序
main()
{ int a[10],b[10],*pa,*pb,i;
pa=a;pb=b;
for(i=0;i<3;i++,pa++,pb++)
{*pa=i;*pb=2*i;
printf(“%d\t%d\n”,*pa,*pb);
}
printf(“\n”);
pa=&a[0];
pb=&b[0];
for(i=0;i<3;i++)
{*pa=*pa+i;
*pb=*pb*i;
printf(“%d\t%d\n”,*pa++,*pb++);
}
}
运行后输出的数据为______。
A. 0 0
B.0 0
C. 0 0
D. 0 0
1 2 1 2 1 2 2 2
2 4 2 4 2 4 2 4
0 0 0 0 0 0 0 0
2 2 2 2 1 2 1 2
4 8 2 4 2 4 4 8
30.下列程序
copy_string(from,to)
char *from,*to;
{ while(*from) *to++=*from++;
*to=’\0’;
}
main()
{ static char s1[ ]=”c_program.”;
static char s2[80];
copy_string(s1,s2);
printf(“%s\n”,s2);
copy_string(“123”,s2);
pr intf(“%s\n”,s2);
}
运行后输出的数据为()。
A. c_program 123
B.123
C. c_program123
D. c_program
123
31.下列程序:
#include <stdio.h>
main()
{ char a[40],b[40];
int i,j;
printf(“Enter the string:”);
scanf(“%s”,a);
i=j=0;
while(a[i]!=’\0’)
{ if(!(a[i]>=’\0’&&a[i]<=’9’))
{ b[j]=a[i]; j++;
}
++i;
}
b[j]=’\0’;
printf(“%s”,b);
}
运行后输出的结果是()。
A. 把键盘输入的字符串显示在屏幕上
B. 把键盘输入的字符串中的数字字符删掉,然后显示该字符串
C. 把键盘输入的字符串中的字符0和9删掉,然后显示该字符串
D. 只保留由键盘输入的字符串中的字母数字,然后显示该字符串32.下列程序
#include<stdio.h>
main()
{ char a[80];
int i,j;
printf(“Enter the string:”);
scanf(“%s”,a);
i=0;
while(a[i]!=’\0’)
{ if(a[i]>=’A’&&a[i]<=’Z’)
a[i]=a[i]-‘A’+’a’;
}
printf(“%s”,a);
}
运行后输出的结果是()。
A. 把键盘输入的字符串中的大写字母变换成小写字母,然后显示变换后的字符串。
B. 把键盘输入的字符串中的数字字符删除掉,然后显示该字符串。
C. 把键盘输入的字符串中的小写字母变换成大写字母,然后显示变换后的字符串。
D. 把键盘输入的字符串原封不动地显示在屏幕上。
第二卷
说明:(1)第二卷含二大题,均属填空题,每题各有5个空栏,在阅读和理解原题程序的基础上,在空栏处填入适当的字符、语句,以构成一个正确的C语言程序。
(2)每空栏填对得3分,两大题共10个空栏,全填对得30分。
试题一
一个整数称为完全平方数,是指它的值是另一个整数的平方。
如81是个完全平方数,因为它是9的平方。
下列程序是在三位的正整数中寻找符合下列条件的整数:它既是完全平方数,且三位数字中又有两位数字相同:例如144(12*12)、676(26*26)等,从程序中找出并输出所有满足上述条件的三位数。
程序如下:
main()
{ int n,k,a,b,c;
for(k=1; ;k++)
{______①______
if(n<100) _____②_____
if(n<999) _____③_____
a=n/100;
b=_____④_____
c=n%10,
if(flag(a,b,c))
printf(“n=%d=%d*%d\n”,n,k,k);
}
}
flag_____⑤_____
{ return(!(x-y)*(x-z)*(y-z));
}
试题二
以下程序所列函数replace(char *s1,char *s2,char str1,char *str2)的功能是将已知字符串s1中的所有与字符串str1相同的子串替换成字符串str2,并将替换后所生成的新的字符串存于字符数组s2中。
说明:生成字符串s2的过程是一个循环,顺序访问字符串s1的每个字符;当从某个字符开始不能构成与str1相同的子字符时,就把该字符拷贝到数组s2,当从某个字符开始能构成一个与str1相同的子字符串时,就将字符串str2的各字符拷贝到字符数组s2,并继续访问字符串s1中那个子串之后的字符,直至字符串s1被访问完毕,字符复制即告结束。
下列程序运行的结果是输出:
ABCXYZdefg abABCXYZd abab
程序如下:
replace(char *s1,char *s2,char *str1,char *str2)
{ char *t0,*t1,*t2;
while( ⑥)
{ for(t0=s1,t1=str1;*t1!=’\0’&& ⑦;t0++,t1++);
if(*t1!=’\0’)
*s2++= ⑧;
else { for(t1=str2;*t1!=’\0’;)
*s2++= ⑨;
⑩;}
}
*s2=’\0’;
}
main()
{ char s1[]=”abcdefg ababcd abab.”;
char s2[80];
replace(s1,s2,”abc”,”ABCXYZ”);
printf(“%s\n”,s2);
}
参考答案
第一卷
一.基础知识(20项,共40分)
1.C
2.C
3.C
4.A
5.D
6.B
7.B
8.B
9.C 10.A 11.C 12.B 13.B 14.D 15.A 16.D 17.D 18.B 19.D 20.A
二.简单程序
21.C 22.B 23.C 24.C 25.A 26.B 27.B 28.D 29.A 30.D 31.B 32.A
第二卷试题一:①n=k*k ②continue③break④n%100/10或(n-100*a)/10或n/10-(n/100)*10⑤int x,int y,int z 试题二:
⑥*s1或s1!=’\0’⑦*t0==*t1或*t1==*t0 ⑧*s1++
⑨*t1++ ⑩s1=t0或s1=s1+strlen(str1)。