Do...while -käyttö

Yritän tälläistä: tee ohjelma, joka kysyy oppilaiden koearvosanoja (kokonaisluvut 4-10 käytössä) ja laskee syötettyjen arvosanojen keskiarvon. Ohjelman tulee ottaa vastaan arvosanoja, kunnes arvosanojen syöttö lopetetaan negatiivisella kokonaisluvulla. Lopuksi ohjelma tulostaa arvosanojen lukumäärän sekä lasketun keskiarvon, joka tulostetaan kahden desimaalin tarkkuudella.

Ja saan aikaiseksi tälläistä, mutta en toimivaa ohjelmaa:

#include
main()
{
int luku;

printf("Ohjelma laskee syötettyjen arvosanojen keskiarvon.\nLopetus negatiivisella kokonaisluvulla.\n");

do
{

if(luku > 0)
{
printf("Anna arvosana (4-10): %d", luku);
scanf("%d", &luku);



}
else if(luku < 0)
{
printf("Ohjelma lopetetaan\n");
}
}
while(luku > 0);

printf("Ohjelmaan syötetty arvosanaa.\n");
printf("Arvosanojen keskiarvo: \n");

return 0;
}
81278
Äänestä

Muut lukivat myös

Vastaukset 8

Vanhimmat

do
{
printf("Anna arvosana (4-10): %d", luku);
scanf("%d", &luku);

if(luku > 0) ....

Äänestä
  • while(1){ //ääretön silmukka
    //kirjoita teksti
    // lue luku
    if(luku

    Äänestä

  • xxxxx kirjoitti:

    while(1){ //ääretön silmukka
    //kirjoita teksti
    // lue luku
    if(luku

    while(1){ //ääretön silmukka
    //kirjoita teksti
    // lue luku
    if(luku < 0) break; // hyppää ulos silmukasta

    if (luku < 10) //kirjoita Noin hyviä oppilaita meillä ei ole
    else if (luku < 4) //kirjoita Varmasti ansaittu, minimiarvo kuitenkin 4
    else //tee luvulle jotain
    }

    Äänestä

  • huonosti kirjoitti:

    while(1){ //ääretön silmukka
    //kirjoita teksti
    // lue luku
    if(luku < 0) break; // hyppää ulos silmukasta

    if (luku < 10) //kirjoita Noin hyviä oppilaita meillä ei ole
    else if (luku < 4) //kirjoita Varmasti ansaittu, minimiarvo kuitenkin 4
    else //tee luvulle jotain
    }

    keskiarvoa piti laskea

    int lukumäärä =0; //syöttöjen lukumäärä
    double keskiarvo =0.; //Summa, lopa keskiarvossa

    while(1){ //ääretön silmukka
    //kirjoita teksti
    // lue luku
    if(luku < 0) break; // hyppää ulos silmukasta

    if (luku > 10) //kirjoita Noin hyviä oppilaita meillä ei ole
    else if (luku < 4) //kirjoita Varmasti ansaittu, minimiarvo kuitenkin 4
    else {//laske keskiarvomuuttujat
    lukumaara = lukumaara 1; //voidaan myös kirjoittaa lukumaara ;
    keskiarvo = keskiarvo (double) luku; //cast (suluissa oleva double) ei kaikissa kääntäjissä ole pakollinen, takaa oikean muunnoksen liukulukujen ja kokonaislukujen välillä, selventää koodia.
    }

    // OK nyt kun tiedetään kaikkien lukujen summa ja niiden lukumäärä, voidaan laskea keskiarvo

    keskiarvo = keskiarvo/lukumaara; //keskiarvo oli alunperin summa, ei haaskata muistia vaan käytetään sama muistipaikka uudestaan

    //kirjoita Keskiarvo on: keskiarvo.

    Jos teet ohjelmaa sinun on jatkuvasti ajateltavaa prosessorin työtilannetta: Tehtäviä jotka suoritetaan silmukan sisällä pitää pyrkiä siirtämään ulos tai jollakin toisella tavalla yksinkertaistava.

    Käytä muuttujia uudestaan silloiun kun se on mahdollista, Edellisessa esimerkissä muuttuja 'keskiarvo' käytettiib ensin lakenaan arvosanojen summaa, vasta lopussa sen sisällöksi tuli varsinainen keskiarvo.

    Tällaisessa pienessä ohjelmassa näillä neuvoilla ei ole mitään merkitysta suoritusnopeuteen tai nuistinhallintaan.

    Jos teet suurempaa kokonaisuutta, arvostat ehkä nämä alkutaipaleella saatua neuvoa. Vaikka jollakin toimepiteellä olisi marginaalimerkitys, hyviin ohjelmointitaitoihin kuluu silti hyödyntää niitä.

    Esim. 3-D-grafiikassa missä joudutaan jatkuvasti tekemääm projektiomuunnoksia (missä tarvitaan jatkuvasti sini ja cosini-muunnoksia) tehdään näin:

    int radius;
    double sini[360), cosi[360];

    for (radius=0; radius

    Äänestä

#include

int main(){

int luku, luvut, n = 0;
float ka;

printf("Ohjelma laskee syötettyjen arvosanojen keskiarvon.\nLopetus negatiivisella kokonaisluvulla.\n");

while(1){

printf("\nAnna arvosana (4-10): );
scanf("%d", &luku);

if(luku < 0) break;

if(luku >= 4 && luku

Äänestä

int main(void)
{
int luku=4, summa=0,n=0;
float ka;


while(luku>=4 && luku=4 && luku

Äänestä
  • "kunnes arvosanojen syöttö lopetetaan negatiivisella kokonaisluvulla"

    ???

    Äänestä

  • tuossa on kirjoitti:

    "kunnes arvosanojen syöttö lopetetaan negatiivisella kokonaisluvulla"

    ???

    -Ohjelma hyväksyy luvut 0-15,mutta laskee keskiarvoon ainoastaan
    luvut 4-10
    -Negatiivinen luku lopettaa
    -for(;;) hoitaisi myös saman homman,kuin while



    int main(void)
    {
    int luku=0, summa=0,n=0;
    float ka;
    while(15)
    {
    printf("Anna arvosana 4-10\n");
    printf("Negatiivinen lopettaa\n");
    scanf("%d", &luku);

    if(luku=4 && luku10)
    printf("Et sina noin hyva ole\n");

    }//while
    clrscr();
    printf("Keskiarvo oli %.2f\n",ka);
    printf("Lukuja oli %d\n",n);
    getch();
    return 0;
    }

    Äänestä

Kommentoi aloitusta


MissäVika kirjoitti:

Yritän tälläistä: tee ohjelma, joka kysyy oppilaiden koearvosanoja (kokonaisluvut 4-10 käytössä) ja laskee syötettyjen arvosanojen keskiarvon. Ohjelman tulee ottaa vastaan arvosanoja, kunnes arvosanojen syöttö lopetetaan negatiivisella kokonaisluvulla. Lopuksi ohjelma tulostaa arvosanojen lukumäärän sekä lasketun keskiarvon, joka tulostetaan kahden desimaalin tarkkuudella.

Ja saan aikaiseksi tälläistä, mutta en toimivaa ohjelmaa:

#include
main()
{
int luku;

printf("Ohjelma laskee syötettyjen arvosanojen keskiarvon.\nLopetus negatiivisella kokonaisluvulla.\n");

do
{

if(luku > 0)
{
printf("Anna arvosana (4-10): %d", luku);
scanf("%d", &luku);



}
else if(luku < 0)
{
printf("Ohjelma lopetetaan\n");
}
}
while(luku > 0);

printf("Ohjelmaan syötetty arvosanaa.\n");
printf("Arvosanojen keskiarvo: \n");

return 0;
}

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu