1. Definitions can be found in the notes/book.
2. Assume:
X = 2;
Y = 7;
Z = 9;
A = 0;
B = 1;
What are the values of:
X + Y * Z * 65
X * Y + Z * 23
X - Y - Z * -14
X / Y * Z * 0
Y % X * 1
sqrt(Z) * 3.0
pow(X,Y) * 128.0
rint(7.6) * 8.0
floor(7.6) * 7.0
ceil(7.6) * 8.0
X + Y - Z * X + Z - X % Y * -2
X && Y * 1 (true)
A || B * 1 (true)
!A * 1 (true)
!A && B * 1 (true)
!B || A * 0 (false)
(X < Y) && Z > X * 1 (true)
3. A field specification may have width and precision values, how
are these used?
* In formatted output commands, the width value indicates how
* many characters should be used in outputting the value. For
* example, the specification %5d indicates that the value should
* be printed as a whole number using a total of 5 characters.
* If the minimum width needed is larger than the value specified
* the minimum width is used. In formatted input commands the
* width value indicates the maximum number of characters to be
* read while reading the value.
*
* In formatted output, the precision value is used to indicate
* how many digits should appear after the decimal point when
* printing out floating-point values.
4. What is meant by the term prompting for input? What are
characteristics of a good prompt. Show an example.
* Prompting for input involves using an output command to inform
* the user that the program needs to input 1 or more values. A
* good prompt will tell the user precisely what type of value is
* expected and what values are reasonable. A good prompt may also
* repeat the prompt until the user enters a correct value.
* Example:
*
* do {
* printf("Please enter a calendar month to print (use integers 1 to 12): ");
* scanf(&month);
* if ((month < 1) || (month > 12))
* printf(" Please use a value between 1 and 12!\n");
* } while ((month < 1) || (month > 12));
5. The logical AND (&&) and logical OR (||) operators are "short
cicuit" operators. What does this mean?
* This means that these operators will not evaluate their second
* argument if the first argument determines the value of the
* operator. For the && operator, if the first argument is 0 (false)
* the second argument is not evaluated. For the || operator, if the
* first argument is 1 (true) the second argument is not evaluated.
6. Write a function Factorial that takes an argument N and calculates
(returns) 1 * 2 * 3 * 4 * ... * N. For example, Factorial(4) should
calculate 24 (1 * 2 * 3 * 4).
* int Factorial(int N) {
* int I;
* int fact = 1;
*
* for (I = 1; I <= N; I++)
* fact *= I;
*
* return fact;
* }
7. Rich wants to write a function that prompts a user for three pieces
of information: an id number (integer), a salary (floating-point) and
a favorite letter (character). Help Rich out and write this function.
Your function should prompt the user for each value and the function
should produce the three values.
* void ReadData(int *id, float *salary, char *favoriteletter) {
* printf("Please enter your id#: ");
* scanf(id);
* printf("Please enter your salary: ");
* scanf(salary);
* printf("Please enter your favorite letter: ");
* scanf(favoriteletter);
* }
8. Give an example of a switch statement with at least three cases
and a default case. Now, rewrite your switch statement as a set of
if-else statements.
* switch (num) {
* case 1: case 2:
* printf("Case 1 or 2\n");
* break;
* case 3:
* printf("Case 3\n");
* break;
* case 4:
* printf("Case 4\n");
* break;
* default:
* printf("All other cases.\n");
* }
*
* if ((num == 1) || (num == 2))
* printf("Case 1 or 2\n");
* else if (num == 3)
* printf("Case 3\n");
* else if (num == 4)
* printf("Case 4\n");
* else
* printf("All other cases.\n");
9. Give an example of a multiway selection problem that would be
difficult to do with a switch.
* It is difficult to do multiway selection when the number of cases
* corresponding to a single action is very large. For example, in the
* following situation
*
* Grade Message
* ------ -------
* 60-100 Good
* 53-59 Borderline
* 0-52 Problem
*
* the programmer would need to type 41 case labels for the first action
* (showing the message Good), 7 case labels for the second action,
* and 53 case labels for the last action. It would be much easier
* to do this with nested if-else statements.
10. Translate the following for loop into a do-while loop:
for (I = 0, tot = 0, cnt = 0; I < N; I += 2) {
tot += I;
cnt++;
printf("%.2f\n",(float) tot / cnt);
}
* I = 0;
* tot = 0;
* cnt = 0;
* if (I < N) {
* do {
* tot += I;
* cnt++;
* printf("%.2f\n",(float) tot / cnt);
* I += 2;
* } while (I < N);
11. Write a piece of code to produce the following output using at most
one newline character in your print statements:
*
**
***
****
***
**
*
* for (I = 0; I < 7; I++) {
* for (J = 0; J < (3 - abs(I - 3)); J++)
* printf(" ");
* for (J = 0; J <= (3 - abs(I - 3)); J++)
* printf("*");
* printf("\n");
* }
12. What is the output of the following piece of code:
for (I = 0; I < 12; I++) {
for (J = 4 - (I % 4); J > 0; J--)
printf(" ");
for (J = 0; J < (I % 4) + 1; J++)
printf("X");
printf("\n");
}
* X
* XX
* XXX
* XXXX
* X
* XX
* XXX
* XXXX
* X
* XX
* XXX
* XXXX
13. Give a piece of code that will copy the characters from a text
file file1.txt to a new file file2.txt. Furthermore, when copying
the characters, any lower case characters in file1.txt should be
written as a corresponding upper case character in file2.txt (if
the character 'a' is read from file1.txt, the character 'A' should
be written to file2.txt).
* FILE *inf;
* FILE *outf;
* int ch;
*
* if ((inf = fopen("file1.txt","r")) == NULL) {
* printf("Unable to open file file1.txt\n");
* exit(-1);
* }
*
* if ((outf = fopen("file2.txt","w")) == NULL) {
* printf("Unable to open file file2.txt\n");
* exit(-1);
* }
*
* while ((ch = fgetc(inf)) != EOF)
* if ((ch >= 'a') && (ch <= 'z'))
* fputc(ch + 'A' - 'a',outf);
* else
* fputc(ch,outf);
14. How do the fgetc and ungetc functions work? Indicate the arguments
each takes and what values they return. Also, give an example of
how each function is used.
* The fgetc function takes one argument, a FILE * and returns the
* next available character in the file the FILE * is connected to
* or the value EOF to indicate no character is available (the
* End-Of-File has been reached). The return value of fgetc is an
* integer value to allow the computer to represent not only any
* legal character value but also to represent EOF. The ungetc
* function takes an argument containing the ASCII value of a
* character (an integer) and a FILE * and returns that character to
* the stream (the FILE *) to which it is connected. ungetc returns
* EOF if the command fails. The returned character would be the
* next character read by an fgetc or getc command. Note that you
* may not do two ungetc commands in a row.
*
* fopen sample:
* if ((inf = fopen("file1.txt","r")) == NULL) {
* printf("Unable to open file file1.txt\n");
* exit(-1);
* }
*
* ungetc sample:
* if ((ch >= '0') && (ch <= '9'))
* ungetc(ch,inf);
15. Output:
* 5 4
* 4 3
* 4 5
* 4 3
* 2 2
* 4 2
* 1 3
* 3 3
* 4 3 7
* 7 3
* 3 4 7
* 7 3
* 4 3 7
* 4 7
* 3 4 7
* 4 7
* 144 12 12
* 144 12
* 144 12 12
* 12 144
* 16 16 16
* 16 3
* 9 9 9
* 4 9
* 60 6 10 70
* 60 70
* 60 6 10 70
* 4 60
* 66 6 11 77
* 66 3
* 66 6 11 77
* 77 66
* 66 6 11 77
* 66 3
* 66 6 11 77
* 77 66
* 60 6 10 70
* 60 70
* 60 6 10 70
* 4 60