长春工业大学C语言冲刺卷

本试卷为长春工业大学C语言冲刺卷,题目包括:理论基础,控制结构,循环结构,数组/指针数组,字符串/字符串指针,函数/函数指针,指针,结构体,程序题。

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

C语言冲刺卷

一、理论基础 (共20题,每题1分,共计10分)

(  B  )
1、设有条件表达式:(exp)? i++ ; j—,则以下表达式中与(exp)完全等价的是________。
A、(EXP=0)
B、(EXP!=0)
C、(EXP=1)
D、(EXP!=1)
(  A  )
2、若有定义语句: int a[4][10],*p,*q[4]; 且0<=i<4,则错误的赋值是________。
A、p=a
B、q[i]=a[i]
C、p=a[i]
D、p=&a[2][1]
(  B  )
3、以下定义语句中,错误的是 __________.
A、int a[]={1,2};
B、char a={"test"};
C、char s[10]={"test"};
D、int a[]={'a','b','c'};
(  A  )
4、已知year为整型变量,不能使表达式(year%4==0&&year%100!=o)||year%400==0的值为"真"的数据是______。
A、1990
B、1992
C、1996
D、2000
(  C  )
5、以下定义语句中正确的是________。
A、char a='A'b='B';
B、float a=b=l0.0;
C、int a=l0,*b=&a;
D、float *a,b=&a;
(  A  )
6、以下变量x、y、z均为double类型且已正确赋值,不能正确表示数学式子x/(y*z)的c语言表达式是 ______ 。
A、x/y*z
B、x*(1/(y*z))
C、x/y*1/z
D、x/y/z
(  A  )
7、假设int类型的变量x、y和z,它们的初始值分别为10、20和30,则布尔表达式x<10‖y>10&&z<10的值为______。
A、false
B、1
C、true
D、无法判断
(  B  )
8、微处理器按其字长可以分为________。
A、4位、8位、16位
B、8位、16位、32位、64位
C、4位、8位、16位、24位
D、8位、16位、24位
(  C  )
9、下列选项中,合法的变量名是______。
A、print
B、print#1
C、print1
D、9print1
(  D  )
10、已知int a=6; 则执行a+=a-=a*a;
语句后,a的值为________。
A、36
B、0
C、-24
D、-60
(  C  )
11、若已定义x和y是整型变量,x=2; 则表达式y=2.75+x/2的值是________.
A、5.5
B、5
C、3
D、4
(  A  )
12、若有定义int a = 1,b = 2, c = 3, d = 4,则表达式a<b?a:c<d?a:d的结果为________。
A、4
B、3
C、2
D、1
(  D  )
13、在16位编译器环境下,double类型占多少字节?
A、2
B、4
C、1
D、8
(  B  )
14、设ch是char型变量,其值为a,且有下面的表达式ch=(ch>='a'&&ch<='z')?(ch+32):ch 。上面表达式的值是______。
A、A
B、a
C、Z
D、z
(  B  )
15、下列运算符中,优先级最低的是________。
A、*
B、=
C、==
D、%
(  C  )
16、下面不是c 语言整形常数的是________。
A、02
B、0
C、038
D、0Xal
(  C  )
17、表达式:10!=9的值是________。
A、ture
B、非零值
C、1
D、0
(  D  )
18、已知int i;
float f;
正确的语句是________。
A、(int f)%i
B、int(f)%i
C、int(f%i)
D、(int)f%i
(  A  )
19、若定义语句: int b[ ]= { 1,2,3,4,5},*p=b ;
则表达式*p++ 的值是________。
A、1
B、2
C、b[0] 的地址
D、b[1] 的地址
(  C  )
20、下列选项中,不正确的赋值语句是_______
A、++t;
B、n1=(n2=(n3=0));
C、k=1=j;
D、a=b+c=1;

二、控制结构 (共10题,每题1分,共计10分)

