| Question | Mark |
| 1. Write a program [6 marks] | |
| 2. Write a function [6 marks] | |
| 3. Show the output [6 marks] | |
| 4. Show the output [6 marks] | |
| 5. Fix a function [6 marks] | |
| Exam Total [30 marks] |
Question 1: Write a program [6]
Write a complete and correct C++ program that meets the following specifications:
A sample run of the program is shown below (with the user input of 1234567.8 illustrated in bold italics):
Please enter the distance between the planet and the sun (in km): 1234567.8 Light would take 4.11807433 seconds to travel from the sun to the planet |
Sample solution |
Question 2: Write a function [6]
A function description and prototype are provided below. Write the full version of the function.
// This function computes and returns one root of a quadratic equation, // where coefficients a, b, and c are passed as parameters. // The result is calculated as follows: // if coefficients a and b are both 0 the result is 0, // otherwise if a is 0 the result is -c/b // otherwise if b*b < 4*a*c the result is 0 // otherwise the result is (-b + sqrt(b*b - 4*a*c))/(2*a) double quadroot(double a, double b, double c); |
Sample solution |
Question 3: Show the output [6]
Show the complete and precise output the following program would produce on the screen during execution.
#include <cstdio>
void f1(double d);
int f2(int i, int j);
double f3(long &L);
bool f4(char c, long i);
int main()
{
int i = 4;
long x = 10;
double y = f3(x);
char c = 'x';
printf("start: c = %c, x = %ld, y = %lg, i = %d\n", c, x, y, i);
if (f4(c, x)) {
i = f2(i, 2*i);
}
f1(y);
printf("end: c = %c, x = %ld, y = %lg, i = %d\n", c, x, y, i);
return 0;
}
void f1(double d)
{
printf("d = %06.3lf\n", d);
}
int f2(int i, int j)
{
printf("i = %d, j = %d\n", i, j);
return (i+j);
}
double f3(long &L)
{
L = 3 * L;
printf("L = %05ld\n", L);
return (L / 2.0);
}
bool f4(char c, long i)
{
printf("c = \"%c\", i = %ld\n", c, i);
if (c != 'Q') {
return true;
}
return false;
}
|
Sample solutionL = 00030 start: c = x, x = 30, y = 15, i = 4 c = "x", i = 30 i = 4, j = 8 d = 15.000 end: c = x, x = 30, y = 15, i = 12 | Explanationsfrom f3 from main, note f3 was pass by ref, so value of L went in x from f4, inside double-quotes, the \" prints ", value of x was passed to parameter i from f2 from f1, the 6 is the total width of what's displayed, including the . from main, note that f2 returned 12, that's what's in i now |
Question 4: Show the output [6]
Show the complete and precise output the following program would produce on the screen during execution.
#include <cstdio>
void s(double &a, double &b, double &c);
int main()
{
double x, y, z;
x = 1;
y = 2;
z = 3;
s(x, y, z);
printf("x = %lg, y = %lg, z = %lg\n", x, y, z);
x = 3;
y = 2;
z = 1;
s(x, y, z);
printf("x = %lg, y = %lg, z = %lg\n", x, y, z);
return 0;
}
void s(double &a, double &b, double &c)
{
double g = a;
double h = b;
double i = c;
if (a > b) {
printf("case 1: %lg, %lg, %lg\n", g, h, i);
g = b;
h = a;
if (b > c) {
printf("case 1a: %lg, %lg, %lg\n", g, h, i);
g = c;
h = b;
i = a;
} else if (a > c) {
printf("case 1b: %lg, %lg, %lg\n", g, h, i);
h = c;
i = a;
}
} else if (a > c) {
printf("case 2: %lg, %lg, %lg\n", g, h, i);
g = c;
h = a;
i = b;
} else {
printf("case 3: %lg, %lg, %lg\n", g, h, i);
if (b > c) {
h = c;
i = b;
}
}
a = g;
b = h;
c = i;
}
|
Sample solutioncase 3: 1, 2, 3 x = 1, y = 2, z = 3 case 1: 3, 2, 1 case 1a: 2, 3, 1 x = 1, y = 2, z = 3 | Explanationfrom function's else case, since a < b and a < c from main from function's if case, since a > b now the b > c case within that, since b > c from main |
Question 5: fix a function [6]
The error checking in the function below does not match the specifications shown in the comments. Alter the error checking (not the comments) so it does carry out error handling correctly.
// get the user to supply their age as an integer
// in the range min to max (inclusive)
// and return the value
// if an invalid value is given, print an appropriate
// error message and give them one more chance,
// if the second value is also invalid return -1
int getAge(int min, int max)
{
printf("Please enter your age as an integer in the range %d-%d\n", min, max);
int age = -1;
int count = scanf("%d", &age);
if (age < min) {
printf("Error: %d < %d, please try again\n", age, min);
} else if (age > max) {
printf("Error: %d > %d, please try again\n", age, max);
} else if (count < 0) {
printf("Error: that was not an integer, please try again\n");
scanf("%*s");
} else {
return age;
}
printf("Please enter your age as an integer in the range %d-%d\n", min, max);
scanf("%d", &age);
return age;
}
|
Sample solution |
CSCI 160 Exam Quick Reference Sheet: Sections F18N01-F18N04
Comments: Single line //
or Multi-line /* ....
.... */
C++ operators
=============
Arithmetic operators: + - * / % ++ --
Assignment operators: = += -= *= /= %=
Boolean operators: && || ! == != <= >= < >
Data Types
=======================================================
Data Keywords Literal Examples
integers: short, int, long 3, -200, 0
reals: float, double 3.14, -0.0003
character: char 'x'
boolean: bool true, false
Sample variable declarations (with/without initialization)
==========================================================
int i; int i = 3;
char c; char c = 'Q'; char c = '\n';
bool b; bool b = true;
Sample constant declarations
============================
const double Pi = 3.1415;
Sample input with scanf, fgets, and getc (cstdio library)
=========================================================
// scanf returns a count of the number of variables "filled"
scanf("%c", &x); // read a character into char variable x
scanf("%d", &i); // read an integer into int variable i
scanf("%ld", &n); // read an integer into long variable n
scanf("%g", &f); // read a real number into float variable f
scanf("%s", &a); // read text into variable a (char[])
scanf("%*s"); // read and discard the next word of input
scanf("%4d", &i); // read a maxium of 4 digits into int variable i
Sample output with printf (cstdio library)
==========================================
// printf returns a count of the number of characters printed
printf("%c", x); // print the contents of char variable c
printf("%d", i); // print the contents of int variable i
printf("%ld", n); // print the contents of long variable n
printf("%g", f); // print the contents of float variable f
// (%f gives fixed point, %e gives exponential notation, %g can do either)
printf("%5.2g, f); // print the contents of f with width 5, 2 decimal places
Some useful library functions and constants
===========================================
cmath
-----
double ceil(double)
double floor(double)
double fabs(double)
double log(double)
double pow(double, double)
double cos(double) // also acos, sin, asin, tan, atan
double sqrt(double)
Sample control structures
=========================
if (expr) { // works on short, int, long,
....... // char, or enum values
} else if (expr) { switch (expr) {
........ case value1:
} else { .....
........ break;
} case value2:
.....
// is X between 3 and 9? break
if ((3 < X) && (X < 9)) { default:
// yes it is .....
} else { break;
// no it isn't };
}
(continued on other side of page)
Sample function prototypes and implementations Sample calls
============================================== ============
void swap(int &a, int &b); float calc(int x, float f) int main()
...... ..... {
void swap(int &a, int &b) float calc(int x, float f) int i = 1;
{ { int j = 2;
int temp = a; float result = x * f; swap(i, j);
a = b; return result; float f = calc(i, 2.5);
b = temp; } }
}