Här ska vi få en kort introduktion till programspråket C genom att göra ett litet enkelt primtalsprogram. Program består utav tre filer. Två styck källkodsfiler och en styck header-fil. I header-filen lägger vi något som kallas för funktionsprototyper. En funktionsprototyp använder man för att tala om för programmet hur en funktion ser ut, det vill säga vilka argument funktionen tar samt vilken datatyp den returernar. Detta gör gör man för att slippa lägga funktionen överst i samma fil som main(). Header-filen döper vi till skrivprm.h.

I filen primtal.c lägger vi vår main()-funktion, alltså programmets huvudfunktion. Alla C-program måste ha en main()-funktion. Lägg märke till den andra #include-raden som inkluderar vår egna header-fil. Lägg också märke till att syntaxen för denna #include skiljer sig från när vi inkluderar filer från systemet. Den översta #include-raden inkluderar stdio.h, en header-fil från systemet som innehåller deklarationer och funktionsprototyper för allt som handlar om in- och utdata. Läs gärna mer om stdio-funktionerna i manualsidan med man stdio.

I C, till skillnad från till exempel Python, måste vi alltid deklarera alla variabler i förväg, och dessutom tala om vilken datatyp de ska vara. Här nedan använder vi till exemepl int min och int max för att skapa två heltalsvariabler.

När vi använder scanf()-funktionen nedan med vanliga heltalsvariabler, måste vi ange adressen till variabeln. Detta görs med &-operatorn.

primtal.c

#include <stdio.h>
#include "skrivprm.h"

int main(void)
{
    int min;
    int max;
    
    printf("Ange minsta talet: ");
    /* Läs in ett heltal från tangentbordet, och
       skriv ut ett felmeddelande om indatan inte
       var ett heltal */
    if(!scanf("%d", &min))
    {
        printf("Ange endast heltal\n");
        return 1;
    }
    
    printf("Ange största talet: ");
    /* Läs in nästa heltal */
    if(!scanf("%d", &max))
    {
        printf("Ange endast heltal\n");
        return 1;
    }
    
    /* Exekvera funktionen 'skrivprimtal' med
       variablerna 'min' och 'max' som argument */
    skrivprimtal(min, max);
    
    return 0;
}

I filen skrivprm.h lägger vi funktionsprototypen för primtalsfunktionen.

skrivprm.h

void skrivprimtal(int min, int max);

I filen skrivprm.c lägger vi funktionskroppen för primtalsfunktionen.

skrivprm.c

#include <stdio.h>

void skrivprimtal(int min, int max)
{
    /* Skapa tre heltalsvariabler */
    int i, j, primtal;
    
    /* Testa om talen mellan min och max är primtal.
       Testet går ut på att se om varje givet tal är
       jämnt delbart med något tal mellan 2 och talet
       självt. Om så är fallet är talet INTE ett primtal */
    for (i=min; i<=max; i++)
    {
        primtal = 1;
        for(j=2; j<i; j++)
        {
            /* Använd modulo-operatorn för att testa delbarheten */
            if(i%j == 0)
            {
                primtal = 0; /* Om talet INTE är ett primtal */
                break;
            }
        }
        if(primtal == 1)
        {
            printf("%d är ett primtal\n", i);
        }
    }
}

När vi ska kompilera detta programmet måste vi tala om för kompilatorn att vi ska använda både skrivprm.c och primtal.c, alltså båda c-filerna. Däremot behöver vi inte tala om för kompilatorn att vi ska använda header-filen, detta står ju redan i källkodsfilen. Kommandot blir:

cc skrivprm.c primtal.c -o primtal

Nu kan vi köra programmet med ./primtal.

$> ./primtal
Ange minsta talet: 30
Ange största talet: 40
31 är ett primtal
37 är ett primtal