0% found this document useful (0 votes)
105 views

C Problems and Solutions: Introduction: Some Printing Formats Are Shown in This Code

The document contains C code snippets demonstrating various printing formats in C, math functions, custom functions, if-else conditional statements, and loops. Some key concepts covered include printf formatting, trigonometric functions, absolute value functions, checking conditions with logical operators, looping through ranges of numbers, and nested loops to print patterns.

Uploaded by

Pankaj Kumar
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
105 views

C Problems and Solutions: Introduction: Some Printing Formats Are Shown in This Code

The document contains C code snippets demonstrating various printing formats in C, math functions, custom functions, if-else conditional statements, and loops. Some key concepts covered include printf formatting, trigonometric functions, absolute value functions, checking conditions with logical operators, looping through ranges of numbers, and nested loops to print patterns.

Uploaded by

Pankaj Kumar
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 30

C Problems and Solutions: Introduction

Some printing formats are shown in this code.

#include<stdio.h>

int main(){
int x;
double y;

x = 78341;
printf("//12345678//\n",x);

printf(" *%d*\n");
printf(" *%8d*\n"); //right aligned with a
width of 8 lengths
printf(" *%-8d*\n"); //left aligned with a
width of 8 lengths

printf("\n\n"); //for seeing convinence I have


parted those two.

y = 567.388129;
printf("// 1 2 3//\n");
printf("//123456789012345678901234567890//\n");

printf(" *%lf*\n",y); //default 6 digits after


decimal point

printf(" *%.2lf*\n",y);
//note the round off: 567.39 should be printed. bcz
the 3rd digit is greater than 4.

printf(" *%.10lf*\n",y); //extra zeros have been


added.

printf(" *%.25lf*\n",y);
//can you see an Extra Number? this is bcoz of
precision ERROR! This occurs in floating point number.

printf(" *%20.8lf*\n",y);
//total 20 digits will be used & 8 digit will be
printed after decimal point, RIGHT aligned

printf(" *%-20.8lf*\n",y); //same, just LEFT


aligned

return 0;
}

Math.h Functions

#include<stdio.h>
#include<math.h>

int main(){
double x,y;

scanf("%lf%lf",&x,&y);

printf("sin(x rad) = %lf\n",sin(x)); //x in radians


printf("x to the power y = %lf\n",pow(x,y)); //call >> pow(base,
power)

double pi;
pi = 2*acos(0);

/*
acos(x) = cos_inverse(x).
we know that cos_inverse(0) = 90 deg = pi/2;
so pi = 2*acos(0)
*/

printf("pi = %.15lf\n",pi); //check this value with PI


/// %.15lf means 15 digits should be printed after the decimal point

//similarly
printf("pi = %.8lf\n",pi);

//e^x
printf("e^x = %lf\n",exp(x));

return 0;
}

Custom Functions

#include<stdio.h>
int absolute(int x){
if(x<0)
return -x;
else
return x;
}

int f(int x){


return x*x + x + 1;
}

int g(int x){


return x - 1;
}

