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;
}
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;
}
Vastaukset 8
Vanhimmat
do
{
printf("Anna arvosana (4-10): %d", luku);
scanf("%d", &luku);
if(luku > 0) ....
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
}
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
#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
int main(void)
{
int luku=4, summa=0,n=0;
float ka;
while(luku>=4 && luku=4 && luku
"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;
}