(  B  )
1、与"y=(x>0?1:x<0?-1:0)";的功能相同的if语句是________。
A、if(x>0)y=1;
B、if(x)
else if(x>0)y=1;
else y=0; else if(x%0)y=-1;
else y=0;
C、y=-1
D、y=0;
if(x) if(x>=0)
if(x>O)y=1; if(xi>=O)y=1;
else if(x==0)y=0; else y=-1;
else y=-1;
(  A  )
2、下列程序的输出结果是________。
main()
{
int a=0,i;
for(i=1;i<5;i++)
{
switch(i)
{
case 0: case 3:a+=1;
case 1;
case 2:a+=2;
default:a+=3;
}
}
printf("%d",a);
}
A、19
B、1
C、6
D、8
(  B  )
3、c语言对嵌套if语句的规定是:else总是与( ) 。
A、其之前最近的if配对
B、其之前最近的且尚未配对的if配对
C、缩进位置相同的if配对
D、第一个if配对
(  C  )
4、若a的值为3时,下列程序段被执行后,c的值是________。
int c = 1;
if (a>0) if (a>3) c = 2;
else c = 3;
else c = 4;
A、1
B、2
C、3
D、4
(  D  )
5、若a和b均是整型变量并已正确赋值,正确的switch语句是________。
A、switch(a+b);……
B、switch(a+b*3.0)……
C、switch a……
D、switch(a%b)……
(  C  )
6、下述语句中,_____中的if语句语法是错误的。 ( )
A、if(x>y);
B、if(x==y)x+=y;
C、if(x!=y)seanf("%d",&x)else scanf("%d",&y);
D、if(x<y)x++;y++;
(  C  )
7、下列程序的输出结果是______。
#include<stdio.h>
main()
{
int a=0,b=1,c=2;
if(++a>0 || ++b>0) ++c;
printf("%d,%d,%d",a,b,c);
}
A、0,1,2
B、1,2,3
C、1,1,3
D、1,2,2
(  C  )
8、c语言中下面哪个不是条件语句?
A、if
B、if else
C、NSLog
D、switch
(  D  )
9、在c语言中,if语句后的一对原括号中,用以决定分支的流程的表 达式________。
A、只能用逻辑表达式
B、只能用关系表达式
C、只能用逻辑表达式或关系表达式
D、可用任意表达式
(  B  )
10、假定所有变量均已正确定义,下列程序段运行后x的值是________。
k1=1;
k2=2;
k3=3;
x=15;
if(!k1) x--;
else if(k2) x=4;
else x=3;
A、14
B、4
C、15
D、3

三、循环结构 (共10题,每题1分,共计10分)

(  B  )
1、在"先判断后工作"的循环程序结构中,循环体执行的次数最少是________次。
A、1
B、0
C、2
D、不定
(  D  )
2、可以作为自定义标识符的是________。
A、2x
B、break
C、m-n
D、m_n
(  A  )
3、下列各循环语句中,不是死循环的是________。
A、int i=100;
while(i) {
i=i%100+1;
if(i==20)
break;
}
B、int i,sum=0;
for(i=1;;i++)
sum=sum+1;
C、int k=0;
do
++k;
while(k>=0);
D、int s=3379;
while(s++%2+3%2)
s++;
(  A  )
4、以下for语句中不是死循环的是________。
A、for(int i=0;i<1;i++);
B、for(int i=0;i++);
C、for(int i=1;i>0;++i);
D、for( ;;);
(  D  )
5、有以下程序:
#include<stdio.h>
main()
{
int i=0,a=0;
while(i<20)
{
for(;;)
{
if((i%5)==0)break;
else i--;
}
i+=13,a+=i;
}
printf("%d\n",a);
}
程序的输出结果是________。
A、62
B、63
C、23
D、36
(  A  )
6、以下叙述中正确的是________。
A、只要适当地修改代码,就可以将 do-while 与 while 相互转换
B、对于 for(表达式 1;表达式 2;表达式 3)循环体首先要计算表达式 2 的值,以便决定是否开始循环
C、对于 for(表达式 1;表达式 2;表达式 3)循环体,只在个别情况下才能转换成 while 语句
D、如果根据算法需要使用无限循环(即通常所称的"死循环"),则只能使用 while 语句
(  B  )
7、下面程序输出的结果为________。
#include <stdio.h>
int main()
{
int  s=3;
switch(s)
{
case  5: printf("我");
break;
    case  4: printf("是");
    case  3: printf("好");
    case  2: printf("学");
break;
    default: printf("生");
}
}
A、好
B、好学
C、好学生
D、我是好学生
(  A  )
8、设n 为整型变量,则循环语句for(n=10;n > 0;n--) 的循环次数为________。
A、10
B、9
C、11
D、12
(  B  )
9、设 j 和 k 都是 int 类型,则 for 循环语句
for(j=0,k=-1;k=1;j++,k++) printf("****\n");()。
A、循环结束的条件不合法
B、是无限循环
C、循环体一次也不执行
D、循环体只执行一次
(  C  )
10、以下程序段中,能够正确地执行循环的是()。
A、for(i=1;i>10;i++)
B、static int a;while(a)
C、int s=6; do s-=2; while(s);
D、int s=6;m:if(s<100)exit(0);else s-=2;goto m:

