/ / Jak sprawić, by wyświetlała drugą co do wielkości wartość, a nie najniższą wartość - c, zmienne

Jak sprawić, by wyświetlała drugą największą wartość zamiast najniższej wartości - c, zmienne

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 № 1

Dostajesz 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.