double r(int x){


return (3*x + 2) / (4*x - 5);

int main(){
int n;
scanf("%d",&n);

printf("%d\n",absolute(n));

printf("%d\n",g(n));
printf("%d\n",f(n));
printf("%d\n",f(g(n)));
printf("%d\n",g(f(n)));
printf("%d\n",f(n)*g(n));

printf("%lf\n",r(n));

return 0;
}

C Problems and Solutions : If-else


Checking AND-OR-NOT Conditions
#include<stdio.h>

int main(){
int a,b,c,d;

printf("Enter 4 Numbers: ");

while(scanf("%d%d%d%d",&a, &b, &c, &d)==4){


printf("a = %d, b = %d, c = %d, d = %d\n", a, b, c, d);
if(a == b && c == d){
printf("a == b && c ==d AND\n");
}
if(a==b || c==d)
printf("a==b || c==d OR\n");

if(a!=b)
printf("a != b NOT\n");

printf("Enter 4 Numbers: ");

return 0;
}

Write a program to determine whether a number is even/odd.


#include<stdio.h>

int main(){
int n;
printf("Enter the number\n");
scanf("%d",&n);

if(n%2 == 0)
printf("The number %d is even\n", n);
else
printf("The number %d is odd\n", n);
return 0;
}

Write a program to determine whether a given year is leap year or not.


#include<stdio.h>

int main(){
int year;
scanf("%d",&year);

if(year %400 == 0 || (year%4 == 0 && year%100!= 0))


printf("Yes! The year %d is a leap year.\n", year);
else
printf("No! The year %d is not a leap year.\n", year);

return 0;
}

Input two numbers. Check whether the first number is greater/smaller/equal to


second number.
#include<stdio.h>

int main(){
int a,b;
scanf("%d%d",&a,&b);

if(a > b)
printf("a is greater than b\n");
else if(a < b)
printf("a is smaller than b\n");
else
printf("a is equal to b\n");
return 0;
}

Write a program to check whether a given triangle is a Right triangle by taking


coordinates of 3 points of triangle.
#include<stdio.h>

int main(){
int x1,x2,x3,y1,y2,y3;
int aa,bb,cc;

while(scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3)==6){
if( (x1==x2 && y1==y2) || (x2==x3 && y2==y3) || (x3==x1 && y3==y1) ){
printf("no\n");
continue;
}

aa = (x2-x3)*(x2-x3) + (y2-y3)*(y2-y3);
bb = (x3-x1)*(x3-x1) + (y3-y1)*(y3-y1);
cc = (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);

if(aa==bb+cc || bb==cc+aa || cc==aa+bb) printf("Yes\n");


else printf("No\n");
}
return 0;
}

C Problems and Solutions: Loops


Write a program to print 1 to n.
#include<stdio.h>

int main(){
int n,i;

scanf("%d",&n);

for(i=1;i<=n;i++){
printf("%d\n", i);
}

return 0;
}

Write a program to take input & print the number. Input is terminated by
getting a value of 0 or pressing 'Ctrl+Z'.
#include<stdio.h>

int main(){
int n;

while(scanf("%d",&n) == 1 && n){


printf("Input is = %d\n",n);
}

return 0;
}

Write a program to print the summation of 1 + 2 + ... + n.


#include<stdio.h>

int main(){
int n,i,sum;
sum = 0;
scanf("%d",&n);

for(i=1;i<=n;i++){
sum+=i;
}

printf("sum = %d\n",sum);
return 0;
}

Write a program to print the summation of all integers from 1 to n that are not
divisible by 13.
#include<stdio.h>

int main(){
int n,i,sum;
sum = 0;
scanf("%d",&n);

for(i=1;i<=n;i++){
if(i%13==0) //i mod 13 = 0, i.e. I am checking IF i is
divisible by 13.
continue;
sum+=i;
}

printf("summation = %d\n",sum);
return 0;
}

Write a program to compute the digit sum of n.

#include<stdio.h>

int main(){
int n, sum;

scanf("%d",&n);
printf("Digit sum of %d is ",n);

sum = 0;
while(n){
sum += n % 10;
n /= 10;
}

printf("%d\n",sum);

return 0;
}

Write a program to compute the digit root of n.


#include<stdio.h>

int main(){
int n, sum;
scanf("%d",&n);
printf("Digit root of %d is ",n);

while(1){
sum = 0;

while(n){
sum += n % 10;
n/=10;
}

if(sum < 10)


break;
else
n = sum;
}

printf("%d\n",sum);

return 0;
}

Write a program to take an integer input and print output according to the
output format.
5
*
**
***
****
*****

#include<stdio.h>

int main(){
int i, j;
int n;

while(scanf("%d",&n) == 1 && n){


for(i=1; i<=n ;i++){
for(j=1; j<=i;j++){
printf("*");
if(j != i) // for excluding last space
printf(" ");
}
printf("\n");
}
}

return 0;
}

Write a program to take an integer input and print output according to the
output format.
6
******
*****
****
***
**
*

#include<stdio.h>

int main(){
int i, j;
int n;

while(scanf("%d",&n) == 1 && n){


for(i=n; i>0; i--){
for(j=1; j<=i; j++)
printf("* ");
printf("\n");
}
}

return 0;
}

Write a program to take an integer input and print output according to the
output format.
7
*******
******
*****
****
***
**
*

#include<stdio.h>

int main(){
int i, j;
int n;

while(scanf("%d",&n) == 1 && n){


for(i=n; i>0 ;i--){
for(j=1; j<=n-i; j++)
printf(" ");

for(j=1; j<=i; j++)


printf("* ");

printf("\n");
}
}

return 0;
}

Write a program to take an integer input and print output according to the
output format.

5
*
**
***
****
*****
#include<stdio.h>

int main(){
int i, j;
int n;

while(scanf("%d",&n) == 1 && n){


for(i=1; i<=n ;i++){
for(j=n-i; j>0; j--)
printf(" ");

for(j=1; j<=i; j++)


printf("* ");
printf("\n");
}
}

return 0;
}

Write a program to take an integer input and print output according to the
output format.

8
*
***
*****
*******
*********
***********
*************
***************
#include<stdio.h>

int main(){
int i, j, r;
int n;

while(scanf("%d",&n) == 1 && n){


for(r=1; r<=n ;r++){
for(j=1; j<=n-r; j++)
printf(" ");

for(i=0; i<r-1; i++)


printf("* ");
printf("* ");

for(i=r-2; i>=0; i--)


printf("* ");

printf("\n");
}
}

return 0;
}

Write a program to take an integer input and print output according to the
output format.

6
***********
*********
*******
*****
***
*
#include<stdio.h>

int main(){
int i, j, r;
int n;

while(scanf("%d",&n) == 1 && n){


for(r=n; r>0 ;r--){
for(j=1; j<=n-r;j++)
printf(" ");

for(i=0; i<r-1;i++)
printf("* ");

printf("* ");

for(i=r-2; i>=0;i--)
printf("* ");

printf("\n");
}
}

return 0;
}

Write a program to take an integer input and print output according to the
output format.
6
1
12
123
1234
12345
123456

#include<stdio.h>

int main(){
int i, j;
int n;

while(scanf("%d",&n) == 1 && n){


for(i=1; i<=n;i++){
for(j=1; j<=i; j++)
printf("%d ",j);
printf("\n");
}
}

return 0;
}

Write a program to reverses the digits of an integer.


#include<stdio.h>

int rev(int X){


int R = 0;

while(X){
R = R*10 + (X%10);
X/=10;

}
return R;
}

int main(){
int n;
while(scanf("%d",&n)==1){
printf("reverse of %d is = %d\n",n,rev(n));
}
return 0;
}

A C Program showing idea of Nested Looping.

Write a code printing all pairs (i,j) such that 0<i<=i_max & 0<j<=j_max & i & j are
integers where i_max = 4 and j_max = 4.
#include<stdio.h>

int main(){
int i,j;
int i_max,j_max;

i_max = 4;
j_max = 4;

//the following is nested looping::


printf("NESTED\n");
/////////////
for(i=1;i<=i_max;i++){
for(j=1;j<=j_max;j++){
printf("i = %d j = %d\n",i,j);
}
}

//the following is NOT::


printf("NOT NESTED\n");
////////////
for(i=1;i<=i_max;i++){
printf("i = %d\n",i);
}
for(j=1;j<=j_max;j++){
printf("j = %d\n",j);
}

return 0;
}

Write a C program to print Pythagorean Triplets up to N and count no of


triplets found.

Finding Pythagorean triplets

Given N, printing all Pythagorean triplets of (a,b,c) such that


1. a,b,c are integers
2. 0 < a < b < c < N
3. a^2 + b^2 = c^2
#include<stdio.h>

int main(){
int a,b,c,N,count;
scanf("%d",&N);
count=0;
for(a=1;a<N;a++){
for(b=a+1;b<N;b++){
for(c=b+1;c<N;c++){
if(a*a + b*b == c*c){
printf("%d^2 + %d^2 = %d^2\n",a,b,c);
count++;
}
}
}
}
printf("%d\n",count);
return 0;
}

Write a program to compute nth Fibonacci number [Fibonacci with


backtracking - without memoization]
//fibonacci with backtracking [without memoization]

#include<stdio.h>

int fib(int n){


if(n<2)
return n;
return fib(n-1) + fib(n-2);
}

int main(){
int n,F;
while(scanf("%d",&n) == 1){
F = fib(n);
printf("%d\n",F);
}
return 0;
}

Write a program to compute nth Fibonacci number [Fibonacci with


backtracking - with memoization]
//fibonacci with backtracking [with memoization]
#include<stdio.h>

int mem[100];

//F47 exceeds int's RANGE

int fib(int n){


if(n<2)
return n;
if(!mem[n])
mem[n] = fib(n-1) + fib(n-2);
return mem[n];
}

int main(){
int n,F;
mem[0] = 0; //F0 = 0 [by definition]
mem[1] = 1; //F1 = 1 [by definition]
while(scanf("%d",&n)==1){
F = fib(n);
printf("%d\n",F);
}
return 0;
}

Write a program to compute nth Fibonacci number - DP


//fibonacci with DP
#include<stdio.h>

int fib[47];
//fib[47] exceeds int's RANGE

int main(){
int n,i;
//generating all:

fib[0] = 0;
fib[1] = 1;

for(i=2;i<47;i++)
fib[i] = fib[i-1] + fib[i-2];

while(scanf("%d",&n)==1){
printf("%d\n",fib[n]);
}
return 0;
}

Write a program to compute nCr. [BKTK]


#include<stdio.h>

//C(n,r) = C(n-1,r) + C(n-1,r-1)

int C(int n,int r){


if(n<0 || n<r || r<0) return 0;
if(!r || n==r) return 1;
return C(n-1,r) + C(n-1,r-1);
}
int main(){
int n,r;
while(scanf("%d%d",&n,&r)==2){
printf("%dC%d = %d\n",n,r,C(n,r));
}
return 0;
}

Write a program to compute nCr. [DP]


#include<stdio.h>

int C[100][100];

int main(){
int n,r;
/*
IMPORTANT::
C(n,r) = C(n-1,r) + C(n-1,r-1)
so the loop for n should be the major loop while calculating with DP
*/
C[0][0] = 1;
for(n=1;n<100;n++)
for(r=0;r<=n;r++)
C[n][r] = C[n-1][r] + C[n-1][r-1];

while(scanf("%d%d",&n,&r)==2){
if(r<0 || n<0 || r>n){
printf("%dC%d = 0\n",n,r);
continue;
}
printf("%dC%d = %d\n",n,r,C[n][r]);
}
return 0;
}

Print 1st fifteen rows of a Pascal's Triangle.


#include<stdio.h>

int C[100][100];

int main(){
int n,r,limit;

C[0][0] = 1;
for(n=1;n<100;n++)
for(r=0;r<=n;r++)
C[n][r] = C[n-1][r] + C[n-1][r-1];
limit = 15;

for(n=0;n<limit;n++){
for(r=0;r<=n;r++)
printf("%d ",C[n][r]);
printf("\n");
}

return 0;
}

C Problems and Solutions: Bitwise Operations


Write a program to print the binary of an integer using bitwise operations.
#include<stdio.h>

#define B(K) (K&1?0:1)

void print_binary(int n){


int i;
for(i=31;i>=0;i--){
if(n&(1<<i))
printf("1");
else
printf("0");
}

printf("\n");
}

int main(){
int x;

while(scanf("%d",&x)==1){

print_binary(x);
}

return 0;
}

Write a macro using bitwise operation to determine whether an integer is even or


odd.
#include<stdio.h>
#define B(K) (K&1?0:1)

int main(){
int n;
while(scanf("%d",&n)==1){
if(B(n))
printf("%d is Even", n);
else
printf("%d is Odd", n);

printf("\n");
}

return 0;
}

Write a program using bitwise operation to print the 1's complement of an integer (Way 1)

#include<stdio.h>
#include<math.h>

int n,i;

void print(int n,int l){


for(i = l-1;i>=0;i--)
if(n & (1<<i)) printf("1");
else printf("0");

printf("\n");
}

int main(){
double d;
int l,i;

while(scanf("%d",&n) == 1){
if(n == 0){
printf("0\n");
continue;
}
d = (double)(log(n+1)/ log(2));

l = (int)ceil(d);

printf("Binary of %d is: ", n);


print(n,l);

printf("1's complement of %d is: ", n);


for(i=l-1;i>=0;i--){
n = n^(1<<i);
}

print(n,l);

}
return 0;
}

Write a program using bitwise operation to print the 1's complement of an integer (Way 2)

#include<stdio.h>
#include<math.h>

int n,i;

void print(int n,int l){


for(i = l-1;i>=0;i--)
if(n & (1<<i)) printf("1");
else printf("0");

printf("\n");
}

int main(){
double d;
int l;

while(scanf("%d",&n) == 1){
if(n == 0){
printf("0\n");
continue;
}
d = (double)(log(n+1)/ log(2));

l = (int)ceil(d);

printf("Binary of %d is: ", n);


print(n,l);

printf("1's complement of %d is: ", n);


n = ~n;
print(n,l);
}

return 0;
}

C Problems and Solutions: Arrays


Bubble Sort

#include<stdio.h>
#define size 10

void sortAscendingOrder(int a[]){


int temp,i,j;

for(i=0;i<size-1;i++){
for(j=0;j<size-1;j++){
if(a[j]>a[j+1]){ // Ascending order 1,2,3,......
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}

void sortDecendingOrder(int a[]){


int temp,i,j;

for(i=0;i<size-1;i++){
for(j=0;j<size-1;j++){
if(a[j]<a[j+1]){ // Decending order
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}

int main(){
int a[size] = {-1, 2, 3, 898, 0, -45, 34, 23, -56, 0};
int i;

sortAscendingOrder(a);

printf("Sorting in Ascending Order\n");


for(i=0;i<10;i++)
printf("%d ",a[i]);

printf("\n");

sortDecendingOrder(a);

printf("Sorting in Decending Order\n");


for(i=0;i<10;i++)
printf("%d ",a[i]);

return 0;
}

Write a program to combine two Sorted Arrays


#include<stdio.h>

// Combine two Sorted arrays in a 3rd array


void combine(int sizeA,int sizeB,int A[],int B[],int C[]){
int i, j, k;
i = j = k = 0;

while(i<sizeA || j<sizeB){
if(i == sizeA)
C[k++] = B[j++];
else if(j == sizeB)
C[k++] = A[i++];
else{
if(A[i] <= B[j])
C[k++] = A[i++];
else
C[k++] = B[j++];
}
}
}

int main(){

int a[10] = {4,7,9,20};


int b[10] = {1,5,6,50,60,710};
int c[20];
int n = 4, m = 6 , i;
/*
n = number of elements in a
m = number of elements in b
*/
combine(n,m,a,b,c);
printf("After combining:\n");

for(i=0; i<n+m; i++){


printf("%d ", c[i]);
}

printf("\n");

return 0;
}

Sample Program showing Matrix Add, Subtraction and Multiplication.

#include<stdio.h>

#define MAX 10

void print_result(int C[][MAX],int r,int c){

int i,j;
for(i=0;i<r;i++){
for(j=0;j<c;j++)
printf("%4d",C[i][j]);
printf("\n");
}
}

void input(int A[][MAX],int r,int c){

int i,j;

for(i=0;i<r;i++){
for(j=0;j<c;j++)
scanf("%d",&A[i][j]);
}
}

void matrix_Sum(int A[][MAX],int B[][MAX],int C[][MAX],int r,int c){

int i,j;

for(i=0;i<r;i++){
for(j=0;j<c;j++){
C[i][j]=A[i][j] + B[i][j];
}
}

printf("Sum of the Matrices:\n\n");


print_result(C,r,c);

void matrix_Sub(int A[][MAX],int B[][MAX],int C[][MAX],int r,int c){

int i,j;

for(i=0;i<r;i++){
for(j=0;j<c;j++){
C[i][j]=A[i][j] - B[i][j];
}
}

printf("Subtraction of the Matrices:\n\n");


print_result(C,r,c);

void matrix_Multiplication(int A[][MAX],int B[][MAX],int C[][MAX],int r1, int


c2, int c1){
int i,j,k,sum=0;

for(i=0;i<r1;i++){
for(j=0;j<c2;j++){
sum=0;
for(k=0;k < c1 ;k++)
sum+=A[i][k] * B[k][j];
C[i][j]=sum;
}
}

printf("Multiplication of the Matrices:\n\n");


print_result(C,r1,c2);
}

int main(){

int choice;
int rowA, colA;
int rowB, colB;

int A[MAX][MAX],B[MAX][MAX],C[MAX][MAX];

printf("Enter choice:\n\n\t1: Addition\n\t2: Subtraction\n");


printf("\t3: Mutiplication\n");

while(scanf("%d",&choice)==1){

if(!(choice>=1 && choice<=3)){


printf("Invalid choice\n\n");
printf("Enter choice:\n\n\t1: Addition\n\t2: Subtraction\n");
printf("\t3 Mutiplication\n");
continue;
}

if(choice==1 || choice==2 || choice==3){

printf("1st Matrix:\n");
printf("No. of rows: ");
scanf("%d",&rowA);
printf("No. of columns: ");
scanf("%d",&colA);

printf("Enter elements for 1st Matrix:\n");


input(A,rowA,colA);

printf("\n2nd Matrix:\n");
printf("No. of rows: ");
scanf("%d",&rowB);
printf("No. of columns: ");
scanf("%d",&colB);

printf("Enter elements for 2nd Matrix:\n");


input(B,rowB,colB);
if(choice == 1){
if(rowA != rowB || colA != colB)
printf("\nMatix Addition Operation is not posible\n");
else
matrix_Sum(A,B,C,rowA,colA);

if(choice==2){
if(rowA != rowB || colA != colB)
printf("Matix Subtraction Operation is not posible\n");
else
matrix_Sub(A,B,C,rowA,colA);
}

if(choice==3){
if(colA == rowB)
matrix_Multiplication(A,B,C,rowA, colB, colA);
else
printf("Matrix multiplication is not possible\n");
}
}

printf("\nEnter choice:\n\n\t1: Addition\n\t2: Subtraction\n");


printf("\t3: Mutiplication\n\t4:Search\n\n");
}

return 0;
}

Write a function to return the Length of a string: int strlen(char s[ ] )

#include<stdio.h>

#define MAX 1000

int strlen(char s[]){


int i;

for(i=0; s[i]; i++);

return i;
}

int main(){
char s[MAX];

int len;
while(gets(s)){

len = strlen(s);
printf("Length of the string %s is %d\n", s, len);
}

return 0;
}

Write a function to Reverse the string: void strrev(char *s)

#include<stdio.h>

#define MAX 1000

int strlen(char s[]){


int i;

for(i=0; s[i]; i++);

return i;
}

void strrev(char *s){


int i, j;
char t;

for(i=0, j=strlen(s)-1; i<j; i++, j--){


t = s[i];
s[i] = s[j];
s[j] = t;
}
}
int main(){
char s[MAX];

while(gets(s)){
printf("Input String: %s\n", s);
strrev(s);

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

return 0;

Sample C program to convert all alphabets in a string to uppercase or lowercase.

#include<stdio.h>

#define MAX 1000

void tolower(char s[]){


// converts all alphabets in string to lowercase
int i;

for(i=0; s[i]; i++)


if(s[i] >= 'A' && s[i] <= 'Z')
s[i] = s[i] - 'A' + 'a';

void toupper(char s[]){


// converts all alphabets in string to uppercase
int i;

for(i=0; s[i]; i++)


if(s[i] >= 'a' && s[i] <= 'z')
s[i] = s[i] - 'a' + 'A';

void strcpy(char s2[], char s1[]){ // copy string from s1 to s2


int i;

for(i=0; s1[i]; i++)


s2[i] = s1[i];

s2[i] = '\0';
}

int main(){
char s[MAX];
char s1[MAX];

while(gets(s)){
strcpy(s1, s);
tolower(s1);
printf("%s\n", s1);

strcpy(s1, s);
toupper(s1);
printf("%s\n", s1);
}

return 0;
}

Write a C program to check whether input string is palindrome or not.

#include<stdio.h>

int main(){
char s[10000];
int i,j,L;

while(gets(s)){

for(L=0;s[L];L++); // computing the string length

for(i=0,j=L-1;i<j;i++,j--)
if(s[i]!=s[j])
break;

if(i<j)
printf("%s is not a palindrome.\n",s);
else
printf("%s is a palindrome.\n",s);

}
return 0;
}

C Problems and Solutions: Recursion


Write a recursive function to calculate n!

#include<stdio.h>

double fact(int n){


if(n == 0 || n == 1)
return 1;

return n * fact(n-1);
}
int main(){
int n;

while(scanf("%d",&n)==1 && n != -1) // Give -1 to terminate


printf("fact of %d is %.0lf\n", n, fact(n));

return 0;
}

Write a recursive function to calculate x^n , n>=0

#include<stdio.h>

int power(int x, int n){


if(n == 1)
return x;

return x * power(x, n-1);


}
int main(){
int x, y;
while(scanf("%d%d",&x, &y) == 2){
printf("power of %d ^ %d = %d\n", x, y, power(x, y));
}
return 0;
}

C Problems and Solutions: Stack, Queue


Sample Program Showing Stack

/*
Stack
LIFO = Last in first out
*/

#include<stdio.h>

int size; //size = Stack size;


int S[100000];

int main(){

int n , order,i;
size = 0;

while(scanf("%d",&order)==1){
/*
give
0 as input for order to PUSH
1 as input for order to POP
*/
if(order==0){

scanf("%d",&n);

S[size] = n;
size++;
}

else if(order==1){
if(size==0){
printf("nothing to process, the stack is empty\n");
/*
S empty.
*/
}
else{
size--;
printf("processed %d from stack\n",S[size]);
}
}
else{
printf("wrong direction!\n");
}

//the Stack printing:


printf("<< ");
for(i=0;i< size;i++)
printf("%d ",S[i]);
printf(">>\n");

}
return 0;
}

Sample Program Showing Queue

/*
Queue
FIFO = first in first out
*/
#include<stdio.h>

#define PUSH 0
#define POP 1

int head,tail,Q[100000];

int main(){

int n , order,i;

head = tail = 0;
while(scanf("%d",&order)==1){
/*
give
0 as input for order to PUSH
1 as input for order to POP
*/

// at any case, tail<=head


if(order==0){

scanf("%d",&n);

Q[head] = n;
head++;
}
else if(order==1){
if(head==tail){
printf("nothing to process, the queue is empty\n");
/*
Queue empty.
*/
}
else{
printf("processed %d from queue\n",Q[tail]);
tail++;
}
}
else{
printf("wrong direction!\n");
}

//the Queue printing:


printf("<< ");
for(i=tail;i< head;i++)
printf("%d ",Q[i]);
printf(">>\n");

return 0;
}
http://www.nonktube.com/video/26527/

You might also like