中国戏曲学院历年C语言程序设计期末试题

本试卷为中国戏曲学院历年C语言程序设计期末试题,题目包括:单项选择题。

覆盖的内容包括:理论题,基础知识,控制结构,循环结构,指针,数组/指针数组,字符串/字符串指针,函数/函数指针,程序题,结构体,文件。

本卷包括如下题型:

一、单项选择题

C语言程序设计期末试题

一、单项选择题 (共50题,每题2分,共计100分)

(  A  )
1、有以下函数
int aaa (char *s)
{
char *t = s;
while (*t++);
t-=1;
return (t - s);
}
以下关于aaa函数的功能叙述正确的是________。
A、求字符串s的长度
B、比较两个串的大小
C、将串s复制到串t
D、求字符串S所占字节数
(  B  )
2、以下选项中,合法的一组c语言数值常量是________。
A、028
.5e-3
-0xf
B、12.
OXa23
4.5eO
C、.l77
4cl.5
Oabc
D、0x8A
10,000
3.e5
(  C  )
3、当c的值不为0时,在下列选项中不能正确将c的值赋给变量a、b的是________。
A、c=b=a;
B、(a=c)||(b=c);
C、(a=c)&&(b=c);
D、a=c=b;
(  A  )
4、下面程序的功能是从键盘输入一组字符,从中统计大写字母和小写字母的个数,选择( ) 填空。
main ( )
{
int m=0,n=0;
char c;
while ( ( ) != ’\n’)
{
if (c>=’a’ && c<=’z’) m++;
if (c>=’a’ && c<=’z’) n++;
}
}
A、c=getchar( )
B、getchar( )
C、c==getchar( )
D、scanf(“%c”,&c)
(  D  )
5、以下程序的输出结果是:
main()
{
int a=12, b=12;
printf("%d,%d\n",--a,++b);
}
A、10,10
B、12,12
C、11,10
D、11,13
(  A  )
6、若有下面的说明和定义:
struct test
{
int ml;
char m2;
float m3;
union uu
{
char ul[5];
int u2[2];
}
ua;
}
myaa;
则sizeof(struct test )的值是________。
A、12
B、16
C、14
D、9
(  B  )
7、有以下程序
#include <stdio.h>
void fun( int *a,int *b)
{
int *c;
c=a;
a=b;
b=c;
}
main()
{
int x=3, y=5, *p=&x, *q=&y ;
fun(p,q);
printf("%d,%d,",*p,*q);
fun(&x,&y);
printf("%d,%d\n",*p,*q);
}
程序运行后输出的结果是________。
A、3,5,5,3
B、3,5,3,5
C、5,3,3,5
D、5,3,5,3
(  D  )
8、以下不正确的 c 语言标识符是______。
A、ABC
B、abc
C、a_bc
D、ab.c
(  B  )
9、下面程序输出数组中的最大值,由 s 指针指向该元素 .
void main ()
{
int a[10]={6 , 7 , 2 , 9 , 1 , 10 , 5 , 8 , 4 , 3 , } , *p , *s ;
for ( p=a , s=a ; p-a<10 ; p++ )
if (________) s=p ;
printf ( "the max : %d" , *s ):
}
则在 if 语句中的判断表达式应该是______。
A、p>s
B、*p>*s
C、a[p]>a[s]
D、p-a>p-s
(  C  )
10、下面各语句行中,能正确进行字符串赋值操作的语句是______。
A、char ST[5]={"ABCDE"} ;
B、char S[5]={'A' , 'B' , 'C' , 'D' , 'E'} ;
C、char *S ; S="ABCDE" ;
D、char *S ; scanf ( "%S" , S );
(  A  )
11、下面程序的输出结果是 _____________.
#include<stdio.h>
void main( )
{
int i;
for(i=1;i<6;i++)
{
if (i%2!=0)
{
printf("#");
continue;
}
printf("*");
}
printf("\n");
}
A、#*#*#
B、#####
C、*****
D、*#*#*
(  C  )
12、在定义 int a[5][6]; 后,数组 a 中的第 10 个元素是__________ (设 a[0][0] 为第一个元素)
A、a[2][5]
B、a[2][4]
C、a[1][3]
D、a[1][5]
(  C  )
13、若有以下说明: int a[10]={1,2,3,4,5,6,7,8,9,10 },*p=a; 则值为6的表达式是_______。
A、*p+6
B、*(p+6)
C、*p+=5
D、p+5
(  B  )
14、c语言的跳转语句中,对于break和continue说法正确的是________。
A、break语句只应用于循环体中
B、continue语句只应用于循环体中
C、break 是无条件跳转语句,continue不是________。
D、break和continue的跳转范围不够明确,容易产生问题
(  C  )
15、已知函数的调用形式:fread(buf,size,count,fp),参数buf的含义是________。
A、一个整型变量,代表要读入的数据项总数
B、一个文件指针,指向要读的文件
C、一个指针,指向要读入数据的存放地址
D、一个存储区,存放要读的数据项
(  C  )
16、若有以下定义:int t[3][2]; 能正确表示t数组元素地址的表达式是______。
A、&t[3][2]
B、t[3]
C、t[1]
D、*t[2]
(  D  )
17、以下选项中,当x为大于1的奇数时,值为0的表达式是________。
A、x%2==1
B、x/2
C、x%2!=0
D、x%2==0
(  B  )
18、定义如下一维数组:int a[5],*p; 则下列描述错误的是________。
A、表达式p=p+l是合法的
B、表达式a=a+l是合法的
C、表达式p-a是合法的
D、表达式a+2是合法的
(  B  )
19、若有定义:int a[4][10]; 则以下选项中对数组元素a[i][j]引用错误的是______。 (0<=i<4,0<=j<10)
A、*(&a[0][0]+10*i+j)
B、*(a+i)+j
C、*(*(a+i)+j)
D、*(a[i]+
(  B  )
20、下列正确的实型常量是________。
A、E3.4
B、-12345
C、2.2e8
D、4
(  A  )
21、在c程序中,判断逻辑值时,分别用( )表示逻辑值"真"、"假"。
A、非0 0
B、0 1
C、非0非0
D、1 1
(  A  )
22、若变量均已正确定义并赋值,以下合法的c语言赋值语句是________。
A、x=y==5;
B、x=n%2.5;
C、x+n=i;
D、x=5=4+1;
(  B  )
23、下列形式的常数中,不符合c语言语法规范的是______。
A、.45
B、±123
C、25.6e-2
D、4e3
(  A  )
24、以下结构体类型说明和变量定义中正确的是________。
A、typedef struct
int n;char c;REC;
REC t1,t2;
B、struet REC;
int n;char c;;
REC t1,t2;
C、typedef struct REC;
int n=0;char c='A';t1,t2;
REC t1,t2;
D、struct
int n;char c;REC;
(  C  )
25、下列关于实型变量书写正确的是________。
A、E3
B、2e0.3
C、1.2e3
D、1.2E0.3
(  C  )
26、以下叙述中不正确的是________。
A、在C中,函数中的自动变量可以赋初值,每调用一次,赋一次初值
B、在C中,在调用函数时,实参和对应形参在类型上只需赋值兼容
C、在C中,外部变量的隐含类别是自动存储类别
D、在C中,函数形参可以说明为register变量
(  A  )
27、有以下程序:
#include <stdio.h>
main()
{
int a=1,b=2;
for(;a<12;a++)
{
b+=a*2;
a+=3;
}
printf("%d,%d\n",b,a);
}
程序运行后的输出结果是________。
A、32,13
B、46,10
C、72,13
D、72,10
(  D  )
28、char型常量在内存中存放的是________。
A、二进制代码值
B、十进制代码值
C、十六进制代码值
D、ASCⅡ代码值
(  C  )
29、以下能将字符串,you are luck!正确读入的语句组是________。
A、char s[80]; scanf("%s",s);
B、char *s: scanf("%s",s);
C、char s[80]; gets(s);
D、char *s; gets(3);
(  D  )
30、在c语言中,关于变量的作用域,下列描述中错误的是________。
A、局部变量只在整个函数的运行周期中有效
B、全局变量的作用域为整个程序的运行周期
C、当全局变量与局部变量重名时,局部变量会屏蔽掉全局变量
D、全局变量会覆盖掉所有与它重名的局部变量
(  B  )
31、设有如下定义:
struct sk
{
int a;
float b;
}
data,*p;
若有p=&data;
则对data中成员a的引用正确的是________。
A、(*p).data.a
B、(*p).a
C、p->data.a
D、p.data.a
(  D  )
32、下面程序的输出是______。
main( )
{
int x=3 ,y=6,a=0;
while(x++!=(y-=1) )
{
a+=1;
if (y<x) break;
}
printf("x=%d,y=%d,a=%d\n",x,y,a);
}
A、x=4,y=4,a=1
B、x=5,y=5,a=1
C、x=5,y=4,a=3
D、x=5,y=4,a=1
(  D  )
33、函数调用结束后,形式参数( )
A、继续占用相同大小的内存
B、不确定
C、占用内存减小
D、释放内存
(  C  )
34、算法的每一步都是可执行的,都是可以实现的,指的是算法的( )特点
A、确定性
B、有穷性
C、可行性
D、输出
(  D  )
35、下列语句哪些不属于循环语句?
A、for
B、while
C、do while
D、if
(  C  )
36、在c语言中,( )
A、函数的定义可以嵌套,但函数的调用不可以嵌套
B、函数的定义和调用均不可以嵌套
C、函数的定义不可以嵌套,但函数的调用可以嵌套
D、函数的定义和调用均可以嵌套
(  D  )
37、有以下程序:则输出结果是________。
main()
{
int i,s=1;
for(i=1;i<50;i++)if(!(i%5)&&!(!i%3)) s+=i;
printf("%d\n",s);
}
A、409
B、277
C、1
D、91
(  D  )
38、语句 fread(buffer,size, count,fp); 其中 buffer 代表的是________。
A、一个整型变量,代表要读入的数据项总数
B、一个指向所读文件的文件指针
C、存放读入数据项的存储区长度
D、存放读入数据的地址
(  C  )
39、以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。#define N 10
void arrin(int x[N])
{
int i=0;
while(i<N)scanf("%d",______);
}
在下划线处应填入的是______。
A、x+i
B、&x[i+1]
C、&x[i++]
D、&x[++i]
(  A  )
40、若使用一维数组名作函数实参,则以下正确的说法是________。
A、必须在主调函数中说明此数组的大小
B、实参数组类型与形参数组类型可以不匹配
C、在被调用函数中,不需要考虑形参数组的大小
D、实参数组名与形参数组名必须一致
(  C  )
41、整型变量x=1,y=3,经下列计算后,x的值不等于6的是________。
A、x=(x=1+2,x*2)
B、x=y>2?6:5
C、x=9-(--y)-(y--)
D、x=y*4/2
(  D  )
42、在宏定义#define PI 3.14159中,用宏名代替一个________。
A、常量
B、单精度数
C、双精度数
D、字符串
(  B  )
43、以下不合法的用户自定义标识符是________。
A、max
B、3_min
C、a1
D、_110
(  B  )
44、假设所有变量均为整型,则表达式(a=2,b=5,a+b++,a+b) 的值是________。
A、7
B、8
C、5
D、2
(  D  )
45、下列定义数组的语句中不正确的是________。
A、static int a[2][3]={1,2,3,4,5,6};
B、static int a[2][3]={{1},{4,5}};
C、static int a[][3]={{1},{4}};
D、static int a[][]={{1,2,3},{4,5,6}};
(  C  )
46、判断两个字符串是否相等,正确的表达方式是
A、s1==s2
B、s1=s2
C、strcmp(s1,s2)==0
D、strcmp(s1,s2)=0
(  C  )
47、a,b 为整型变量,二者均不为 0,以下关系表达式中恒成立的是()。
A、a*b/a*b==1
B、a/b*b/a==1
C、a/b*b+a%b==a
D、a/b*b==a
(  D  )
48、对于 void 类型函数,调用时不可作为()。
A、自定义函数体中的语句
B、循环体里的语句
C、if 语句的成分语句
D、表达式
(  B  )
49、以下叙述中正确的是()。
A、C语言的源程序不必通过编译就可以直接运行
B、C语言中的每条可执行语句最终都将被转换成二进制的机器指令
C、C 源程序经编译形成的二进制代码可以直接运行
D、C语言中的函数不可以单独进行编译
(  B  )
50、下列各 m 的值中,能使 m%3==2&&m%5==3&&m%7==2 为真的是()。
A、8
B、23
C、17
D、6