四、数组/指针数组 (共10题,每题1分,共计10分)

(  D  )
1、以下对一维数组a的正确说明是________。
A、char a(10);
B、int a[];
C、int k=5,a[k];
D、char a[3]={‘a’,’b’,’c’};
(  C  )
2、以下关于数组的描述正确的是______。
A、数组的大小是固定的,但可以有不同的类型的数组元素。
B、数组的大小是可变的,但所有数组元素的类型必须相同。
C、数组的大小是固定的,但所有数组元素的类型必须相同。
D、数组的大小是可变的,但可以有不同的类型的数组元素。
(  B  )
3、设 p1 和 p2 是指向同一个 int 型一维数组的指针变量, k 为 int 型变量,则不能正 确执行的语句是______。
A、k=*P1+*P2;
B、p2=k;
C、P1=P2;
D、k=*P1 * ( *P2 ) ;
(  B  )
4、设矩阵a是一个n×n对称矩阵.即a[i,j]=a[i,j],为了节省存储空间,将其下三角部分按行序为主序存放在一维数b[1...n(n+1)/2]中,对任一下三角元素aij(i≥j),在一维数组b的下标位置k的值是______。
A、(i+(i-1))/2+j-1
B、i(i-1)/2+j
C、i(i+1)/2+j-1
D、i(i+1)/2+j
(  A  )
5、已知有数组定义 char a[3][4]; 下列表达式中错误的是________。
A、a[2]="WIN"
B、strcpy(a[2],"WIN")
C、a[2][3]='W'
D、a[0][1]=a[0][1]
(  D  )
6、以下程序调用findmax函数求数组中值最大的元素在数组中的下标,请选择填空:
#include<stdio.h> findmax(int*s,int t,int*k)
{
int p;
for(p=0,*k=p;p<t;p++) if(s[p]>s[*k])________;
}
main()
{
int a[10],i,k;
for(i=0;i<10;i++)scanf("%d",&a[i]);
findmax(a,10,&k);
printf("%d,%d\n",k,a[k]);
}
A、k=p
B、*k=p-s
C、k=p-s
D、*k=p
(  C  )
7、若有定义语句:int m[ ]= {5,4,3,2,1},i=4; 则下面对m数组元素的引用中错误的是______。
A、m[--i]
B、m[2*2]
C、m[m[0]]
D、m[m[i]]
(  C  )
8、char a[10]; 不能将字符串"abc"存储在数组中的是________。
A、strcpy(a,"abc");
B、a[0]=0;strcat(a,"abc");
C、a="abc";
D、int i;for(i=0;i<3;i++)a[i]=i+97;a[i]=0;
(  A  )
9、若有 int a[10], *p=a;
,且 a 数组已赋值,则与 a[4]不等价的表达式为________。
A、p+4
B、*(p+4)
C、*(a+4)
D、p[4]
(  A  )
10、定义如下变量和数组: int k,a[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是________。for(k=0;k<3;k++) printf("%d ",a[k][2-k]);
A、3 5 7
B、3 6 9
C、1 5 9
D、1 4 7

五、字符串/字符串指针 (共10题,每题1分,共计10分)

(  D  )
1、下列字符串中不能作为c标识符使用的是________。
A、WHILE
B、user
C、_lvar
D、9stars
(  C  )
2、下面程序段的运行结果是 char *s="abcde"; s+=2; printf("%d",s);
A、cde
B、字符'c'
C、字符'c'的地址
D、无确定的输出结果
(  B  )
3、以下程序段的执行结果为
#define PLUS(X,Y)X+Y
main()
{
int x=1,y=2,z=3,sum;
sum=PLUS(x+y,z)*PLUS(y,z);
printf("SUM=%d",sum);
}
A、SUM=9
B、SUM=12
C、SUM=18
D、SUM=28
(  C  )
4、以下能将字符串,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);
(  A  )
5、设有定义:char*c; 以下选项中能够使字符型指针c正确指向一个字符串的是________。
A、charstr[]="string";c=str;
B、scanf("%s",c);
C、c=getchar();
D、char str[]="string";strcpy("C,str")
(  D  )
6、下列字符串中可以用作c标识符的是________。
A、2009var
B、goto
C、test-2009
D、-123
(  C  )
7、顺序执行下列程序语句后,则b的值是 string a="hello"; string b=a.substring(0,2);
A、Hello
B、hello
C、He
D、null
(  D  )
8、宏定义是最常用的预处理功能之一,它用于将一个标识符定义为一个______
A、单精度数
B、双精度数
C、常量
D、字符串
(  D  )
9、判断字符串a 和b 是否相等,应当使用。
A、if(a==b)
B、if(a=b)
C、if(strcmp(a,b))
D、if(strcmp(a,b)==0)
(  B  )
10、设 p1 和 p2 是指向同一个字符串的指针变量,c 为字符变量,则以下不能正确执行的赋值语句是()。
A、c=*p1+*p2;
B、p2=c;
C、p1=p2;
D、c=*p1*(*p2);

