1: 考查对volatile关键字的认识

#include<setjmp.h>

static jmp_buf buf;

main()    
{
    
volatile  int b;
    b =
3;
    
    
if(setjmp(buf)!=0)
    {
        printf(
"%d ", b); 
        exit(
0);
    }
    b=
5;
    longjmp(buf , 
1);

 

请问, 这段程序的输出是
(a) 3
(b) 5
(c) 0
(d)
以上均不是


2:考查类型转换

main()
{
   
struct node 
   {
       
int a;
       
int b;
       
int c;     
   };
   
struct node  s= { 35,6 };
   
struct node *pt = &s;
   printf(
"%d" ,  *(int*)pt);
}

 

这段程序的输出是:
(a) 3
(b) 5
(c) 6
(d) 7


3:考查递归调用

int  foo ( int x , int  n) 
{
    
int val;
    val =
1;
    
    
if (n>0
    {
        
if (n%2 == 1)  val = val *x;
        val = val * foo(x*x , n/
2);
    }
    
return val;
}

 

这段代码对xn完成什么样的功能(操作)?
(a) x^n (x
n次幂)
(b) x*n(x
n的乘积)
(c) n^x(n
x次幂)
(d)
以上均不是


4:考查指针,这道题只适合于那些特别细心且对指针和数组有深入理解的人

main() 
{
    
int  a[5] = {1,2,3,4,5};
    
int *ptr =  (int*)(&a+1);
    
    printf(
"%d %d" , *(a+1), *(ptr-1));
}

 

这段程序的输出是:
(a) 2 2
(b) 2 1
(c) 2 5
(d)
以上均不是


5:考查多维数组与指针

void foo(int [][3]);     

main()
{
    
int a [3][3]= { { 1,2,3} , { 4,5,6},{7,8,9}};
    foo(a);
    printf(
"%d" , a[2][1]);
}

void foo(int b[][3])   
{
    ++ b;
    b[
1][1] =9;
}

 

这段程序的输出是:
(a) 8
(b) 9
(c) 7
(d)
以上均不对


6:考查逗号表达式

main()
{
    
int a, b,c, d;
    a=
3;
    b=
5;
    c=a,b;
    d=(a,b);
    
    printf(
"c=%d" ,c);
    printf(
"d=%d" ,d);
}

 

这段程序的输出是:
(a) c=3 d=3
(b) c=5 d=3
(c) c=3 d=5
(d) c=5 d=5


7:考查指针数组

main()
{
    
int a[][3] = { 1,2,3 ,4,5,6};
    
int (*ptr)[3] = a;
    
    printf(
"%d %d ", (*ptr)[1], (*ptr)[2]);

    ++ptr;
    printf(
"%d %d" , (*ptr)[1], (*ptr)[2]);
}

 

这段程序的输出是:
(a) 2 3 5 6
(b) 2 3 4 5
(c) 4 5 0 0
(d)
以上均不对


8:考查函数指针

int *f1(void)
{
    
int x =10;
    
return(&x);
}

int *f2(void)
{
    
int*ptr;
    *ptr =
10;
    
return ptr;
}

int *f3(void)
{
    
int *ptr;
    ptr=(
int*) malloc(sizeof(int));
    
return ptr;
}

 

上面这3个函数哪一个最可能引起指针方面的问题
(a)
只有 f3
(b)
只有f1 and f3
(c)
只有f1 and f2
(d) f1 , f2 ,f3