Właściwie muszę wyświetlić wartość dwóch najwyższych ocen, ale kiedy wykonuję, pokazuje dwie najwyższe wartości dwa razy. Więc gdzie jest mój błąd?
#include <stdio.h>
int main(void)
{
float a,b,c,d=0,L,H;
printf("Enter number of students:");
scanf("%f",&b);
for (a=1; a<=b; a++)
{
printf("nEnter test score for student No.%.f:",a);
scanf("%f",&c);
if(c>=35)
printf("Test score: %.f Grade: An",c);
else if(c>=35)
printf("Test score: %.f Grade: Bn",c);
else if(c>=15)
printf("Test score: %.f Grade: Cn",c);
else if(c>=8)
printf("Test score: %.f Grade: Fn",c);
d=d+c;
}
printf("nThe Average of the %.f score(s) is: %.2fn",b,d/b);
if (c>b)
L=c;
else (c<b);
H=c;
printf("The second test score is: %.fn",H);
printf("The highest test score is: %.fn",H);
return 0;
}
Odpowiedzi:
1 dla odpowiedzi № 1Dostajesz to, o co prosisz:
printf("The second test score is: %.fn",H);
printf("The highest test score is: %.fn",H);
Jest to H
w obu liniach. Oto, co dostajesz za programowanie w trybie wklejania :-)
Są też zepsute if/else
na końcu. W obecnej postaci twój program też tylko ustawia H
lub L
, nigdy jedno i drugie. Należy to również naprawić, aby zapewnić prawidłowe wyniki.
Powiedziałem to milion razy już na Stackoverflow i zrobię to ponownie:
Nie testowanie wartości zwracanej z
scanf
to pewny przepis na niespodzianki.
0 dla odpowiedzi nr 2
Jeśli wciśniesz poprawnie swój kod, stanie się oczywiste, że masz coś obcego ;
tutaj
else (c < b);
następny blok jest wykonywany niezależnie od tego, czy ten warunek jest spełniony, czy też jest to nieprawidłowa składnia, tak powinno być
else if (c < b)
H = c;
Wreszcie drukujesz H
zarówno printf()
oświadczenia, więc nie wiem, czego się spodziewałeś.
0 dla odpowiedzi № 3
Wszystkie obliczenia są nieprawidłowe:
if (c > b)
L = c;
else (c < b);
H = c;
Musisz obliczyć L i H wewnątrz pętli, ponieważ „nie rejestrujesz ocen. Musisz porównać każdą ocenę z poprzednią wartością L / H, aby zobaczyć, czy jest to nowa niska / wysoka.
Coś w tym stylu:
float H = -1, L = -1;
...
for (a = 1 ; a <= b ; a++)
{
...
if( L < 0 || c <= L ) {
L = c; // the worst grade yet
}
if( H < 0 || c >= L ) {
H = c; // the best grade yet
}
}
I oczywiście musisz wydrukować wartości, tutaj drukujesz H dwa razy.