vault backup: 2025-01-07 18:14:44
This commit is contained in:
@ -0,0 +1,78 @@
|
||||
> 1. The following function, which computes the area of a triangle, contains two errors. Locate the errors and show how to fix them. (*Hint*: There are no errors in the formula)
|
||||
```c
|
||||
double triangle_area(double base, height)
|
||||
double product;
|
||||
{
|
||||
product = base * height;
|
||||
return product / 2;
|
||||
}
|
||||
```
|
||||
|
||||
Answer:
|
||||
```c
|
||||
// A type annotation is needed for `height`
|
||||
double triangle_area(double base, double height)
|
||||
{
|
||||
// The `product` variable declaration was not in the function block.
|
||||
double product;
|
||||
product = base * height;
|
||||
return product / 2;
|
||||
}
|
||||
```
|
||||
|
||||
> 2. Write a function `check(x, y, n)` that returns `1` if both `x` and `y` fall between zero and `n - 1` inclusive. The function should return 0 otherwise. Assume that `x`, `y`, and `n` are all of type int
|
||||
```c
|
||||
int check(int x, int y, int n) {
|
||||
int in_range = 1;
|
||||
if (x < 0 || y < 0) {
|
||||
in_range = 0;
|
||||
}
|
||||
if (x > n - 1 || y > n - 1) {
|
||||
in_range = 0;
|
||||
}
|
||||
|
||||
return in_range;
|
||||
}
|
||||
```
|
||||
|
||||
> 7. Suppose that function `f` has the following definition:
|
||||
> `int f(int a, int b) { ... }`
|
||||
> Which of the following statements are legal? Assume that `i` has type `int` and `x` has type `double`).
|
||||
|
||||
Answer:
|
||||
All of them are legal and will compile and run. (c) and (d) are what I would consider bad practice because they perform an implicit conversion from a double to an int, and should include an explicit cast.
|
||||
|
||||
> 8. Which of the following would be valid prototypes for a function that returns nothing and has one double parameter?
|
||||
|
||||
Answer:
|
||||
(a) and (b).
|
||||
Parameters must contain a type annotation but they do not need to specify a name. A function prototype declaration must specify a return type.
|
||||
|
||||
> 9. What will be the output of the following program?
|
||||
```c
|
||||
#include <stdio.h>
|
||||
|
||||
void swap (int a, int b);
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int i = 1, j = 2;
|
||||
swap(i, j);
|
||||
printf("i = %d, j = %d\n", i, j);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void swap(int a, int b)
|
||||
{
|
||||
int temp = a;
|
||||
a = b;
|
||||
b = temp;
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
Answer:
|
||||
```
|
||||
i = 1, j = 2
|
||||
```
|
||||
Because function parameters are passed by value and not reference in C, modifications to `a` and `b` are limited to the scope of `swap`.
|
Reference in New Issue
Block a user