六、函数/函数指针 (共10题,每题1分,共计10分)

(  C  )
1、设有说明double(*p1)[n]; 其中标识符p1是________。
A、N个指向double型变量的指针。
B、指向N个double型变量的函数指针。
C、一个指向由N个double型元素组成的一维数组的指针。
D、具有N个指针元素的一维指针数组,每个元素都只能指向double型量。
(  B  )
2、c语言规定,简单变量做实参时,它和对应形参之间的数据传递方式为________.
A、地址传递
B、单向值传递
C、由实参传给形参,再由形参传回给实参
D、由用户指定传递方式
(  D  )
3、在说明语句:int *f( ); 中,标识符f代表的是________。
A、一个用于指向整型数据的指针变量
B、一个用于指向一维数组的行指针
C、一个用于指向函数的指针变量
D、一个返回值为指针型的函数名
(  C  )
4、程序流程图中指有箭头的线段表示的是________。
A、图元关系
B、数据流
C、控制流
D、调用关系
(  C  )
5、若有函数 max ( a , b ),并且已使函数指针变量 p 指向函数 max ,当调用该函数时, 正确的调用方法是______。
A、( *p ) max(a ,b) ;
B、*pmax(a , b) ;
C、( *p ) (a , b) ;
D、*p ( a , b );
(  C  )
6、当用户要求输入的字符串中含有空格时,应使用的输入函数是________。
A、getchar()
B、scanf()
C、gets()
D、getc()
(  B  )
7、在函数说明时,下列不必要的是________项。
A、函数参数的类型
B、函数参数名字
C、函数的名字
D、返回值表达式
(  A  )
8、对于函数声明 void fun(int a[1],int*b); 以下叙述中正确的是________。
A、函数参数A,b 都是指针变量
B、有语法错误,数组 a 的大小不能为 1
C、调用该函数后,实参变量所指向的内存单元的值肯定不会受影响
D、调用该函数时,a 的值是从对应实参复制过来的,b 的值是对应实参变量的地址
(  B  )
9、c语言源程序的基本单位是________。
A、过程
B、函数
C、子程序
D、标识符
(  D  )
10、fwrite函数的一般调用形式是________。
A、fwrite(buffer,count,size,fp);
B、fwrite(fp,size,count,buffer);
C、fwrite(fp,count,size,buffer);
D、fwrite(buffer,size,count,fp);

