• Welcome to ComeFromChina Community (CFC中文网)! We are the largest Chinese Canadian community forum in Ottawa. Please to participate in discussions, post topics, view images, and access full community features. Join us today! 欢迎来到CFC中文网。请登录以参与讨论、发布主题并查看图片。

找 C/C++ 考题

最初由 mooncake 发布

第二题,再想想

你是对的. 标准 C 规定函数调用参数从右到左进栈. 但有编译器也支持 pascal 调用规范(从左到右), 如 Borland C++.

尽管C标准规定了参数进栈次序, 但未规定参数计值次序. 所以出现不同的结果就不奇怪了.
 
最初由 dragonLinux 发布


这个我不能完全同意,libc的函数调用使用什么规则完全可以自己定,只不过你用了特殊的后,其它软件可能不知道就不能用了,就象windows一些api必须是winapi一样,大家必须遵守一个共同的规定而已。
至于 pascal的调用规范,我不知道是谁发明的,至少它也有它的优势相对C调用规范,就是节省代码空间。
实际上求值和入栈并不一定同样顺序,是可以这样,也不至于找抽吧,至少人家也懂些东西,总比不懂强。虽然这样的题没什么大意义,但至少这代表了一个人的知识宽度。
windos api 必须使用stdcall calling convension 是从安全性考虑的结果。利用编译器的特殊性达到某种目的必须要避免。这是一个成熟程序员的基本常识。尤其是这种完全可以而且毫无好处的情况。如果把心思放在怎样使自己的代码看上去更cool,这样的程序员成事不足,败事有余。如果我是manager,我的程序员写这样的程序,必须限期改正,否则自己背包袱走人。
 
最初由 dragonLinux 发布

告诉我从左到右入栈怎么实现...参数传递?什么意思?
就是pascal calling convention 怎么实现printf(const char* fmt, ...);
 
最初由 mooncake 发布

windos api 必须使用stdcall calling convension 是从安全性考虑的结果。利用编译器的特殊性达到某种目的必须要避免。这是一个成熟程序员的基本常识。尤其是这种完全可以而且毫无好处的情况。如果把心思放在怎样使自己的代码看上去更cool,这样的程序员成事不足,败事有余。如果我是manager,我的程序员写这样的程序,必须限期改正,否则自己背包袱走人。

1.windos api 必须使用stdcall calling convension 是从安全性考虑的结果。
为什么?本身就是有优势啊。
2.利用编译器的特殊性达到某种目的必须要避免。这是一个成熟程序员的基本常识。尤其是这种完全可以而且毫无好处的情况。如果把心思放在怎样使自己的代码看上去更cool,这样的程序员成事不足,败事有余。如果我是manager,我的程序员写这样的程序,必须限期改正,否则自己背包袱走人。
某些东西不能完全这样看待,如linux内核就大量利用gcc特性,可能是有些面窄,但是我们需要优化啊!当然上面的代码无优化可言,只是一种代码的简洁,对编译器毫无意义!
看过一个DVD解码程序只有一句,但也有上几K了。
我同意你们的看法,但是也是要有区分的。

这只是个面试题,没办法你是答还是不答?不答肯定是得不到职位的,没办法硬着头皮来吧。
 
最初由 mooncake 发布

就是pascal calling convention 怎么实现printf(const char* fmt, ...);
在pascal语言中,好象只有writexx之类的输出语句,它的实现方法是把输出细分成string,integer的,分成最简单的write,然后就可以实现了,因为此时已经知道如何回收栈了对于被调用函数。
当然在c 语言中,printf都是用C调用规范的,否则估计也要这样实现了,挺麻烦的。
 
两个int类型的数据,不用任何的判断语句如if、switch、?:等,找出其中的大值
从网上搜的,挺有意思!有答案啊,别认为不可能啊!
 
现在 interview 的 C/C++笔试题难易程度如何,一般多长时间, 哪位有经验?
 
[ZT]
某软件公司的一道笔试题:

1~100共一百个自然数,放入一个99个元素的数组a[99],要求写出一个尽量简单的方案,找出没有被放入数组的这个数
 
最初由 dragonLinux 发布


