Eli ohjelma laskee annettujen arvosanojen keskiarvon ja sen pitäisi pystyä lopettamaan negatiivisella luvulla.
Olen päässyt näin pitkälle:
#include <stdio.h> int main() /*esitellään pääohjelma*/ { int arvosana, maara = 0, summa = 0; /*alustetaan kokonaislukumuuttujat*/ float ka; /*alustetaan liukulukumuuttuja*/ /*selostaa ohjelman toiminnan lyhyesti*/ printf("Ohjelma laskee syötettyjen arvosanojen keskiarvon.\n"); printf("Lopetus negatiivisella kokonaisluvulla.\n"); while (arvosana >= 4) { printf("Anna arvosana (4-10):"); /*pyytää käyttäjää syöttämään arvosanan*/ scanf("%d", &arvosana); if ((arvosana >=4) && (arvosana <=10)) { maara++; summa = arvosana + summa; } } printf("Ohjelmaan syötetty %d arvosanaa.\n", maara); ka = summa / maara; printf("Arvosanojen keskiarvo: %.2f", ka); }
Miten siis saisin lopetettua ohjelman negatiivisella luvulla, kun se nyt laskee myös tämän luvun mukaan keskiarvoon?
No siis, laitat tuon if (arvosana >=4) -lauseen jälkeen tällaista:
else if (arvosana < 0) { return 0; }
Deewiant kirjoitti:
No siis, laitat tuon if (arvosana >=4) -lauseen jälkeen tällaista:
else if (arvosana < 0) { return 0; }
Ei toimi toikaan. Tai nyt se lopettaa ohjelman, mutta sen pitäis kuitenkin tulostaa montako arvosanaa on syötetty ja mikä on niiden keskiarvo. Se ei sais laskee negatiivista lukua keskiarvoon mukaan.
Noh, tulostat vaa kamat ennen tota returnia.
jrantala kirjoitti:
Noh, tulostat vaa kamat ennen tota returnia.
Koodi nyt:
#include <stdio.h> int main() /*esitellään pääohjelma*/ { int arvosana, maara = 0, summa = 0; /*alustetaan kokonaislukumuuttujat*/ float ka; /*alustetaan liukulukumuuttuja*/ /*selostaa ohjelman toiminnan lyhyesti*/ printf("Ohjelma laskee syötettyjen arvosanojen keskiarvon.\n"); printf("Lopetus negatiivisella kokonaisluvulla.\n"); while (arvosana >= 4) { printf("Anna arvosana (4-10):"); /*pyytää käyttäjää syöttämään arvosanan*/ scanf("%d", &arvosana); if ((arvosana >=4) && (arvosana <=10)) { maara++; summa = arvosana + summa; } else if (arvosana < 0) { ka = summa / maara; printf("Ohjelmaan syötetty %d arvosanaa.\n", maara); printf("Arvosanojen keskiarvo: %.2f", ka); return 0; } } }
...mutta se edelleen laskee tuon negatiivisen luvun jotain kautta mukaan. Missä vielä vika?
Ihan silmämääräisesti tarkasteltun, eikös 'arvosana':ankin joudu se negatiivinen luku (esim -1)? Ja siten 'ohjelmaan syötetty ...' tulostaa +1 kpl:tta arvosanojen lkm:ksi.
Ongelma ratkesi. Olin määrittänyt muuttujan summa kokonaislukumuuttujaksi, kun se pitää määrittää liukulukumuuttujaksi. Kiitos kaikille avusta!
EDIT: ai, katos. No mikäs siinä sitten, hyvä =) Jätän tämän silti tähän.
Nyt ongelmanasi on se, että tuo "jos se on alle 0" on "niin kauan kuin se on suurempi tai yhtä kuin 4":n sisällä, joten se ei tietenkään ole koskaan totta.
Väännetään rautalangasta - koko koodi:
#include <stdio.h> int main() { int arvosana, maara = 0, summa = 0; double keskiarvo; printf("Ohjelma laskee syötettyjen arvosanojen keskiarvon.\n"); printf("Lopetus negatiivisella kokonaisluvulla.\n"); // loputon silmukka for (;;) { printf("Anna arvosana (4-10):\n"); scanf("%d", &arvosana); if ((arvosana >=4) && (arvosana <=10)) { ++maara; summa += arvosana; } else if (arvosana < 0) { keskiarvo = (double)summa / (double)maara; printf("Ohjelmaan syötetty %d arvosanaa.\n", maara); printf("Arvosanojen keskiarvo: %.2f", ka); return 0; } else { // jos annetaan luku väliltä 1-3 tai yli 10 printf("Anna fiksu arvo!\n"); } } return 0; }
Aihe on jo aika vanha, joten et voi enää vastata siihen.