C语言基础考察

来源:互联网 发布:狄金森学院 知乎 编辑:程序博客网 时间:2024/05/16 06:54

下面程序的输出是什么?你是不是一眼就能看出来呢???

考察C语言的基本功。

1.

[cpp] view plaincopy
  1. #include<cstdio>  
  2. #include<cstring>  
  3. #include<algorithm>  
  4. #include<string>  
  5. using namespace std;  
  6.   
  7. int main()  
  8. {  
  9.     int a = 2, b = 7, c = 5;  
  10.     switch(a > 0)  
  11.     {  
  12.         case 1: switch(b < 0)  
  13.         {  
  14.             case 1 : printf("@"); break;  
  15.             case 2 : printf("!"); break;  
  16.         }  
  17.         case 0: switch(c == 5)  
  18.         {  
  19.             case 1: printf("*"); break;  
  20.             case 2: printf("#"); break;  
  21.             default: printf("#"); break;  
  22.         }  
  23.         default: printf("&");  
  24.     }  
  25.     printf("\n");  
  26.     return 0;  
  27. }  

答案是:

*&


因为a>0,进入case 1,发现b<0为false,应该进入0,但是没有,退出这个switch,但是case1没有break,只能进入case0,满足条件后输出*,同样没有break退出,进入default后输出&退出。

2.

[cpp] view plaincopy
  1. #include<cstdio>  
  2. #include<cstring>  
  3. #include<algorithm>  
  4. #include<string>  
  5. using namespace std;  
  6.   
  7. int i = 0;  
  8.   
  9. int fun1(int i)  
  10. {  
  11.     i = (i % i) * (i * i) / (2 * i) + 4;  
  12.     printf("i = %d\n", i);  
  13.     return (i);  
  14. }  
  15.   
  16. int fun2(int i)  
  17. {  
  18.     i = i <= 2 ? 5 : 0;  
  19.     return (i);  
  20. }  
  21.   
  22. int main()  
  23. {  
  24.     int i = 5;  
  25.       
  26.     fun2(i / 2);        printf("i = %d\n", i);  
  27.     fun2(i = i / 2);    printf("i = %d\n", i);  
  28.     fun2(i / 2);        printf("i = %d\n", i);  
  29.     fun1(i / 2);        printf("i = %d\n", i);  
  30.       
  31.     return 0;  
  32. }  

答案:

5,2,2,4,2

解析:

知识点:1.函数都是值传递,所以不会改变外部i的值。2.全局变量和局部变量符合就近原则。

所以第一次i=5

然后i=5/2=2

但是进入之后经过层层运算后,里面的i变化,但是返回的时候i就释放掉,对原来的i没有影响。所以i=2

第三次i=2

第四次,进入函数后根据就近原则i相当于局部变量,局部变量为4,所以输出4,但是到printf时,i还是main里面的i,与刚才在函数中的i无关,所以还是2

0 0
原创粉丝点击