1. Explain specifically why GOTO is considered harmful.
Solution:
Because it can lead to ``spaghetti code''. With undisciplined use of gotos, you can branch from anywhere in a program to anywhere in a program. So programmers can physically separate portions of a program that should be kept close together (i.e., parts of an if-then-else structure). Ultimately, the use of gotos makes programs harder to read and maintain.2. Assume that the collateral operator is ``,'' and that the sequential operator is ``;''. Rewrite the following program using the collateral operators whenever you can (hint: look for read/write conflicts). In other words it is required to define the operations that can be executed in parallel (,) and consequently (;).
x = 4;
y = 23;
z = x + y;
printf("%d", z);
x = zoo(x, y, z);
Solution:
x = 4, y = 23;
z = x + y;
printf("%d", z), x = zoo(x, y, z); /* Assuming zoo is side effect free!*/
3. Write a simple C program that converts Fahrenheit temperature between 0 to 300 degree into equivalent Celsius.
Solution:
void main(int argc, char* argv[])
{
int fahr, cel;
int lower, upper, step;
lower=0;
upper=300;
step=20;
fahr=lower;
while (fahr <=upper) {
cel=5*(fahr-32/9);
printf("fahr = %d",fahr);
printf("\n");
printf("cel = %d \n",cel);
fahr=fahr+step;
}
}
}
4. Write a weight conversion program on C. Hint: the ratio of kilo/pound = 0.45359.
Solution:
#define KILOS_PER_POUND .45359
main()
{ int pounds;
printf(" US lbs UK st. lbs INT Kg\n");
for(pounds=10; pounds < 250; pounds+=10)
{ int stones = pounds / 14;
int uklbs = pounds % 14;
float kilos = pounds * KILOS_PER_POUND;
printf(" %d %d %d %f\n",
pounds, stones, uklbs, kilos);
}
}
5. Interpret the following command:
for (hi = 100, lo = 0; hi >= lo; hi--, lo++)
Solution: It is possible to squeeze several statements into a first or third position, separating them with commas. This allows a loop with more than one controlling variable. The example above illustrates the definition of such a loop, with variables hi and lo starting at 100 and 0 respectively and converging.
6. A function returning the length of a string is given below. Will this function shown below produce correct result? Hint: Remember that the string is represented as an array of characters terminated by a null character '\0'.
int string_length(string)
char string[];
{ int i = 0;
do { i++;
} while (string[i] != '\0')
return(i);
}
Solution: It will not produce a correct result because of the looping. It will give the following answer: (length + 1).
Correct program code:
int string_length(string)
char string[];
{ int i = 0;
while (string[i] != '\0')
i++;
return(i);
}