一、选择题
1.下列说法不正确的是_______。
A. 常量可以是具体的数值,也可以是专门说明的代表某个具体数值的标识符
B. 常量0123与常量123的值是一样的数
C. 浮点型数据也可以分为有符号浮点数和无符号浮点
D. 转义字符是以字符’\’开头的一个字符序列
2.下列标识符中,不符合C语言语法规范的是____________。
A. count
B. _abc1
C. a#12
D. Student
3.有定义:int a=5;float x=6.0,y=7.0;则表达式x+a%3*(int)(x+y)%2/4的值为________。
A. 2.500000
B.2.750000
C. 3.500000
D.6.000000
4.设x、y、z和k都是int型变量,则执行表达式:x=(y=4,z=8,k=12)后,x的值为_________。
A. 4
B.8
C. 12
D. 2
5.若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是____________。
A. -3
B. 9
C. -12
D. 6
6.设x和y均为int型变量,则以下语句:x+=y;y=x-y;x-=y;的功能是________。
A. 把x和y按从大到小排列
B. 把x和y按从小到大排列
C. 无确定结果
D. 交换x和y中的值
7.假设整型变量a、b、c已经正确定义,并且已被赋予大于1的值,则下列表达式中能够正确表示代数式的是________。
A. 1/a*b*c
B.1/(a*b*c)
C. 1/a/b/(float)c
D.1.0/a/b/c
8.在x值处于–2~2,4~8时值为“真”,否则为“假”的表达式是____。
A. (2>x>–2)||(4>x>8)
B. ((x>=–2)&&(x<=2))||((x>=4)&&(x<=8))
C. (x<2)&&(x>=–2)&&(x>4)&&(x<8)
D. (x>–2)&&(x>4)||(x<8)&&(x<2)
9.在C语言程序中____________。
A. 函数的定义可以嵌套,但函数的调用不可以嵌套。
B. 函数的定义不可以嵌套,但函数的调用可以嵌套。
C. 函数的定义和函数的调用均不可以嵌套。
D. 函数的定义和函数的调用均可以嵌套。
10.给出以下定义:
char x[]="abcdefg";
char y[]={'a','b','c','d','e','f','g'};
则正确的叙述为____________。
A. 数组x和数组y等价
B.数组x和数组y的长度相同
C. 数组x的长度大于数组y的长度
D.数组x的长度小于数组y的长度
11.对下面三条语句(其中s1和s2为内嵌语句),正确的论断是____________。
(1) if (a) s1; else s2;
(2) if (a==0) s2; else s1;
(3) if (a! =0) s1; else s2;
A. 三者相互等价
B.(1)和(2)等价,但与(3)不等价
C. 三者互不等价
D.(1)和(3)等价,但与(2)不等价
12.已知:char c[8]=“bejing”,*s=c;则下面的输出语句中,错误的是____________。
A. printf( “%s\n”,s);
B. printf( “%s\n”,*s);
C. printf(“%c\n”,c[0]);
D. printf(“%d\n”,c[0]);
13.有以下的程序段: char a[10],b[]="China";a=b;printf("%s",a); 则____________。
A. 运行后将输出China
B. 运行后将输出Ch
C. 编译出错
D. 运行后将输出Chi
14.在C语言的函数调用中,如果数组名作为函数的实参,则传递给形参的是____________。
A. 数组全部元素的值
C. 数组全部元素的个数
D.数组第一个元素的值
15.C语言中,“文件包含”预处理命令有两种使用形式中,(1)#include”文件名”(双引号括起);(2)#include (尖角号括起)。其中格式(1)中,被包含文件的寻找方法是____________。
A. 直接按系统设定的标准方式搜索目录
B. 先在源程序所在目录搜索,如搜索失败则再按系统设定的标准方式搜索
C. 仅仅搜索源程序所在目录
D. 仅仅搜索当前目录
16.已知:int a [ 10 ];那么能对a数组元素正确引用的是____________。
A. a[10]
B.a[3.5]
C. a(5)
D.a[10-10]
17.假定一个函数的头部为“char *func(int n)”,则该函数返回值的类型是____________。
A. int
B. int *
C. char
D. char *
18.在C语言中,函数调用语句function((a, b, c), (d, e));中function函数的参数的个数是____________。
A. 4
B.5
C. 2
D.1
19.已有声明“char c='\72';”,则变量c包含____________个字符。
A. 1
B. 2
C. 3
D. 4
20.在C语言中,以下面____________打开方式作为fopen函数的参数,可以以只读的方式打开文本文件。
A. “rb”
B.“rt”
C. “wb”
D.“wt”
21.在C的表达式中,可以将某一类型的变量a强制转换成具有类型b的值,可写为________。
A. (b)a
B.a(b)
C. b(a)
D.(a)b
22.设有数组定义:char array[ ]=”China”;,则数组array所占的空间为________。
A. 4个字节
B.5个字节
C. 6个字节
D.7个字节
23.在说明 int *ptr[3] 中,标识符ptr 。
A. 说明不合法
B. 是一个指针数组名,每个元素是一个指向整型变量的指针
C. 是一个指针,它指向一个具有三个元素的一维数组
D. 是一个指向整型变量的指针
参考答案:
1.B
2.C
3.D
4.C
5.C
6.B
7.B
8.D
9.B
10.C
11.D
12.B
13.C
14.B
15.B
16.D
17.D
18.C
19.A
20.B
21. A
22. C
23. B
二、填空题
1. 数学式子a=b=c写成C语言的表达式为 (1) 。
2. 已知n为整型变量;当n赋值为 (2) 之后,执行do{putchar('a');}while(n--);语句,输出5个字符’a’。
3. 在C语言程序中, (3) 语句一般用于跳过本次循环执行下一次循环。
4. 在C语言程序中,通常使用 (4) 函数分配内存。
5. 在C语言文件处理函数中,文件可分为文本文件和 (5) 文件。
6. 常用预编译处理命令有宏定义、文件包含、 (6) 。
7. 以下程序的运行结果是 (7) 。
#include
int main()
{
int a,b,t;
a=20;
b=10;
if(a>b)
{
t=a;a=b;b=t;
}
printf("%d,%d\n", a,b );
return 0;
}
8. 若有 int i=6, j=10;则执行完下面的语句后j的值为 (8) 。
#include
intmain( )
{
char ch1='c',ch2='b',ch3='a';
if(ch1>ch2)
{
if(ch2>ch3)
ch3++;
else
--ch3;
}
printf("ch3=%c\n",ch3);
return 0;
}
9. 以下程序的运行结果是 (8) 。
#include
intmain( )
{
int x=10,a=20,b=30;
switch(x%3)
{
case 1:
a--;
break;
case 2:
b++;
break;
case 3:
a++;
b++;
}
printf("a=%d,b=%d\n",a,b);
return 0;
}
10. 以下程序的运行结果是 (10) 。
#include
int main()
{
int i = 0;
while (i++ < 10);
printf("i=%d\n",i);
return 0;
}
11. 以下程序的运行结果是 (11) 。
#include
int main()
{
int n ,d;
n = 12345;
while ( n != 0 )
{
d = n%10 ;
n = n / 10 ;
printf("%d" , n );
}
return 0;
}
12. 以下程序的运行结果是 (12) 。
#include
int main()
{
int a,b;
for(a=1,b=1;a<=10;a++)
{
if(b>20)
continue;
if(b%4==1)
{
b=b+4;
break;
} b=b-5;
}
printf("a=%d\n",a);
return 0;
}
13. 以下程序的运行结果是 (13) 。
#include
int fun1(int x);
void fun2(int x);
int main()
{
int x=5;
x=fun1(x);
printf("%d\n",x);
return 0;
}
int fun1(int x)
{
x--;
fun2(x);
return x;
}
void fun2(int x)
{
x--;
}
14. 以下程序的运行后输出第一行为 (14) 、输出第二行为 (15) 。
#include
void fun(int x);
int main()
{
fun(6);
return 0;
}
void fun(int x)
{
if(x/2>1)
fun(x/2);
printf("%5d\n",x);
}
参考答案:
1
a==b&&b==c
2
4
3
conti
4
malloc
5
二进制
6
条件编译
7
10,20
8
ch3=b
9
a=19,b=30
10
i=11
11
12341231210
12
a=1
13
4
14
3
15
6
三、编程题
(1)编写一个程序,从键盘输入长方体的长宽高,输出长方体的表面积。
测试数据:
输入:1 1 1
输出:6
(2)编写一个程序,从键盘输入二个整数M、N,判断M是否能被N整除。
测试数据:
输入:2,5
输出:2不能被5整除
(3)编写一个程序,从键盘输入一个大于0的整数N,输出1+1/2+1/3+...+1/N的和。
测试数据:
输入:2
输出:1.5
(4)编写一个程序,从键盘输入一个整数N,它的各位重新组合,求能得到的最大数。
测试数据:
输入: 2351
输出: 5321
(5)输入手机通话记录个数和手机通话记录,统计与每个人的通话次数。手机通话记录如下:
struct SRec
{
int id; /*序号*/
charname[20]; /*姓名*/
int time; /*通话时间*/
};
测试数据:
输入:
5
1 张三 18913122055 45
2 李四 13913122055 5
3 张三 18913122055 56
4 王五 13913122055 78
5 李四 15913122055 200
输出:
张三 2次
李四 2次
王五 1次
参考答案:
(1)
#include
int main()
{
intx,y,z,s;
scanf("%d%d%d",&x,&y,&z);
s=(x*y+y*z+x*y)*2;
printf("%d\n",s);
}
(2)
#include
int main()
{
intm,n;
scanf("%d%d",&m,&n);
if(m%n)
printf("%d被%d不能整除\n",m,n);
else
printf("%d被%d能整除\n",m,n);
}
(3)
#include
int main()
{
inti,n;
floats=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
s+=1.0/i;
printf("%f\n",s);
}
(4)
#include
void sort(int a[],int n)
{
inti,j,t;
for(i=0;i
for(j=0;j
if(a[j]
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
int main()
{
inti,n;
inta[10],n2=0;
scanf("%d",&n);
while(n>0)
{
a[n2]=n%10;
n2++;
n=n/10;
}
sort(a,n2);
for(i=0;i
printf("%d",a[i]);
}
(5)
#include
#include
#include
struct SRec
{
int id; /*序号*/
char name[20]; /*姓名*/
int time; /*通话时间,秒*/
};
struct SRec2
{
charname[20];
intcount;
};
int AddRec2(struct SRec *r1,struct SRec2*r2,int n)
{
inti;
for(i=0;i
if(strcmp(r2[i].name,r1->name)==0)
{
r2[i].count++;
return n;
}
strcpy(r2[i].name,r1->name);
r2[i].count=1;
return++n;
}
int main()
{
inti,n,n2=0;
structSRec *a;
structSRec2 *b;
scanf("%d",&n);
a=malloc(n*sizeof(structSRec));
b=malloc(n*sizeof(structSRec2));
for(i=0;i
{
scanf("%d%s%d%d",&a[i].id,a[i].name,&a[i].num,&a[i].time);
n2=AddRec2(&a[i],b,n2);
}
for(i=0;i
printf("%s\t%d次\n",b[i].name, b[i].count);
free(a);
free(b);
}