七、指针 (共10题,每题1分,共计10分)

(  B  )
1、若有说明: int i,j=7, *p=&i; 则与i=j; 等价的语句是________。
A、i= *p;
B、*p=*&j;
C、i=&j;
D、i=* *p;
(  A  )
2、定义如下变量和数组: int i; int x[3][3]={ 1,2,3,4,5,6,7,8,9 } 则下面语句的输出结果是________。 for(i=0;i<3;i++) printf("%d",x[i][2-1]);
A、2 5 8
B、1 4 7
C、3 5 7
D、3 6 9
(  C  )
3、在下列各项中,运算级别最低的为________。
A、算术运算符
B、关系运算符
C、逻辑运算符
D、圆括号( )
(  B  )
4、所有在函数中定义的变量及函数的形式参数,都属于________。
A、全局变量
B、局部变量
C、静态变量
D、常量
(  A  )
5、二维数组a[8][9]按行优先顺序存储,若数组元素a[2][3]的存储地址为1087,a[4][7]的存储地址为1153,则数组元素a[6][7]的存储地址为 ( )
A、1207
B、1209
C、1211
D、1213
(  B  )
6、在c语言中,不允许有常量的数据类型是________。
A、整型
B、结构型
C、字符型
D、字符串
(  B  )
7、以下叙述中正确的是________。
A、一条语句只能定义一个数组
B、每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元
C、数组说明符的一对方括号中只能使用整型常量,而不能使用表达式
D、在引用数组元素时,下标表达式可以使用浮点数
(  C  )
8、若有下列定义,则对a数组元素的正确引用是________。 int a[5],*p=a;
A、*(p+5)
B、*p+2
C、*(a+2)
D、*&a[5]
(  D  )
9、下面说法中错误的是________。
A、共用体变量的地址和它各成员的地址都是同一地址
B、共用体内的成员可以是结构变量,反之亦然
C、在任一时刻,共用体变量的各成员只有一个有效
D、函数可以返回一个共用体变量
(  D  )
10、int a[10];
合法的数组元素的最小下标值为____
A、10
B、9
C、1
D、0

八、结构体 (共10题,每题1分,共计10分)

(  B  )
1、struct ex
{
int x ;
float y;
char z ;
}
example;
则下面的叙述中不正确的是________。
A、struct结构体类型的关键字
B、example是结构体类型名
C、x,y,z都是结构体成员名
D、struct ex是结构体类型
(  B  )
2、以下对枚举类型名的定义中正确的是______。
A、enum a={ one , two , three} ;
B、enum a {one=9 , two=-1 , three} ;
C、enum a={"one" , "two" , "three"} ;
D、enum a {"one" , "two" , "three"} ;
(  C  )
3、以下关于c语言数据类型的叙述中正确的是________。
A、C基本数据类型包括:分为整型、实型、浮点型、字符型四种
B、实型常量的表达方式包括十进制形式、十六进制形式、二进制形式、八进制形式、指数形式
C、若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型
D、若只处理“真”和“假”两种逻辑值,应使用逻辑类型
(  A  )
4、c语言中用于定义类的关键字是________。
A、class
B、struct
C、default
D、sizeof
(  B  )
5、下列程序的输出结果是________。
#include <stdio.h>
struct abc
{
int a, b, c, s;
} ;
main ()
{
struct abc s[2] = { {1, 2, 3}, {4, 5, 6} };
int t;
t = s[0].a + s[1].b;
printf ("%d\n", t);
}
A、5
B、6
C、7
D、8
(  A  )
6、有以下程序
struct stu
{
char num[10];
float score[3];
}
;
main( )
{
struct stu s[3]={{"20021",90,95,85},{"20022",95,80,75},{"20023",100,95,90}},*p;
int i;
float sum=0;
p=s+1;
for(i=0;i<3;i++)sum=sum+p->score[i];
printf("%.3f\n",sum);
}
程序运行后的输出结果是___________。
A、250.000
B、250
C、270.000
D、270
(  D  )
7、设有以下说明语句:
typedef struct stu
{
int a;
float b;
}
stutype;
则下面叙述中错误的是________。
A、struct是结构类型的关键字
B、struct stu是用户定义的结构类型
C、a和b都是结构成员名
D、stutype是用户定义的结构体变量名
(  A  )
8、以下关于逻辑运算符两侧运算对象的叙述中正确的是________。
A、可以是任意合法的表达式
B、只能是整数 0 或非 0 整数
C、可以是结构体类型的数据
D、只能是整数 0 或 1
(  A  )
9、以下关于 c 语言数据类型使用的叙述中错误的是________。
A、若只处理“真”和“假”两种逻辑值,应使用逻辑类型
B、若要保存带有多位小数的数据,可使用双精度类型
C、整数类型表示的自然数是准确无误差的
D、若要处理“人员信息”等含有不同类型的相关数据,应自定义结构体类型
(  A  )
10、在C语言中,下面那种数据类型不属于构造类型____
A、枚举类型
B、数组类型
C、结构体类型
D、共用体类型

