CodeFix C Programs
CodeFix C Programs
#include <stdio.h>
int main() {
int x = 5, y = 10;
swap(x, y);
return 0;
}
Corrected Program
#include <stdio.h>
void swap(int *a, int *b) { // Use pointers to modify the original variables
int temp;
temp = *a; // Dereference pointers to access the values
*a = *b;
*b = temp;
}
int main() {
int x = 5, y = 10;
return 0;
}
Expected output:
x = 10, y = 5
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int size = 5;
printArray(arr, size);
return 0;
}
Corrected Program
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int size = 5;
printArray(arr, size);
return 0;
}
Expected output:
12345
Index 5 is out of bounds
#include <stdio.h>
int main() {
int x, y;
addNumbers(x, y);
return 0;
}
Corrected Program
#include <stdio.h>
int main() {
int x, y;
int result = addNumbers(x, y); // Call function and store the result
printf("The sum of %d and %d is %d\n", x, y, result); // Print the result
return 0;
}
Expected Output:
#include <stdio.h>
#define MAX_SIZE 10
void fillArray(int arr[], int size) {
for (int i = 0; i <= size; i++) { // Bug 1: Off-by-one error
printf("Enter element %d: ", i);
scanf("%d", &arr[i]); // This can cause a buffer overflow on the last iteration
}
}
int main() {
int numbers[MAX_SIZE];
int sum = 0;
for (int i = 0; i < MAX_SIZE; i++) {
sum += numbers[i]; // Bug 2: Should check for overflow, but this is not causing a crash
}
return 0;
}
Corrected Program
#include <stdio.h>
#define MAX_SIZE 10
int main() {
int numbers[MAX_SIZE];
int sum = 0;
for (int i = 0; i < MAX_SIZE; i++) {
sum += numbers[i]; // No change needed here, but consider overflow checks in a real
application
}
return 0;
}
Expected Output:
Enter element 0: 5
Enter element 1: 10
Enter element 2: 15
Enter element 3: 20
Enter element 4: 25
Enter element 5: 30
Enter element 6: 35
Enter element 7: 40
Enter element 8: 45
Enter element 9: 50
5 10 15 20 25 30 35 40 45 50
Sum: 275
Average: 27.50
#include <stdio.h>
int factorial(int n) {
if (n < 0) // Bug 1: No check for negative input
return -1; // Should handle negative input properly
if (n == 0)
return 1;
return n * factorial(n - 1); // Bug 2: Potential stack overflow for large n
}
int main() {
int num;
printf("Enter a number: ");
scanf("%d", num); // Bug 3: scanf should use &num
int result = factorial(num); // Bug 4: No check for invalid result from factorial
printf("Factorial of %d is %d\n", num, result);
return 0;
}
Corrected Program
#include <stdio.h>
int factorial(int n) {
if (n < 0) { // Fixed: Check for negative input
printf("Error: Factorial is not defined for negative numbers.\n");
return -1; // Return error code
}
if (n == 0)
return 1;
return n * factorial(n - 1); // Still recursive, but can be improved for large n
}
int main() {
int num;
printf("Enter a number: ");
scanf("%d", &num); // Fixed: Added & to scanf
int result = factorial(num); // Call factorial function
if (result != -1) { // Fixed: Check for invalid result
printf("Factorial of %d is %d\n", num, result);
}
return 0;
}
Expected Output:
Enter a number: 5
Factorial of 5 is 120