#include <stdio.h> /****************************************************************************/ int pienin_jakaja(int luku) /* Palautetaan luvun pienin jakaja (alkuluvulle 1). Algoritmi: Negatiivisesta luvusta otetaan itseisarvo. Kokeillaan jokaista pienempää jakajaa 2,3,5,7 jne, kunnes jako menee tasan tai jakaja on liian iso ollakseen luvun jakaja. */ { int jakojaannos,jakaja=2,kasvatus=1; if ( luku < 0 ) luku = - luku; if ( luku == 2 ) return 1; do { jakojaannos = luku % jakaja; if ( jakojaannos == 0 ) return jakaja; jakaja += kasvatus; kasvatus = 2; } while ( jakaja < luku/2 ); return 1; } /****************************************************************************/ int main(void) { int luku,jakaja; printf("Tutkin onko luku alkuluku. Anna luku >"); scanf("%d",&luku); jakaja = pienin_jakaja(luku); if ( jakaja == 1 ) printf("Luku on alkuluku.\n"); else printf("Luku on jaollinen esimerkiksi luvulla %d.\n",jakaja); return 0; }Käytimme tässä silmukkaa:
do lause while (ehto);Koska esimerkin silmukassa oli useita suoritettavia lauseita, oli lauseet suljettu lausesuluilla. Jälleen voi olla hyvä tapa käyttää AINA lausesulkuja.
Huomautus! Silmukoiden kanssa on syytä olla tarkkana sekä 1. kierroksen että viimeisen kierroksen kanssa. Myös silmukan lopetusehdon on syytä muuttua silmukan suorituksen aikana.
Eräs tyypillinen esimerkki do- while silmukan käytöstä olisi seuraava:
#include <stdio.h> int main(void) { int luku; do { printf("Anna luku väliltä [0- 20]>"); fflush(stdin); /* Standardin mukaan ei määritelty! */ } while ( ( scanf("%d",&luku) < 1 ) || ( luku < 0 ) || ( 20 < luku ) ); printf("Annoit luvun %d\n",luku); return 0; }