Code:
#include<stdio.h>
#include<stdlib.h>
int readAnswerInfo (FILE *infilep, int numElems, int answerKeyArray[]);
int readStudentData (FILE *infilep, int numElems, int answerKeyArray[],
int frequencyArray[], FILE *outfilep);
int fillArray (FILE *infilep, int numElems, int array[]);
int correctAnswers (int answerKeyArray[], int numElems, int studentAnswersArray[],
int studentID, int frequencyArray[], int score);
void printStudentScores (int numElems, int answerKeyArray[],
int frequencyArray[], FILE *outfilep);
int main (void)
{
//number of test questions and return variable
int numElems = -1; //from readAnswerInfo
FILE *infile; //declares infile as a file variable
FILE *outfile; //declares outfile as a file variable
int answerKeyArray[100] = {0}; //declares & initializes array to 0
int frequencyArray[100]; //declares array to 100 elements
infile = fopen("test_input1.txt", "r"); //test to open input file
if( infile == NULL )
{
printf("Input file didn't open\n");
exit(100); //exit main
} //end
outfile = fopen("output.txt", "w"); //test to open output file
if(outfile == NULL)
{
printf("Output file didn't open\n");
exit(101); //exit main
} //end
//function to read in numElems
numElems = readAnswerInfo(infile, numElems, answerKeyArray);
//test for numElems
if(numElems > 0 || numElems <= 100)
{
//function to process student data
readStudentData(infile, numElems, answerKeyArray, frequencyArray, outfile);
}
else
printf("Error with input file: input1.txt\n");
//function to print student data and scores
printStudentScores(numElems, answerKeyArray, frequencyArray, outfile);
fclose(infile); //closes input file
fclose(outfile); //closes output file
return 0;
} // end main
int readAnswerInfo (FILE *infilep, int numElems, int answerKeyArray[])
{
//scanning numElems
fscanf(infilep,"%d", &numElems);
//function to store numElems and fill array
fillArray(infilep, numElems, answerKeyArray);
if( numElems > 0 || numElems <= 100 )
return numElems;
else
return 0;
}
int readStudentData (FILE *infilep, int numElems, int answerKeyArray[], int frequencyArray[], FILE *outfilep)
{
int i;
int studentID = 0; //student ID variable
int studentAnswersArray[100] = {0}; //student answer array
int score = 0;
//for loop to initialize array elements to 0
for(int i = 0; i <= 100 ; i++)
{
frequencyArray[i] = 0;
}
//prints headers
printf("\nStudent ID Score Student Answers\n");
for( i = 0; i < numElems; i++ )
printf("%4d\n", studentID); //prints studentIDs
//loop to run function to fill student answer array
//loop to run function to correct student answers
//loop to print studentIDs and student answer arrays
while (fscanf(infilep,"%d", &studentID) != EOF)
{
fillArray(infilep, numElems, studentAnswersArray);
score = correctAnswers(answerKeyArray, numElems, studentAnswersArray, studentID, frequencyArray, score);
printf("%7d\t\t%d\t", studentID, score);
for( i = 0; i < numElems; i++)
{
printf("%4d", studentAnswersArray[i]);
}
printf("\n");
}
return 0;
}
int fillArray (FILE *infilep, int numElems, int array[])
{
int i;
//for loop to fill array
for( i = 0; i < numElems ; i++ )
fscanf(infilep,"%d", &array[i]);
return 0;
}
int correctAnswers (int answerKeyArray[], int numElems, int studentAnswersArray[],
int studentID, int frequencyArray[], int score)
{
int i;
//loop to correct student scores
for( i = 0, score = 0; i < numElems; i++)
{
if (answerKeyArray[i] == studentAnswersArray[i])
{
score++;
frequencyArray[i]++;
}
}
return score;
}
void printStudentScores (int numElems, int answerKeyArray[],
int frequencyArray[], FILE *outfilep)
{
int i;
int num;
printf("\nQuestion #: \t\t");
for( num = 1; num <= numElems ; num++ )
printf("%4d", num);
printf("\n\n");
printf("Answer Key: \t\t");
for( i = 0; i < numElems ; i++ )
printf("%4d", answerKeyArray[i]);
printf("\n\n");
printf("Frequency: \t\t");
for( i = 0; i < numElems ; i++ )
printf("%4d", frequencyArray[i]);
printf("\n\n");
return;
}