Functions in C

Program 1

#include<stdio.h>

float sum(float x1, float x2) {

  /* functions take arguments
   * and return a value
   */

  return x1+x2;
}

int main() {
  printf("%f\n", sum(2.0,3.0));
}

Program 2

#include<stdio.h>

int increment(int a) {

  /* the formal parameter a is a local
   * variable of the function increment
   * a is initialized to the value of
   * the actual parameter in the calling
   * function
   */

  ++a;
  return a;
}

int main() {
  int c, d;
  c = 3;
  d = increment(c);
  printf("c = %d, d = %d\n",c,d);
}

Program 3

#include<stdio.h>

int b;

int plus_b(int a) {

  /* functions have access to
   * global variables
   */

  return a + b;
}

int main() {
  int a;
  a = 1;
  b = 2;  
  printf("%d\n", plus_b(a));
}

Program 4

#include<stdio.h>

int a, b;

int f(int a) {
  return a + (b++);
}

int main() {
  /* what does this print? */
  a = 1;
  b = 2;
  printf("%d\n",b + f(a));
  printf("%d\n",b + f(a));
}

Program 5

  /* what does this print? */
  ...
  printf("%d\n", f(a) + b);
  printf("%d\n", f(a) + b);
  ...

Program 6

  
/* what does this change? */

int f(int a) {
  return (a++) + (b++);
}

...

Program 7

#include<stdio.h>

void printNumbersLE(int n) {
  int i;
  for (i = n; i > 0; --i)
    printf("%d\t",i);
}

int main() {
  printNumbersLE(10);
}

Recursion

Program 1

#include<stdio.h>

void printNumberLE1() {
  printf("1\n");
}

void printNumberLE2() {
  printf("2 "); printNumberLE1();
}

void printNumberLE3() {
  printf("3 "); printNumberLE2();
}

void printNumberLE4() {
  printf("4 "); printNumberLE3();
}

int main() {
  printNumberLE4();
}

Program 2

#include<stdio.h>

void printNumberLE(int i) {
  if (i > 0) {
    printf("%d\t",i);
    printNumberLE(i-1);
  }
}

int main() {
  printNumberLE(10);
}

Program 3

/* what are these function?
 * can you find expressions for the number of
 * calls? 
 */

int f1(int i) {
  if (i == 0)
    return 0;
  else
    return i + f1(i-1);
}

int f1(int i) {
  if (i == 0)
    return 1;
  else
    return i * f1(i-1);
}

int f2(int i) {
  
  /* compare this function to program 7 of the control
   * flow lecture. What do you think about its efficiency?
   */
 
  if (i <= 0)
    return 0;
  else if (i == 1)
    return 1
  else
    return f2(i-1) + f2(i-2);
}

Next: ARRAYS