-
c program help
Hello, I am trying to create a program that is supposed to calculate and print the average of several grades entered by the user.
The output is supposed to look something like this:
----------------------------------------------------------------------
This program calculates the average of as many grades you wish to enter.
First, enter the number of grades to process: 4
Now enter the 4 grades to be averaged.
Enter grade #1: 90
Enter grade #2: 80
Enter grade # 3: -20
*** Invalid entry. Grade must be 0 to 100. ***
Enter grade #3: 25
Enter grade #4: 54
The average of the 4 grades entered is 62
You have a letter grade of D-
----------------------------------------------------------------------
Here is what I have so far:
-----------------------------------------------------------------------
Code:
#include <stdio.h>
int main(void)
{
/* Output initial greeting and introduce program */
/* --------------------------------------------- */
printf ("This program caluculates the average of as many grades as you wish to enter.\n");
/* Declare variables. */
int number_of_grades, i, grade;
int grade_total = 0;
int invalid_entry = 0;
float average;
char letter_grade;
char grade_A, grade_AB, grade_B, grade_BC, grade_C, grade_CD, grade_D, grade_F;
/* Prompt user for number of grades to be entered. */
/* ------------------------------------------------*/
printf ("First, enter the number of grades to process: ");
scanf ("%i", &number_of_grades);
/* Output appropriate message based on number of grades entered. */
/*---------------------------------------------------------------*/
printf ("Now enter the %i grades to be averaged.\n", number_of_grades);
for (i = 1; i <= number_of_grades; i++)
{
/* Prompt user for grades. */
/* ----------------------- */
printf ("Enter grade #%i: ", i);
scanf ("%i",&grade);
/* If grade is out of range (less than zero, OR greater than
100), output error message, otherwise output grade entered.*/
/* ---------------------------------------------------------- */
if (grade > 100 || grade < 0)
{
printf ("*** Invaid entry. Grade must be 0 to 100. ***\n");
i --;
}
else
{
/* Assign values */
/* --------------*/
grade_total = grade_total + grade;
}
} // end for loop
/* Calculate average and display output */
/* ------------------------------------ */
average = (float) grade_total / number_of_grades;
printf("\nThe average of the %i grades entered is: %.0f", number_of_grades, average);
/* Assign values to letter grades */
/* -------------------------------*/
letter_grade = grade_total / number_of_grades;
if ( (char) average >= 93 && <= 100)
{
printf ("You have a letter grade of %c\n", grade_A);
}
else ( (char) average <= 92 && >= 88)
}
printf ("You have a letter grade of %c\n", grade_AB);
{
if ( (char) average <= 87 && >= 83)
}
printf (" You have a letter grade of \n", grade_B);
{
else ( (char) average <= 82 && >= 78)
}
printf ("You have a letter grade of\n, grade_BC");
{
if ( (char) average<= 77 && >= 73)
}
printf ("You have a letter grade of C\n");
{
else ( (char) average <= 72 && >= 68)
}
printf ("You have a letter grade of\n", grade_CD);
{
if ( (char) average <= 67 && >= 63)
}
printf ("You have a letter grade of\n", grade_D);
{
else ( (char) average <= 62 && >= 0)
}
printf ("You have a letter grade of\n", grade_F);
{
} //end main
------------------------------------------------------------------------
The program isn't working and I can't figure out how to fix it. I am getting errors on lines 76,86,91,98,105,112,119,and 126. Any help would be much appreciated.
-
For starters:
Code:
/** Prompt user for grades. */
printf ("Enter grade #%d: ", i);
scanf ("%d", &grade);
I'm still looking at the rest, so sit tight. :)
Also, it looks like you don't initialize grade_A, grade_B, etc. You are printing them, but you never assign them a value. If you have to use the grade_A, grade_B char variables, you would have to do something like this:
Code:
char grade_A;
grade_A = 'A';
After you do that, THEN you can print them using printf.
Another alternative is to remove all of those char variables.
Code:
if (((char)average >= 93) && ((char)average <= 100))
{
printf ("You have a letter grade of 'A'.\n");
}
else if (((char) average <= 92) && ((char)average >= 88))
{
printf ("You have a letter grade of 'AB'.\n");
}
/** And so on . . . */
Notice the structure of my if-else statements. They are different than how you did it. Your curly braces were all wonky and you didn't use else if, just else.
Also, note that you never do anything with your variable letter_grade. You assign it a value, but you do not do anything further. Either remove that variable or you can calculate it as you do and then run a switch statement on that letter_grade (or a series of if-else conditionals).
-
Quote:
average >= 93 && <= 100
How it comes out to be so different from the correct way you used before:
Quote:
grade > 100 || grade < 0
Code:
printf ("You have a letter grade of\n", grade_CD);
What do you mean by that?
do not forget that main returns int - so return 0; at the end of the function will be suitable addition.
And of course - proper indentation never hurts...
-
Thanks for your help guys. I think I figured the program out.
Code:
#include <stdio.h>
int main(void)
{
/* Output initial greeting and introduce program */
/* --------------------------------------------- */
printf ("This program calculates the average of as many grades as you wish to enter.\n\n");
/* Declare variables. */
int number_of_grades, i, grade;
int grade_total = 0;
int invalid_entry = 0;
float average;
char letter_grade;
char grade_A, grade_AB, grade_B, grade_BC, grade_C, grade_CD, grade_D, grade_F;
/* Prompt user for number of grades to be entered. */
/* ------------------------------------------------*/
printf ("First, enter the number of grades to process: ");
scanf ("%i", &number_of_grades);
/* Output appropriate message based on number of grades entered. */
/*---------------------------------------------------------------*/
printf ("\nNow enter the %i grades to be averaged.\n\n", number_of_grades);
for (i = 1; i <= number_of_grades; i++)
{
/* Prompt user for grades. */
/* ----------------------- */
printf ("Enter grade #%d: ", i);
scanf ("%d",&grade);
/* If grade is out of range output error message, otherwise output grade entered.*/
/* ----------------------------------------------------------------------------- */
if (grade > 100 || grade < 0)
{
printf ("*** Invaid entry. Grade must be 0 to 100.***\n");
i --;
}
else
{
/* Assign values */
/* --------------*/
grade_total = grade_total + grade;
}
} // end for loop
/* Calculate average and display output */
/* ------------------------------------ */
average = (float) grade_total / number_of_grades;
printf("\nThe average of the %i grades entered is: %.0f", number_of_grades, average);
/* Assign values to letter grades */
/* -------------------------------*/
letter_grade = grade_total / number_of_grades;
if( average <= 62.0 )
{
printf( "You have a letter grade of F\n" ) ;
}
else if( average < 67.0 )
{
printf( "You have a letter grade of D\n" ) ;
}
else if( average < 72.0 )
{
printf( "You have a letter grade of CD\n" ) ;
}
else if( average < 77.0 )
{
printf( "You have a letter grade of C\n" ) ;
}
else if( average < 82.0 )
{
printf( "You have a letter grade of BC\n" ) ;
}
else if( average < 87.0 )
{
printf( "You have a letter grade of B\n" ) ;
}
else if( average < 92.0 )
{
printf( "You have a letter grade of AB\n" ) ;
}
else
{
printf( "You have a letter grade of A\n" ) ;
}
} //end main
But now I have another question:
When I run the program it cuts out before showing the average. Is there a problem with my code or is it the compiler I'm using (Dev-C++).
-