C Programming Viva Questions
C Programming Viva Questions
Questions
1- What is C language?
C is known as a mother language because most of the compilers and JVMs are
written in C language. Most of the languages which are developed after C language
has borrowed heavily from it like C++, Python, Rust, javascript, etc. It introduces new
core concepts like arrays, functions, file handling which are used in these languages.
C is called a mid-level programming language because it binds the low level and
high -level programming language. We can use C language as a System
programming to develop the operating system as well as an Application
programming to generate menu driven customer driven billing system.
Dennis Ritchie.
printf(): The printf() function is used to print the integer, character, float and string
values on to the screen.
scanf(): The scanf() function is used to take input from the user.
8- What is the difference between the local variable and global variable in
C?
Following are the differences between a local variable and global variable:
Basis for
Local variable Global variable
comparison
A variable which is declared inside A variable which is declared outside
Declaration function or block is known as a local function or block is known as a
variable. global variable.
The scope of a variable is available
The scope of a variable is available
Scope within a function in which they are
throughout the program.
declared.
Variables can be accessed only by those
Any statement in the entire program
Access statements inside a function in which
can access variables.
they are declared.
Life of a variable is created when the
Life of a variable exists until the
Life function block is entered and destroyed
program is executing.
on its exit.
Variables are stored in a stack unless The compiler decides the storage
Storage
specified. location of a variable.
• C functions are used to avoid the rewriting the same code again and again in
our program.
• C functions can be called any number of times from any place of our program.
• When a program is divided into functions, then any part of our program can
easily be tracked.
• C functions provide the reusability concept, i.e., it breaks the big task into
smaller tasks so that it makes the C program more understandable.
11- What is the difference between call by value and call by reference in C?
Following are the differences between a call by value and call by reference are:
1. #include <stdio.h>
2. void change(int,int);
3. int main()
4. {
5. int a=10,b=20;
6. change(a,b); //calling a function by passing the values of variables.
7. printf(“Value of a is: %d”,a);
8. printf(“\n”);
9. printf(“Value of b is: %d”,b);
10. return 0;
11. }
12. void change(int x,int y)
13. {
14. x=13;
15. y=17;
16. }
Output:
Value of a is: 10
Value of b is: 20
Example of call by reference:
1. #include <stdio.h>
2. void change(int*,int*);
3. int main()
4. {
5. int a=10,b=20;
6. change(&a,&b); // calling a function by passing references of variables.
7. printf(“Value of a is: %d”,a);
8. printf(“\n”);
9. printf(“Value of b is: %d”,b);
10. return 0;
11. }
12. void change(int *x,int *y)
13. {
14. *x=13;
15. *y=17;
16. }
Output:
Value of a is: 13
Value of b is: 17
1. Winding phase
2. Unwinding phase
Winding phase: When the recursive function calls itself, and this phase ends when
the condition is reached.
Unwinding phase: Unwinding phase starts when the condition is reached, and the
control returns to the original call.
Example of recursion
1. #include <stdio.h>
2. int calculate_fact(int);
3. int main()
4. {
5. int n=5,f;
6. f=calculate_fact(n); // calling a function
7. printf(“factorial of a number is %d”,f);
8. return 0;
9. }
10. int calculate_fact(int a)
11. {
12. if(a==1)
13. {
14. return 1;
15. }
16. else
17. return a*calculate_fact(a-1); //calling a function recursively.
18. }
Output:
Syntax:
1. data_type array_name[size];
Syntax:
1. data_type array_name[size];
Example of an array:
1. #include <stdio.h>
2. int main()
3. {
4. int arr[5]={1,2,3,4,5}; //an array consists of five integer values.
5. for(int i=0;i<5;i++)
6. {
7. printf(“%d “,arr[i]);
8. }
9. return 0;
10. }
Output:
12345
A pointer is a variable that refers to the address of a value. It makes the code
optimized and makes the performance fast. Whenever a variable is declared inside a
program, then the system allocates some memory to a variable. The memory
contains some address number. The variables that hold this address number is
known as the pointer variable.
For example:
1. Data_type *p;
The above syntax tells that p is a pointer variable that holds the address number of a
given data type value.
Example of pointer
1. #include <stdio.h>
2. int main()
3. {
4. int *p; //pointer of type integer.
5. int a=5;
6. p=&a;
7. printf(“Address value of ‘a’ variable is %u”,p);
8. return 0;
9. }
Output:
A pointer that doesn’t refer to any address of value but NULL is known as a NULL
pointer. When we assign a ‘0’ value to a pointer of any type, then it becomes a Null
pointer.
A pointer which can access all the 16 segments (whole residence memory) of RAM is
known as far pointer. A far pointer is a 32-bit pointer that obtains information
outside the memory in a given section.
1. #include<stdio.h>
2. void main()
3. {
4. int *ptr = malloc(constant value); //allocating a memory space.
5. free(ptr); //ptr becomes a dangling pointer.
6. }
In the above example, initially memory is allocated to the pointer variable ptr, and
then the memory is deallocated from the pointer variable. Now, pointer variable, i.e.,
ptr becomes a dangling pointer.
1. #include<stdio.h>
2. void main()
3. {
4. int *ptr = malloc(constant value); //allocating a memory space.
5. free(ptr); //ptr becomes a dangling pointer.
6. ptr=NULL; //Now, ptr is no longer a dangling pointer.
7. }
In the above example, after deallocating the memory from a pointer variable, ptr is
assigned to a NULL value. This means that ptr does not point to any memory
location. Therefore, it is no longer a dangling pointer.
In case of a pointer to pointer concept, one pointer refers to the address of another
pointer. The pointer to pointer is a chain of pointers. Generally, the pointer contains
the address of a variable. The pointer to pointer contains the address of a first
pointer. Let’s understand this concept through an example:
1. #include <stdio.h>
2. int main()
3. {
4. int a=10;
5. int *ptr,**pptr; // *ptr is a pointer and **pptr is a double pointer.
6. ptr=&a;
7. pptr=&ptr;
8. printf(“value of a is:%d”,a);
9. printf(“\n”);
10. printf(“value of *ptr is : %d”,*ptr);
11. printf(“\n”);
12. printf(“value of **pptr is : %d”,**pptr);
13. return 0;
14. }
In the above example, pptr is a double pointer pointing to the address of the ptr
variable and ptr points to the address of ‘a’ variable.
1. For example:
2. int a[10];
The above example creates an array of integer type, and the size of an array is fixed,
i.e., 10.
1. For example
2. int *p= malloc(sizeof(int)*10);
22- What functions are used for dynamic memory allocation in C language?
1. malloc()
o The malloc() function is used to allocate the memory during the
execution of the program.
o It does not initialize the memory but carries the garbage value.
o It returns a null pointer if it could not be able to allocate the requested
space.
Syntax
Syntax
Syntax
Syntax
The above syntax releases the memory from a pointer variable ptr.
calloc() malloc()
The malloc() function allocates a The calloc() function allocates
Description
single block of requested memory. multiple blocks of requested memory.
It does not initialize the content of
It initializes the content of the
Initialization memory, so it carries the garbage
memory to zero.
value.
Number of
It consists of two arguments. It consists of only one argument.
arguments
It returns a pointer pointing to the It returns a pointer pointing to the
Return value
allocated memory. allocated memory.
• The structure is a user-defined data type that allows storing multiple types of
data in a single unit. It occupies the sum of the memory of all members.
• The structure members can be accessed only through structure variables.
• Structure variables accessing the same structure but the memory allocated for
each variable will be different.
Syntax of structure
1. struct structure_name
2. {
3. Member_variable1;
4. Member_variable2
5. .
6. .
7. }[structure variables];
1. #include <stdio.h>
2. struct student
3. {
4. char name[10]; // structure members declaration.
5. int age;
6. }s1; //structure variable
7. int main()
8. {
9. printf(“Enter the name”);
10. scanf(“%s”,s1.name);
11. printf(“\n”);
12. printf(“Enter the age”);
13. scanf(“%d”,&s1.age);
14. printf(“\n”);
15. printf(“Name and age of a student: %s,%d”,s1.name,s1.age);
16. return 0;
17. }
Output:
• The union is a user-defined data type that allows storing multiple types of
data in a single unit. However, it doesn’t occupy the sum of the memory of all
members. It holds the memory of the largest member only.
• In union, we can access only one variable at a time as it allocates one common
space for all the members of a union.
Syntax of union
1. union union_name
2. {
3. Member_variable1;
4. Member_variable2;
5. .
6. .
7. Member_variable n;
8. }[union variables];
1. #include<stdio.h>
2. union data
3. {
4. int a; //union members declaration.
5. float b;
6. char ch;
7. };
8. int main()
9. {
10. union data d; //union variable.
11. d.a=3;
12. d.b=5.6;
13. d.ch=‘a’;
14. printf(“value of a is %d”,d.a);
15. printf(“\n”);
16. printf(“value of b is %f”,d.b);
17. printf(“\n”);
18. printf(“value of ch is %c”,d.ch);
19. return 0;
20. }
Output:
value of a is 1085485921
value of b is 5.600022
value of ch is a
In the above example, the value of a and b gets corrupted, and only variable ch
shows the actual output. This is because all the members of a union share the
common memory space. Hence, the variable ch whose value is currently updated.
The sprintf() stands for “string print.” The sprintf() function does not print the output
on the console screen. It transfers the data to the buffer. It returns the total number
of characters present in the string.
Syntax
1. #include<stdio.h>
2. int main()
3. {
4. char a[20];
5. int n=sprintf(a,“javaToint”);
6. printf(“value of n is %d”,n);
7. return 0;}
Output:
value of n is 9
But, if we use #define, we can compile and run a C program without using the main()
function. For example:
1. #include<stdio.h>
2. #define start main
3. void start() {
4. printf(“Hello”);
5. }
The Token is an identifier. It can be constant, keyword, string literal, etc. A token is
the smallest individual unit in a program. C has the following tokens:
The argument passed to the main() function while executing the program is known
as command line argument. For example:
1. main(int count, char *args[]){
2. //code to be executed
3. }
The ANSI stands for ” American National Standard Institute.” It is an organization that
maintains the broad range of disciplines including photographic film, computer
languages, data encoding, mechanical parts, safety and more.
The getch() function reads a single character from the keyboard. It doesn’t use any
buffer, so entered data will not be displayed on the output screen.
The getche() function reads a single character from the keyword, but data is
displayed on the output screen. Press Alt+f5 to see the entered character.
1. #include<stdio.h>
2. #include<conio.h>
3. int main()
4. {
5.
6. char ch;
7. printf(“Enter a character “);
8. ch=getch(); // taking an user input without printing the value.
9. printf(“\nvalue of ch is %c”,ch);
10. printf(“\nEnter a character again “);
11. ch=getche(); // taking an user input and then displaying it on the screen.
12. printf(“\nvalue of ch is %c”,ch);
13. return 0;
14. }
Output:
Enter a character
value of ch is a
Enter a character again a
value of ch is a
In the above example, the value entered through a getch() function is not displayed
on the screen while the value entered through a getche() function is displayed on the
screen.
33- What is the newline escape sequence?
The new line escape sequence is represented by “\n”. It inserts a new line on the
output screen.
34- Who is the main contributor in designing the C language after Dennis
Ritchie?
Brain Kernighan.
35- What is the difference between near, far and huge pointers?
A near pointer doesn’t have explicit selector whereas far, and huge pointers have
explicit selector. When you perform pointer arithmetic on the far pointer, the selector
is not modified, but in case of a huge pointer, it can be modified.
These are the non-standard keywords and implementation specific. These are
irrelevant in a modern platform.
The typecasting is a process of converting one data type into another is known as
typecasting. If we want to store the floating type value to an int type, then we will
convert the data type into another data type explicitly.
Syntax
1. (type_name) expression;
38- What are the functions to open and close the file in C language?
The fopen() function is used to open file whereas fclose() is used to close file.
Yes, by holding the base address of array into a pointer, we can access the array
using a pointer.
40- What is an infinite loop?
A loop running continuously for an indefinite number of times is called the infinite
loop.
1. for(;;){
2. //code to be executed
3. }
1. while(1){
2. //code to be executed
3. }
1. do{
2. //code to be executed
3. }while(1);
1. #include<stdio.h>
2. void main(){
3. if(printf(“hello world”)){} // It prints the ?hello world? on the screen.
4. }
42- Write a program to swap two numbers without using the third variable?
1. #include<stdio.h>
2. #include<conio.h>
3. main()
4. {
5. int a=10, b=20; //declaration of variables.
6. clrscr(); //It clears the screen.
7. printf(“Before swap a=%d b=%d”,a,b);
8.
9. a=a+b;//a=30 (10+20)
10. b=a-b;//b=10 (30-20)
11. a=a-b;//a=20 (30-10)
12.
13. printf(“\nAfter swap a=%d b=%d”,a,b);
14. getch();
15. }
1. #include<stdio.h>
2. #include<conio.h>
3. void main()
4. {
5. int n1=0,n2=1,n3,i,number;
6. clrscr();
7. printf(“Enter the number of elements:”);
8. scanf(“%d”,&number);
9. printf(“\n%d %d”,n1,n2);//printing 0 and 1
10.
11. for(i=2;i<number;++i)//loop starts from 2 because 0 and 1 are already printe
d
12. {
13. n3=n1+n2;
14. printf(” %d”,n3);
15. n1=n2;
16. n2=n3;
17. }
18. getch();
19. }
1. #include<stdio.h>
2. #include<conio.h>
3. void printFibonacci(int n) // function to calculate the fibonacci series of a give
n number.
4. {
5. static int n1=0,n2=1,n3; // declaration of static variables.
6. if(n>0){
7. n3 = n1 + n2;
8. n1 = n2;
9. n2 = n3;
10. printf(“%d “,n3);
11. printFibonacci(n-1); //calling the function recursively.
12. }
13. }
14. void main(){
15. int n;
16. clrscr();
17. printf(“Enter the number of elements: “);
18. scanf(“%d”,&n);
19. printf(“Fibonacci Series: “);
20. printf(“%d %d “,0,1);
21. printFibonacci(n-2);//n-2 because 2 numbers are already printed
22. getch();
23. }
1. #include<stdio.h>
2. #include<conio.h>
3. void main()
4. {
5. int n,i,m=0,flag=0; //declaration of variables.
6. clrscr(); //It clears the screen.
7. printf(“Enter the number to check prime:”);
8. scanf(“%d”,&n);
9. m=n/2;
10. for(i=2;i<=m;i++)
11. {
12. if(n%i==0)
13. {
14. printf(“Number is not prime”);
15. flag=1;
16. break; //break keyword used to terminate from the loop.
17. }
18. }
19. if(flag==0)
20. printf(“Number is prime”);
21. getch(); //It reads a character from the keyword.
22. }
1. #include<stdio.h>
2. #include<conio.h>
3. main()
4. {
5. int n,r,sum=0,temp;
6. clrscr();
7. printf(“enter the number=”);
8. scanf(“%d”,&n);
9. temp=n;
10. while(n>0)
11. {
12. r=n%10;
13. sum=(sum*10)+r;
14. n=n/10;
15. }
16. if(temp==sum)
17. printf(“palindrome number “);
18. else
19. printf(“not palindrome”);
20. getch();
21. }
1. #include<stdio.h>
2. #include<conio.h>
3. void main(){
4. int i,fact=1,number;
5. clrscr();
6. printf(“Enter a number: “);
7. scanf(“%d”,&number);
8.
9. for(i=1;i<=number;i++){
10. fact=fact*i;
11. }
12. printf(“Factorial of %d is: %d”,number,fact);
13. getch();
14. }
1. #include<stdio.h>
2. #include<conio.h>
3. long factorial(int n) // function to calculate the factorial of a given number.
4. {
5. if (n == 0)
6. return 1;
7. else
8. return(n * factorial(n-1)); //calling the function recursively.
9. }
10. void main()
11. {
12. int number; //declaration of variables.
13. long fact;
14. clrscr();
15. printf(“Enter a number: “);
16. scanf(“%d”, &number);
17. fact = factorial(number); //calling a function.
18. printf(“Factorial of %d is %ld\n”, number, fact);
19. getch(); //It reads a character from the keyword.
20. }
1. #include<stdio.h>
2. #include<conio.h>
3. main()
4. {
5. int n,r,sum=0,temp; //declaration of variables.
6. clrscr(); //It clears the screen.
7. printf(“enter the number=”);
8. scanf(“%d”,&n);
9. temp=n;
10. while(n>0)
11. {
12. r=n%10;
13. sum=sum+(r*r*r);
14. n=n/10;
15. }
16. if(temp==sum)
17. printf(“armstrong number “);
18. else
19. printf(“not armstrong number”);
20. getch(); //It reads a character from the keyword.
21. }
1. #include<stdio.h>
2. #include<conio.h>
3. main()
4. {
5. int n, reverse=0, rem; //declaration of variables.
6. clrscr(); // It clears the screen.
7. printf(“Enter a number: “);
8. scanf(“%d”, &n);
9. while(n!=0)
10. {
11. rem=n%10;
12. reverse=reverse*10+rem;
13. n/=10;
14. }
15. printf(“Reversed Number: %d”,reverse);
16. getch(); // It reads a character from the keyword.
17. }