Popular questions asked in Placement Test Papers of IT Companies – Employment Test Papers, freshers – IT Graduates recruitment test papers.
Here are the C and C++ Language technical questions: With programs, error finding questions, debugging questions from C, C++, Java computer languages sample tech test paper questions.
The following program demonstrates how to get input from the user in graphics mode, echoed in the current colors and font size and font style.
#define ON 1
#define OFF 0
#include
main( )
{
char nameString[80], ageString[80] ;
int age, gd = DETECT, gm ;
initgraph ( &gd, &gm, “c:\\tc\\bgi” ) ;
setbkcolor ( BLUE ) ;
setcolor ( YELLOW ) ;
settextstyle ( GOTHIC_FONT, HORIZ_DIR, 0 ) ;
moveto ( 0, 0 ) ;
outtext ( “Enter your name: ” ) ;
getGrString ( nameString ) ;
moveto ( 0, gety( ) + textheight ( “A” ) ) ;
outtext ( “Name: ” ) ;
outtext ( nameString ) ;
moveto ( 0, gety( ) + textheight ( “A” ) ) ;
outtext ( “Press key to exit! ” ) ;
getch( ) ;
closegraph( ) ;
restorecrtmode( ) ;
}
getGrString ( char *inputString )
{
int stringIndex = 0, oldColor ;
char ch, outString[2] ;
/* xVal will store the screen position for each char */
int xVal[255] ;
outString[1] = 0 ;
xVal[0] = getx( ) ;
do
{
cursor ( ON ) ;
ch = getch( ) ;
cursor ( OFF ) ;
if ( ch == 0 ) /* avoid dealing with all special keys */
getch( ) ;
else
{
if ( ch == 8 ) /* backspace */
{
oldColor = getcolor( ) ;
–stringIndex ;
if ( stringIndex < 0 )
stringIndex = 0 ;
/* move to ( old horz position, current vert position ) */
moveto ( xVal[stringIndex], gety( ) ) ;
setcolor ( getbkcolor( ) ) ;
outString[0] = inputString[stringIndex] ;
outtext ( outString ) ;
moveto ( xVal [stringIndex], gety( ) ) ;
setcolor ( oldColor ) ;
}
else
{
inputString[stringIndex] = ch ;
outString[0] = ch ;
outtext ( outString ) ;
++stringIndex ;
xVal[stringIndex] = getx( ) ;
}
}
} while ( ch != 13 && ch != 10 ) ;
inputString[stringIndex] = 0 ;
}
cursor ( int on )
{
int curX, oldColor ;
/* we’ll use an underscore as a cursor */
char uBarStr[2] = { ‘_’, 0 } ;
if ( !on )
{
oldColor = getcolor( ) ;
setcolor ( getbkcolor( ) ) ;
}
/* save horizontal position before drawing cursor */
curX = getx( ) ;
outtext ( uBarStr ) ;
moveto ( curX, gety( ) ) ;
/* if we changed the color to erase cursor, change it back */
if ( !on )
setcolor ( oldColor ) ;
}
The function getGrString( ) echoes graphically the user input and stores it in a buffer, and the function cursor( ) handles the cursor position.
System Utility
What is garbage collection?
Ans: Suppose some memory space becomes reusable because a node is released from a linked list. Hence, we want the space to be available for future use. One way to bring this about is to immediately reinsert the space into the free-storage list. However, this method may be too time-consuming for the operating system. The operating system may periodically collect all the deleted space onto the free-storage list. The technique that does this collection is called Garbage Collection. Garbage Collection usually takes place in two steps: First the Garbage Collector runs through all lists, tagging whose cells are currently in use, and then it runs through the memory, collecting all untagged space onto the free-storage list. The Garbage Collection may take place when there is only some minimum amount of space or no space at all left in the free-storage list, or when the CPU is idle and has time to do the collection. Generally speaking, the Garbage Collection is invisible to the programmer.
How do I get the time elapsed between two function calls ?
Ans: The function difftime( ) finds the difference between two times. It calculates the elapsed time in seconds and returns the difference between two times as a double value.
#include
#include
#include
main( )
{
int a[] = { 2, -34, 56, 78, 112, 33, -7, 11, 45, 29, 6 } ;
int s ;
time_t t1, t2 ; // time_t defines the value used for time function
s = sizeof ( a ) / 2 ;
t1 = time ( NULL ) ;
sel_sort ( a, s ) ; // sort array by selection sort
bub_sort ( a, s ) ; // sort array by bubble sort method
t2 = time ( NULL ) ;
printf ( “\nThe difference between two function calls is %f”, difftime (
t2, t1 ) ) ;
}
In the above program we have called difftime( ) function that returns the time elapsed from t1 to t2.
General
main( )
{
char *s ;
s = fun ( 128, 2 ) ;
printf ( “\n%s”, s ) ;
}
fun ( unsigned int num, int base )
{
static char buff[33] ;
char *ptr ;
ptr = &buff [ sizeof ( buff ) - 1 ] ;
*ptr = ‘\0′ ;
do
{
*–ptr = “0123456789abcdef”[ num % base ] ;
num /= base ;
} while ( num != 0 ) ;
return ptr ;
}
The above program would convert the number 128 to the base 2. You can convert a number to a hexadecimal or octal form by passing the number and the base, to the function fun( ).
Data Structures
What is a priority queue?
Ans: As we know in a stack, the latest element is deleted and in a queue the oldest element is deleted. It may be required to delete an element with the highest priority in the given set of values and not only the oldest or the newest one. A data structure that supports efficient insertions of a new element and deletions of elements with the highest priority is known as priority queue. There are two types of priority queues: an ascending priority queue is a collection of items into which items can be inserted arbitrarily and from which only the smallest item can be removed. A descending order priority queue is similar but allows only the largest item to be deleted.
What is the difference between const char *p, char const *p, and char* const p ?
‘const char *p’ and ‘char const *p’ are the same, i.e. p points to a constant character. On the other hand, ‘char* const p’ means p is a constant pointer pointing to a character which means we cannot change the pointer p but we can change the character which p is pointing to.
What’s the difference between a null pointer, a NULL macro, the ASCII NUL character and a null string?
Ans: A null pointer is a pointer which doesn’t point anywhere. A NULL macro is used to represent the null pointer in source code. It has a value 0 associated with it. The ASCII NUL character has all its bits as 0 but doesn’t have any relationship with the null pointer. The null string is just another name for an empty string “”.
System Utility
Sparse Matrix…
A sparse matrix is one where most of its elements are zero. There is no precise definition as to know whether a matrix is sparsed or not, but it is a concept which we all can recognize intuitively. The natural method of representing matrices in memory as two-dimensional arrays may not be suitable for sparse matrices. That is one may save space by storing only those entries which may be nonzero. If this is done, then the matrix may be thought of as an ordered list of non-zero elements only. Information about a non-zero element has three parts:
an integer representing its row,
an integer representing its column and
the data associated with this element.
That is, each element of a matrix is uniquely characterized by its row and column position, say i, j. We might store that matrix as a list of 3-tuples of the form (i, j, data), as shown below,
Although the non-zero elements may be stored in the array in any order, keeping them ordered in some fashion may be advantageous for further processing. Note that above array is arranged in increasing order of the row number of non-zero elements. Moreover, for elements in the same row number, the array is arranged in order of increasing column number.
Pointers
What does the error “Null Pointer Assignment” mean and what causes this error?
Ans: The Null Pointer Assignment error is generated only in small and medium memory models. This error occurs in programs which attempt to change the bottom of the data segment. In Borland’s C or C++ compilers, Borland places four zero bytes at the bottom of the data segment, followed by the Borland copyright notice “Borland C++ – Copyright 1991 Borland Intl.”. In the small and medium memory models, a null pointer points to DS:0000. Thus assigning a value to the memory referenced by this pointer will overwrite the first zero byte in the data segment. At program termination, the four zeros and the copyright banner are checked. If either has been modified, then the Null Pointer Assignment error is generated. Note that the pointer may not truly be null, but may be a wild pointer that references these key areas in the data segment.
Data Structures
How to build an expression trees ?
Ans: An expression tree is a binary tree which is built from simple operands and operators of an (arithmetic or logical ) expression by placing simple operands as the leaves of a binary tree and the operators as the interior nodes. If an operator is binary , then it has two nonempty subtrees, that are its left and right operands (either simple operands or sub expressions). If an operator is unary, then only one of its subtrees is nonempty, the one on the left or right according as the operator is written on the right or left of its operand. We traditionally write some unary operators to the left of their operands, such as “-” ( unary negation) or the standard functions like log( ), sin( ) etc. Others are written on the right, such as the factorial function ()!. If the operator is written on the left, then in the expression tree we take its left subtree as empty. If it appears on the right, then its right subtree will be empty. An example of an expression tree is shown below for the expression ( -a < b ) or ( c + d ) .
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
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 run-time 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.
How to obtain a path of the given file?
Ans: The function searchpath( ) searches for the specified file in the subdirectories of the current path. Following program shows how to make use of the searchpath( ) function.
#include “dir.h”
void main ( int argc, char *argv[] )
{
char *path ;
if ( path = searchpath ( argv[ 1 ] ) )
printf ( “Pathname : %s\n”, path ) ;
else
printf ( “File not found\n” ) ;
}
Can we get the process identification number of the current program?
Ans: Yes! The macro getpid( ) gives us the process identification number of the program currently running. The process id. uniquely identifies a program. Under DOS, the getpid( ) returns the Program Segment Prefix as the process id. Following program illustrates the use of this macro.
#include
#include
void main( )
{
printf ( “The process identification number of this program is %X\n”,
getpid( ) ) ;
}
How do I write a function that takes variable number of arguments?
Ans: The following program demonstrates this.
#include
#include
void main( )
{
int i = 10 ;
float f = 2.5 ;
char *str = “Hello!” ;
vfpf ( “%d %f %s\n”, i, f, str ) ;
vfpf ( “%s %s”, str, “Hi!” ) ;
}
void vfpf ( char *fmt, … )
{
va_list argptr ;
va_start ( argptr, fmt ) ;
vfprintf ( stdout, fmt, argptr ) ;
va_end ( argptr ) ;
}
Here, the function vfpf( ) has called vfprintf( ) that take variable argument lists. va_list is an array that holds information required for the macros va_start and va_end. The macros va_start and va_end provide a portable way to access the variable argument lists. va_start would set up a pointer argptr to point to the first of the variable arguments being passed to the function. The macro va_end helps the called function to perform a normal return.
Can we change the system date to some other date?
Ans: Yes, We can! The function stime( ) sets the system date to the specified date. It also sets the system time. The time and date is measured in seconds from the 00:00:00 GMT, January 1, 1970. The following program shows how to use this function.
#include
#include
void main( )
{
time_t tm ;
int d ;
tm = time ( NULL ) ;
printf ( “The System Date : %s”, ctime ( &tm ) ) ;
printf ( “\nHow many days ahead you want to set the date : ” ) ;
scanf ( “%d”, &d ) ;
tm += ( 24L * d ) * 60L * 60L ;
stime ( &tm ) ;
printf ( “\nNow the new date is : %s”, ctime ( &tm ) ) ;
}
In this program we have used function ctime( ) in addition to function stime( ). The ctime( ) function converts time value to a 26-character long string that contains date and time.
How to use function strdup( ) in a program?
Ans : The string function strdup( ) copies the given string to a new location. The function uses malloc( ) function to allocate space required for the duplicated string. It takes one argument a pointer to the string to be duplicated. The total number of characters present in the given string plus one bytes get allocated for the new string. As this function uses malloc( ) to allocate memory, it is the programmer?s responsibility to deallocate the memory using free( ).
#include
#include
#include
void main( )
{
char *str1, *str2 = “double”;
str1 = strdup ( str2 ) ;
printf ( “%s\n”, str1 ) ;
free ( str1 ) ;
}
On including a file twice I get errors reporting redefinition of function.
How can I avoid duplicate inclusion?
Ans: Redefinition errors can be avoided by using the following macro definition. Include this definition in the header file.
#if !defined filename_h
#define filename_h
/* function definitions */
#endif
Replace filename_h with the actual header file name. For example, if name of file to be included is ‘goto.h’ then replace filename_h with ‘goto_h’.
How to write a swap( ) function which swaps the values of the variables using bitwise operators.
Ans: Here is the swap( ) function.
swap ( int *x, int *y )
{
*x ^= *y ;
*y ^= *x ;
*x ^= *y ;
}
The swap( ) function uses the bitwise XOR operator and does not require any temporary variable for swapping.
Note: Study all the C, C++ Computer languages questions here before taking an IT or computer job test. Sample questions for C, C++ software developers job test.