2024-Updated As Per Rules-C Programming Lab Manual
2024-Updated As Per Rules-C Programming Lab Manual
2024-Updated As Per Rules-C Programming Lab Manual
SCHOOL
OF
COMPUTER SCIENCE
AND
ENGINEERING
First Semester
AY-2024-245
INDEX
SL. No Contents Page. no
1 Lab Objectives 3
2 Lab Outcomes 3
3 Lab Requirements 3
4 Guidelines to Students 4
1. Lab Objectives:
2. Lab Outcomes:
3. Lab Requirements:
The following are the required hardware and software for this lab.
Software Requirements:
4. Guidelines to Students:
Equipment in the lab for the use of the student community. Students
need to maintain a proper decorum in the computer lab. Students must
use the equipment with care. Any damage caused is punishable.
Students are required to carry their observation / programs book with
completed exercises while entering the lab.
Students are supposed to occupy the machines allotted to them and are
not supposed to talk or make noise in the lab. The allocation is put up on
the lab notice board.
The lab can be used in free time / lunch hours by the students who need
to use the systems should get prior permission from the lab in-charge.
Lab records need to be submitted on or before the date of submission.
Practice
Here are some key activities involved in the design and analysis of algorithms:
Problem Statement:
Solution Overview:
1. Input:
o Prompt the user to enter two numbers.
o Prompt the user to enter an operator (e.g., '+', '-', '*', '/').
2. Processing:
o Use a switch statement to evaluate the operator:
If the operator is '+', perform addition.
If the operator is '-', perform subtraction.
If the operator is '*', perform multiplication.
If the operator is '/', perform division.
If the operator is invalid, display an error message.
3. Output:
o Display the result of the calculation.
Intuition:
Algorithm:
Read input:
- Prompt the user to enter the first number (num1).
- Prompt the user to enter the operation code (operator).
- Prompt the user to enter the second number (num2).
Perform the operation using a switch statement:
Code Implementation:
#include <stdio.h>
int main()
{
float num1, num2, result;
char operator;
printf("Enter two integer numbers: \n");
scanf("%f%f", &num1, &num2);
printf("Enter the operation (+, -, *, /): ");
scanf(" %c", &operator);
switch (operator)
{
case '+':
result = num1 + num2;
printf("Sum: %f\n", result);
break;
case '-':
result = num1 - num2;
printf("Difference: %f\n", result);
break;
case '*':
result = num1 * num2;
printf("Product: %.2f\n", result);
break;
case '/':
// Check for division by zero
if (num2 != 0)
{
result = num1 / num2;
printf("Result: %.2f\n", result);
}
else
printf("Division by zero is not allowed.\n");
break;
default:
printf("Invalid operator\n");
break;
}
return 0;
}
Output:
Enter two integer numbers:
12
2
Enter the operation (+, -, *, /): +
Sum: 14.000000
Solution Overview:
1. Input Coefficients:
Prompt the user to enter the values for a, b, and c.
Ensure that a is not zero, as it would result in a linear equation.
2. Calculate Discriminant:
Compute the discriminant D using the formula D = b^2 - 4ac.
The discriminant determines the nature of the roots:
If D > 0, there are two distinct real roots.
If D = 0, there is one repeated real root.
If D < 0, there are two complex conjugate roots.
3. Compute Roots:
Based on the discriminant's value, calculate the roots using the
appropriate formula:
If D > 0:
x1 = (-b + sqrt(D)) / (2a)
x2 = (-b - sqrt(D)) / (2a)
If D = 0:
x1 = x2 = -b / (2a)
If D < 0:
x1 = (-b + sqrt(-D)) / (2a)
x2 = (-b - sqrt(-D)) / (2a) (Note: The imaginary part
is sqrt(-D) / (2a))
4. Output Results:
Print the calculated roots, appropriately formatted based on their
type (real or complex).
Intuition:
The discriminant is a crucial factor in determining the nature of the roots.
The quadratic formula provides a general solution for finding the roots of a
quadratic equation.
The imaginary unit i is used to represent complex numbers.
Algorithm:
Read coefficients from the user.
- Prompt the user to enter coefficients `a`, ‘b’ and ‘c’
Calculate discriminant.
- Calculate the discriminant using the formula ‘discriminant = b2- 4ac`.
Check discriminant.
- If `discriminant` is greater than 0:
- Calculate real and different roots using the quadratic formula:
root1 = (-b + sqrt(discriminant)) / (2 * a);
root2 = (-b - sqrt(discriminant)) / (2 * a);
- Display the roots.
- If `discriminant` is equal to 0:
- Calculate real and equal roots using the quadratic formula:
root1 = -b / (2 * a);
- Display the roots.
- If `discriminant` is less than 0:
- Calculate complex and different roots using the quadratic formula:
realPart = -b / (2 * a);
imaginaryPart = sqrt(-discriminant) / (2 * a);
Program:
#include <stdio.h>
#include <math.h>
int main()
{
float a, b, c, discriminant, root1, root2;
printf("Enter coefficients a, b, and c: ");
scanf("%f%f%f", &a, &b, &c);
discriminant = b * b - 4 * a * c;
if (discriminant > 0)
{
// Roots are real and different
root1 = (-b + sqrt(discriminant)) / (2 * a);
root2 = (-b - sqrt(discriminant)) / (2 * a);
Output:
Enter coefficients a, b, and c: 1 4 1
Roots are real and different.
Root 1 = -0.27
Root 2 = -3.73
Potential errors include division by zero, invalid input, and numerical overflow.
The program should handle these errors appropriately.
3. Develop a C Program to find the largest among two and three different
numbers entered by the user.
Problem Statement:
Write a C program to find the largest number among two or three numbers entered
by the user.
Solution Overview:
1. Input Numbers:
Prompt the user to enter the first number.
Prompt the user to enter the second number.
Optionally, prompt the user to enter the third number if desired.
2. Compare Numbers:
Compare the first two numbers and determine the larger one.
Intuition:
Algorithm
Read input:
Program:
#include <stdio.h>
int main() {
int num1, num2, num3;
int largest;
Output:
Enter three numbers: 10 25
The largest number is: 25
The program will successfully identify and display the largest number among the
given inputs.
Problem Statement:
Write a C program to determine whether a given year is a leap year or not. A leap
year is a year that is divisible by 4, but not divisible by 100 unless it's also divisible by
400.
Solution Overview:
1. Input Year: Prompt the user to enter the year to be checked.
2. Check Divisibility:
o If the year is divisible by 400, it's a leap year.
o If the year is divisible by 100 but not by 400, it's not a leap year.
o If the year is divisible by 4 but not by 100, it's a leap year.
o Otherwise, it's not a leap year.
3. Output Result: Print whether the given year is a leap year or not.
Intuition:
The logic behind leap years is based on the Gregorian calendar. The extra day
(February 29th) is added to ensure that the average length of a year aligns closely
with the Earth's orbital period around the Sun.
Algorithm:
Read input:
- Prompt the user to enter the year as an integer.
Check Divisibility:
- If the year is divisible by 400, it is a leap year.
- Else if the year is divisible by 100, it is not a leap year.
- Else if the year is divisible by 4, it is a leap year.
- Otherwise, it is not a leap year.
- Print whether the year is a leap year or not.
Program:
#include <stdio.h>
int main()
{
int year;
printf("Enter a year: ");
scanf("%d", &year);
if ((year % 400 == 0) || ((year % 4 == 0) && (year % 100! = 0)))
{
printf("%d is a leap year\n", year);
}
else
{
printf("%d is not a leap year\n", year);
}
return 0;
}
Output:
Enter a year: 2024
2024 is a leap year
Problem Statement:
Solution Overview:
1. Input Number:
Prompt the user to enter an integer.
2. Reverse Number:
Create a temporary variable to store the reversed number.
While the original number is not zero:
Extract the last digit of the original number using the modulo
operator (%).
Append the extracted digit to the reversed number (multiply
the reversed number by 10 and add the extracted digit).
Divide the original number by 10 to remove the last digit.
3. Compare Original and Reversed:
Compare the original number with the reversed number.
If they are equal, the number is a palindrome. Otherwise, it is not.
4. Output Result:
Print whether the number is a palindrome or not.
Intuition:
The program uses a simple algorithm to reverse the number and then
compares it with the original.
Algorithm:
- Read the input number from the user and store it in a variable (num).
- Initialize variables originalNum to store the original number and reversed
Num to store the reversed number to 0.
- Save the original number by setting originalNum equal to num.
- Repeat until num is not equal to 0:
a. Calculate the remainder (remainder) when num is divided by 10.
b. Multiply reversedNum by 10 and add the remainder to it.
c. Divide num by 10.
Program:
#include <stdio.h>
int main()
{
int num, originalNum, reversedNum = 0, remainder;
printf("Enter an integer: \n");
scanf("%d", &num);
// Save the original number
originalNum = num;
// Reverse the number
while (num != 0)
{
remainder = num % 10;
reversedNum = reversedNum * 10 + remainder;
num /= 10;
}
Output:
Enter an integer:
1234
1234 is not a palindrome.
Enter an integer:
1221
1221 is a palindrome.
The time complexity of the algorithm is O(log n), where n is the number of
digits in the input number. This is because the number of iterations in the loop
is proportional to the number of digits.
10. Can the program be made more efficient for numbers with a large number of
digits?
For very large numbers, more efficient algorithms might be considered, such as
comparing the first half of the number with the second half in reverse order.
b. second pattern
Problem Statement:
Solution Overview:
1. Initialize Variables:
o Create variables rows and cols to store the number of rows and columns in the
pattern.
o In this case, rows will be 6 and cols will be 6.
2. Outer Loop:
o Iterate from rows down to 1 using a for loop.
3. Inner Loop:
o Iterate from 1 to the current outer loop value using a for loop.
o Print the characters 'A' to 'Z' (or the desired starting character) based on the
current inner loop value and the outer loop value.
4. Newline:
o After the inner loop, print a newline character to move to the next row.
Intuition:
The outer loop iterates through each row, starting from 1 to rows.
The inner loop iterates through each character in the current row,
starting from 'A' and incrementing until the desired number of
characters for that row.
Output:
Problem Statement:
Solution Overview:
1. Initialize Variables:
o Create a variable rows to store the number of rows in the pattern.
o In this case, rows will be 5.
2. Outer Loop:
o Iterate from rows down to 1 using a for loop.
3. Inner Loop:
o Iterate from 1 to the current outer loop value using a for loop.
o Print an asterisk in each iteration.
4. Newline:
o After the inner loop, print a newline character to move to the next row.
Intuition:
a. The outer loop iterates through each row, starting from 1 to rows.
b. The inner loop iterates through each * in the current row and
incrementing until the desired number of * for that row.
Output:
Enter the number of rows: 6
******
*****
****
***
**
*
The newline character is used to move the cursor to the next line after
each row of the pattern is printed.
7. How can you modify the program to print the patterns in reverse order?
To print the patterns in reverse order, you can modify the outer loop to
iterate from rows down to 1 instead of from 1 to rows.
8. Can you create a more general pattern-printing function that can be used to
generate different patterns?
Yes, you can create a function that takes the desired number of rows and
a pattern specification as input, and then uses nested loops and
conditional statements to generate the corresponding pattern.
9. How can you add color or other formatting to the printed patterns?
Depending on the programming environment, you can use escape
sequences or specific library functions to add color, bold, or other
formatting to the printed characters.
10. Can you modify the program to print the patterns in a different orientation
(e.g., rotated or inverted)?
Yes, by adjusting the loop conditions and the placement of asterisks and
spaces, you can create different orientations for the patterns.
Solution Overview:
1. Input Marks:
Prompt the user to enter the student's marks obtained in the
Computer Test.
2. Check Grade:
Use conditional statements (if-else) to compare the marks with
predefined grade ranges.
Based on the comparison, assign the appropriate grade (e.g., 'A',
'B', 'C', 'D', 'F').
3. Display Grade:
Print the assigned grade.
Intuition:
The program uses conditional statements to categorize the marks into
different grade ranges.
Algorithm:
- Accept the user's input for the grade.
- Check the value of grade using a series of if-else statements:
- If grade is equal to 10, print "Grade: O, Performance: Outstanding."
- Else, if grade is greater than or equal to 9, print "Grade: A+, Performance:
Excellent."
- Else, if grade is greater than or equal to 8, print "Grade: A, Performance: Very
Good."
- Else, if grade is greater than or equal to 7, print "Grade: B+, Performance:
Good."
- Else, if grade is greater than or equal to 6, print "Grade: B, Performance:
Above Average."
- Else, if grade is greater than or equal to 5.5, print "Grade: C+, Performance:
Average."
- Else, if grade is greater than or equal to 5, print "Grade: C, Performance:
Satisfactory."
- Else, print "Grade: F, Performance: Fail."
Program:
# include <stdio.h>
int main ()
{
float grade;
printf ("Enter your grade (0 to 10)\n");
scanf ("%f", &grade);
if (grade == 10)
printf ("Grade:O, Performance: Outstanding");
else if (grade >= 9)
printf ("Grade:A+, Performance: Excellent");
else if (grade >= 8)
printf ("Grade:A, Performance: Very Good");
else if (grade >= 7)
printf ("Grade:B+, Performance: Good");
Output:
Enter your grade (0 to 10)
7
Grade: B+, Performance: Good
C: 70-79
D: 60-69
F: 0-59
2. How does the program handle marks outside the defined ranges?
The program can include additional checks to handle marks outside
the defined ranges. For example, if the marks are below 0 or above
100, an error message can be displayed.
3. Can the program be modified to handle different grading systems?
Yes, the program can be adapted to different grading systems by
modifying the grade ranges and the corresponding letter grades.
4. How can the program be made more user-friendly?
You can provide clear prompts for user input, include error
handling for invalid inputs, and use informative messages to
display the results.
5. What is the time complexity of the algorithm?
The time complexity of the algorithm is O(1) as it involves a
constant number of comparisons.
6. Can the program be extended to handle multiple subjects and
calculate an overall grade?
Yes, the program can be extended to handle multiple subjects by
prompting the user to enter marks for each subject and calculating
an overall average or weighted average.
7. How can the program be made more robust to handle different input
formats?
You can implement input validation to ensure that the user enters a
valid numeric value for the marks.
8. Can the program be adapted to use a different programming
language?
Yes, the basic logic and structure of the program can be adapted to
other programming languages like Python, Java, or C++.
9. How can the program be made more efficient for large datasets?
For large datasets, you might consider using more efficient data
structures or algorithms, but in this simple case, the current
approach is sufficient.
10. Can the program be integrated with other systems or applications?
Problem Statement:
Write a C program to find the sum of the first and last digits of a four-digit
number entered by the user.
Solution Overview:
1. Input Number:
Prompt the user to enter a four-digit number.
2. Extract First and Last Digits:
Extract the first digit by dividing the number by 1000 and taking the
integer part.
Extract the last digit by taking the remainder of the number divided by 10.
3. Calculate Sum:
Add the first and last digits together.
4. Output Result:
Print the calculated sum.
Intuition:
The first digit of a four-digit number can be obtained by dividing the number by
1000 and taking the integer part.
The last digit can be obtained by taking the remainder of the number divided by
10.
Algorithm:
- Input: Prompt the user to enter four-digit number.
- Extract last digit: Calculate the remainder of the number when divided by 10.
- Extract first digit: Divide the number by 1000 to get the first digit.
- Calculate sum: Add the first and last digits.
- Output: Print the calculated sum.
Program:
#include <stdio.h>
int main()
{
int number, first_digit, last_digit, sum;
printf("Enter a four-digit number: ");
scanf("%d", &number);
// Calculate sum
sum = first_digit + last_digit;
Output:
Enter a four-digit number:1234
Sum of first and last digit: 5
Problem Statement:
Write a C program to check the compatibility of two matrices and perform matrix
multiplication using 2D arrays. Two matrices are compatible for multiplication if the
number of columns in the first matrix is equal to the number of rows in the second
matrix.
Solution Overview:
1. Input Matrices:
Prompt the user to enter the dimensions of the two matrices (rows and
columns).
Create two 2D arrays to store the elements of the matrices.
Read the elements of the matrices from the user.
2. Check Compatibility:
Verify if the number of columns in the first matrix is equal to the number
of rows in the second matrix. If not, the matrices are incompatible for
multiplication.
3. Matrix Multiplication:
If the matrices are compatible, create a new 2D array to store the result
of the multiplication.
Iterate through each element of the resulting matrix and calculate its
value by multiplying the corresponding elements of the first and second
matrices and summing the products.
4. Output Result:
Print the resulting matrix.
Intuition:
Algorithm:
- Input dimensions of the first matrix (matrix A):
- Read the number of rows and columns for matrix A from the user.
- Input dimensions of the second matrix (matrix B):
- Read the number of rows and columns for matrix B from the user.
- Check for compatibility for matrix multiplication:
- If the number of columns in matrix A is not equal to the number of rows in
matrix B, print an error message and exit with an error code.
- Input elements of matrix A.
- Input elements of matrix B.
- Perform matrix multiplication.
- Print matrix A, matrix B, and the result matrix.
- Return 0 to indicate successful execution.
Program:
#include <stdio.h>
int main() {
int rowsA, colsA, rowsB, colsB;
int matrixA[rowsA][colsA];
int matrixB[rowsB][colsB];
int result[rowsA][colsB];
}
return 0; // Exit successfully
}
Output:
Enter the number of rows for matrix A: 2
Enter the number of columns for matrix A: 2
Enter the number of rows for matrix B: 2
Enter the number of columns for matrix B: 2
Enter the elements of matrix A:
Enter element at position (1, 1): 1
Enter element at position (1, 2): 2
Enter element at position (2, 1): 3
Enter element at position (2, 2): 4
Enter the elements of matrix B:
Enter element at position (1, 1): 5
Enter element at position (1, 2): 6
Enter element at position (2, 1): 7
Enter element at position (2, 2): 8
Matrix A:
1 2
3 4
Matrix B:
5 6
7 8
43 50
Problem Statement:
Solution Overview:
1. Input Array:
o Prompt the user to enter the size of the array.
o Create an array of the specified size.
o Read the elements of the array from the user.
2. Outer Loop:
o Iterate from the last index to the second index (index 0 is already
sorted).
3. Inner Loop:
o Iterate from the first index to the current outer loop index.
o Compare adjacent elements:
If the current element is greater than the next element, swap
them.
4. Output Sorted Array:
o Print the sorted array elements.
Intuition:
Algorithm:
- Input the size of the array.
- Input elements into the array.
- Use nested loops to iterate over the array elements and perform the bubble
sort algorithm:
- Iterate over the array elements from the beginning to the second-to-last
element.
- Within the above loop, iterate over the array elements from the beginning to
size - i - 2.
- Swap adjacent elements if they are in the wrong order.
- Display the sorted array:
Program:
#include <stdio.h>
// Function to perform bubble sort on an array
void bubbleSort(int arr[], int size)
{
for (int i = 0; i < size - 1; ++i)
{
for (int j = 0; j < size - i - 1; ++j)
{
// Swap if the element found is greater than the next element
if (arr[j] > arr[j + 1])
{
// Swap the elements using a temporary variable
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main()
{
int size;
// Input the size of the array
printf("Enter the size of the array: ");
scanf("%d", &size);
int arr[size];
// Input elements into the array
inputArray(arr, size);
bubbleSort(arr, size);
// Display the sorted array
displayArray(arr, size);
return 0;
// Exit successfully
}
Output:
Enter the size of the array: 10
Enter 10 elements:
12
21
43
32
11
56
54
87
76
65
Sorted Array:
11 12 21 32 43 54 56 65 76 87
Sorted Array:
32 43 54 65 67
Problem Statement:
Solution Overview:
1. Input:
o Read the array size, elements of the array, and the target value from
the user.
2. Sort the Array:
o Ensure the array is sorted in ascending order using a suitable sorting
algorithm (e.g., quicksort, mergesort).
3. Binary Search:
o Initialize left and right pointers to the first and last indices of the
array, respectively.
o While left is less than or equal to right:
Calculate the middle index mid = (left + right) / 2.
If the element at mid is equal to the target, return mid.
If the element at mid is less than the target, update left to mid
+ 1.
If the element at mid is greater than the target, update right to
mid - 1.
4. Output:
o If the target is found, print its index.
o If the target is not found, print -1.
Intuition:
Algorithm:
- Input the size of the array (size).
Program:
#include <stdio.h>
// Function to perform binary search
int binarySearch(int arr[], int low, int high, int key)
{
while (low <= high) {
int mid = low + (high - low) / 2;
int main() {
int size, key, result;
// Input the size of the array
printf("Enter the size of the array: ");
scanf("%d", &size);
int arr[size];
// Input array elements in sorted order
printf("Enter the sorted array elements:\n");
for (int i = 0; i < size; i++) {
scanf("%d", &arr[i]);
}
// Input the element to be searched
printf("Enter the element to be searched: ");
scanf("%d", &key);
// Perform binary search
result = binarySearch(arr, 0, size - 1, key);
// Output the result
if (result != -1)
printf("Element %d found at index %d\n", key, result+1);
else
printf("Element %d not found in the array\n", key);
return 0;
}
Output:
Enter the size of the array: 6
Enter the sorted array elements:
12
23
34
45
56
67
Enter the element to be searched: 56
Element 56 found at index 5
Problem Statement:
Write a C program using pointers to compute the sum, mean, and standard
deviation of an array of N real numbers.
Solution Overview:
1. Input:
o Read the value of N (the number of elements in the array).
o Dynamically allocate memory for an array of N real numbers using malloc.
o Read the elements of the array from the user.
2. Pointer Operations:
o Use a pointer to iterate through the array elements.
o Calculate the sum of the elements.
o Calculate the mean by dividing the sum by the number of elements.
o Calculate the variance by subtracting the mean from each element,
squaring the difference, summing the squared differences, and dividing
by the number of elements.
o Calculate the standard deviation by taking the square root of the
variance.
3. Output:
o Print the calculated sum, mean, and standard deviation.
Intuition:
By using a pointer, you can iterate through the array and perform calculations on
each element.
The formulas for sum, mean, and standard deviation are used to compute the
desired values.
Algorithm:
1. Input:
Read the number of elements, N.
Allocate memory dynamically for an array of N real numbers using malloc.
Read the N elements from the user and store them in the array.
2. Calculate sum:
Initialize a variable sum to 0.
Iterate through the array using a pointer, adding each element to sum.
3. Calculate mean:
Calculate the mean by dividing sum by N.
4. Calculate standard deviation:
Initialize a variable sd to 0.
Iterate through the array again, calculating the difference between each element
and the mean, squaring it, and adding it to sd.
Divide sd by N-1 to get the variance.
Calculate the standard deviation as the square root of the variance.
5. Output:
Print the sum, mean, and standard deviation.
Program:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int N;
float *arr, sum = 0, mean, sd = 0;
printf("Enter the number of elements: ");
scanf("%d", &N);
// Dynamically allocate memory for the array
arr = (float*)malloc(N * sizeof(float));
if (arr == NULL) {
printf("Memory allocation failed.\n");
return 1;
}
printf("Enter the elements:\n");
for (int i = 0; i < N; i++) {
scanf("%f", arr + i);
sum += *(arr + i);
}
mean = sum / N;
for (int i = 0; i < N; i++)
{
sd += pow(*(arr + i) - mean, 2);
}
sd = sqrt(sd / (N - 1));
printf("Sum: %.2f\n", sum);
printf("Mean: %.2f\n", mean);
printf("Standard deviation: %.2f\n", sd);
// Free the allocated memory
free(arr);
return 0;
}
Output:
Enter the number of elements: 5
Enter the elements:
1.0 2.5 3.0 4.5 5.0
Sum: 16.00
Mean: 3.20
Standard deviation: 1.41
Mean: 5.00
Standard deviation: 2.45
The program will successfully compute and print the sum, mean, and standard
deviation of the given array of real numbers using pointers.
Standard deviation measures the dispersion or spread of data points around the
mean. It provides insights into how much the data varies from the average
value.
7. Learning Resources:
TEXT BOOKS:
1. B.W. Kernighan & D.M. Ritchie, "C Programming Language", 2nd Edition,
PRENTICE HALL
2. SOFTWARE SERIES, 2005.
3. Herbert Schildt, “C: The Complete Reference”, 4th edition, TATA McGraw
Hill,2000.
4. B.S. Anami, S.A. Angadi and S. S. Manvi, “Computer Concepts and C Programming”
5. Holistic Approach”, second edition, PHI,2008.
REFERENCE BOOKS:
1. Balaguruswamy,” Programming in ANSI C”, 4th edition, TATA MCGRAW Hill, 2008.
2. Donald Hearn, Pauline Baker, “Computer Graphics C Version”,
second edition, Pearson Education, 2004
2.http://pdvpmtasgaon.edu.in/uploads/dptcomputer/Let%20us%20c%20-
%20yashwantkanetkar.pdf
3.https://karadev.net/uroci/filespdf/files/head-first-c-o-reilly-david-grifffiths-dawn-
griffiths.pdf