#include // Q2005_1_assert.c #include // See Textbook 13.10 int square(int k) { return k * k; } void main(void) { int n = 22; int k = 0, d = 1, s = 1; while ( s <= n ) { //@{}"//" {@B {Loop invariant:}} assert( d == 2 * k + 1 && s == square(k + 1) ); d = d + 2; assert( d == 2 * (k + 1) + 1 && s == square(k + 1) ); s = s + d; assert( d == 2 * (k + 1) + 1 && s == square(k + 2) ); k = k + 1; assert( d == 2 * k + 1 && s == square(k + 1) ); printf("k = %d\t d = %d\t s = %d\n", k, d, s); } assert( s > n && s == square(k + 1) ); printf("The result is %d.\n", k); }