C语言考题

来源:互联网 发布:java基础实例 编辑:程序博客网 时间:2024/05/19 04:55

一、单项选择题

1.能正确表示逻辑关系:“a≥=10或a≤0”的C语言表达式是(    )。

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值的类型为(    )。

A. float B. int C. charD. double

 

3. 宏定义的宏展开是在(    )阶段完成的。

A. 预处理 B. 编译 C. 预处理前 D. 运行

 

4.C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是(  )。

A. void   B. int   C. float   D. double

 

5.按照标识符的要求,(    )符号不能组成标识符。

A.连接符                  B. 下划线

C. 大小写字母             D. 数字符号

 

6. 以下不能正确定义二维数组的选项是(     )

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.请问这个结构体所占的空间大小是(   )字节。

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         Cpx           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         D2,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在内存中的存储形式是以下哪一种______

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  -4 04 4 0

38.下面程序的运行结果是 _____

Void main()

{

    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  C20   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    4+4*4+4/2+2*2+2

main()

{  int i;

    i=f(4+4)/f(2+2);

    printf("%d\n",i);

执行后输出结果是__28___。

 

5.完成下面的宏函数,返回两个数中较大的那个数。

  #define MAX(a,b)  (((a)>(b))?)     (a):(b)

6. 下面程序计算等差数列从m,m+1,m+2,…,n的和(假定不会发生整数溢出),请将程序中空白部分补全。(m和n都是整数)

int sum( int m,int n )

{

    assert( n >= m );

    return (n+m)*/2; (n-m+1) 

}

7. 下面程序使用插入排序方法将数组a中的元素进行由大到小排序,请将程序中空白部分补全。

void insert_sort( int *a, int size )

{

    int i = 0, j = 0, x =0;

 

for(   ③ ; i < size; i++ )        i=1;

{

    x = a[ i ];

    j = i – 1;

 

    while((j>=0)&&(<x))        a[j]

{

        a[ j + 1 ] = a[ j ];

        j--;

    }

 

       ⑤  ;                        a[j+1]=x;

}

}

 

 

8.a、已有函数max(a,b),该函数的入口地址是___ ___;max

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数组元素___a[3]__

 

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. 以下程序的运行结果是 ____01 3 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.以下程序的运行结果是______________511__________________

_________________621 11_______________

_________________8 31 21_______________

__________________51 21______________

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.下面程序的运行结果是_____11 2 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’则输出结果是_____60—69   <60 error______

 

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.下面程序的运行结果为____01 2 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));后输出的值是__6_____。

34.有如下字符串数组的定义, char *names[] = {"Apple", "Pear", "Banana", "Peach"};

     sizeof(names)值是:____16___

35.设二进制数X的值是11001101,若想通过x&y运算使X中的低4位不变,高4位清零,则y的

二进制数是___00001111______

36.下面程序的运行结果为___10_____

#define  ADD(x) x+x

main()

{         int  m=1,n=2,k=3;

    int  sum=ADD(m+n)*k;

    printf(“sum=%d”,sum);}

37.下面程序的运行结果为____0 1 2 4_____

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;

}

(X>>2) & (15)

39.设二进制数X的值是11001011,若想取得中间4位,该如何进行操作_________

 

40.static修饰的全局变量和局部变量的意义是什么

    

41.内存区域分为什么?哪一部分都有哪些特点?

 

42.C语言中有哪几种存储类别?其中引用外部的全局变量的关键字是什么?

 

 

0 0
原创粉丝点击