锐捷网络2010年程序员C语言试题

1、16位short int 类型所能表示的数值下限与上限,如果使用printf的格式串”%d,%d”打印,其结果是__-32768 32767 ____;

2、有定义(tip:潜在的级数升级,此处按int输出)

      signed char ch = 127;

      printf(“%d”,ch+127);

      的输出结果是__254_______;

3、多组数组a[10][10][10]的第一个元素是a[0][0][0],则其第245个元素是_a[2][4][4]_____;(tip2*10*10+4*10+4+1)

4、若定义int a[010],(注:八进制) 则sizeof(a)的值是___32___;

5、有定义char *str = “hello\n\0\n”,则strlen(str)的值是__6____;(tip’\0’为字符结束符标志)

6、定义一个函数指针类型func_ptr,所对应的函数的参数是void,返回值为int指针:typedef_int*(*func_ptr)(void)___;

7、完成宏定义,将int型变量a的第0位到第n位取反(右数最低位为第0位),其他位保持不变:

      #define bit_reverse(a,n)  ( (a)^ 1<<(n) )

8、如下函数

      int func(void)

      {

           static int cnt;

      }    第一次运行时,cnt的值是___0___;

9、若i = 0,表达式a[i++] += 4;    运算后,i的值是___1___;

10、语句fprintf(stderr,"%x, %d, %c", '1', '1', '1');的输出是_31491_;

11、枚举类型定义

      enum boolean {yes, no};

yes的数值是___0___;

12、有如下程序(tip:宏原样带入展开即可)

      #define ADD(x) (x) + (x)

      int main(void)

      {

           int a = 5, b = 6, c = 7, d = ADD(a + b) * c;

           printf(“%d\n”, d);

           return 0;

      }     的输出结果是__88____;

13、程序

int main(void)

      {

           int i = 16, j, x = 6;

           j = i++ + 1; (tip:结合顺序,可参考《C陷阱与缺陷》)

           x *= i = j;

           printf(“%d, %d\n”, j, x);

           return 0;

}         输出的是___17, 102___;

14、有以下语句

      struct a {int v1, v2;};

      struct b {

    struct a v1;

                        int v2, v3;

};

      int main(void)

{

           struct b t = {1, 2, 3, 4};

           struct a *ap = (struct a*)&t;

           printf(“%d”, *((int *)(ap + 1)));

}   输出结果是__3____;(tip:指针类型及偏移)

15、语句

i = 0, j = 0;

for(i++, j++; ++j < 1 && i++ <2; i++, j++)

{(tip逻辑运算符的特点)

                ;/*void*/

}    当循环退出时,i的值是___1___;

16、运行C语言编写的程序

        copy /B a.txt a.bak 时,int main(int argc, char *argv[])中argv[argc]指向的内容是__NULL____;(tip:可参考《C和指针》P265)

17、有定义(tip算数右移-与编译器相关,左移)

       int i=-1;

      printf("%d,%d",i>>1,i<<1); 的结果是___-1,-2_______。

注:负数在计算机中是以补码的形式参与计算的 ,因为-1的原码是(以八位为例)1000 0001,所以补码是1111 1111,右移一位的得到的还是1111 1111 ,因为是负数,所以在左端补1,而不是0。再把1111 1111,转化为原码即减1取反得1000 0001,化为十进制就是-1。

左移同理可得。

总结:只要记住负数是以补码的形式参与计算的。这类题目就不会模糊。

18、程序

char buf[256];

       int main(void)

       {

            sprintf(buf+ sprintf(buf, “%s”, “abc%d”), “%s”, “efg%%d”);

            printf(buf,100);

       }  的输出是__abc100efg%d____。

注: 两个% 就只输出一个%,还有sprintf的返回值为输出元素的个数,100在碰到的第一个%d处输出。

19、已知一棵二叉树s前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为__DGEBHFCA_____。

20、向一个长度为n的向量的第i个元素(1=i=n+1)之前插入一个元素时,需向后移动_n-i+1___个元素。(tip:可以考虑i0n的情况,较容易)

21~25、

算法:函数psort()将含n个整数的数组a[]的不同元素按从小到大的顺序存于数组a[]中,返回值是不同元素的个数。它的实现方法是顺序考察a[]中的元素,寻找当前考察元素a[i]在已确定的不同元素中的插入位置。如果a[i]是一个新的不同元素,插入之,否则,忽略该元素。(此题貌似还有点问题

int psort(int a[],int n)

{

            int i,j,k,low,high,mid,t;

            for(k=1,i=1;i<n;i++)

            {

                  low=0;

                 high=( i - 1);

                 while(low <= high)

                 {

                       mid=(low+high)/2;

                       if(a[mid]>=a[i])

                            high=mid-1;

                       else

                            low=mid+1;

                    }

if(low <= k || high >= 0(22))

                {

            t=a[i];

                    for(j=__i - 1___(23); j>_high___(24); j--)

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

                     a[__j + 1_(25)]=t;

            k++;

                }    

}

return k;

}


  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值