C Programming Laboratory: Input Handling and Computational Algorithms
Exercise 1: Structured Character Output
The following demonstrates formatted console output for creating structured patterns using standard I/O functions.
#include <stdio.h>
int main(void) {
printf(" o o \n");
printf(" <H> <H> \n");
printf(" | | | | \n");
return 0;
}
Exercise 2: Triangle Inequality Verification
Implementing geometric validation through logical operators to determine if three lengths can form a valid triangle.
#include <stdio.h>
int main(void) {
double side_a, side_b, side_c;
scanf("%lf %lf %lf", &side_a, &side_b, &side_c);
if (side_a + side_b > side_c &&
side_a + side_c > side_b &&
side_b + side_c > side_a) {
printf("Valid triangle formation\n");
} else {
printf("Invalid triangle formation\n");
}
return 0;
}
Exercise 3: Input Buffer Management
Handling sequential character input requires careful buffer management to prevent newline characters from interfering with subsequent reads.
#include <stdio.h>
int main(void) {
char response1, response2;
printf("Did you review the documentation? (y/n): ");
response1 = getchar();
getchar(); // Consume residual newline character
printf("Did you run the test suite? (y/n): ");
response2 = getchar();
if ((response1 == 'y' || response1 == 'Y') &&
(response2 == 'y' || response2 == 'Y')) {
printf("\nOptimal workflow maintained.\n");
} else {
printf("\nProcess improvement recommended.\n");
}
return 0;
}
Exercise 4: Format Specifier Behavior
Demonstrating proper usage of scanf format strings with various data types and addressing common input parsing issues.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {
int num1, num2, num3;
char sym1, sym2, sym3;
double val1, val2;
scanf("%d %d %d", &num1, &num2, &num3);
printf("Integer values: %d, %d, %d\n", num1, num2, num3);
scanf(" %c %c %c", &sym1, &sym2, &sym3);
printf("Character symbols: %c, %c, %c\n", sym1, sym2, sym3);
scanf("%lf %lf", &val1, &val2);
printf("Floating-point values: %lf, %lf\n", val1, val2);
return 0;
}
Exercice 5: Temporal Unit Conversion
Converting large time quantities between units using floatnig-point arithmetic and proper type casting.
#include <stdio.h>
#define SECONDS_PER_YEAR (365.0 * 24 * 60 * 60)
int main(void) {
long total_seconds = 1000000000L;
int years = (int)(total_seconds / SECONDS_PER_YEAR + 0.5);
printf("One billion seconds equals approximately %d years\n", years);
return 0;
}
Exercise 6: Iterative Mathematical Operations
Utilizing the pow function from the mathematics library within an input-driven loop to compute exponential growth patterns.
#include <stdio.h>
#include <math.h>
int main(void) {
double base, result;
while (scanf("%lf", &base) != EOF) {
result = pow(base, 365.0);
printf("%.2f raised to 365th power: %.2f\n\n", base, result);
}
return 0;
}
Exercise 7: Interactive Temperature Conversion
Implementing continuous input processing for unit conversion between Celsius and Fahrenheit temperature scales.
#include <stdio.h>
int main(void) {
double celsius, fahrenheit;
printf("Enter temperature in Celsius (Ctrl+Z to terminate):\n");
while (scanf("%lf", &celsius) != EOF) {
fahrenheit = celsius * 9.0 / 5.0 + 32.0;
printf("Equivalent Fahrenheit: %.2f\n", fahrenheit);
printf("Input next temperature value:\n");
}
return 0;
}
Exercise 8: Geometric Area Calculation
Applying Heron's formula to calculate triangle area from side lengths with iterative input handling.
#include <stdio.h>
#include <math.h>
int main(void) {
double edge1, edge2, edge3;
printf("Enter three side lengths for area computation:\n");
while (scanf("%lf %lf %lf", &edge1, &edge2, &edge3) != EOF) {
double semi_perimeter = (edge1 + edge2 + edge3) / 2.0;
double area = sqrt(semi_perimeter *
(semi_perimeter - edge1) *
(semi_perimeter - edge2) *
(semi_perimeter - edge3));
printf("Triangle with sides %.0f, %.0f, %.0f has area: %.3f\n",
edge1, edge2, edge3, area);
}
return 0;
}