1.windos api 必须使用stdcall calling convension 是从安全性考虑的结果。
为什么?本身就是有优势啊。
2.利用编译器的特殊性达到某种目的必须要避免。这是一个成熟程序员的基本常识。尤其是这种完全可以而且毫无好处的情况。如果把心思放在怎样使自己的代码看上去更cool,这样的程序员成事不足,败事有余。如果我是manager,我的程序员写这样的程序,必须限期改正,否则自己背包袱走人。
某些东西不能完全这样看待,如linux内核就大量利用gcc特性,可能是有些面窄,但是我们需要优化啊!当然上面的代码无优化可言,只是一种代码的简洁,对编译器毫无意义!
看过一个DVD解码程序只有一句,但也有上几K了。
我同意你们的看法,但是也是要有区分的。

这只是个面试题,没办法你是答还是不答?不答肯定是得不到职位的,没办法硬着头皮来吧。
don't want to discuss any more, good luck on finding your job.
 
最初由 老兵新手 发布
[ZT]
某软件公司的一道笔试题:

1~100共一百个自然数,放入一个99个元素的数组a[99],要求写出一个尽量简单的方案,找出没有被放入数组的这个数
我在国内时好象看到过这个题。
不过,这类题只适合纯软件职位,我在这边面试还没有公司出过这类题,只是问问你的经验。一般来说这种题,如果没接触过,很难短时间内想出最佳方案。
 
最初由 dragonLinux 发布

我在国内时好象看到过这个题。
不过,这类题只适合纯软件职位,我在这边面试还没有公司出过这类题,只是问问你的经验。一般来说这种题,如果没接触过,很难短时间内想出最佳方案。

这道题有点脑筋急转弯的味道. 答案出人意料. 最佳解据说是一中学生给的. 如果从纯软件角度, 很难有最佳解.
 
最初由 老兵新手 发布
贴出来让大伙开开眼界吧!

这个是去年得奖的。

代码:
main(O){int I,Q,l=O;if(I=l*4){l=6;if(l>5)l+=Q-8?l-(Q=getchar()-2)%2:l;if(Q*=2)O+="has dirtiest IF"[(I/-Q&12)-l/Q%4];}printf("%d\n",8+O%4);}

编译运行,输入值是下面这样的ASCII Graph,自已试试。

代码:
 #   ###
##  #   #
 #  #   #
 #  #   #
###  ###
 
这个怎么样?:D

