一、单项选择题
1.能正确表示逻辑关系:“a≥=10或a≤0”的C语言表达式是( d )。
A. a〉=10 or a<=0
B. a〉=0|a<=10
C. a〉=10 &&a<=0
D. a>=10‖a<=0
2. 若有以下定义:
char a; int b;float c; double d; 则表达式a*b+d-c值的类型为( d )。
A.float B. int C. char D. double
3. 宏定义的宏展开是在( a )阶段完成的。
A. 预处理 B. 编译 C. 预处理前 D. 运行
4.C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是( B )。
A. void B. int C. float D. double
5.按照标识符的要求,( A )符号不能组成标识符。
A.连接符 B. 下划线
C. 大小写字母 D. 数字符号
6. 以下不能正确定义二维数组的选项是( D )
A. int a[2][2]={{1},{2}};
B. int a[][2]={1,2,3,4};
C. int a[2][2]={{1}, 2,3};
D. int a[2][]={{1,2},{3,4}};
7.请问这个结构体所占的空间大小是( C )字节。
typedef struct{
int a,
char b,
short c,
short d,
}AA_t;
A.16 B. 9 C. 12 D. 8
8. 循环语句while(!E)中的表达式!E等价于: ( )
A.E!=0 B. E!=1 C. E==0 D. E==1
9.不正确的赋值或赋初值的方式是 ( )。
A.char str[6]={‘\0’};
B. char str[7]= “string”;
C. char str[10];str=“string”;
D. char str[6]=“g”;
10.以下关于函数设计不正确的说法是( )。
A.函数设计应该追求高内聚低耦合
B. 要尽可能多的使用全局变量
C. 函数参数不易过多
D. 设计函数时,尽量做到谁申请的资源就由谁来释放
11. C语言中,注释是否支持嵌套( )
(A)支持 (B)不支持 (C)某些情况下支持
12. 下面的程序,输出结果正确的是( )
int main()
{
int a = 5;
if( a = 0 )
{
printf(“%d”, a - 10);
}
else
{
printf(“%d”, a++);
}
return 0;
}
(A)-5 (B)6 (C)1 (D)0
13. 关于野指针,下面说法错误的是( )。
(A) 野指针指可能指向非法的内存地址。
(B) 野指针有时也可能指向合法的内存地址。
(C) 野指针都是由指针未初始化导致的。
(D) 对野指针的访问,可能会导致程序异常。
14. 递归调用非常危险,可能导致很多问题,即使程序编写没有逻辑错误,也可能导致下面哪种现象的发生( )。
(A) 死循环
(B) 栈溢出
(C) 内存泄漏
15. include <a1.h> 和include “a2.h”,以下说法正确的是( )。
(A)“”表示先到源文件所在目录下搜索头文件
(B)<>表示先到源文件所在目录下搜索头文件
(C)两者用法没有区别
16. 定义变量double **a[3][4],此变量占有内存空间是( )字节?
(A)12 (B)24 (C)48 (D)96
17. 下列程序执行后,n的值等于( )。
char a[20];
char * p1 = (char *)a;
char * p2 = (char*)(a+5);
int n= p2-p1;
(A)4 (B)5 (C)10 (D)20
18. #define F(X,Y) ((X)+(Y))
void main()
{
int a=3,b=4;
printf("%d\n",F(a++, b++));
}
程序运行后的输出结果是( )。
(A)7 (B)8 (C)9 (D)10
19. 上面的第8题中,Main函数返回前,a和b分别为( )
(A)3,4 (B)4,4 (C)3,5 (D)4,5
20.char 占1个字节, int 占4个字节,double 占8个字节。
以下定义
typedef union{
int i;
double d;
char c;
}T;
sizeof(T) = ? ( )
(A) 8
(B) 13
(C) 16
(D) 24
21.执行x=5>1+2&&2||2*4<4-!0后,x的值为( )。
A.-l B. 0 C. 1 D. 5
22.下面是一个初始化指针的语句:int *px = &a;其中指针变量的名字应该是( )。
A.*pz B.a C.px D.&a
23.对于语句int *px[10],以下说法正确的是( ) 。
A. px是一个指针,指向一个数组,数组的元素是整数型。
B.px是一个数组,其数组的每一个元素是指向整数的指针。
C. A和B均错,但它是C语言的正确语句。
D. C语言不允许这样的语句。
24.在循环中使用break 语句的功能是( )。
A. 使程序的执行跳出break所在的那一重循环
B. 使程序执行结束
C. 跳出包含此break语句的所有循环
D. 终止本次循环,继续下次循环
25. 以下程序的运行情况是( ) 。
main()
{ int i=1,sum=0;
while(i<10)
sum=sum+1;
i ++;
printf("i=%d,sum=%d",i,sum);
}
A. i=10,sum=9 B. i=9,sum=9 C. i=2,sum=l D. 以上结果都不对
26. 如下程序:
inta[10];
int*pa;
pa= a;
则元素a[1]的地址可以表示为( )
A.pa+1 B.pa+2 C.pa+4 D.a+2
27. 如下程序,程序运行结果为( )
intChange(int *pX)
{ int y = 8;
y = y - *pX;
pX =&y;
return 0;
}
intmain()
{ int xx = 3;
int *pY;
pY =&xx;
Change(pY);
printf(“%d”, *pY);
return 0
}
A.8 B. 3 C. 5 D. 不确定
28. 执行下列程序后,其结果为( )
inta[]={2,4,6,8,10,12}; *p;
p=a;
*(p+4)=2;
printf(“%d,%d\n”,*p,*(p+4));
A、0,10 B、0,2 C、2,10 D、2,2
29. 下列程序执行后的输出结果是( ) 。
main()
{ char arr[2][4];
strcpy(arr,"you");
strcpy(arr[1],"me");
arr[0][3]='&';
printf("%s\n",arr); }
A. you&me B. you C. me D. err
30. 下面程序的运行结果是( )
#include <stdlib.h>
voidfun(int **a,int p[][3])
{
**a= p[1][1];
}
voidmain()
{
intx[2][3] = {2,4,6,8,10,12};
int* p = *x;
fun(&p,x);
printf("%d\n",*p);}
A. 10 B . 12 C . 6 D . &x[1][1]
31. -27在内存中的存储形式是以下哪一种______
负数的补码是反码加1
A 0001 1011 B 1110 0100 C 1110 0101 D 1010 0111
32. 表达式0x13&0x17,0x13|0x17的值分别是多少______
A 0x17 0x13 B 0x13 0x17 C 0xF8 0xE8 D 0xec 0xC8
33.以下对结构体类型变量st的定义中,不正确的是______
A struct { char c; int a;} st;
B struct { char c; int a } TT;
struct TT st;
C typedef struct { char c; int a}TT;
TT st;
D #define TT struct
TT { char c; int a; } st;
34.若有以下定义和语句,则选项中错误的语句是______
int a = 4, b = 3, *p, *q, *w;
p = &a; q = &b; w = q; q = NULL;
A *q=0; B w = p; C *p =a D *p= *w
35.已有定义 int k = 2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是_____
A k = *ptr1+*ptr2; B ptr2 = k; C ptr1 =ptr2; D k = *ptr1*(*ptr2);
36.以下程序的运行结果是______
int fun(int a,int b)
{ if(a>b)
return(a+b);
else return(a-b);
}
Void main()
{ int x=3, y=8, z=6, r;
r = fun (fun(x,y), 2*z);
printf(“%d\n”,r);
}
A - 48 B 58 C -58 D -17
37.下面程序的运行结果是_____
Void main()
{
int a[6],i;
for(i=1;i<6;i++)
{ a[i] =9*(i-2+4*(i>3))%5;
printf(“%3d”,a[i]);
}
}
A -4 0 4 0 4 B -4 0 4 0 3 C -4 0 4 4 3 D -40 4 4 0
38.下面程序的运行结果是 _____
{
inti,j,a=0;
for(i=0;i<2;i++)
{
for(j=0;j<4;j++)
{
if(j%2)break;
{
a++;
}
}
a++;
}
printf("%d\n",a);
}
A 4 B 5 C 6 D 7
39.若有定义:int a[ ] = {2,4,6,8,10,12,14,16,18,20,22,24},*q[4],k;则下面的程序段输出的结果是______
for(k=0;k<4;k++)q[k] = &a[k*3];
printf("%d\n",q[3][1]);
A 18 B 22 C 20 D 输出项不合法,结果不正确
40.下面程序的运行结果是______
#include <stdlib.h>
fun(int **a,int p[][])
{ **a = p[1][1]; }
Void main()
{
int x[2][3] = {2,4,6,8,10,12};
int * p = x;
fun(&p,x);
printf("%d\n",*p);
}
A 10 B 12 C 6 D &x[1][1]
填空题
1.C语言中,用来跳过循环体后面的语句,开始执行下一次循环的关键字是_continue_______。
2.执行语句“for(s=0,i=1;i<11;i++){if(i==6)break;s+=i;}”后,s值为___15___。
3.以下程序运行后的屏幕输出结果是___30___ ,_____25__
inta=5;
fun(intb)
{
static int a=10;
a+=b++;
printf("%d ",a);
}
main()
{
int c=20;
fun(c);
a+=c++;
printf("%d\n",a);
}
4.有以下程序
#define f (x) x*x
main()
{ int i;
i=f(4+4)/f(2+2);
printf("%d\n",i);
}
执行后输出结果是___28__。
5.完成下面的宏函数,返回两个数中较大的那个数。
#define MAX(a,b) (((a)>(b))? ①(a)Lb) )
6. 下面程序计算等差数列从m,m+1,m+2,…,n的和(假定不会发生整数溢出),请将程序中空白部分补全。(m和n都是整数)
int sum( int m,int n )
{
assert( n >= m );
return (n+m)*②(n-m+1) /2;
}
7. 下面程序使用插入排序方法将数组a中的元素进行由大到小排序,请将程序中空白部分补全。
void insert_sort( int *a, int size )
{
int i = 0, j = 0, x =0;
for( ③ i=1 ; i < size; i++ )
{
x = a[ i ];
j = i – 1;
while((j>=0)&&(④a[j] <x))
{
a[ j + 1 ] = a[ j ];
j--;
}
⑤a[j+1]=x ;
}
}
8.a、已有函数max(a,b),该函数的入口地址是___ ___;
b、int *p[4]代表的含义_______
c、int **p代表的含义________
d、 int *max()代表的含义____________
9.下面程序的输出结果是____13____
unsigned a = 0xFF,x,y,z;
x = a >> 3;
y = ~(~4 << 2);
z = x & y;
printf("z = %x\n",z);
10.若有以下定义语句
int *p[3],a[6],i;
for(i =0;i<3;i++)
p[i] = &a[2*i];
则*(p[1]+1)引用的是a数组元素_____
11.函数swap( int x,int y )可完成对x和Y值的交换。在运行调用函数中的如下语句后a[0]和a[1]的值分别为__1,2_____,原因是____________
a[0] =1;a[1] =2;
swap(a[0],a[1]);
12.如果函数的类型和返回值类型不一致,以____函数类型____________为准。
13.在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用
的存储类别是__STATIC______
14.在任一个文件中定义外部变量Num,而在另一文件中需要使用这个变量,应该怎么声明___extern Num_____
15.下面程序的运行结果是__66,33,77,55,99,11____
#include <stdlib.h>
#define N 6
void fun( int *a)
{ int i,t;
t= *a;
for(i=0;i<N-1;i++)
*(a+i) =*(a+i+1);
*(a+i) = t;
}
void main()
{ int a[N] ={11,66,33,77,55,99},i;
fun(a);
for (i = 0;i<N;i++)
printf("%d\t",a[i]);
}
16. 以下程序的运行结果是 _0 13 6_______
#include <stdlib.h>
int sub(int *s);
void main()
{ int i,k;
for (i =0;i<4;i++)
{
k = sub(&i);
printf("%d\t",k);
}
printf("\n");
}
int sub(int *s)
{static int t = 0;
t = *s +t;
return t;
}
17.以下程序的运行结果是_____5 1 1___________________________
________6 21 11________________________
________________________________
________________________________
int n =1;
void func();
void main()
{
static int x =5;
int y;
y = n;
printf("MAIN:%d %d %d\n", x, y, n);
func();
func();
printf("MAIN:%d %d %d\n", x, y, n);
}
void func()
{
static int x =4;
int y =10;
x = x+2;
n = n+10;
y = y+n;
printf("FUNC: %d %d %d\n", x, y, n);
}
18.若有定义:int a[3][4]= {{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是___0__,a[2][1]得到的初值是__6___.
19.下面程序的运行结果是__1_12 3
5 8 13 21
_3 4 5 5__________
main()
{
inti,f[10];
f[0]= f[1] = 1;
for(i= 2;i < 10; i++)
f[i]= f[i-2]+f[i-1];
for(i= 0;i < 10; i++)
{
if(i%4 == 0 ) printf("\n");
printf("%d",f[i]);
}
}
20.若for循环用以下形式表示: for(表达式1;表达式2;表达式3)循环体语句
则执行语句for(i=0;i<3;i++)printf("*");时,表达式1执行___1___次,表达式3执行__3___次
21.设有程序片段:
switch(grade)
{case A : printf("85---100\n");
case B : printf("70---84\n");
case C : printf("60---69\n");
case D : printf("<60\n");
default :printf("error!\n");
}
若grade的值为‘C’则输出结果是___________
22.输入一个字符,如果它是一个大写字母,则把它变成小写字母;如果它是一个
小写字母,则把它变成大写字母;其它字符不变。请在_______内填入正确内容。
main()
{char ch;
scanf("%c",&ch);
if(_ch>=‘A’&& ch<=‘Z’)
________ch=ch+32_________;
elseif(ch>=‘a’&&ch<=‘z’)
___________ch=ch-32______;
printf("%c",ch);
}
23.设char s[]={"E_mail"};,则执行printf("%d\n",strlen(s));后输出的值是__6_____。
24.有如下字符串数组的定义,char *names[] = {"Apple", "Pear", "Banana", "Peach"};sizeof(names)值是:____16___
25.设二进制数X的值是11001101,若想通过x&y运算使X中的低4位不变,高4位清零,则y的
二进制数是_____00001111____
26.下面程序的运行结果为__10______
#define ADD(x) x+x
main()
{ int m=1,n=2,k=3;
int sum=ADD(m+n)*k;
printf(“sum=%d”,sum);}
27.下面程序的运行结果为___0 12 4______
for(k=0;k<5;++k)
{ if(k==3) continue;
printf(“%d”,k);}
28.C语言的源程序必须通过___编译_____和_链接________后,才能被计算机执行。
29.设int x=3,y=5; 则执行printf("%d\n",x&&y);后输出1。
30.若函数调用语句为f(a,b,f(a+b,a-b,b));,则函数f的参数个数是__3_____。
31.设int a=2;,则执行a+=a*=15;后,变量a的值是_____60____。
32.设double y[4][5];,则数组y中元素的个数是____20___。
33.设char s[ ]={"E_mail"};,则执行printf("%d\n",strlen(s));后输出的值是_______。
34.有如下字符串数组的定义, char *names[] = {"Apple", "Pear", "Banana", "Peach"};
sizeof(names)值是:_______
35.设二进制数X的值是11001101,若想通过x&y运算使X中的低4位不变,高4位清零,则y的
二进制数是_________
36.下面程序的运行结果为________
#define ADD(x) x+x
main()
{ int m=1,n=2,k=3;
int sum=ADD(m+n)*k;
printf(“sum=%d”,sum);}
37.下面程序的运行结果为_________
for(k=0;k<5;++k)
{ if(k==3) continue;
printf(“%d”,k);}
38.Sizeof(Struct stu)结果是__32_______
Struct stu1
{
Inta;
Char b;
Double c;
}
Struct stu
{
Char a;
Int b;
Struct stu1 c;
Double d;
}
39.设二进制数X的值是11001011,若想取得中间4位,该如何进行操作_________
取反移位
40.static修饰的全局变量和局部变量的意义是什么
41.内存区域分为什么?哪一部分都有哪些特点?
42.C语言中有哪几种存储类别?其中引用外部的全局函数的关键字是什么?
选择题:
1-10DDABADCCCB
11-20CDCBACBADA
21-30CCBADABDAA
31-40CBBABDCAB