What do you think about the following *C Code* ? What will be the output.

#include <stdio.h> int main (void) { static int a = 3; if (a == 0) { return 0; } printf ("going down\n"); a--; main (); printf ("coming up\n"); return 0; }

Skip to content
# Tag: C program

## C Q&A #4: Calling main recursively

## Detect Endianness of a System

## C Q&A #3: When ((x == x + 5) && (y != y)) is true.

## Get sorted index orderting of an array

## C Q&A #2: Watch your shift!

## C Q&A #1: How many bits are there in a byte?

## C Q&A #0: Returning address of local variable

## Number of trailing zeros in factorial of an integer

## Find Sum (i … j) in a list

## Find a String in an Alphabet Grid

What do you think about the following *C Code* ? What will be the output.

#include <stdio.h> int main (void) { static int a = 3; if (a == 0) { return 0; } printf ("going down\n"); a--; main (); printf ("coming up\n"); return 0; }

In a previous post “Little and Big Endian conversion” i have briefly discussed about the Big-Endian and the Little-Endian representations. It is the ordering of the bytes (elementary addressable elements) within the representation of a larger basic data type. These are the two byte orderings in the memory within a larger datatype. For example if the size of integer is 4 bytes in a system, then will the least significant byte be stored in the lower memory address or in the higher memory address. In short: if the most significant byte is stored in higher memory address then it is called the Little Endian representation, and if the most significant byte is stored in lower memory address than the least significant byte then it is called the Big-Endian representation. For a diagram see the post “Little and Big Endian conversion”. Also refer the Wikipedia Entry on Endianness.

So how to determine if your system a Little Endian system or a Big Endian system by running a piece of code? Continue reading “Detect Endianness of a System”

The post heading gives an expression which is a contradiction and not possible. In general yes it is a contradiction, but can you write a code such that the below code prints “Hello World.” ?

/* Add source code in the following code such that "Hello World." is printed. */ #include <stdio.h> #include <math.h> int main (void) { if (x == x + 5) { printf ("Hello "); } if (y != y) { printf ("World.\n"); } return 0; }

Continue reading “C Q&A #3: When ((x == x + 5) && (y != y)) is true.”

Yesterday i was translating some code i wrote in R to C++. I had some calculation to do which required the list of index of the top `n` values in a list. Therefore what i needed was not a the list sorted itself or get a sorted copy of a given list, but actually the sorted order of the index into the actual array. To describe the problem, for example consider the following list:

arr = 20 50 40 80 10

The sorted (non-decreasing) ordering of the values is obviously

sorted_arr = 10 20 40 50 80

The sorted (non-decreasing) ordering of the index into the original array is (index starts at 1 in this example)

sorted_index_into_arr = 5 1 3 2 4

Therefore the smallest value in the list `arr` could be found by indexing into `arr` using the first value of `sorted_index_into_arr`, which stores the index of the array `arr` holding the smallest value.

arr[ sorted_index_into_arr[1] ]

The sorted index ordering is very easy to get in languages like R and Octave or Matlab. For example in R we can do the following to get the sorted index order using the `order` function:

> arr <- c (20, 50, 40, 80, 10) > arr [1] 20 50 40 80 10 > order (arr) [1] 5 1 3 2 4

In the case of Octave or Matlab you can get the index order using the `sort` function, which will return two lists (1xn matrix), the first list is the sorted array itself, and the next one is the sorted index order into the original array.

octave:1> a = [20 50 40 80 10] a = 20 50 40 80 10 octave:2> [sorted index] = sort (a) sorted = 10 20 40 50 80 index = 5 1 3 2 4

Although these functional languages provides gives these features in C/C++ it is not immediately available using the builtin sort library functions. But the sorting routines accepts a function pointer to a comparison function, writing appropriate code for which will do the trick.

Continue reading “Get sorted index orderting of an array”

What do you this should be the output of the below code? Is there any problem in the code?

#include <stdio.h> int main(void) { int x = -1, y = 1, a, b, c, d, e, f; a = x << 4; b = x >> 4; c = y << 4; d = y >> 4; e = y << sizeof (int) * 8; f = y << -4; printf("a = %x \nb = %x \nc = %x \nd = %x \ne = %x \nf = %x",a, b, c, d, e, f); printf ("\n"); return 0; }

The question is simple: How many bits are there in a byte. But the answer is not that straight, there is a “but” after the answer we all know.

Continue reading “C Q&A #1: How many bits are there in a byte?”

The below code is given. You need to determine what the output will be, or if there is an error.

#include<stdio.h> int main() { int *j; int *fun(); j = fun(); printf("%d\n",*j); printf("%d",*j); return 0; } int *fun() { int k = 35; return(&k); }

Continue reading “C Q&A #0: Returning address of local variable”

An integer `n` is given, the task is to find the number of trailing zeros in `n!` .

Continue reading “Number of trailing zeros in factorial of an integer”

The problem is to sum the `i ^{th}` to

Continue reading “Find Sum (i … j) in a list”

Everybody of us has definitely played the word search game in which a grid of characters are given, and a list of words are given which are to be found in the grid horizontally, vertically or diagonally. In this post i will show a simple solution to a more generalized version of the search which finds the strings in the grid with backtracking.

Continue reading “Find a String in an Alphabet Grid”