第一部分:C 语言程序设计(满分 150 分)
一、单项选择题(本大题共 20 小题,每小题 2 分,共 40 分。在每小题给出的四个备选项中,选出一个正确的答案,请将选定的答案填涂在答题纸的相应位置上。)
1. 以下 C 语言标识符定义正确的是( )。
A.switch B._for
C.3count D.do-while
2. 若程序中调用库函数 strlen(),则必须包含头文件( )。
A.stdio.h B.stdlib.h
C.string.h
3.如下程序的输出结果是(
)。D.math.h
#includevoid main()
{char c='a'; printf("%c\n",'H'+(c-'h'));
}
A.A B.a
C.H D.h
4. 以下合法的常量表达式是( )。
A.'\0' B.018
C.5E3.5 D.'loveC'
5. 已知 int a=2,b=3;则逗号表达式 a+b,a++,b+=a,b+5 的值为( )。
A.5 B.8
C.10 D.11
6. 当调用函数时,实参是一个数组名,则向函数传送的是( )。
A.数组的长度 B.数组的第一个元素
C.数组的首地址 D.数组中每个元素的值 7.若有 int a[][4]={1,2,3,4,5,6,7},则数组 a 第一维的大小是( )。
6.1 B.2
C.3 D.4
8.若有 char *s="ab\0cde",则该字符串的长度为( )。
A.2 B.5
C.6 D.7
9.若 x=1,y=2; 则表达式 x++>=y?1:2 的值为( )。
A.1 B.-1
C.0 D.2
10. 已知 int y=10;则执行 y+=y-=y-y;后 y 的值是( )。
A.10 B.20
C.30 D.40
11. 如下程序的输出结果是( )。
#include#define F(x) (x-1)*x void main()
{ int a=1,b=2; printf("%d\n",F(a+b));
}
A.4 B.6
C.12 D.16
12. 以下说法错误的是( )。
A.C 程序总是从 main 函数开始执行,也在 main 函数结束
B. 函数不可以嵌套定义,但可以嵌套调用
C. 若函数的形参为一维数组,调用函数时对应的实参必须为数组名 D.若函数的形参为一维数组,形参数组可以不指定大小
13.若 int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则以下选项中值不是 8 的是()。
A.a[7]
C.*(p+7) B.*p+7
D.p[8]
14.如下函数 f 实现的功能是()。
void f(char *d,char *s)
{
while((*d++=*s++)!='\0');
}
A.求字符串长度 B.字符串复制
C.字符串比较 D.编译错误
15. 以下关于逻辑运算符两侧运算对象的叙述正确的是( )。
A.只能是整数 0 或 1 B.只能是整数 0 或非 0
C.只能是整数 0 或正整数 D.可以是任意合法表达式16.switch 语句使用中,下列叙述正确的是( )。
A.break 只能用于 switch 语句 B.在 switch 语句中必须使用 default C.switch 语句中不一定使用 break D.default 必须放在 switch 结构最后
17. 已知 int a=12; 则语句 f=a<<2;执行后 f 的值为( )。
A.16 B.8
C.6 D.48
18. 设有定义: struct sk
{ int a; float b;
}data,*p=&data;
则对 data 中成员 b 的引用不正确的是( )。
A.data.b B.p-> data.b
C.(*p).b D.p->b
19. 若有 int x=1,y=2,z;则表达式 z=(x==y)的值是( )。
A.0 B.1
C.true D.flase
20. 以下正确定义一维数组的选项是( )。
A.int a[5]={0, 1, 2, 3, 4, 5}; B.char a[ ]= “ABC”;
C.char a = “ABC”; D.int a[5] = “123”;
二、程序阅读题(本大题共 5 小题,每小题 6 分,共 30 分。请将程序的运行结果填写在答题纸的相应位置上。)
1.______________________
#include "stdio.h"
void main()
{ int x=1,y=0,a=1,b=0; switch(x)
{case 1: switch(y)
{ case 0:b++;
case 1:a++;break; case 2:b++;break;
}
case 2:a++;b++;break; case 3:a++;b++;
}
printf("a=%d,b=%d\n",a,b);
}
2. ____________________
#include "stdio.h"
void f(char *p)
{ for(;*p!='\0';p++) if(*p>='a' && *p<='z')
*p=*p-32;
}
void main()
{ char a[10]="ababa";
f(&a[1]);
printf("%s\n",a);
}
3. ___________________
#include "stdio.h"
int f(int x)
{static int s=0; int i;
for(i=1;i<=x;i++) s=s+i;
return s;
}
void main()
{int n; n=f(1)+f(2);
printf("%d\n",n);
}
4. _____________
#include "stdio.h"
void f(int a[])
{int i=0;
while(a[i]<=10)
{ printf("%d\t",a[i]); i++;}
}
void main()
{ int a[]={5,10,9,12,7};
f(a);
}
5. _______________________
#include "stdio.h"
void fun(int a[2][3])
{int i,j,max; for(i=0;i<2;i++)
{ max=a[i][0];
for(j=1;j
max=a[i][j];
a[i][0]=max;
}
}
void main()
{int a[2][3]={1,2,3,4,5,6},i,j;
fun(a); for(i=0;i<2;i++) for(j=0;j<3;j++)
printf("%4d",a[i][j]);
}
三、程序填空题(本大题共 3 小题,每空 5 分,共 35 分。请在答题纸相应题号的位置上作答。)
1. 以下程序的功能是判断年份 year 是否闰年。(若某年份能被 4 整除但不能被 100 整除, 或者能被 400 整除,则该年份是闰年)。请填空。
#include "stdio.h" void main()