当前位置:   article > 正文

c语言经典测试题8

c语言经典测试题8

在c语言经典测试题6的第一题,大家是否想过可不可以将递归参数改为s++呢?或许有的人已经试过了,但是发现好像不会有结果,其实是因为s++为后置++,先试用后加1,然而我们这个++是在s出了函数之后才会运行加1操作,又由于该函数为递归函数,不会直接出函数,所以该递归参数就一直是s不会改变,这样的话,代码就会陷入死递归。

1.题1

  1. char ch;
  2. int i;
  3. float f;
  4. double d;

如上图我们定义了4种类型的数据,则表达式: ch/i + (f*d – i) 的结果类型为?

其实在不同类型的数据进行计算时,会统一进行向最高级类型的转换,在这里基本数据类型的等级从低到高如下:char int long float double运算的时候是从低转到高的,表达式的类型会自动提升或者转换为参与表达式求值的最上级类型。所以该表达式的结果类型应该为double类型。

2.题2

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int x = -1;
  5. unsigned int y = 2;
  6. if (x > y)
  7. {
  8. printf("x is greater");
  9. }
  10. else
  11. {
  12. printf("y is greater");
  13. }
  14. return 0;
  15. }

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

我们来分析一下:首先我们创建了一个有符号的整型x,和一个无符号整型y,x是有符号数-1,内存中是全1,当有符号的x和无符号数进行比较时,x会隐式类型转换被当做无符号数,是一个很大的数,所以此时第一个if条件成立,结果应该是打印x is greater,我们运行看看:

3.题3

  1. int k, a, b;
  2. unsigned int w = 5;
  3. double x = 1.42;

 我们定义了上述数据类型,下列哪一个选项不符合c语言语法表达式:

A: x%3 B: w+=-20 C: k=(a=200,b=300) D: a+=a-=a=9

我们来分析一下:A选项其实很明显,%取模操作符的两个操作数必须为整数,而在上述类型中x是double类型得数据,故A错误。C选项其实是一个逗号表达式,其表达式的最终结果为最后一个表达式的结果。

4.题4

  1. void func()
  2. {
  3. int k = 1^(1 << 31 >> 31);
  4. printf("%d\n", k);
  5. }

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

我们来分析一下:我们知道^操作符的运算规则为,相同为0,相异为1。首先()的优先级最高所以先计算()里面的表达式,1<<31,后1的补码变为10000000000000000000000000000000

然后该补码又进行>>31,结果变为11111111111111111111111111111111,最后进行^操作后补码为

11111111111111111111111111111110,这里是补码·,我们将它还原为原码为10000000000000000000000000000010,这时的结果就为-2。所以其运行结果应该为-2,我们运行看看:

5.题5

 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出 现在 nums 中的数字,并以数组的形式返回结果。

  1. int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize){
  2. for (int i = 0; i < numsSize; i++) {
  3. if (nums[abs(nums[i]) - 1] > 0)
  4. nums[abs(nums[i]) - 1] = -(nums[abs(nums[i]) - 1]);
  5. }
  6. int *ret = (int *)malloc(sizeof(int) * (numsSize));
  7. *returnSize = 0;
  8. for (int i = 0; i < numsSize; i++) {
  9. if (nums[i] > 0) {
  10. ret[*returnSize] = i + 1;
  11. *returnSize += 1;
  12. }
  13. }
  14. return ret;
  15. }

还是那句话,勤动脑,多动手。大家要勇于尝试,加油!祝大家都早日成为大佬。

谢谢
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/176369
推荐阅读
相关标签
  

闽ICP备14008679号