Translate

Labels

Monday, 25 March 2013

C PUZZLE


  •    main(){

char c=' ',x,convert(z);
getc(c);
if((c>='a') && (c<='z'))
x=convert(c);
printf("%c",x);
}
convert(z){
return z-32;
}
Answer:
Compiler error
Explanation:
Declaration of convert and format of getc() are wrong.

  •   main(int argc, char **argv){

printf("enter the character");
getchar();
sum(argv[1],argv[2]);
}
sum(num1,num2)int num1,num2;{
return num1+num2;
}
Answer:
Compiler error.
Explanation:
argv[1] & argv[2] are strings. They are passed to the function sum without converting it to integer values. 

  •   int one_d[]={1,2,3};

main(){
int *ptr;
ptr=one_d;
ptr+=3;
printf("%d",*ptr);
}
Answer:
garbage value
Explanation:
ptr pointer is pointing to out of the array range of one_d.

  •    aaa() {

printf("hi");
}
bbb(){
printf("hello");
}
ccc(){
printf("bye");
}
main(){
int (*ptr[3])();
ptr[0]=aaa;
ptr[1]=bbb;
ptr[2]=ccc;
ptr[2]();
}
Answer:
bye
Explanation:
ptr is array of pointers to functions of return type int.ptr[0] is assigned to address of the function aaa. Similarly ptr[1] and ptr[2] for bbb and ccc respectively. ptr[2]() is in effect of writing ccc(), since ptr[2] points to ccc.

  •    main(){

FILE *ptr;
char i;
ptr=fopen("zzz.c","r");
while((i=fgetch(ptr))!=EOF)
printf("%c",i);
}
Answer:
contents of zzz.c followed by an infinite loop 
      Explanation:
The condition is checked against EOF, it should be checked against NULL.

  •    main(){

int i =0;j=0;
if(i && j++)
            printf("%d..%d",i++,j);
printf("%d..%d,i,j);
}
Answer:
0..0
Explanation:
The value of i is 0. Since this information is enough to determine the truth value of the boolean expression. So the statement following the if statement is not executed.  The values of i and j remain unchanged and get printed.
     
  •    main(){

int i;
i = abc();
printf("%d",i);
}
abc(){
_AX = 1000;
}
Answer:
1000
Explanation:
Normally the return value from the function is through the information from the accumulator. Here _AH is the pseudo global variable denoting the accumulator. Hence, the value of the accumulator is set 1000 so the function returns value 1000.

  •   int i;

            main(){
int t;
for ( t=4;scanf("%d",&i)-t;printf("%d\n",i))
                  printf("%d--",t--);
            }
      // If the inputs are 0,1,2,3 find the o/p
Answer:
      4--0
            3--1
            2--2
Explanation:
Let us assume some x= scanf("%d",&i)-t the values during execution will be,
          t        i       x
          4       0      -4
          3       1      -2
          2       2       0
  •   main(){

int a= 0;int b = 20;char x =1;char y =10;
if(a,b,x,y)
printf("hello");
 }
Answer:
hello
Explanation:
The comma operator has associativity from left to right. Only the rightmost value is returned and the other values are evaluated and ignored. Thus the value of last variable y is returned to check in if. Since it is a non zero value if becomes true so, "hello" will be printed.

  • main(){

unsigned int i;
for(i=1;i>-2;i--)
printf("c aptitude");
}
Explanation:
i is an unsigned integer. It is compared with a signed value. Since the both types doesn't match, signed is promoted to unsigned value. The unsigned equivalent of -2 is a huge value so condition becomes false and control comes out of the loop.

      In the following pgm add a  stmt in the function  fun such that the address of  'a' gets stored in 'j'.

No comments: