Monday, July 23, 2018

C Questions And Answers – 2018A23

There are many commonly asked questions regarding C programming language. Below are some collected such question-answer examples. The questions are usually related with Turbo C IDE in windows or GCC under Linux environment [not always].

For more such examples, click C_Q&A label.

 

-------------------------------------------------------------------------------------------------

 

Can we get the remainder of a floating point division?

 

Ans:

Yes. Although the % operator fails to work on float numbers we can still get the remainder of floating point division by using a function fmod( ). The fmod( ) function divides the two float numbers passed to it as parameters and returns the remainder as a floating-point value.

 

Following program shows fmod( ) function at work.

 

#include <math.h>

 

main( )

{

printf ( "%f", fmod ( 5.15, 3.0 ) ) ;

}

 

The above code snippet would give the output as 2.150000.

 

-------------------------------------------------------------------------------------------------

 

How to extract the integer part and a fractional part of a floating point number?

 

Ans:

C function modf( ) can be used to get the integer and fractional part of a floating point.

 

#include "math.h"

 

main( )

{

double val, i, f ;

val = 5.15 ;

f = modf ( val, &i ) ;

printf ( "\nFor the value %f integer part = %f and fractional part = %f",

val, i, f ) ;

}

 

The output of the above program will be:

For the value 5.150000 integer part = 5.000000 and fractional part = 0.150000

 

-------------------------------------------------------------------------------------------------

 

How do I define a pointer to a function which returns a char pointer?

 

Ans:

char * ( *p )( ) ;

or

typedef char * ( * ptrtofun )( ) ;

ptrtofun p ;

 

Here is a sample program which uses this definition.

main( )

{

typedef char * ( * ptrtofun ) ( ) ;

char * fun( ) ;

ptrtofun fptr ;

char *cptr ;

fptr = fun ;

cptr = (*fptr) ( ) ;

printf ( "\nReturned string is \"%s\"", cptr ) ;

}

char *fun( )

{

static char s[ ] = "Hello!" ;

printf ( "\n%s", s ) ;

return s ;

}

 

-------------------------------------------------------------------------------------------------

 

What's wrong with the following declaration: char* ptr1, ptr2 ; get errors when I try to use ptr2 as a pointer.

 

Ans:

char * applies only to ptr1 and not to ptr2. Hence ptr1 is getting declared as a char pointer, whereas, ptr2 is being declared merely as a char. This can be rectified in two ways:

char *ptr1, *ptr2 ;

typedef char* CHARPTR ; CHARPTR ptr1, ptr2 ;

 

-------------------------------------------------------------------------------------------------

 

How to use scanf( ) to read the date in the form of dd-mm-yy?

 

Ans:

To read the date in the form of dd-mm-yy one possible way is,

int dd, mm, yy ;

char ch ; /* for char '-' */

printf ( "\nEnter the date in the form of dd-mm-yy : " ) ;

scanf( "%d%c%d%c%d", &dd, &ch, &mm, &ch, &yy ) ;

 

Another way is to use suppression character * is as follows:

int dd, mm, yy ;

scanf( "%d%*c%d%*c%d", &dd, &mm, &yy ) ;

 

The suppression character '*' suppresses the input read from the standard input buffer for the assigned control character.

 

-------------------------------------------------------------------------------------------------

 

Why the output of sizeof ( 'a' ) is 2 and not 1 ?

 

Ans:

Character constants in C are of type int, hence sizeof ( 'a' ) is equivalent to sizeof ( int ), i.e. 2. Hence the output comes out to be 2 bytes.

 

-------------------------------------------------------------------------------------------------

 

Can we use scanf( ) function to scan a multiple words string through keyboard?

 

Ans:

Yes. Although we usually use scanf( ) function to receive a single word string and gets( ) to receive a multi-word string from keyboard we can also use scanf( ) function for scanning a multi-word string from keyboard.

 

Following program shows how to achieve this.

 

main( )

{

char buff[15] ;

scanf ( "%[^\n]s", buff ) ;

puts ( buff ) ;

}

 

In the scanf( ) function we can specify the delimiter in brackets after the ^ character. We have specified '\n' as the delimiter. Hence scanf( ) terminates only when the user hits Enter key.

 

-------------------------------------------------------------------------------------------------

 

How to set the system date through a C program ?

 

Ans:

We can set the system date using the setdate( ) function as shown in the following program. The function assigns the current time to a structure date.

 

#include "stdio.h"

#include "dos.h"

 

main( )

{

struct date new_date ;

new_date.da_mon = 10 ;

new_date.da_day = 14 ;

new_date.da_year = 1993 ;

setdate ( &new_date ) ;

}

 

-------------------------------------------------------------------------------------------------

 

How can I write a general-purpose swap without using templates?

 

Ans:

Given below is the program which uses the stringizing preprocessor directive ## for building a general purpose swap macro which can swap two integers, two floats, two chars, etc.

 

#define swap( a, b, t ) ( g ## t = ( a ), ( a ) = ( b ), ( b ) = g ## t )

 

int gint;

char gchar;

float gfloat ;

 

main( )

{

int a = 10, b = 20 ;

char ch1 = 'a' , ch2 = 'b' ;

float f1 = 1.12, f2 = 3.14 ;

swap ( a, b, int ) ;

printf ( "\na = %d b = %d", a, b ) ;

swap ( ch1, ch2, char ) ;

printf ( "\nch1 = %c ch2 = %c", ch1, ch2 ) ;

swap ( f1, f2, float ) ;

printf ( "\nf1 = %4.2f f2 = %4.2f", f1, f2 ) ;

}

swap ( a, b, int ) would expand to,( gint = ( a ), ( a ) = ( b ), ( b ) = gint )

 

-------------------------------------------------------------------------------------------------

 

What is a heap?

 

Ans:

 

Heap is a chunk of memory. When in a program memory is allocated dynamically, the C runtime library gets the memory from a collection of unused memory called the heap. The heap resides in a program's data segment. Therefore, the amount of heap space available to the program is fixed, and can vary from one program to another.

 

-------------------------------------------------------------------------------------------------

 

…till next post, bye-bye & take care.

No comments:

Post a Comment