Korte beschrijving van C statements


Deze pagina bevat een zeer korte samenvatting van verschillende statements en constructies van de ANSI-versie van de taal C. Voorafgaand hieraan een paar opmerkingen:

  • Een C-programma heeft de volgende structuur:
      #include ...
      #define ...
      declaratie van globale variabelen
      declaratie van functies
      void main ()
      {
        declaratie van lokale variabelen
        statements
      }
  • De index van een array in C begint altijd bij 0. In een array van tien elementen loopt de index dus van 0 tot en met 9 en niet van 1 tot en met 10 zoals bij de meeste andere talen.

  • In een printf-statement wordt een nieuwe regel aangegeven met \n (een backslash gevolgd door een kleine letter n).

  • Het compileren en linken van een C programma wordt gedaan met het volgende commando:
    make programmanaam
    De bijbehorende file Makefile is bij de assistent te verkrijgen.
Hieronder volgt een korte beschrijving van de meestgebruikte constructies van de taal C.
Syntax is cursief, voorbeelden zijn vet.

Identifiers Sequence of letters and digits starting with a letter or underscore;
case sensitive.
Comments /* Dit is commentaar! */
Data types int
long int
long
short int
char
float
double
Declaration of variables type variable_list;
int i;
char c;
float x, y;
Assignment value = expression;
i = 2;
c = 'a';
x = x + 2 * y;
Main program void main ()
{
  int i, j;
  i = 1;
  j = 3;
  i = i + j;
}
Compound statement {
  statement1;
  . . .
  statementn;
}
Arithmetic operators Addition        +
Subtraction    
-
Multiplication 
*
Division       
/
Modulo         
%
Increment      
++
Decrement      
--
Unary +        
+
Unary -        
-
Logical operators Less than                 <
Less than or equal to    
<=
Greater than             
>
Greater than or equal to 
>=
Equal                    
==
Not equal                
!=
Logical and              
&&
Logical or               
||
Negation                 
!
Reading formatted input scanf (formats_string, list_of_vars);
  scanf ("%d", &intvar);
scanf ("%4d%4.1f", &intvar, &floatvar);
Writing formatted output printf (formats_and_text_string, list_of_vars);
  printf ("Waarde integer is: %d\n", i);
printf ("Waarde float is: %f\n", f);
If statement if (expression)
  statement_if_true;
  if (x < 1)
  y = 2;
  if ( (x == 0) && (y != 0) )
{
  y = 2;
  x++;
}
  if (expression)
  statement_if_true;
else
  statement_if_false;
  if (x < 1)
  y = 2;
else
  y = 3;
While statement while (expression) statement;
 while (x < 1) x++;
 while (x < 1)
{
  x++;
}
Repeat statement do
  statements;
while (condition);
 do
  x++;
  y += x;
while (x <= 0);
For statement for (expression1; expression2; expression3)
  statement;
 for (i=1; 1<=10; i++)
  printf ("%d", i);
Case statement switch (expression)
{
  case l1:
  . . .
  case lk: statementsl;
           break;
  . . .
  case m1:
  . . .
  case mk: statementsm;
           break;
  default: statements;
           break;
}
  switch (c = getchar())
{
  case 'a':
  case 'b':
  case 'c': putchar ('1');
            break;
  case 'd': putchar ('2');
            break;
  default : putchar ('3');
}
Read from file FILE  *fin;     /* file identifier /*
int   m1k, m1r;
/* open input file */
if ((fin=fopen("nameOfFile", "r")) == NULL)
{ printf ("File bestaat niet!\n");
  return (1);
}
/* read from input file */
fscanf (fin, "%d%d", &m1k, &m1r);
/* close input file */
fclose (fin);
Write into file FILE  *fout;    /* file identifier /*
int   m1k, m1r;
float v1k, v1r;
/* open output file */
if ((fout=fopen("nameOfFile", "w")) == NULL)
{ printf ("File kan niet geopend worden!\n");
  return (1);
}
/* write into output file */
fprintf (fout, "%8d%8d", m1k, m1r);
fprintf (fout, "%8.2f%8.2f", v1k, v1r);
/* close output file */
fclose (fout);
Testing for end-of-line while ((c = getchar()) != '\n') statement;
Testing for end-of-file while ((c = getchar()) != EOF) statement;
Function definition int max (int a, b)
{
  return (a>b?a:b);
}
  void test ()
{
  int i;
  i = 2;
  . . .
}
Pointer variable definition type *identifier;
  int *pointerToInt;
int normalInt;
  normalInt = 33;
  *pointerToInt = normalInt;
  printf ("Int value = %d\n", *pointerToInt);
Dereferencing*identifier
Pointer type typedef int * pint;
pint p;
Nil pointerNULL
Memory allocation type *identifier;
identifier = (type*) malloc (sizeof(type));
Memory deallocation free ((type*)identifier);
Array type array-identifier[size];
Array type typedef knownID newID[size];
  typedef int VEC5[5];
typedef int VEC3[3];
typedef float FVEC[10];

VEC5 v5;
VEC3 v3;
FVEC f;
Two-dimensional array type identifier[index1][index2];
  int x[2][3];
  /* dynamic allocation and use of matrix */
int **ptrToMat;
int k, r;   /* loop variables */
int K = 5;  /* number of columns */
int R = 6;  /* number of rows */
/* allocate rows */
ptrToMat = (int **) malloc (R*sizeof(int));
/* allocate columns */
for (r=0; r<R; r++);
  ptrToMat[r] = (int *) malloc (K*sizeof(int));
/* fill matrix row by row */
for (r=0; r<R; r++);
  for (k=0; k<K; k++);
    ptrToMat[r][k] = r*k;
Two-dimensional array type typedef int TWO[3][4];
  typedef int SINGLE[5];
typedef SINGLE TWO[4];
Structure variable struct
{ components;
} identifier;
  struct
{ int   i;
  float f;
} a;
Structure type typedef struct type
{ components;
} type;
  typedef struct student
{ char name[30];
  int StudNum;
} STUDENT;
typedef STUDENT CLASS[100];
CLASS Stats;
Field access using pointers pointer -> field


 16 februari 2005, Peter Klok, pfk@hef.ru.nl