当前位置:   article > 正文

c语言经典测试题10

c语言经典测试题10

1.题1

  1. int fun( int x)
  2. {
  3. int n = 0;
  4. while (x + 1)
  5. {
  6. n++;
  7. x = x | (x + 1);
  8. }
  9. return n;
  10. }
  11. int main()
  12. {
  13. int ret = fun(2014);
  14. printf("%d", ret);
  15. return 0;
  16. }

上述代码运行结果是什么呢?

我们来分析一下:这里的fun函数有一个while循环,其判断条件为x+1会使每次的x加1,我们的if中x=x|(x+1),这里的按位或操作符,计算规则为只要有1就为1,同时为0才为0,这里的n是用来记录总共循环的次数。第一次循环:

    x的补码为:0000 0000 000 0000 0000 0111 1101 1110 

 x+1的补码为:0000 0000 000 0000 0000 0111 1101 1111

经过按位或运算后的补码为:0000 0000 000 0000 0000 0111 1101 1111

第二次循环:

    x的补码为:0000 0000 000 0000 0000 0111 1101 1111

 x+1的补码为:0000 0000 000 0000 0000 0111 1110 0000

经过按位或运算后的补码为:0000 0000 000 0000 0000 0111 1111 1111

我们发现每循环一次,补码中就会少一个0,所以这个fun函数其实是计算x的补码中0的个数,while循环的判断条件是x+1=0,当x的补码全部为1是值为-1,此时停止循环,n记录了循环的次数,也是该补码中0的个数。

我们运行看看:

2.题2

以下选项中,对基本类型相同的两个指针变量不能进行运算的运算符是( )

A: +  B: -  C: =  D: ==

我们来分析一下:"两个指针的基本类型相同"是指两个指针变量的存储地址的数据类型相同。例如,如果两个指针变量都是整型指针(int*),则它们的基本类型相同。这意味着这两个指针变量都可以指向相同类型的内存地址,并且可以在需要时进行赋值、比较或者进行其他操作。所以A是错的,因为两个地址相加无意义也可能越界,所以规定不允许指针相加。B选项,可以求出两个数据元素储存位置之间的相隔同数据类型的元素个数,C选项,赋值,没问题,D选项,判断两指针是否相同。

3.题3

  1. int fun(char *s)
  2. {
  3. char *t = s;
  4. while(*t++);
  5. return(t-s);
  6. }

有以下函数,该函数的功能是( )

A: 比较两个字符的大小 B: 计算s所指字符串占用内存字节的个数

C: 计算s所指字符串的长度 D: 将s所指字符串复制到字符串t中

我们来分析一下:fun函数中while循环的条件为*t++,所以这个*t为\0时循环停止,并返回首元素地址减去尾元素地址,我们知道首减尾指针结果为其中元素的个数,所以这个函数可以计算s指针指向的字符串的元素个数,所以B正确,但是C选项不包括\0.

4.题4

  1. int main()
  2. {
  3. float a[3] = { 1.5,2.5,3.5 };
  4. float *pa = a;
  5. *(pa++) *= 3;
  6. printf("%.1f", *pa);
  7. return 0;
  8. }

上述代码的运行结果是什么呢? 

A: 1.5 B: 2.5 C: 3.5 D: 4.5

我们来分析一下:一开始pa保存的是a[0]的地址,*(pa++)*=3,将a[0]放大三倍,此时的*pa大小为4.5,但是由于还有后置++的存在此时的pa就指向a[1]所以*pa为2.5

5.题5

单词倒排

  1. void upendprint(char*s)
  2. {
  3. if (*s != '\0')
  4. {
  5. upendprint(s + 1);
  6. printf("%c", *s);
  7. }
  8. }
  9. int main()
  10. {
  11. char arr[1000] = { 0 };
  12. gets(arr);
  13. upendprint(arr);
  14. return 0;
  15. }

我们来测试一下:

 大家也可以试试。

谢谢
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号