九、程序题 (共10题,每题1分,共计10分)

(  C  )
1、下列程序的运行结果是________。 int y=5,x=14;
y=((x=3*y,x+1),x-1);
printf("x=%d,y=%d",x,y);
A、x=27,y=27
B、x=12,y=13
C、x=15,y=14
D、x=y=27
(  B  )
2、下列程序的输出结果是________。
main()
{
int p[8]={11,12,13,14,15,16,17,18},i=0,j =0;
while(i++<7) if(p[i]%2)j+=p[i];
printf("%d\n",j);
}
A、42
B、45
C、56
D、60
(  A  )
3、以下程序的输出结果是________。 int f(int a)
{
return a%2;
}
main()
{
int s[8]={1,3,5,2,4,6},i,d=0;
for(i=0;f(s[8]);i++)d+=s[i];
printf("%d\n",d);
}
A、9
B、11
C、19
D、21
(  D  )
4、阅读下面的程序
main()
{
int i,j;
scanf("%3d%2d",&i,&j);
printf("i=%d,j=%d\n",i,j);
}
如果从键盘上输入1234567<回车>,则程序的运行结果是________。
A、i=123,j=4567
B、i=1234,j=567
C、i=1,j=2
D、i=123,j=45
(  D  )
5、阅读下面的程序
#include<stdio.h>
main()
{
char c1,c2;
c1=getchar();
c2=c1+3;
printf("%c,%d\n",c2,c2);
}
已知'a'的ascii的值为65,如果从键盘上输入 d<回车> 则程序的运行结果是________。
A、D,68
B、'G',68
C、D,71
D、G,71
(  A  )
6、以下程序段的输出结果是 char s[]="\\141\141abc\t"; printf ("%d\n",strlen(s));
A、9
B、12
C、13
D、14
(  C  )
7、下面程序
void prtv(int *x)
{
++*x;
printf("%d\n",*x);
}
main()
{
int a=24;
prtv(&a);
}
的输出是______。
A、23
B、24
C、25
D、26
(  D  )
8、下述程序的输出结果是________。
main()
{
int b[]={2,4,6,8,10,12};
int*p=b,**q=&p;
printf(”%d,”,*(p++));
printf(”%d,”, **q);
}
A、4,4
B、2,2
C、4,5
D、2,4
(  D  )
9、请读程序:
main()
{
static int a[]={1,2,3,4,5,6} int *p;
int i;
p=a;
*(p+3)+=2;
printf(""n1=%d,n2=%d\n:"",*p,*(p+3));
}
其输出是________。
A、n1=1;n2=5
B、n1=2,n2=6
C、"n1=1n2=7"
D、n1=1,n2=6
(  C  )
10、执行以下程序后的输出结果是________。
int w=3,z=7,x=10;
printf("%d",x>10?x+100:x-10);
printf("%d",w++||z++);
printf("%d",!w>z);
printf("%d",w&&z);
A、0111
B、1111
C、0101
D、0100