Chapter 3
Control Flow
Not much to say here. It’s pretty much the same as JavaScript.
Notably, the authors delve right into a binary search implementation as a demonstration of control flow in C.
Binary Search
We want to determine if value x
occurs in array v
. It assumes the elements in v
are already sorted and ascending. The function returns the position (a number between 0 and n-1) if x
occurs in v
, and -1 if not.
/* binsearch: find x in v[0] <= v[1] <= ... <= v[n-1] */
int binsearch(int x, int v[], int n)
{
int low, high, mid;
low = 0;
high = n - 1;
while (low <= high) {
mid = (low+high)/2;
if (x < v[mid]) {
high = mid + 1;
} else if (x > v[mid]) {
low = mid + 1;
} else {
/* found match */
return mid;
}
}
/* no match */
return -1;
}
Goto
The C programming language has a feature called goto
, which is like a javascript label. The authors don’t seem to like or recommend this language feature much, saying that, “any code involving a goto
can be written without it”. The contest that this feature is harder to read/maintain as it breaks the vertical flow of the code?
Anyways, it can be useful, in a case like this with nested for-loops.
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
if (a[i] == b[j]) goto found;
}
}
found:
/* got one: a[i] == b[j] */
for ( ... ) {
for ( ... ) {
if (disaster) goto error;
}
}
error:
/* clean up the mess */