首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

浙江省某公司的一道笔试题,大家进来讨论下

2013-06-26 
浙江某公司的一道笔试题,,大家进来讨论下1.int count 3 2.int main(void) 3.{ 4.int i, sum, count 2

浙江某公司的一道笔试题,,大家进来讨论下

1.int count = 3; 
2.int main(void) 
3.{ 
4.    int i, sum, count = 2; 
5.    for(i=0,sum=0; i<count; i+=2,count++) 
6.    { 
7.        static int count = 4; 
8.        count++; 
9.        if(i%2 == 0) 
10.        { 
11.            extern int count; 
12.            count++; 
13.            sum += count; 
14.        } 
15.        sum += count; 
16.    } 
17.    printf("%d %d\n",count, sum); 
18.    return 0; 
19.} 


输出结果 是多少啊???  并进行分析
[解决办法]
哪个高人出的这题啊,佩服的五体投地
[解决办法]
输出4 20,是考存储类么
[解决办法]
C语言好久没接触过了
[解决办法]

    10: int count = 3; 
    11: int main(void) 
    12: { 
00411420 55               push        ebp  
00411421 8B EC            mov         ebp,esp 
00411423 81 EC E4 00 00 00 sub         esp,0E4h 
00411429 53               push        ebx  
0041142A 56               push        esi  
0041142B 57               push        edi  
0041142C 8D BD 1C FF FF FF lea         edi,[ebp-0E4h] 
00411432 B9 39 00 00 00   mov         ecx,39h 
00411437 B8 CC CC CC CC   mov         eax,0CCCCCCCCh 
0041143C F3 AB            rep stos    dword ptr es:[edi] 


    13:     int i, sum, count = 2; 
0041143E C7 45 E0 02 00 00 00 mov         dword ptr [count],2 
    14:     for(i=0,sum=0; i<count; i+=2,count++) 
00411445 C7 45 F8 00 00 00 00 mov         dword ptr [i],0 
0041144C C7 45 EC 00 00 00 00 mov         dword ptr [sum],0 
00411453 EB 12            jmp         main+47h (411467h) 
00411455 8B 45 F8         mov         eax,dword ptr [i] 
00411458 83 C0 02         add         eax,2 
0041145B 89 45 F8         mov         dword ptr [i],eax 
0041145E 8B 4D E0         mov         ecx,dword ptr [count] 
00411461 83 C1 01         add         ecx,1 
00411464 89 4D E0         mov         dword ptr [count],ecx 
00411467 8B 45 F8         mov         eax,dword ptr [i] 
0041146A 3B 45 E0         cmp         eax,dword ptr [count] 
0041146D 7D 47            jge         main+96h (4114B6h) 
    15:     { 
    16:         static int count = 4; 
    17:         count++; 
0041146F A1 A0 90 41 00   mov         eax,dword ptr [count (4190A0h)] 
00411474 83 C0 01         add         eax,1 
00411477 A3 A0 90 41 00   mov         dword ptr [count (4190A0h)],eax 
    18:         if(i%2 == 0) 
0041147C 8B 45 F8         mov         eax,dword ptr [i] 
0041147F 25 01 00 00 80   and         eax,80000001h 
00411484 79 05            jns         main+6Bh (41148Bh) 
00411486 48               dec         eax  


00411487 83 C8 FE         or          eax,0FFFFFFFEh 
0041148A 40               inc         eax  
0041148B 85 C0            test        eax,eax 
0041148D 75 19            jne         main+88h (4114A8h) 
    19:         { 
    20:             extern int count; 
    21:             count++; 
0041148F A1 9C 90 41 00   mov         eax,dword ptr [count (41909Ch)] 
00411494 83 C0 01         add         eax,1 
00411497 A3 9C 90 41 00   mov         dword ptr [count (41909Ch)],eax 
    22:             sum += count; 
0041149C 8B 45 EC         mov         eax,dword ptr [sum] 
0041149F 03 05 9C 90 41 00 add         eax,dword ptr [count (41909Ch)] 
004114A5 89 45 EC         mov         dword ptr [sum],eax 
    23:         } 
    24:         sum += count; 
004114A8 8B 45 EC         mov         eax,dword ptr [sum] 
004114AB 03 05 A0 90 41 00 add         eax,dword ptr [count (4190A0h)] 
004114B1 89 45 EC         mov         dword ptr [sum],eax 
    25:     } 
004114B4 EB 9F            jmp         main+35h (411455h) 
    26:     printf("%d %d\n",count, sum); 
004114B6 8B F4            mov         esi,esp 
004114B8 8B 45 EC         mov         eax,dword ptr [sum] 
004114BB 50               push        eax  
004114BC 8B 4D E0         mov         ecx,dword ptr [count] 


004114BF 51               push        ecx  
004114C0 68 00 6D 41 00   push        offset string "%d %d\n" (416D00h) 
004114C5 FF 15 D0 A2 41 00 call        dword ptr [__imp__printf (41A2D0h)] 
004114CB 83 C4 0C         add         esp,0Ch 
004114CE 3B F4            cmp         esi,esp 
004114D0 E8 8E FC FF FF   call        @ILT+350(__RTC_CheckEsp) (411163h) 
    27: getchar();
004114D5 8B F4            mov         esi,esp 
004114D7 FF 15 D4 A2 41 00 call        dword ptr [__imp__getchar (41A2D4h)] 
004114DD 3B F4            cmp         esi,esp 
004114DF E8 7F FC FF FF   call        @ILT+350(__RTC_CheckEsp) (411163h) 
    28:     return 0; 
004114E4 33 C0            xor         eax,eax 
    29: } 


[解决办法]
我帮你改了下程序,遵循作用范围应该是遵循最近原则


写这样的代码。。嘎嘎。。经理肯定吐血。。
[解决办法]

1.int count = 3; 
2.int main(void) 
3.{ 
4.    int i, sum, count = 2; 
5.    for(i=0,sum=0; i<count; i+=2,count++) //这里的count叠加的是count = 2的变量,这里的变量会把全局count=3屏蔽掉


6.    { 
7.        static int count = 4; 
8.        count++; //这里的count叠加的是上一句的static count
9.       if(i%2 == 0) 
10.        { 
11.            extern int count; 
12.            count++; //这里叠加的是全局的count=2哪句的的变量,因为上一句用extern扩展作用域
13.            sum += count;//这一句叠加的是这个作用域的变量,即全局哪个count 
14.        } 
15.        sum += count; //这个叠加的是和这个同一级作用域的static count的变量
16.    } 
17.    printf("%d %d\n",count, sum); //这里输出的是和这句同一级作用域的变更,即for上一行的count变量
18.    return 0; 
19.} 


实际考的变量作用域的问题

热点排行