Vous êtes sur la page 1sur 64

First Job. Dream Job. Freshersworld.

com

C Questions
Note : All the programs are tested under Turbo C/C++ compilers. It is assumed that, Programs run under DOS en ironment, The underl!ing machine is an "#$ s!stem, Program is compiled using Turbo C/C++ compiler. The program output ma! depend on the in%ormation based on this assumptions &%or e"ample si'eo%&int( )) * ma! be assumed(. Predict the output or error&s( %or the %ollo+ing, 1. void main() { int const * p=5; printf("%d",++(*p)); } Answer: Compiler error, Cannot modi%! a constant alue. Explanation, p is a pointer to a -constant integer-. .ut +e tried to change the alue o% the -constant integer-. 2. main() { char s[ ="man"; int i; for(i=!;s[ i ;i++) printf(""n%c%c%c%c",s[ i ,*(s+i),*(i+s),i[s ); } Answer: mmmm aaaa nnnn Explanation, s/i0, 1&i+s(, 1&s+i(, i/s0 are all di%%erent +a!s o% e"pressing the same idea. 2enerall! arra! name is the base address %or that arra!. 3ere s is the base address. i is the inde" number/displacement %rom the base address. So, indirecting it +ith 1 is same as s/i0. i/s0 ma! be surprising. .ut in the case o% C it is same as s/i0. #. main() { f$oat m% = 1.1; do&'$% (o& = 1.1; if(m%==(o&) printf(") $ov% *");
Freshersworld.com Resource Center

First Job. Dream Job. Freshersworld.com %$s% printf(") hat% *"); } Answer: I hate 5 Explanation, 6or %loating point numbers (%loat, double, long double) the alues cannot be predicted e"actl!. Depending on the number o% b!tes, the precession +ith o% the alue represented aries. 6loat ta7es 8 b!tes and long double ta7es 49 b!tes. So %loat stores 9.: +ith less precision than long double. Rule of Thumb: ;e er compare or at<least be cautious +hen using %loating point numbers +ith relational operators ()) , =, >, >), =),?) ) . +. main() { static int var = 5; printf("%d ",var,,); if(var) main(); } Answer: @8A*4 Explanation: Bhen static storage class is gi en, it is initiali'ed once. The change in the alue o% a static ariable is retained e en bet+een the %unction calls. Cain is also treated li7e an! other ordinar! %unction, +hich can be called recursi el!. 5. main() { int c[ ={2.-,#.+,+,../,5}; int 0,*p=c,*1=c; for(0=!;025;0++) { printf(" %d ",*c); ++1; } for(0=!;025;0++){ printf(" %d ",*p); ++p; } } Answer: ******A8$@ Explanation: Initiall! pointer c is assigned to both p and q. In the %irst loop, since onl! q is incremented and not c , the alue * +ill be printed @ times. In second loop p itsel% is incremented. So the alues * A 8 $ @ +ill be printed.
Freshersworld.com Resource Center

First Job. Dream Job. Freshersworld.com .. main() { %3t%rn int i; i=2!; printf("%d",i); } Answer: 4in5%r 6rror , 5nde%ined s!mbol DEiD Explanation: e"tern storage class in the %ollo+ing declaration, extern int i; speci%ies to the compiler that the memor! %or i is allocated in some other program and that address +ill be gi en to the current program at the time o% lin7ing. .ut lin7er %inds that no other ariable o% name i is a ailable in an! other program +ith memor! space allocated %or it. 3ence a lin7er error has occurred . /. main() { int i=,1,0=,1,5=!,$=2,m; m=i++770++775++88$++; printf("%d %d %d %d %d",i,0,5,$,m); } Answer: 994A4 Explanation : Fogical operations al+a!s gi e a result o% 1 or 0 . And also the logical A;D &GG( operator has higher priorit! o er the logical OH &II( operator. So the e"pression Ji++ && j++ && k++ is e"ecuted %irst. The result o% this e"pression is 9 &<4 GG <4 GG 9 ) 9(. ;o+ the e"pression is 9 II * +hich e aluates to 4 &because OH operator al+a!s gi es 4 e"cept %or J9 II 9K combination< %or +hich it gi es 9(. So the alue o% m is 4. The alues o% other ariables are also incremented b! 4. -. main() { char *p; printf("%d %d ",si9%of(*p),si9%of(p)); } Answer: 4* Explanation: The si'eo%&( operator gi es the number o% b!tes ta7en b! its operand. P is a character pointer, +hich needs one b!te %or storing its alue &a character(. 3ence si'eo%&1p( gi es a alue o% 4. Since it needs t+o b!tes to store the address o% the character pointer si'eo%&p( gi es *.
Freshersworld.com Resource Center

First Job. Dream Job. Freshersworld.com

:. main() { int i=#; s;itch(i) { d%fa&$t<printf("9%ro"); cas% 1< printf("on%"); 'r%a5; cas% 2<printf("t;o"); 'r%a5; cas% #< printf("thr%%"); 'r%a5; } } Answer : three Explanation : The de%ault case can be placed an!+here inside the loop. It is e"ecuted onl! +hen all other cases doesnDt match. 1!. main() { printf("%3",,122+); } Answer: %%%9 Explanation : <4 is internall! represented as all 4Ds. Bhen le%t shi%ted %our times the least signi%icant 8 bits are %illed +ith 9Ds.The L" %ormat speci%ier speci%ies that the integer alue be printed as a he"adecimal alue. 11. main() { char strin=[ =">%$$o ?or$d"; disp$a((strin=); } void disp$a((char *strin=) { printf("%s",strin=); } Answer: @ompi$%r 6rror < T!pe mismatch in redeclaration o% %unction displa! Explanation : In third line, +hen the %unction displ ! is encountered, the compiler doesnDt 7no+ an!thing about the %unction displa!. It assumes the arguments and
Freshersworld.com Resource Center

First Job. Dream Job. Freshersworld.com return t!pes to be integers, &+hich is the de%ault t!pe(. Bhen it sees the actual %unction displ !" the arguments and t!pe contradicts +ith +hat it has assumed pre iousl!. 3ence a compile time error occurs. 12. main() { int c=, ,2; printf("c=%d",c); } Answer: c)*M Explanation: 3ere unar! minus &or negation( operator is used t+ice. Same maths rules applies, ie. minus 1 minus) plus. #ote: 3o+e er !ou cannot gi e li7e <<*. .ecause << operator can onl! be applied to ariables as a de$rement operator &eg., i<<(. * is a constant and not a ariable. 1#. Ad%fin% int char main() { int i=.5; printf("si9%of(i)=%d",si9%of(i)); } Answer: si'eo%&i()4 Explanation: Since the Nde%ine replaces the string int b! the macro $h r 1+. main() { int i=1!; i=BiC1+; Drintf ("i=%d",i); } Answer: i)9 Explanation: In the e"pression %i&1' , ;OT &?( operator has more precedence than J =K s!mbol. % is a unar! logical operator. ?i &?49( is 9 &not o% true is %alse(. 9=48 is %alse &'ero(. 15. Ainc$&d%2stdio.hC
Freshersworld.com Resource Center

First Job. Dream Job. Freshersworld.com main() { char s[ ={EaE,E'E,EcE,E"nE,EcE,E"!E}; char *p,*str,*str1; p=7s[# ; str=p; str1=s; printf("%d",++*p + ++*str1,#2); } Answer: OO Explanation: p is pointing to character DPnD. str4 is pointing to character DaD ++1p. -p is pointing to DPnD and that is incremented b! one.- the ASCII alue o% DPnD is 49, +hich is then incremented to 44. The alue o% ++1p is 44. ++1str4, str4 is pointing to DaD that is incremented b! 4 and it becomes DbD. ASCII alue o% DbD is :#. ;o+ per%orming &44 + :# Q A*(, +e get OO&-C-(M So +e get the output OO ,, -C- &Ascii is OO(. 1.. Ainc$&d%2stdio.hC main() { int a[2 [2 [2 = { {1!,2,#,+}, {5,.,/,-} }; int *p,*1; p=7a[2 [2 [2 ; *1=***a; printf("%d,,,,%d",*p,*1); } Answer: Some2arbageRalue<<<4 Explanation: p)Ga/*0/*0/*0 !ou declare onl! t+o *D arra!s, but !ou are tr!ing to access the third *D&+hich !ou are not declared( it +ill print garbage alues. 1S)111a starting address o% a is assigned integer pointer. ;o+ S is pointing to starting address o% a. I% !ou print 1S, it +ill print %irst element o% AD arra!. 1/. Ainc$&d%2stdio.hC main() { str&ct 33 { int 3=#; char nam%[ ="h%$$o"; }; str&ct 33 *s; printf("%d",s,C3);
Freshersworld.com Resource Center

First Job. Dream Job. Freshersworld.com printf("%s",s,Cnam%); } Answer: Compiler Trror Explanation: Uou should not initiali'e ariables in declaration 1-. Ainc$&d%2stdio.hC main() { str&ct 33 { int 3; str&ct (( { char s; str&ct 33 *p; }; str&ct (( *1; }; } Answer: Compiler Trror Explanation: The structure !! is nested +ithin structure "". 3ence, the elements are o% !! are to be accessed through the instance o% structure "", +hich needs an instance o% !! to be 7no+n. I% the instance is created a%ter de%ining the structure the compiler +ill not 7no+ about the instance relati e to "". 3ence %or nested structure !! !ou ha e to declare member. 1:. main() { printf(""na'"); printf(""'si"); printf(""rha"); } Answer: hai Explanation: Pn < ne+line Pb < bac7space Pr < line%eed 2!. main() { int i=5;
Freshersworld.com Resource Center

First Job. Dream Job. Freshersworld.com printf("%d%d%d%d%d%d",i++,i,,,++i,,,i,i); } Answer: 8@@8@ Explanation: The arguments in a %unction call are pushed into the stac7 %rom le%t to right. The e aluation is b! popping out %rom the stac7. and the e aluation is %rom right to le%t, hence the result. 21. Ad%fin% s1&ar%(3) 3*3 main() { int i; i = .+Fs1&ar%(+); printf("%d",i); } Answer: $8 Explanation: the macro call sSuare&8( +ill substituted b! 818 so the e"pression becomes i ) $8/818 . Since / and 1 has eSual priorit! the e"pression +ill be e aluated as &$8/8(18 i.e. 4$18 ) $8 22. main() { char *p="hai fri%nds",*p1; p1=p; ;hi$%(*pB=E"!E) ++*p++; printf("%s %s",p,p1); } Answer: ibV?gsV%oet Explanation: ++1p++ +ill be parse in the gi en order 1p that is alue at the location currentl! pointed b! p +ill be ta7en ++1p the retrie ed alue +ill be incremented +hen M is encountered the location +ill be incremented that is p++ +ill be e"ecuted 3ence, in the +hile loop initial alue pointed b! p is JhK, +hich is changed to JiK b! e"ecuting ++1p and pointer mo es to point, JaK +hich is similarl! changed to JbK and so on. Similarl! blan7 space is con erted to J?K. Thus, +e obtain alue in p becomes WibV?gsV%oetX and since p reaches JP9K and p4 points to p thus p4doesnot print an!thing. 2#. Ainc$&d% 2stdio.hC Ad%fin% a 1! main()
Freshersworld.com Resource Center

First Job. Dream Job. Freshersworld.com { Ad%fin% a 5! printf("%d",a); } Answer: @9 Explanation: The preprocessor directi es can be rede%ined an!+here in the program. So the most recentl! assigned alue +ill be ta7en. 2+. Ad%fin% c$rscr() 1!! main() { c$rscr(); printf("%d"n",c$rscr()); } Answer: 499 Explanation: Preprocessor e"ecutes as a seperate pass be%ore the e"ecution o% the compiler. So te"tual replacement o% clrscr&( to 499 occurs.The input program to compiler loo7s li7e this , main&( Y 499M print%&-LdPn-,499(M Z #ote: 499M is an e"ecutable statement but +ith no action. So it doesnDt gi e an! problem 25. main() { printf("%p",main); } Answer: Some address +ill be printed. Explanation: 6unction names are Vust addresses &Vust li7e arra! names are addresses(. main&( is also a %unction. So the address o% %unction main +ill be printed. Lp in print% speci%ies that the argument is an address. The! are printed as he"adecimal numbers. *O( main&( Y clrscr&(M
Freshersworld.com Resource Center

First Job. Dream Job. Freshersworld.com Z clrscr&(M Answer: ;o output/error Explanation: The %irst clrscr&( occurs inside a %unction. So it becomes a %unction call. In the second clrscr&(M is a %unction declaration &because it is not inside an! %unction(. *#( enum colors Y.FAC[,.F5T,2HTT;Z main&( Y print%&-Ld..Ld..Ld-,.FAC[,.F5T,2HTT;(M return&4(M Z Answer: 9..4..* Explanation: enum assigns numbers starting %rom 9, i% not e"plicitl! de%ined. *:( oid main&( Y char %ar 1%arther,1%arthestM print%&-Ld..Ld-,si'eo%&%arther(,si'eo%&%arthest((M Z Answer: 8..* Explanation: the second pointer is o% char t!pe and not a %ar pointer A9( main&( Y int i)899,V)A99M print%&-Ld..Ld-(M Z Answer: 899..A99 Explanation: print% ta7es the alues o% the %irst t+o assignments o% the program. An! number o% print%Ds ma! be gi en. All o% them ta7e onl! the %irst t+o

Freshersworld.com Resource Center

49

First Job. Dream Job. Freshersworld.com alues. I% more number o% assignments gi en in the program,then print% +ill ta7e garbage alues. A4( main&( Y char 1pM p)-3ello-M print%&-LcPn-,1G1p(M Z Answer: 3 Explanation: 1 is a dere%erence operator G is a re%erence operator. The! can be applied an! number o% times pro ided it is meaning%ul. 3ere p points to the %irst character in the string -3ello-. 1p dere%erences it and so its alue is 3. Again G re%erences it to an address and 1 dere%erences it to the alue 3. main&( Y int i)4M +hile &i>)@( Y print%&-Ld-,i(M i% &i=*( goto hereM i++M Z Z %un&( Y here, print%&-PP-(M Z Answer: Compiler error, 5nde%ined label DhereD in %unction main Explanation: Fabels ha e %unctions scope, in other +ords The scope o% the labels is limited to %unctions . The label DhereD is a ailable in %unction %un&( 3ence it is not isible in %unction main. main&( Y static char names/@0/*90)Y-pascal-,-ada-,-cobol-,-%ortran-,-perl-ZM int iM char 1tM
Freshersworld.com Resource Center

A*(

AA(

44

First Job. Dream Job. Freshersworld.com t)names/A0M names/A0)names/80M names/80)tM %or &i)9Mi>)8Mi++( print%&-Ls-,names/i0(M Z Answer: Compiler error, F alue reSuired in %unction main Explanation: Arra! names are pointer constants. So it cannot be modi%ied. A8( Y int i)@M print%&-Ld-,i++ + ++i(M Z Answer: Output Cannot be predicted e"actl!. Explanation: Side e%%ects are in ol ed in the e aluation o% i A@( Y int i)@M print%&-Ld-,i+++++i(M Z Answer: Compiler Trror Explanation: The e"pression i+++++i is parsed as i ++ ++ + i +hich is an illegal combination o% operators. A$( Ninclude>stdio.h= main&( Y int i)4,V)*M s+itch&i( Y case 4, print%&-2OOD-(M brea7M case V, print%&-.AD-(M brea7M Z Z Answer: Compiler Trror, Constant e"pression reSuired in %unction main.
Freshersworld.com Resource Center

oid main&(

oid main&(

4*

First Job. Dream Job. Freshersworld.com Explanation: The case statement can ha e onl! constant e"pressions &this implies that +e cannot use ariable names directl! so an error(. #ote: Tnumerated t!pes can be used in case statements. AO( main&( Y int iM print%&-Ld-,scan%&-Ld-,Gi((M // alue 49 is gi en as input here Z Answer: 4 Explanation: Scan% returns number o% items success%ull! read and not 4/9. 3ere 49 is gi en as input +hich should ha e been scanned success%ull!. So number o% items read is 4. Nde%ine %&g,g*( gNNg* main&( Y int ar4*)499M print%&-Ld-,%& ar,4*((M Z Answer: 499 main&( Y int i)9M %or&Mi++Mprint%&-Ld-,i(( M print%&-Ld-,i(M Z Answer: 4 Explanation: be%ore entering into the %or loop the chec7ing condition is -e aluated-. 3ere it e aluates to 9 &%alse( and comes out o% the loop, and i is incremented &note the semicolon a%ter the %or loop(. 89( Ninclude>stdio.h= main&( Y char s/0)YDaD,DbD,DcD,DPnD,DcD,DP9DZM char 1p,1str,1str4M
Freshersworld.com Resource Center

A#(

A:(

4A

First Job. Dream Job. Freshersworld.com p)Gs/A0M str)pM str4)sM print%&-Ld-,++1p + ++1str4<A*(M Z Answer: C Explanation: p is pointing to character DPnD.str4 is pointing to character DaD ++1p meAns+er,-p is pointing to DPnD and that is incremented b! one.- the ASCII alue o% DPnD is 49. then it is incremented to 44. the alue o% + +1p is 44. ++1str4 meAns+er,-str4 is pointing to DaD that is incremented b! 4 and it becomes DbD. ASCII alue o% DbD is :#. both 44 and :# is added and result is subtracted %rom A*. i.e. &44+:#<A*()OO&-C-(M 84( Ninclude>stdio.h= main&( Y struct "" Y int ")AM char name/0)-hello-M ZM struct "" 1s)malloc&si'eo%&struct ""((M print%&-Ld-,s<="(M print%&-Ls-,s<=name(M Z Answer: Compiler Trror Explanation: Initiali'ation should not be done %or structure members inside the structure declaration Ninclude>stdio.h= main&( Y struct "" Y int "M struct !! Y char sM struct "" 1pM ZM struct !! 1SM
Freshersworld.com Resource Center

8*(

48

First Job. Dream Job. Freshersworld.com ZM Z Answer: Compiler Trror Explanation: in the end o% nested structure !! a member ha e to be declared. 8A( main&( Y e"tern int iM i)*9M print%&-Ld-,si'eo%&i((M Z Answer: Fin7er error, unde%ined s!mbol DEiD. Explanation: e"tern declaration speci%ies that the ariable i is de%ined some+here else. The compiler passes the e"ternal ariable to be resol ed b! the lin7er. So compiler doesnDt %ind an error. During lin7ing the lin7er searches %or the de%inition o% i. Since it is not %ound the lin7er %lags an error. main&( Y print%&-Ld-, out(M Z int out)499M Answer: Compiler error, unde%ined s!mbol out in %unction main. Explanation: The rule is that a ariable is a ailable %or use %rom the point o% declaration. T en though a is a global ariable, it is not a ailable %or main. 3ence an error. main&( Y e"tern outM print%&-Ld-, out(M Z int out)499M Answer: 499 Explanation: This is the correct +a! o% +riting the pre ious program. main&(
Freshersworld.com Resource Center

88(

8@(

8$(

4@

First Job. Dream Job. Freshersworld.com Y sho+&(M Z oid sho+&( Y print%&-IDm the greatest-(M Z Answer: Compier error, T!pe mismatch in redeclaration o% sho+. Explanation: Bhen the compiler sees the %unction sho+ it doesnDt 7no+ an!thing about it. So the de%ault return t!pe &ie, int( is assumed. .ut +hen compiler sees the actual de%inition o% sho+ mismatch occurs since it is declared as oid. 3ence the error. The solutions are as %ollo+s, 4. declare oid sho+&( in main&( . *. de%ine sho+&( be%ore main&(. A. declare e"tern oid sho+&( be%ore the use o% sho+&(. 8O( main& ( Y int a/*0/A0/*0 ) YYY*,8Z,YO,#Z,YA,8ZZ,YY*,*Z,Y*,AZ,YA,8ZZZM print%&WLu Lu Lu Ld PnX,a,1a,11a,111a(M print%&WLu Lu Lu Ld PnX,a+4,1a+4,11a+4,111a+4(M Z Answer: 499, 499, 499, * 448, 498, 49*, A Explanation: The gi en arra! is a A<D one. It can also be ie+ed as a 4<D arra!. * 8 O # A 8 * * * A A 8 499 49* 498 49$ 49# 449 44* 448 44$ 44# 4*9 4** thus, %or the %irst print% statement a, 1a, 11a gi e address o% %irst element . since the indirection 111a gi es the alue. 3ence, the %irst line o% the output. %or the second print% a+4 increases in the third dimension thus points to alue at 448, 1a+4 increments in second dimension thus points to 498, 11a +4 increments the %irst dimension thus points to 49* and 111a+4 %irst gets the alue at %irst location and then increments it b! 4. 3ence, the output. 8#( main& ( Y
Freshersworld.com Resource Center

4$

First Job. Dream Job. Freshersworld.com int a/ 0 ) Y49,*9,A9,89,@9Z,V,1pM %or&V)9M V>@M V++( Y print%&WLdX ,1a(M a++M Z p ) aM %or&V)9M V>@M V++( Y print%&WLd X ,1p(M p++M Z Z Answer: Compiler error, l alue reSuired. Explanation: Trror is in line +ith statement a++. The operand must be an l alue and ma! be o% an! o% scalar t!pe %or the an! operator, arra! name onl! +hen subscripted is an l alue. Simpl! arra! name is a non<modi%iable l alue. 8:( main& ( Y static int a/ 0 ) Y9,4,*,A,8ZM int 1p/ 0 ) Ya,a+4,a+*,a+A,a+8ZM int 11ptr ) pM ptr++M print%&WPn Ld Ld LdX, ptr<p, 1ptr<a, 11ptr(M 1ptr++M print%&WPn Ld Ld LdX, ptr<p, 1ptr<a, 11ptr(M 1++ptrM print%&WPn Ld Ld LdX, ptr<p, 1ptr<a, 11ptr(M ++1ptrM print%&WPn Ld Ld LdX, ptr<p, 1ptr<a, 11ptr(M Z Answer: 111 222 ### #++ Explanation: Fet us consider the arra! and the t+o pointers +ith some address 9 499 4 49* * 498 A 49$ 8 49#

Freshersworld.com Resource Center

4O

First Job. Dream Job. Freshersworld.com p 499 49* 498 49$ 49# 4999 499* 4998 499$ 499# ptr 4999 *999 A%ter e"ecution o% the instruction ptr++ alue in ptr becomes 499*, i% scaling %actor %or integer is * b!tes. ;o+ ptr Q p is alue in ptr Q starting location o% arra! p, &499* Q 4999( / &scaling %actor( ) 4, 1ptr Q a ) alue at address pointed b! ptr Q starting alue o% arra! a, 499* has a alue 49* so the alue is &49* Q 499(/&scaling %actor( ) 4, 11ptr is the alue stored in the location pointed b! the pointer o% ptr ) alue pointed b! alue pointed b! 499* ) alue pointed b! 49* ) 4. 3ence the output o% the %irs print% is 4, 4, 4. A%ter e"ecution o% 1ptr++ increments alue o% the alue in ptr b! scaling %actor, so it becomes4998. 3ence, the outputs %or the second print% are ptr Q p ) *, 1ptr Q a ) *, 11ptr ) *. A%ter e"ecution o% 1++ptr increments alue o% the alue in ptr b! scaling %actor, so it becomes4998. 3ence, the outputs %or the third print% are ptr Q p ) A, 1ptr Q a ) A, 11ptr ) A. A%ter e"ecution o% ++1ptr alue in ptr remains the same, the alue pointed b! the alue is incremented b! the scaling %actor. So the alue in arra! p at location 499$ changes %rom 49$ 49 49#,. 3ence, the outputs %or the %ourth print% are ptr Q p ) 499$ Q 4999 ) A, 1ptr Q a ) 49# Q 499 ) 8, 11ptr ) 8. @9( main& ( Y char 1SM int VM %or &V)9M V>AM V++( scan%&WLsX ,&S+V((M %or &V)9M V>AM V++( print%&WLcX ,1&S+V((M %or &V)9M V>AM V++( print%&WLsX ,&S+V((M Z Explanation: 3ere +e ha e onl! one pointer to t!pe char and since +e ta7e input in the same pointer thus +e 7eep +riting o er in the same location, each time shi%ting the pointer alue b! 4. Suppose the inputs are CO5ST, THAC[ and RIHT5AF. Then %or the %irst input suppose the pointer starts at location 499 then the input one is stored as C O 5 S T P9 Bhen the second input is gi en the pointer is incremented as V alue becomes 4, so the input is %illed in memor! starting %rom 494. C T H A C [ P9 The third input starts %illing %rom the location 49*

Freshersworld.com Resource Center

4#

First Job. Dream Job. Freshersworld.com C T R I H T 5 A F P9 This is the %inal alue stored . The %irst print% prints the alues at the position S, S+4 and S+* ) C T R The second print% prints three strings starting %rom locations S, S+4, S+* i.e CTRIHT5AF, TRIHT5AF and RIHT5AF. @4( main& ( Y oid 1 pM char ch ) JgK, 1cp ) Wgoo%!XM int V ) *9M p ) GchM print%&WLcX, 1&char 1( p(M p ) GVM print%&WLdX,1&int 1( p(M p ) cpM print%&WLsX,&char 1( p + A(M Z Answer: g*9%! Explanation: Since a oid pointer is used it can be t!pe casted to an! other t!pe pointer. p ) Gch stores address o% char ch and the ne"t statement prints the alue stored in p a%ter t!pe casting it to the proper data t!pe pointer. the output is JgK. Similarl! the output %rom second print% is J*9K. The third print% statement t!pe casts it to print the string %rom the 8th alue hence the output is J%!K. main & ( Y static char 1s/ 0 ) YWblac7X, W+hiteX, W!ello+X, W ioletXZM char 11ptr/ 0 ) Ys+A, s+*, s+4, sZ, 111pM p ) ptrM 11++pM print%&WLsX,1<<1++p + A(M Z Answer: c7 Explanation: In this problem +e ha e an arra! o% char pointers pointing to start o% 8 strings. Then +e ha e ptr +hich is a pointer to a pointer o% t!pe char and a ariable p +hich is a pointer to a pointer to a pointer o% t!pe char. p hold the initial alue o% ptr, i.e. p ) s+A. The ne"t statement increment alue in p b! 4 , thus no+ alue o% p ) s+*. In the print%
Freshersworld.com Resource Center

@*(

4:

First Job. Dream Job. Freshersworld.com statement the e"pression is e aluated 1++p causes gets alue s+4 then the pre decrement is e"ecuted and +e get s+4 Q 4 ) s . the indirection operator no+ gets the alue %rom the arra! o% s and adds A to the starting address. The string is printed starting %rom this position. Thus, the output is Jc7K. @A( main&( Y int i, nM char 1" ) WgirlXM n ) strlen&"(M 1" ) "/n0M %or&i)9M i>nM ++i( Y print%&WLsPnX,"(M "++M Z Z Answer: &blan7 space( irl rl l Explanation: 3ere a string &a pointer to char( is initiali'ed +ith a alue WgirlX. The strlen %unction returns the length o% the string, thus n has a alue 8. The ne"t statement assigns alue at the nth location &JP9K( to the %irst location. ;o+ the string becomes WP9irlX . ;o+ the print% statement prints the string a%ter each iteration it increments it starting position. Foop starts %rom 9 to 8. The %irst time "/90 ) JP9K hence it prints nothing and pointer alue is incremented. The second time it prints %rom "/40 i.e WirlX and the third time it prints WrlX and the last time it prints WlX and the loop terminates. int i,VM %or&i)9Mi>)49Mi++( Y V+)@M assert&i>@(M Z Answer: Huntime error, Abnormal program termination. assert %ailed &i>@(, >%ile name=,>line number= Explanation:

@8(

Freshersworld.com Resource Center

*9

First Job. Dream Job. Freshersworld.com asserts are used during debugging to ma7e sure that certain conditions are satis%ied. I% assertion %ails, the program +ill terminate reporting the same. A%ter debugging use, Nunde% ;DT.52 and this +ill disable all the assertions %rom the source code. Assertion is a good debugging tool to ma7e use o%. @@( main&( Y int i)<4M +iM print%&-i ) Ld, +i ) Ld Pn-,i,+i(M Z Answer: i ) <4, +i ) <4 Explanation: 5nar! + is the onl! dumm! operator in C. Bhere<e er it comes !ou can Vust ignore it Vust because it has no e%%ect in the e"pressions &hence the name dumm! operator(. Bhat are the %iles +hich are automaticall! opened +hen a C %ile is e"ecuted\ Answer: stdin, stdout, stderr &standard input,standard output,standard error(.

@$(

@O( +hat +ill be the position o% the %ile mar7er\ a, %see7&ptr,9,STT[ESTT(M b, %see7&ptr,9,STT[EC5H(M Answer : a, The STT[ESTT sets the %ile position mar7er to the starting o% the %ile. b, The STT[EC5H sets the %ile position mar7er to the current position o% the %ile. @#( main&( Y char name/490,s/4*0M scan%&- P-L/]P-0P--,s(M Z 3o+ scan% +ill e"ecute\ Answer: 6irst it chec7s %or the leading +hite space and discards it.Then it matches +ith a Suotation mar7 and then it reads all character upto another Suotation mar7. Bhat is the problem +ith the %ollo+ing code segment\
Freshersworld.com Resource Center

@:(

*4

First Job. Dream Job. Freshersworld.com +hile &&%gets&recei ing arra!,@9,%ileEptr(( ?) TO6( M Answer & Explanation: %gets returns a pointer. So the correct end o% %ile chec7 is chec7ing %or ? ) ;5FF. $9( main&( Y main&(M Z Answer: Huntime error , Stac7 o er%lo+. Explanation: main %unction calls itsel% again and again. Tach time the %unction is called its return address is stored in the call stac7. Since there is no condition to terminate the %unction call, the call stac7 o er%lo+s at runtime. So it terminates the program and results in an error. main&( Y char 1cptr,cM oid 1 ptr, M c)49M )9M cptr)GcM ptr)G M print%&-LcL -,c, (M Z Answer: Compiler error &at line number 8(, si'e o% is 5n7no+n. Explanation: Uou can create a ariable o% t!pe oid 1 but not o% t!pe oid, since oid is an empt! t!pe. In the second line !ou are creating ariable ptr o% t!pe oid 1 and o% t!pe oid hence an error. main&( Y char 1str4)-abcd-M char str*/0)-abcd-M print%&-Ld Ld Ld-,si'eo%&str4(,si'eo%&str*(,si'eo%&-abcd-((M Z Answer: *@@ Explanation: In %irst si'eo%, str4 is a character pointer so it gi es !ou the si'e o% the pointer ariable. In second si'eo% the name str* indicates the name o% the arra! +hose si'e is @ &including the DP9D termination character(. The third si'eo% is similar to the second one.
Freshersworld.com Resource Center

$4(

$*(

**

First Job. Dream Job. Freshersworld.com

$A(

main&( Y char notM not)?*M print%&-Ld-,not(M Z Answer: 9 Explanation: ? is a logical operator. In C the alue 9 is considered to be the boolean alue 6AFST, and an! non<'ero alue is considered to be the boolean alue TH5T. 3ere * is a non<'ero alue so TH5T. ?TH5T is 6AFST &9( so it prints 9. Nde%ine 6AFST <4 Nde%ine TH5T 4 Nde%ine ;5FF 9 main&( Y i%&;5FF( puts&-;5FF-(M else i%&6AFST( puts&-TH5T-(M else puts&-6AFST-(M Z Answer: TH5T Explanation, The input program to the compiler a%ter processing b! the preprocessor is, main&(Y i%&9( puts&-;5FF-(M else i%&<4( puts&-TH5T-(M else puts&-6AFST-(M Z Preprocessor doesnDt replace the alues gi en inside the double Suotes. The chec7 b! i% condition is boolean alue %alse so it goes to else. In second i% <4 is boolean alue true hence -TH5T- is printed. main&( Y int 7)4M
Freshersworld.com Resource Center

$8(

$@(

*A

First Job. Dream Job. Freshersworld.com print%&-Ld))4 is --Ls-,7,7))4\-TH5T-,-6AFST-(M Z Answer: 4))4 is TH5T Explanation: Bhen t+o strings are placed together &or separated b! +hite<space( the! are concatenated &this is called as -stringi'ation- operation(. So the string is as i% it is gi en as -Ld))4 is Ls-. The conditional operator& \, ( e aluates to -TH5T-. $$( main&( Y int !M scan%&-Ld-,G!(M // input gi en is *999 i%& &!L8))9 GG !L499 ?) 9( II !L499 )) 9 ( print%&-Ld is a leap !ear-(M else print%&-Ld is not a leap !ear-(M Z Answer: *999 is a leap !ear Explanation: An ordinar! program to chec7 i% leap !ear or not. Nde%ine ma" @ Nde%ine int arr4/ma"0 main&( Y t!pede% char arr*/ma"0M arr4 list)Y9,4,*,A,8ZM arr* name)-name-M print%&-Ld Ls-,list/90,name(M Z Answer: Compiler error &in the line arr4 list ) Y9,4,*,A,8Z( Explanation: arr* is declared o% t!pe arra! o% si'e @ o% characters. So it can be used to declare the ariable name o% the t!pe arr*. .ut it is not the case o% arr4. 3ence an error. Rule of Thumb: Nde%ines are used %or te"tual replacement +hereas t!pede%s are used %or declaring ne+ t!pes. int i)49M main&( Y
Freshersworld.com Resource Center

$O(

$#(

*8

First Job. Dream Job. Freshersworld.com e"tern int iM Y int i)*9M Y const olatile unsigned i)A9M print%&-Ld-,i(M Z print%&-Ld-,i(M Z print%&-Ld-,i(M Z Answer: A9,*9,49 Explanation: DYD introduces ne+ bloc7 and thus ne+ scope. In the innermost bloc7 i is declared as, const olatile unsigned +hich is a alid declaration. i is assumed o% t!pe int. So print% prints A9. In the ne"t bloc7, i has alue *9 and so print% prints *9. In the outermost bloc7, i is declared as e"tern, so no storage space is allocated %or it. A%ter compilation is o er the lin7er resol es it to global ariable i &since it is the onl! ariable isible there(. So it prints iDs alue as 49. $:( main&( Y int 1VM Y int i)49M V)GiM Z print%&-Ld-,1V(M Z Answer: 49 Explanation, The ariable i is a bloc7 le el ariable and the isibilit! is inside that bloc7 onl!. .ut the li%etime o% i is li%etime o% the %unction so it li es upto the e"it o% main %unction. Since the i is still allocated space, 1V prints the alue stored in i since V points i. main&( Y int i)<4M <iM print%&-i ) Ld, <i ) Ld Pn-,i,<i(M
Freshersworld.com Resource Center

O9(

*@

First Job. Dream Job. Freshersworld.com Z Answer: i ) <4, <i ) 4 Explanation: <i is e"ecuted and this e"ecution doesnDt a%%ect the alue o% i. In print% %irst !ou Vust print the alue o% i. A%ter that the alue o% the e"pression <i ) <&<4( is printed. O4( Ninclude>stdio.h= main&( Y const int i)8M %loat VM V ) ++iM print%&-Ld L%-, i,++V(M Z Answer, Compiler error Explanation, i is a constant. !ou cannot change the alue o% constant Ninclude>stdio.h= main&( Y int a/*0/*0/*0 ) Y Y49,*,A,8Z, Y@,$,O,#Z ZM int 1p,1SM p)Ga/*0/*0/*0M 1S)111aM print%&-Ld..Ld-,1p,1S(M Z Answer: garbage alue..4 Explanation: p)Ga/*0/*0/*0 !ou declare onl! t+o *D arra!s. but !ou are tr!ing to access the third *D&+hich !ou are not declared( it +ill print garbage alues. 1S)111a starting address o% a is assigned integer pointer. no+ S is pointing to starting address o% a.i% !ou print 1S meAns+er,it +ill print %irst element o% AD arra!. Ninclude>stdio.h= main&( Y register i)@M char V/0) -hello-M print%&-Ls Ld-,V,i(M Z
Freshersworld.com Resource Center

O*(

OA(

*$

First Job. Dream Job. Freshersworld.com Answer: hello @ Explanation, i% !ou declare i as register compiler +ill treat it as ordinar! integer and it +ill ta7e integer alue. i alue ma! be stored either in register or in memor!. O8( main&( Y int i)@,V)$,'M print%&-Ld-,i+++V(M Z Answer: 44 Explanation: the e"pression i+++V is treated as &i++ + V( struct aaaY struct aaa 1pre M int iM struct aaa 1ne"tM ZM main&( Y struct aaa abc,de%,ghi,V7lM int ")499M abc.i)9Mabc.pre )GV7lM abc.ne"t)Gde%M de%.i)4Mde%.pre )GabcMde%.ne"t)GghiM ghi.i)*Mghi.pre )Gde%M ghi.ne"t)GV7lM V7l.i)AMV7l.pre )GghiMV7l.ne"t)GabcM ")abc.ne"t<=ne"t<=pre <=ne"t<=iM print%&-Ld-,"(M Z Answer: * Explanation: abo e all statements %orm a double circular lin7ed listM abc.ne"t<=ne"t<=pre <=ne"t<=i this one points to -ghi- node the alue o% at particular node is *. struct point Y int "M int !M
Freshersworld.com Resource Center

O$(

OO(

*O

First Job. Dream Job. Freshersworld.com ZM struct point origin,1ppM main&( Y pp)GoriginM print%&-origin is&LdLd(Pn-,&1pp(.",&1pp(.!(M print%&-origin is &LdLd(Pn-,pp<=",pp<=!(M Z Answer: origin is&9,9( origin is&9,9( Explanation, pp is a pointer to structure. +e can access the elements o% the structure either +ith arro+ mar7 or +ith indirection operator. #ote: Since structure point is globall! declared " G ! are initiali'ed as 'eroes O#( main&( Y int i)ElEabc&49(M print%&-LdPn-,<<i(M Z int ElEabc&int i( Y return&i++(M Z Answer: : Explanation: return&i++( it +ill %irst return i and then increments. i.e. 49 +ill be returned. main&( Y char 1pM int 1SM long 1rM p)S)r)9M p++M S++M r++M print%&-Lp...Lp...Lp-,p,S,r(M Z Answer:
Freshersworld.com Resource Center

O:(

*#

First Job. Dream Job. Freshersworld.com 9994...999*...9998 Explanation: ++ operator +hen applied to pointers increments address according to their corresponding data<t!pes. #9( main&( Y char c)D D,",con ert&'(M getc&c(M i%&&c=)DaD( GG &c>)D'D(( ")con ert&c(M print%&-Lc-,"(M Z con ert&'( Y return '<A*M Z Answer: Compiler error Explanation: declaration o% con ert and %ormat o% getc&( are +rong. main&int argc, char 11arg ( Y print%&-enter the character-(M getchar&(M sum&arg /40,arg /*0(M Z sum&num4,num*( int num4,num*M Y return num4+num*M Z Answer: Compiler error. Explanation: arg /40 G arg /*0 are strings. The! are passed to the %unction sum +ithout con erting it to integer alues. N include >stdio.h= int oneEd/0)Y4,*,AZM main&( Y int 1ptrM ptr)oneEdM ptr+)AM
Freshersworld.com Resource Center

#4(

#*(

*:

First Job. Dream Job. Freshersworld.com print%&-Ld-,1ptr(M Z Answer, garbage alue Explanation: ptr pointer is pointing to out o% the arra! range o% oneEd. #A( N include>stdio.h= aaa&( Y print%&-hi-(M Z bbb&(Y print%&-hello-(M Z ccc&(Y print%&-b!e-(M Z main&( Y int &1ptr/A0(&(M ptr/90)aaaM ptr/40)bbbM ptr/*0)cccM ptr/*0&(M Z Answer, b!e Explanation: ptr is arra! o% pointers to %unctions o% return t!pe int.ptr/90 is assigned to address o% the %unction aaa. Similarl! ptr/40 and ptr/*0 %or bbb and ccc respecti el!. ptr/*0&( is in e%%ect o% +riting ccc&(, since ptr/*0 points to ccc. Ninclude>stdio.h= main&( Y 6IFT 1ptrM char iM ptr)%open&-'''.c-,-r-(M +hile&&i)%getch&ptr((?)TO6( print%&-Lc-,i(M Z Answer: contents o% '''.c %ollo+ed b! an in%inite loop Explanation:

#@(

Freshersworld.com Resource Center

A9

First Job. Dream Job. Freshersworld.com The condition is chec7ed against TO6, it should be chec7ed against ;5FF. #$( main&( Y int i )9MV)9M i%&i GG V++( print%&-Ld..Ld-,i++,V(M print%&-Ld..Ld,i,V(M Z Answer: 9..9 Explanation: The alue o% i is 9. Since this in%ormation is enough to determine the truth alue o% the boolean e"pression. So the statement %ollo+ing the i% statement is not e"ecuted. The alues o% i and V remain unchanged and get printed. main&( Y int iM i ) abc&(M print%&-Ld-,i(M Z abc&( Y EA^ ) 4999M Z Answer: 4999 Explanation: ;ormall! the return alue %rom the %unction is through the in%ormation %rom the accumulator. 3ere EA3 is the pseudo global ariable denoting the accumulator. 3ence, the alue o% the accumulator is set 4999 so the %unction returns alue 4999. int iM main&(Y int tM %or & t)8Mscan%&-Ld-,Gi(<tMprint%&-LdPn-,i(( print%&-Ld<<-,t<<(M Z // I% the inputs are 9,4,*,A %ind the o/p Answer: 8<<9 A<<4
Freshersworld.com Resource Center

#O(

##(

A4

First Job. Dream Job. Freshersworld.com *<<* Explanation: Fet us assume some ") scan%&-Ld-,Gi(<t the alues during e"ecution +ill be, t i " 8 9 <8 A 4 <* * * 9 #:( main&(Y int a) 9Mint b ) *9Mchar " )4Mchar ! )49M i%&a,b,",!( print%&-hello-(M Z Answer: hello Explanation: The comma operator has associati it! %rom le%t to right. Onl! the rightmost alue is returned and the other alues are e aluated and ignored. Thus the alue o% last ariable ! is returned to chec7 in i%. Since it is a non 'ero alue i% becomes true so, -hello- +ill be printed. main&(Y unsigned int iM %or&i)4Mi=<*Mi<<( print%&-c aptitude-(M Z Explanation: i is an unsigned integer. It is compared +ith a signed alue. Since the both t!pes doesnDt match, signed is promoted to unsigned alue. The unsigned eSui alent o% <* is a huge alue so condition becomes %alse and control comes out o% the loop. In the %ollo+ing pgm add a stmt in the %unction %un such that the address o% DaD gets stored in DVD. main&(Y int 1 VM oid %un&int 11(M %un&GV(M Z oid %un&int 117( Y int a )9M /1 add a stmt here1/ Z Answer: 17 ) Ga
Freshersworld.com Resource Center

:9(

:4(

A*

First Job. Dream Job. Freshersworld.com Explanation: The argument o% the %unction is a pointer to a pointer. :*( Bhat are the %ollo+ing notations o% de%ining %unctions 7no+n as\ i. int abc&int a,%loat b( Y /1 some code 1/ Z ii. int abc&a,b( int aM %loat bM Y /1 some code1/ Z Answer: i. A;SI C notation ii. [ernighan G Hitche notation main&( Y char 1pM p)-LdPn-M p++M p++M print%&p<*,A99(M Z Answer: A99 Explanation: The pointer points to L since it is incremented t+ice and again decremented b! *, it points to DLdPnD and A99 is printed. main&(Y char a/4990M a/90)DaDMa/400)DbDMa/*0)DcDMa/80)DdDM abc&a(M Z abc&char a/0(Y a++M print%&-Lc-,1a(M a++M print%&-Lc-,1a(M Z Explanation: The base address is modi%ied onl! in %unction and as a result a points to DbD then a%ter incrementing to DcD so bc +ill be printed.

:A(

:8(

Freshersworld.com Resource Center

AA

First Job. Dream Job. Freshersworld.com :@( %unc&a,b( int a,bM Y return& a) &a))b( (M Z main&( Y int process&(,%unc&(M print%&-The alue o% process is Ld ?Pn -,process&%unc,A,$((M Z process&p%, al4, al*( int &1p%( &(M int al4, al*M Y return&&1p%( & al4, al*((M Z Answer: The alue i% process is 9 ? Explanation: The %unction DprocessD has A parameters < 4, a pointer to another %unction * and A, integers. Bhen this %unction is in o7ed %rom main, the %ollo+ing substitutions %or %ormal parameters ta7e place, %unc %or p%, A %or al4 and $ %or al*. This %unction returns the result o% the operation per%ormed b! the %unction D%uncD. The %unction %unc has t+o integer parameters. The %ormal parameters are substituted as A %or a and $ %or b. since A is not eSual to $, a))b returns 9. there%ore the %unction returns 9 +hich in turn is returned b! the %unction DprocessD. oid main&( Y static int i)@M i%&<<i(Y main&(M print%&-Ld -,i(M Z Z Answer: 9999 Explanation: The ariable -I- is declared as static, hence memor! %or I +ill be allocated %or onl! once, as it encounters the statement. The %unction main&( +ill be called recursi el! unless I becomes eSual to 9, and since main&( is recursi el! called, so the alue o% static I ie., 9 +ill be printed e er! time the control is returned. :O( oid main&(
Freshersworld.com Resource Center

:$(

A8

First Job. Dream Job. Freshersworld.com Y int 7)ret&si'eo%&%loat((M print%&-Pn here alue is Ld-,++7(M Z int ret&int ret( Y ret +) *.@M return&ret(M Z Answer: 3ere alue is O Explanation: The int ret&int ret(, ie., the %unction name and the argument name can be the same. 6irstl!, the %unction ret&( is called in +hich the si'eo%&%loat( ie., 8 is passed, a%ter the %irst e"pression the alue in ret +ill be $, as ret is integer hence the alue stored in ret +ill ha e implicit t!pe con ersion %rom %loat to int. The ret is returned in main&( it is printed a%ter and preincrement. :#( Y char a/0)-4*A8@P9-M int i)strlen&a(M print%&-here in A LdPn-,++i(M Z Answer: here in A $ Explanation: The char arra! DaD +ill hold the initiali'ed string, +hose length +ill be counted %rom 9 till the null character. 3ence the DID +ill hold the alue eSual to @, a%ter the pre<increment in the print% statement, the $ +ill be printed. ::( Y unsigned gi eit)<4M int gotitM print%&-Lu -,++gi eit(M print%&-Lu Pn-,gotit)<<gi eit(M Z Answer: 9 $@@A@ Explanation: 499( Y int iM
Freshersworld.com Resource Center

oid main&(

oid main&(

oid main&(

A@

First Job. Dream Job. Freshersworld.com char a/0)-P9-M i%&print%&-LsPn-,a(( print%&-O7 here Pn-(M else print%&-6orget itPn-(M Z Answer: O7 here Explanation: Print% +ill return ho+ man! characters does it print. 3ence printing a null character returns 4 +hich ma7es the i% statement true, thus -O7 here- is printed. 494( Y oid 1 M int integer)*M int 1i)GintegerM )iM print%&-Ld-,&int1(1 (M Z Answer: Compiler Trror. Be cannot appl! indirection on t!pe oid1. Explanation: Roid pointer is a generic pointer t!pe. ;o pointer arithmetic can be done on it. Roid pointers are normall! used %or, 4. Passing generic pointers to %unctions and returning such pointers. *. As a intermediate pointer t!pe. A. 5sed +hen the e"act pointer t!pe +ill be 7no+n at a later point o% time. 49*( Y int i)i++,V)V++,7)7++M print%&WLdLdLdX,i,V,7(M Z Answer: 2arbage alues. Explanation: Gn id%ntifi%r is avai$a'$% to &s% in pro=ram cod% from th% point of its d%c$aration. So e"pressions such as i ) i++ are alid statements. The i, V and 7 are automatic ariables and so the! contain some garbage alue. Har'a=% in is =ar'a=% o&t (H)HI). oid main&( oid main&(

Freshersworld.com Resource Center

A$

First Job. Dream Job. Freshersworld.com

49A( Y

oid main&( static int i)i++, V)V++, 7)7++M print%&Wi ) Ld V ) Ld 7 ) LdX, i, V, 7(M Z Answer: i)4V)47)4 Explanation: Since static ariables are initiali'ed to 'ero b! de%ault.

498( Y

oid main&( +hile&4(Y i%&print%&-Ld-,print%&-Ld-((( brea7M else continueM Z Z Answer: 2arbage alues Explanation: The inner print% e"ecutes %irst to print some garbage alue. The print% returns no o% characters printed and this alue also cannot be predicted. Still the outer print% prints something and so returns a non<'ero alue. So it encounters the brea7 statement and comes out o% the +hile statement.

498(

main&( Y unsigned int i)49M +hile&i<<=)9( print%&-Lu -,i(M Z Answer: 49 : # O $ @ 8 A * 4 9 $@@A@ $@@A8_.. Explanation: Since i is an unsigned integer it can ne er become negati e. So the e"pression i<< =)9 +ill al+a!s be true, leading to an in%inite loop.

49@(

Ninclude>conio.h= main&( Y int ",!)*,',aM


Freshersworld.com Resource Center

AO

First Job. Dream Job. Freshersworld.com i%&")!L*( ')*M a)*M print%&-Ld Ld -,',"(M Z Answer: 2arbage< alue 9 Explanation: The alue o% !L* is 9. This alue is assigned to ". The condition reduces to i% &"( or in other +ords i%&9( and so ' goes uninitiali'ed. Thumb Rule: (hec7 all control paths to +rite bug %ree code. 49$( main&( Y int a/490M print%&-Ld-,1a+4<1a+A(M Z Answer: 8 Explanation: 1a and <1a cancels out. The result is as simple as 4 + A ) 8 ? 49O( Nde%ine prod&a,b( a1b main&( Y int ")A,!)8M print%&-Ld-,prod&"+*,!<4((M Z Answer: 49 Explanation: The macro e"pands and e aluates to as, "+*1!<4 )= "+&*1!(<4 )= 49 main&( Y unsigned int i)$@999M +hile&i++?)9(M print%&-Ld-,i(M Z Answer: 4 Explanation: ;ote the semicolon a%ter the +hile statement. Bhen the alue o% i becomes 9 it comes out o% +hile loop. Due to post<increment on i the alue o% i +hile printing is 4.

49#(

Freshersworld.com Resource Center

A#

First Job. Dream Job. Freshersworld.com 49:( main&( Y int i)9M +hile&+&+i<<(?)9( i<)i++M print%&-Ld-,i(M Z Answer: <4 Explanation: *nar( + is th% on$( d&mm( op%rator in @ . So it has no e%%ect on the e"pression and no+ the +hile loop is, +hile&i<<?)9( +hich is %alse and so brea7s out o% +hile loop. The alue Q4 is printed due to the post<decrement operator. 44A( main&( Y %loat %)@,g)49M enumYi)49,V)*9,7)@9ZM print%&-LdPn-,++7(M print%&-L%Pn-,%>>*(M print%&-Ll%Pn-,%Lg(M print%&-Ll%Pn-,%mod&%,g((M Z Answer: Fine no @, Trror, F alue reSuired Fine no $, Cannot appl! le%tshi%t to %loat Fine no O, Cannot appl! mod to %loat Explanation: Tnumeration constants cannot be modi%ied, so !ou cannot appl! ++. .it<+ise operators and L operators cannot be applied on %loat alues. %mod&( is to %ind the modulus alues %or %loats as L operator is %or ints. 449( main&( Y int i)49M oid pascal %&int,int,int(M %&i++,i++,i++(M print%&- Ld-,i(M Z oid pascal %&integer ,i,integer,V,integer ,7( Y +rite&i,V,7(M Z Answer: Compiler error, un7no+n t!pe integer
Freshersworld.com Resource Center

A:

First Job. Dream Job. Freshersworld.com Compiler error, undeclared %unction +rite Explanation: Pascal 7e!+ord doesnKt mean that pascal code can be used. It means that the %unction %ollo+s Pascal argument passing mechanism in calling the %unctions. 444( Y print%&WLd Ld LdX,i, V, 7(M Z oid cdecl %&int i,int V,int 7( Y print%&WLd Ld LdX,i, V, 7(M Z main&( Y int i)49M %&i++,i++,i++(M print%&- LdPn-,i(M i)49M %&i++,i++,i++(M print%&- Ld-,i(M Z Answer: 49 44 4* 4A 4* 44 49 4A Explanation: Pascal argument passing mechanism %orces the arguments to be called %rom le%t to right. cdecl is the normal C argument passing mechanism +here the arguments are passed %rom right to le%t. 44*(. Bhat is the output o% the program gi en belo+ main&( Y signed char i)9M %or&Mi=)9Mi++( M print%&-LdPn-,i(M Z Answer <4*# Explanation ;otice the semicolon at the end o% the %or loop. T3e initial alue o% the i is set to 9. The inner loop e"ecutes to increment the alue %rom 9 to 4*O &the positi e range o% char( and then it rotates to the negati e alue o% <4*#. The condition in the %or
Freshersworld.com Resource Center

oid pascal %&int i,int V,int 7(

89

First Job. Dream Job. Freshersworld.com loop %ails and so comes out o% the %or loop. It prints the current alue o% i that is <4*#. 44A( main&( Y unsigned char i)9M %or&Mi=)9Mi++( M print%&-LdPn-,i(M Z Answer in%inite loop Explanation The di%%erence bet+een the pre ious Suestion and this one is that the char is declared to be unsigned. So the i++ can ne er !ield negati e alue and i=)9 ne er becomes %alse so that it can come out o% the %or loop. 448( main&( Y char i)9M %or&Mi=)9Mi++( M print%&-LdPn-,i(M Z Answer: .eha ior is implementation dependent. Explanation: The detail i% the char is signed/unsigned b! de%ault is implementation dependent. I% the implementation treats the char to be signed b! de%ault the program +ill print Q4*# and terminate. On the other hand i% it considers char to be unsigned b! de%ault, it goes to in%inite loop. Rule: Uou can +rite programs that ha e implementation dependent beha ior. .ut dont +rite programs that depend on such beha ior. 44@( Is the %ollo+ing statement a declaration/de%inition. 6ind +hat does it mean\ int &1"(/490M Answer De%inition. " is a pointer to arra! o%&si'e 49( integers. Appl! cloc7<+ise rule to %ind the meaning o% this de%inition. 44$(. Bhat is the output %or the program gi en belo+
Freshersworld.com Resource Center

84

First Job. Dream Job. Freshersworld.com

t!pede% enum errorT!peY+arning, error, e"ception,ZerrorM main&( Y error g4M g4)4M print%&-Ld-,g4(M Z Answer Compiler error, Cultiple declaration %or error Explanation The name error is used in the t+o meanings. One means that it is a enumerator constant +ith alue 4. The another use is that it is a t!pe name &due to t!pede%( %or enum errorT!pe. 2i en a situation the compiler cannot distinguish the meaning o% error to 7no+ in +hat sense the error is used, error g4M g4)errorM // +hich error it re%ers in each case\ Bhen the compiler can distinguish bet+een usages then it +ill not issue error &in pure technical terms, names can onl! be o erloaded in di%%erent namespaces(. Note, the e"tra comma in the declaration, enum errorT!peY+arning, error, e"ception,Z is not an error. An e"tra comma is alid and is pro ided Vust %or programmerKs con enience. 44O( t!pede% struct errorYint +arning, error, e"ceptionMZerrorM main&( Y error g4M g4.error )4M print%&-Ld-,g4.error(M Z

Answer 4 Explanation The three usages o% name errors can be distinguishable b! the compiler at an! instance, so alid &the! are in di%%erent namespaces(. T!pede% struct errorYint +arning, error, e"ceptionMZerrorM This error can be used onl! b! preceding the error b! struct 7a!+ord as in, struct error someTrrorM t!pede% struct errorYint +arning, error, e"ceptionMZerrorM

Freshersworld.com Resource Center

8*

First Job. Dream Job. Freshersworld.com This can be used onl! a%ter . &dot( or <= &arro+( operator preceded b! the ariable name as in , g4.error )4M print%&-Ld-,g4.error(M t!pede% struct errorYint +arning, error, e"ceptionMZerrorM This can be used to de%ine ariables +ithout using the preceding struct 7e!+ord as in, error g4M Since the compiler can per%ectl! distinguish bet+een these three usages, it is per%ectl! legal and alid. #ote This code is gi en here to Vust e"plain the concept behind. In real programming donKt use such o erloading o% names. It reduces the readabilit! o% the code. Possible doesnKt mean that +e should use it? 44#( Ni%de% something int some)9M Nendi% main&( Y int thing ) 9M print%&-Ld LdPn-, some ,thing(M Z Answer: Compiler error , unde%ined s!mbol some Explanation: This is a er! simple e"ample %or conditional compilation. The name something is not alread! 7no+n to the compiler ma7ing the declaration int some ) 9M e%%ecti el! remo ed %rom the source code. 44:( Ni% something )) 9 int some)9M Nendi% main&( Y int thing ) 9M print%&-Ld LdPn-, some ,thing(M Z Answer
Freshersworld.com Resource Center

8A

First Job. Dream Job. Freshersworld.com 99 Explanation This code is to sho+ that preprocessor e"pressions are not the same as the ordinar! e"pressions. I% a name is not 7no+n the preprocessor treats it to be eSual to 'ero. 4*9(. Bhat is the output %or the %ollo+ing program main&( Y int arr*D/A0/A0M print%&-LdPn-, &&arr*D))1 arr*D(GG&1 arr*D )) arr*D/90(( (M Z Answer 4 Explanation This is due to the close relation bet+een the arra!s and pointers. ; dimensional arra!s are made up o% &;<4( dimensional arra!s. arr*D is made up o% a A single arra!s that contains A integers each . arr*D arr*D/40 arr*D/*0 arr*D/A0

The name arr*D re%ers to the beginning o% all the A arra!s. 1arr*D re%ers to the start o% the %irst 4D arra! &o% A integers( that is the same address as arr*D. So the e"pression &arr*D )) 1arr*D( is true &4(. Similarl!, 1arr*D is nothing but 1&arr*D + 9(, adding a 'ero doesnKt change the alue/meaning. Again arr*D/90 is the another +a! o% telling 1&arr*D + 9(. So the e"pression &1&arr*D + 9( )) arr*D/90( is true &4(. Since both parts o% the e"pression e aluates to true the result is true&4( and the same is printed. 4*4( oid main&( Y i%&`9 )) &unsigned int(<4( print%&WUou can ans+er this i% !ou 7no+ ho+ alues are represented in memor!X(M Z
Freshersworld.com Resource Center

88

First Job. Dream Job. Freshersworld.com Ans+er Uou can ans+er this i% !ou 7no+ ho+ alues are represented in memor! T"planation ` &tilde operator or bit<+ise negation operator( operates on 9 to produce all ones to %ill the space %or an integer. Q4 is represented in unsigned alue as all 4Ks and so both are eSual. 4**( int s+ap&int 1a,int 1b( Y 1a)1a+1bM1b)1a<1bM1a)1a<1bM Z main&( Y int ")49,!)*9M s+ap&G",G!(M print%&-") Ld ! ) LdPn-,",!(M Z Ans+er " ) *9 ! ) 49 T"planation This is one +a! o% s+apping t+o alues. Simple chec7ing +ill help understand this. 4*A( main&( Y char 1p ) Wa!SmXM print%&WLcX,++1&p++((M Z Ans+er, b main&( Y int i)@M print%&-Ld-,++i++(M Z Answer: Compiler error, F alue reSuired in %unction main Explanation: ++i !ields an r alue. 6or post%i" ++ to operate an l alue is reSuired. 4*@( main&( Y char 1p ) Wa!SmXM
Freshersworld.com Resource Center

4*8(

8@

First Job. Dream Job. Freshersworld.com char cM c ) ++1p++M print%&WLcX,c(M Z Answer: b Explanation: There is no di%%erence bet+een the e"pression ++1&p++( and + +1p++. Parenthesis Vust +or7s as a isual clue %or the reader to see +hich e"pression is %irst e aluated. 4*$( int aaa&( Yprint%&W3iX(MZ int bbb&(Yprint%&WhelloX(MZ in! ccc&(Yprint%&Wb!eX(MZ main&( Y int & 1 ptr/A0( &(M ptr/90 ) aaaM ptr/40 ) bbbM ptr/*0 )cccM ptr/*0&(M Z Ans+er, b!e T"planation, int &1 ptr/A0(&( sa!s that ptr is an arra! o% pointers to %unctions that ta7es no arguments and returns the t!pe int. .! the assignment ptr/90 ) aaaM it means that the %irst %unction pointer in the arra! is initiali'ed +ith the address o% the %unction aaa. Similarl!, the other t+o arra! elements also get initiali'ed +ith the addresses o% the %unctions bbb and ccc. Since ptr/*0 contains the address o% the %unction ccc, the call to the %unction ptr/*0&( is same as calling ccc&(. So it results in printing -b!e-. 4*O( main&( Y int i)@M print%&WLdX,i)++i ))$(M Z Answer: 1 Explanation:
Freshersworld.com Resource Center

8$

First Job. Dream Job. Freshersworld.com The e"pression can be treated as i ) &++i))$(, because )) is o% higher precedence than ) operator. In the inner e"pression, ++i is eSual to $ !ielding true&4(. 3ence the result. 4*#( main&( Y char p/ 0)-LdPn-M p/40 ) DcDM print%&p,$@(M Z Answer: A Explanation: Due to the assignment p/40 ) JcK the string becomes, WLcPnX. Since this string becomes the %ormat string %or print% and ASCII alue o% $@ is JAK, the same gets printed. 4*:( oid & 1 abc& int, oid & 1de%( &( ( ( &(M Ans+er,, abc is a ptr to a %unction +hich ta7es * parameters .&a(. an integer ariable.&b(. a ptrto a %untion +hich returns oid. the return t!pe o% the %unction is oid. Explanation: Appl! the cloc7<+ise rule to %ind the result. 4A9( main&( Y +hile &strcmp&WsomeX,XsomeP9X(( print%&WStrings are not eSualPnX(M Z Answer: ;o output Explanation: Tnding the string constant +ith P9 e"plicitl! ma7es no di%%erence. So WsomeX and WsomeP9X are eSui alent. So, strcmp returns 9 &%alse( hence brea7ing out o% the +hile loop. main&( Y char str4/0 ) YJsK,KoK,KmK,KeKZM char str*/0 ) YJsK,KoK,KmK,KeK,KP9KZM +hile &strcmp&str4,str*(( print%&WStrings are not eSualPnX(M Z
Freshersworld.com Resource Center

4A4(

8O

First Job. Dream Job. Freshersworld.com Answer: WStrings are not eSualX WStrings are not eSualX _. Explanation: I% a string constant is initiali'ed e"plicitl! +ith characters, JP9K is not appended automaticall! to the string. Since str4 doesnKt ha e null termination, it treats +hate er the alues that are in the %ollo+ing positions as part o% the string until it randoml! reaches a JP9K. So str4 and str* are not the same, hence the result. 4A*( main&( Y int i ) AM %or &Mi++)9M( print%&WLdX,i(M Z Answer: Compiler Trror, F alue reSuired. Explanation: As +e 7no+ that increment operators return r alues and hence it cannot appear on the le%t hand side o% an assignment operation. 4AA( Y int 1mptr, 1cptrM mptr ) &int1(malloc&si'eo%&int((M print%&WLdX,1mptr(M int 1cptr ) &int1(calloc&si'eo%&int(,4(M print%&WLdX,1cptr(M Z Answer: garbage< alue 9 Explanation: The memor! space allocated b! malloc is uninitiali'ed, +hereas calloc returns the allocated memor! space initiali'ed to 'eros. 4A8( Y static int iM +hile&i>)49( &i=*(\i++,i<<M print%&WLdX, i(M Z Answer:
Freshersworld.com Resource Center

oid main&(

oid main&(

8#

First Job. Dream Job. Freshersworld.com A*O$O Explanation: Since i is static it is initiali'ed to 9. Inside the +hile loop the conditional operator e aluates to %alse, e"ecuting i<<. This continues till the integer alue rotates to positi e alue &A*O$O(. The +hile condition becomes %alse and hence, comes out o% the +hile loop, printing the i alue. 4A@( main&( Y int i)49,V)*9M V ) i, V\&i,V(\i,V,VM print%&-Ld Ld-,i,V(M Z Answer: 49 49 Explanation: The Ternar! operator & \ , ( is eSui alent %or i%<then<else statement. So the Suestion can be +ritten as, i%&i,V( Y i%&i,V( V ) iM else V ) VM Z else V ) VM 4A$( 4. const char 1aM *. char1 const aM A. char const 1aM <Di%%erentiate the abo e declarations. Answer: 4. DconstD applies to char 1 rather than DaD & pointer to a constant char ( 1a)D6D , illegal a)-3i, legal *. DconstD applies to DaD rather than to the alue o% a &constant pointer to char ( 1a)D6D a)-3i, legal , illegal

Freshersworld.com Resource Center

8:

First Job. Dream Job. Freshersworld.com A. Same as 4. 4AO( main&( Y int i)@,V)49M i)iG)VGG49M print%&-Ld Ld-,i,V(M Z Answer: 4 49 Explanation: The e"pression can be +ritten as i)&iG)&VGG49((M The inner e"pression &VGG49( e aluates to 4 because V))49. i is @. i ) @G4 is 4. 3ence the result. 4A#( main&( Y int i)8,V)OM V ) V II i++ GG print%&-UO5 CA;-(M print%&-Ld Ld-, i, V(M Z Answer: 84 Explanation: Jh% 'oo$%an %3pr%ssion n%%ds to '% %va$&at%d on$( ti$$ th% tr&th va$&% of th% %3pr%ssion is not 5no;n. V is not eSual to 'ero itsel% means that the e"pressionKs truth alue is 4. .ecause it is %ollo+ed b! II and tr&% 88 (an(thin=) =C tr&% ;h%r% (an(thin=) ;i$$ not '% %va$&at%d. So the remaining e"pression is not e aluated and so the alue o% i remains the same. Similarl! +hen GG operator is in ol ed in an e"pression, +hen an! o% the operands become %alse, the +hole e"pressionKs truth alue becomes %alse and hence the remaining e"pression +ill not be e aluated. fa$s% 77 (an(thin=) =C fa$s% ;h%r% (an(thin=) ;i$$ not '% %va$&at%d. 4A:( main&( Y register int a)*M print%&-Address o% a ) Ld-,Ga(M print%&-Ralue o% a ) Ld-,a(M Z Answer: Compier Trror, DGD on register ariable
Freshersworld.com Resource Center

@9

First Job. Dream Job. Freshersworld.com Rule to Remember: & (address of ) operator cannot be applied on register variables 489( main&( Y %loat i)4.@M s+itch&i( Y case 4, print%&-4-(M case *, print%&-*-(M de%ault , print%&-9-(M Z Z Answer: Compiler Trror, s+itch e"pression not integral Explanation: K;itch stat%m%nts can '% app$i%d on$( to int%=ra$ t(p%s. 484( main&( Y e"tern iM print%&-LdPn-,i(M Y int i)*9M print%&-LdPn-,i(M Z Z Answer: Fin7er Trror , 5nresol ed e"ternal s!mbol i Explanation: The identi%ier i is a ailable in the inner bloc7 and so using e"tern has no use in resol ing it. 48*( main&( Y int a)*,1%4,1%*M %4)%*)GaM 1%*+)1%*+)a+)*.@M print%&-PnLd Ld Ld-,a,1%4,1%*(M Z Answer: 4$ 4$ 4$ Explanation: %4 and %* both re%er to the same memor! location a. So changes through %4 and %* ultimatel! a%%ects onl! the alue o% a.

Freshersworld.com Resource Center

@4

First Job. Dream Job. Freshersworld.com 48A( main&( Y char 1p)-2OOD-M char a/ 0)-2OOD-M print%&-Pn si'eo%&p( ) Ld, si'eo%&1p( ) Ld, strlen&p( ) Ld-, si'eo%&p(, si'eo%&1p(, strlen&p((M print%&-Pn si'eo%&a( ) Ld, strlen&a( ) Ld-, si'eo%&a(, strlen&a((M Z Answer: si'eo%&p( ) *, si'eo%&1p( ) 4, strlen&p( ) 8 si'eo%&a( ) @, strlen&a( ) 8 Explanation: si'eo%&p( )= si'eo%&char1( )= * si'eo%&1p( )= si'eo%&char( )= 4 Similarl!, si'eo%&a( )= si'e o% the character arra! )= @ ?h%n si9%of op%rator is app$i%d to an arra( it r%t&rns th% si9%of th% arra( and it is not the same as the si'eo% the pointer ariable. 3ere the si'eo%&a( +here a is the character arra! and the si'e o% the arra! is @ because the space necessar! %or the terminating ;5FF character should also be ta7en into account. 488( Nde%ine DIC& arra!, t!pe( si'eo%&arra!(/si'eo%&t!pe( main&( Y int arr/490M print%&WThe dimension o% the arra! is LdX, DIC&arr, int((M Z Answer: 49 Explanation: The si'e o% integer arra! o% 49 elements is 49 1 si'eo%&int(. The macro e"pands to si'eo%&arr(/si'eo%&int( )= 49 1 si'eo%&int( / si'eo%&int( )= 49. int DIC&int arra!/0( Y return si'eo%&arra!(/si'eo%&int (M Z main&( Y int arr/490M print%&WThe dimension o% the arra! is LdX, DIC&arr((M Z Answer: 4
Freshersworld.com Resource Center

48@(

@*

First Job. Dream Job. Freshersworld.com Explanation: Grra(s cannot '% pass%d to f&nctions as ar=&m%nts and on$( th% point%rs can '% pass%d. So the argument is eSui alent to int 1 arra! &this is one o% the er! %e+ places +here /0 and 1 usage are eSui alent(. The return statement becomes, si'eo%&int 1(/ si'eo%&int( that happens to be eSual in this case. 48$( main&( Y static int a/A0/A0)Y4,*,A,8,@,$,O,#,:ZM int i,VM static 1p/0)Ya,a+4,a+*ZM %or&i)9Mi>AMi++( Y %or&V)9MV>AMV++( print%&-LdPtLdPtLdPtLdPn-,1&1&p+i(+V(, 1&1&V+p(+i(,1&1&i+p(+V(,1&1&p+V(+i((M Z Z Answer: 4 * A 8 @ $ O # : 4 8 O * @ # A $ : 4 * A 8 @ $ O # : 4 8 O * @ # A $ :

Explanation: 1&1&p+i(+V( is eSui alent to p/i0/V0. 48O( main&( Y oid s+ap&(M int ")49,!)#M s+ap&G",G!(M print%&-")Ld !)Ld-,",!(M Z oid s+ap&int 1a, int 1b( Y 1a ]) 1b, 1b ]) 1a, 1a ]) 1bM Z Answer: ")49 !)# Explanation:
Freshersworld.com Resource Center

@A

First Job. Dream Job. Freshersworld.com 5sing ] li7e this is a +a! to s+ap t+o ariables +ithout using a temporar! ariable and that too in a single statement. Inside main&(, oid s+ap&(M means that s+ap is a %unction that ma! ta7e an! number o% arguments &not no arguments( and returns nothing. So this doesnKt issue a compiler error b! the call s+ap&G",G!(M that has t+o arguments. This con ention is historicall! due to pre<A;SI st!le &re%erred to as [ernighan and Hitchie st!le( st!le o% %unction declaration. In that st!le, the s+ap %unction +ill be de%ined as %ollo+s, oid s+ap&( int 1a, int 1b Y 1a ]) 1b, 1b ]) 1a, 1a ]) 1bM Z +here the arguments %ollo+ the &(. So naturall! the declaration %or s+ap +ill loo7 li7e, oid s+ap&( +hich means the s+ap can ta7e an! number o% arguments. 48#( main&( Y int i ) *@OM int 1iPtr ) GiM print%&-Ld Ld-, 1&&char1(iPtr(, 1&&char1(iPtr+4( (M Z Answer: 44 Explanation: The integer alue *@O is stored in the memor! as, 99999994 99999994, so the indi idual b!tes are ta7en b! casting it to char 1 and get printed. 48:( main&( Y int i ) *@#M int 1iPtr ) GiM print%&-Ld Ld-, 1&&char1(iPtr(, 1&&char1(iPtr+4( (M Z Answer: *4 Explanation: The integer alue *@O can be represented in binar! as, 99999994 99999994. Hemember that the I;TTF machines are Jsmall<endianK machines. Kma$$,%ndian m%ans that th% $o;%r ord%r '(t%s ar% stor%d in th% hi=h%r m%mor( addr%ss%s and th% hi=h%r ord%r '(t%s ar% stor%d in $o;%r addr%ss%s. The integer alue *@# is stored in memor! as, 99999994 99999949.

Freshersworld.com Resource Center

@8

First Job. Dream Job. Freshersworld.com 4@9( main&( Y int i)A99M char 1ptr ) GiM 1++ptr)*M print%&-Ld-,i(M Z Answer: @@$ Explanation: The integer alue A99 in binar! notation is, 99999994 99494499. It is stored in memor! &small<endian( as, 99494499 99999994. Hesult o% the e"pression 1++ptr ) * ma7es the memor! representation as, 99494499 99999949. So the integer corresponding to it is 99999949 99494499 )= @@$. 4@4( Ninclude >stdio.h= main&( Y char 1 str ) -hello-M char 1 ptr ) strM char least ) 4*OM +hile &1ptr++( least ) &1ptr>least ( \1ptr ,leastM print%&-Ld-,least(M Z Answer: 9 Explanation: A%ter JptrK reaches the end o% the string the alue pointed b! JstrK is JP9K. So the alue o% JstrK is less than that o% JleastK. So the alue o% JleastK %inall! is 9. Declare an arra! o% ; pointers to %unctions returning pointers to %unctions returning pointers to characters\ Answer: &char1&1(& (( &1ptr/;0(& (M main&( Y struct student Y char name/A90M struct date dobM ZstudM struct date
Freshersworld.com Resource Center

4@*(

4@A(

@@

First Job. Dream Job. Freshersworld.com Y int da!,month,!earM ZM scan%&-LsLdLdLd-, stud.rollno, Gstudent.dob.month, Gstudent.dob.!ear(M

Gstudent.dob.da!,

Z Answer: Compiler Trror, 5nde%ined structure date Explanation: Inside the struct de%inition o% JstudentK the member o% t!pe struct date is gi en. The compiler doesnKt ha e the de%inition o% date structure &%or+ard re%erence is not allo+ed in C in this case( so it issues an error. 4@8( main&( Y struct dateM struct student Y char name/A90M struct date dobM ZstudM struct date Y int da!,month,!earM ZM scan%&-LsLdLdLd-, stud.rollno, Gstudent.dob.month, Gstudent.dob.!ear(M

Gstudent.dob.da!,

Z Answer: Compiler Trror, 5nde%ined structure date Explanation: Onl! declaration o% struct date is a ailable inside the structure de%inition o% JstudentK but to ha e a ariable o% t!pe struct date the de%inition o% the structure is reSuired. 4@@( There +ere 49 records stored in Wsome%ile.datX but the %ollo+ing program printed 44 names. Bhat +ent +rong\ oid main&( Y struct student Y char name/A90, rollno/$0M ZstudM 6IFT 1%p ) %open&Wsome%ile.datX,XrX(M +hile&?%eo%&%p((
Freshersworld.com Resource Center

@$

First Job. Dream Job. Freshersworld.com Y %read&Gstud, si'eo%&stud(, 4 , %p(M puts&stud.name(M Z Z Explanation: %read reads 49 records and prints the names success%ull!. It +ill return TO6 onl! +hen %read tries to read another record and %ails reading TO6 &and returning TO6(. So it prints the last record again. A%ter this onl! the condition %eo%&%p( becomes %alse, hence comes out o% the +hile loop. 4@$( Is there an! di%%erence bet+een the t+o declarations, 4. int %oo&int 1arr/0( and *. int %oo&int 1arr/*0( Answer: ;o Explanation: 6unctions can onl! pass pointers and not arra!s. The numbers that are allo+ed inside the /0 is Vust %or more readabilit!. So there is no di%%erence bet+een the t+o declarations. Bhat is the subtle error in the %ollo+ing code segment\ oid %un&int n, int arr/0( Y int 1p)9M int i)9M +hile&i++>n( p ) Garr/i0M 1p ) 9M Z Answer & Explanation: I% the bod! o% the loop ne er e"ecutes p is assigned no address. So p remains ;5FF +here 1p )9 ma! result in problem &ma! rise to runtime error W;5FF pointer assignmentX and terminate the program(. Bhat is +rong +ith the %ollo+ing code\ int 1%oo&( Y int 1s ) malloc&si'eo%&int(499(M assert&s ?) ;5FF(M return sM Z Answer & Explanation:
Freshersworld.com Resource Center

4@O(

4@#(

@O

First Job. Dream Job. Freshersworld.com assert macro should be used %or debugging and %inding out bugs. The chec7 s ?) ;5FF is %or error/e"ception handling and %or that assert shouldnKt be used. A plain i% and the corresponding remed! statement has to be gi en. 4@:( Bhat is the hidden bug +ith the %ollo+ing statement\ assert& al++ ?) 9(M Answer & Explanation: Assert macro is used %or debugging and remo ed in release ersion. In assert, the e"perssion in ol es side<e%%ects. So the beha ior o% the code becomes di%%erent in case o% debug ersion and the release ersion thus leading to a subtle bug. Rule to Remember: LonMt &s% %3pr%ssions that hav% sid%,%ff%cts in ass%rt stat%m%nts. oid main&( Y int 1i ) 9"899M // i points to the address 899 1i ) 9M // set the alue o% memor! location pointed b! iM Z Answer: 5nde%ined beha ior Explanation: The second statement results in unde%ined beha ior because it points to some location +hose alue ma! not be a ailable %or modi%ication. Jhis t(p% of point%r in ;hich th% non,avai$a'i$it( of th% imp$%m%ntation of th% r%f%r%nc%d $ocation is 5no;n as Eincomp$%t% t(p%E. 4$4( Nde%ine assert&cond( i%&?&cond(( P &%print%&stderr, -assertion %ailed, Ls, %ile Ls, line Ld Pn-,Ncond,P EE6IFTEE,EEFI;TEE(, abort&(( oid main&( Y int i ) 49M i%&i))9( assert&i > 499(M else print%&-This statement becomes else %or i% in assert macro-(M Z Ans+er, ;o output Explanation: The else part in +hich the print% is there becomes the else %or i% in the assert macro. 3ence nothing is printed.
Freshersworld.com Resource Center

4$9(

@#

First Job. Dream Job. Freshersworld.com The solution is to use conditional operator instead o% i% statement, Nde%ine assert&cond( &&cond(\&9(, &%print% &stderr, -assertion %ailed, P Ls, %ile Ls, line Ld Pn-,Ncond, EE6IFTEE,EEFI;TEE(, abort&((( ;ote, 3o+e er this problem o% Wmatching +ith nearest elseX cannot be sol ed b! the usual method o% placing the i% statement inside a bloc7 li7e this, Nde%ine assert&cond( Y P i%&?&cond(( P &%print%&stderr, -assertion %ailed, Ls, %ile Ls, line Ld Pn-,Ncond,P EE6IFTEE,EEFI;TEE(, abort&(( P Z 4$*( Is the %ollo+ing code legal\ struct a Y int "M struct a bM Z Ans+er, ;o Explanation: Is it not legal %or a structure to contain a member that is o% the same t!pe as in this case. .ecause this +ill cause the structure declaration to be recursi e +ithout end. Is the %ollo+ing code legal\ struct a Y int "M struct a 1bM Z Answer: Ues. Explanation: 1b is a pointer to t!pe struct a and so is legal. The compiler 7no+s, the si'e o% the pointer to a structure e en be%ore the si'e o% the structure is determined&as !ou 7no+ the pointer to an! t!pe is o% same si'e(. This t!pe o% structures is 7no+n as Jsel%<re%erencingK structure. Is the %ollo+ing code legal\ t!pede% struct a Y int "M aT!pe 1bM
Freshersworld.com Resource Center

4$A(

4$8(

@:

First Job. Dream Job. Freshersworld.com ZaT!pe Answer: ;o Explanation: The t!pename aT!pe is not 7no+n at the point o% declaring the structure &%or+ard re%erences are not made %or t!pede%s(. 4$@( Is the %ollo+ing code legal\ t!pede% struct a aT!peM struct a Y int "M aT!pe 1bM ZM Answer: Ues Explanation: The t!pename aT!pe is 7no+n at the point o% declaring the structure, because it is alread! t!pede%ined. Is the %ollo+ing code legal\ oid main&( Y t!pede% struct a aT!peM aT!pe someRariableM struct a Y int "M aT!pe 1bM ZM Z Answer: ;o Explanation: Bhen the declaration, t!pede% struct a aT!peM is encountered bod! o% struct a is not 7no+n. This is 7no+n as Jincomplete t!pesK. oid main&( Y print%&Wsi'eo% & oid 1( ) Ld PnW, si'eo%& oid 1((M print%&Wsi'eo% &int 1( ) Ld PnX, si'eo%&int 1((M print%&Wsi'eo% &double 1( ) Ld PnX, si'eo%&double 1((M print%&Wsi'eo%&struct un7no+n 1( ) Ld PnX, si'eo%&struct un7no+n 1((M Z
Freshersworld.com Resource Center

4$$(

4$O(

$9

First Job. Dream Job. Freshersworld.com Answer : si'eo% & oid 1( ) * si'eo% &int 1( ) * si'eo% &double 1( ) * si'eo%&struct un7no+n 1( ) * Explanation: The pointer to an! t!pe is o% same si'e. 4$#( char inputString/4990 ) Y9ZM To get string input %rom the 7e!board +hich one o% the %ollo+ing is better\ 4( gets&inputString( *( %gets&inputString, si'eo%&inputString(, %p( Answer & Explanation: The second one is better because gets&inputString( doesnDt 7no+ the si'e o% the string passed and so, i% a er! big input &here, more than 499 chars( the charactes +ill be +ritten past the input string. Bhen %gets is used +ith stdin per%orms the same operation as gets but is sa%e. Bhich ersion do !ou pre%er o% the %ollo+ing t+o, 4( print%&WLsX,str(M // or the more curt one *( print%&str(M Answer & Explanation: Pre%er the %irst one. I% the str contains an! %ormat characters li7e Ld then it +ill result in a subtle bug. oid main&( Y int i)49, V)*M int 1ip) Gi, 1Vp ) GVM int 7 ) 1ip/1VpM print%&WLdX,7(M Z Answer: Compiler Trror, W5ne"pected end o% %ile in comment started in line @X. Explanation: The programmer intended to di ide t+o integers, but b! the Wma"imum munchX rule, the compiler treats the operator seSuence / and 1 as /1 +hich happens to be the starting o% comment. To %orce +hat is intended b! the programmer, int 7 ) 1ip/ 1VpM // gi e space e"plicit! separating / and 1 //or int 7 ) 1ip/&1Vp(M // put braces to %orce the intention +ill sol e the problem.

4$:(

4O9(

Freshersworld.com Resource Center

$4

First Job. Dream Job. Freshersworld.com 4O4( oid main&( Y char chM %or&ch)9Mch>)4*OMch++( print%&WLc Ld PnW, ch, ch(M Z Answer: Implementaion dependent Explanation: The char t!pe ma! be signed or unsigned b! de%ault. I% it is signed then ch++ is e"ecuted a%ter ch reaches 4*O and rotates bac7 to <4*#. Thus ch is al+a!s smaller than 4*O. 4O*( Is this code legal\ int 1ptrM ptr ) &int 1( 9"899M Answer: Ues Explanation: The pointer ptr +ill point at the integer in the memor! location 9"899. main&( Y char a/80)-3TFFO-M print%&-Ls-,a(M Z Answer: Compiler error, Too man! initiali'ers Explanation: The arra! a is o% si'e 8 but the string constant reSuires $ b!tes to get stored. 4O8( main&( Y char a/80)-3TFF-M print%&-Ls-,a(M Z Answer: 3TFFLa?`a?a\\\a``? Explanation: The character arra! has the memor! Vust enough to hold the string W3TFFX and doesnt ha e enough space to store the terminating null character. So it prints the 3TFF correctl! and continues to print garbage alues till it accidentall! comes across a ;5FF character. 4O@( main&(
Freshersworld.com Resource Center

4OA(

$*

First Job. Dream Job. Freshersworld.com Y int a)49,1VM oid 17M V)7)GaM V++M 7++M print%&-Pn Lu Lu -,V,7(M Z Answer: Compiler error, Cannot increment a oid pointer Explanation: Roid pointers are generic pointers and the! can be used onl! +hen the t!pe is not 7no+n and as an intermediate address storage t!pe. ;o pointer arithmetic can be done on it and !ou cannot appl! indirection operator &1( on oid pointers. 4O$( main&( Y Y Y Z print%&-Ld-,i(M Z print%&-Ld-,i(M Z int iM 4OO( Print% can be implemented b! using EEEEEEEEEE list. Answer: Rariable length argument lists 4O#( char 1some6un&( Y char 1temp ) Wstring constant-M return tempM Z int main&( Y puts&some6un&((M Z Ans+er, string constant Explanation, e"tern int iM int i)*9M const olatile unsigned i)A9M print%&-Ld-,i(M

Freshersworld.com Resource Center

$A

First Job. Dream Job. Freshersworld.com The program su%%ers no problem and gi es the output correctl! because the character constants are stored in code/data area and not allocated in stac7, so this doesnKt lead to dangling pointers. 4O:( char 1some6un4&( Y char temp/ 0 ) Wstring-M return tempM Z char 1some6un*&( Y char temp/ 0 ) YJsK, JtK,KrK,KiK,KnK,KgKZM return tempM Z int main&( Y puts&some6un4&((M puts&some6un*&((M Z Ans+er, 2arbage alues. Explanation, .oth the %unctions su%%er %rom the problem o% dangling pointers. In some6un4&( temp is a character arra! and so the space %or it is allocated in heap and is initiali'ed +ith character string WstringX. This is created d!namicall! as the %unction is called, so is also deleted d!namicall! on e"iting the %unction so the string data is not a ailable in the calling %unction main&( leading to print some garbage alues. The %unction some6un*&( also su%%ers %rom the same problem but the problem can be easil! identi%ied in this case.

Freshersworld.com Resource Center

$8