代码:
                                  #include\
                                  <stdio.h>
                     #include                <stdlib.h>
                     #include                <string.h>

                    #define w "Hk~HdA=Jk|Jk~LSyL[{M[wMcxNksNss:"
                   #define r"Ht@H|@=HdJHtJHdYHtY:HtFHtF=JDBIl"\
                  "DJTEJDFIlMIlM:HdMHdM=I|KIlMJTOJDOIlWITY:8Y"
                 #define S"IT@I\\@=HdHHtGH|KILJJDIJDH:H|KID"\
                "K=HdQHtPH|TIDRJDRJDQ:JC?JK?=JDRJLRI|UItU:8T"
               #define _(i,j)L[i=2*T[j,O[i=O[j-R[j,T[i=2*\
              R[j-5*T[j+4*O[j-L[j,R[i=3*T[j-R[j-3*O[j+L[j,
             #define t"IS?I\\@=HdGHtGIDJILIJDIItHJTFJDF:8J"

    #define y                  yy(4),yy(5),                yy(6),yy(7)
  #define yy(              i)R[i]=T[i],T[i ]            =O[i],O[i]=L [i]
#define Y _(0          ], 4] )_ (1 ], 5] )_ (2      ], 6] )_ (3 ], 7] )_=1
#define v(i)(      (( R[ i ] * _ + T [ i ]) * _ + O [ i ]) * _ + L [ i ]) *2
double b = 32  ,l ,k ,o ,B ,_ ; int Q , s , V , R [8 ], T[ 8] ,O [8 ], L[ 8] ;
#define q( Q,R ) R= *X ++ % 64 *8 ,R |= *X /8 &7 ,Q=*X++%8,Q=Q*64+*X++%64-256,
# define  p      "G\\QG\\P=GLPGTPGdMGdNGtOGlOG"   "dSGdRGDPGLPG\\LG\\LHtGHtH:"
#  define W         "Hs?H{?=HdGH|FI\\II\\GJlHJ"    "lFL\\DLTCMlAM\\@Ns}Nk|:8G"
# define   U           "EDGEDH=EtCElDH{~H|AJk}"       "Jk?LSzL[|M[wMcxNksNst:"
#  define u                  "Hs?H|@=HdFHtEI"             "\\HI\\FJLHJTD:8H"
char  *   x                   ,*X , ( * i )[               640],z[3]="4_",
*Z = "4,8O4.8O4G" r U "4M"u S"4R"u t"4S8CHdDH|E=HtAIDAIt@IlAJTCJDCIlKI\\K:8K"U
 "4TDdWDdW=D\\UD\\VF\\FFdHGtCGtEIDBIDDIlBIdDJT@JLC:8D"t"4UGDNG\\L=GDJGLKHL\
FHLGHtEHtE:"p"4ZFDTFLT=G|EGlHITBH|DIlDIdE:HtMH|M=JDBJLDKLAKDALDFKtFKdMK\
\\LJTOJ\\NJTMJTM:8M4aGtFGlG=G|HG|H:G\\IG\\J=G|IG|I:GdKGlL=G|JG|J:4b"W
S"4d"W t t"4g"r w"4iGlIGlK=G|JG|J:4kHl@Ht@=HdDHtCHdPH|P:HdDHdD=It\
BIlDJTEJDFIdNI\\N:8N"w"4lID@IL@=HlIH|FHlPH|NHt^H|^:H|MH|N=J\\D\
J\\GK\\OKTOKDXJtXItZI|YIlWI|V:8^4mHLGH\\G=HLVH\\V:4n" u t t
"4p"W"IT@I\\@=HdHHtGIDKILIJLGJLG:JK?JK?=JDGJLGI|MJDL:8M4\
rHt@H|@=HtDH|BJdLJTH:ITEI\\E=ILPILNNtCNlB:8N4t"W t"4u"
p"4zI[?Il@=HlHH|HIDLILIJDII|HKDAJ|A:JtCJtC=JdLJtJL\
THLdFNk|Nc|\
:8K"; main (
int C,char**        A) {for(x=A[1],i=calloc(strlen(x)+2,163840);
C-1;C<3?Q=_=       0,(z[1]=*x++)?((*x++==104?z[1]^=32:--x), X =
strstr(Z,z))      &&(X+=C++): (printf("P2 %d 320 4 ",V=b/2+32),
V*=2,s=Q=0,C     =4):C<4?Q-->0?i[(int)((l+=o)+b)][(int)(k+=B)
]=1:_?_-=.5/    256,o=(v(2)-(l=v(0)))/(Q=16),B=(v(3)-(k=v(1)
))/Q:*X>60?y   ,q(L[4],L[5])q(L[6],L[7])*X-61||(++X,y,y,y),
Y:*X>57?++X,  y,Y:*X >54?++X,b+=*X++%64*4:--C: printf("%d "
,i[Q][s]+i[Q ][s+1]+i[Q+1][s]+i[Q+1][s+1])&&(Q+=2)<V||(Q=
0,s+=2)<640
||(C=1));}

编译运行,试试:

./anonymous "ash nazg durhbatuluhk, ash nazg gimbatul, \
ash nazg thrakatuluhk, agh burzhumh-ishi krimpatul." >anonymous.pgm

然后可以用netpbm来看生成的anonymous.pgm
 
最初由 shusheng 发布


这个是去年得奖的。

代码:
main(O){int I,Q,l=O;if(I=l*4){l=6;if(l>5)l+=Q-8?l-(Q=getchar()-2)%2:l;if(Q*=2)O+="has dirtiest IF"[(I/-Q&12)-l/Q%4];}printf("%d\n",8+O%4);}

编译运行,输入值是下面这样的ASCII Graph,自已试试。

代码:
 #   ###
##  #   #
 #  #   #
 #  #   #
###  ###

没看明白,这程序逻辑也不对吧?
 
后退
顶部
首页 论坛
消息
我的