This document describes two programming exercises for a C/C++ programming course.
Exercise 1 (6 points) involves writing a C program to conduct a product rating survey that prompts users for responses within a specified range, tracks the number of responses for each rating, and ends when response criteria are met. It requires using macros to define configurable parameters.
Exercise 2 (4 points) involves writing three C++ source files without #include directives between them. Two files must each contain a function (ComputeMinimum and ComputeMaximum) that takes two parameters and computes the minimum or maximum value. The third file contains the main function to test the other two.
This document describes two programming exercises for a C/C++ programming course.
Exercise 1 (6 points) involves writing a C program to conduct a product rating survey that prompts users for responses within a specified range, tracks the number of responses for each rating, and ends when response criteria are met. It requires using macros to define configurable parameters.
Exercise 2 (4 points) involves writing three C++ source files without #include directives between them. Two files must each contain a function (ComputeMinimum and ComputeMaximum) that takes two parameters and computes the minimum or maximum value. The third file contains the main function to test the other two.
Exercise 0 (6 points – 1 point per question – No program required)
Language standards compliance and appropriate header file inclusion is assumed. Testing code by running it is sometimes misleading due to implementation dependence. These are not trick questions and there is only one correct answer to each. Applicable notes from the course book are listed.
1. The declaration int (*(*x)())(); in English is: 4. For:
(Note 6.1) int x = 5, y = 10; A. "x is a pointer to a function returning a fcnA(&x, &y); pointer to a function returning an int" (Note 6.9) B. "x is a function returning a pointer to a A. int types are being passed. function returning a pointer to an int" B. C++ reference types are being passed. C. "x is a pointer to a function returning a C. Pointer types are being passed pointer to an int" D. The types are implementation D. "x is a function returning a pointer to a dependent. function returning an int" E. fcnA can't change the value of x or y. E. This is not a valid declaration! 5. What is wrong with: 2. Which is the most likely output from: void fcnA(int *iP1, const int *iP2); static int save[] = {1, 2, 3, 4}; const int x = 5, y = 10; for (int index = 0; index < 6; ++index) fcnA(&x, &y); cout << save[index] << ' '; (Note 6.10) (Note 6.2) A. const int * is legal in C++ but not C. A. 1 2 3 4 5 6 B. int const *iP2 is illegal in C and C++ B. 1 2 3 4 C. The left argument causes an error. C. 1 2 3 4 then two garbage values and/or D. The right argument causes an error. a system error E. There is nothing wrong. D. 0 1 2 3 4 5 then garbage E. 1 2 3 4 0 0 6. What is wrong with: int *fcnA(void) 3. What is the most important comment { concerning a problem with the following? int x; long double *p; return(&x); *p = 25.6L; } (Notes 6.6 & 6.7) (Note 6.12) A. There is nothing significant to comment A. Reference types are not permitted in C. upon! B. The expression being returned is of the B. Pointers to long doubles are not reliable wrong type. in standard C/C++. C. The expression being returned is an C. 25.6L is not a legal address. automatic variable. D. The pointer is uninitialized D. The expression being returned is a E. It is inefficient. pointer to an automatic variable. E. There is nothing wrong.
Submitting your solution
Using the format below place your answers in a plain text file named C1A5E0_Quiz.txt and send it to the Assignment Checker with the subject line C1A5E0_ID, where ID is your 9-character UCSD student ID. -- Place an appropriate “Title Block” here -- 1. A 2. C etc. See the course document titled “Preparing and Submitting Your Assignments” for additional exercise formatting, submission, and Assignment Checker requirements.
1992-2017 Ray Mitchell Page 1 of 7
1 Exercise 1 (6 points – C Program) 2 Exclude any existing source code files that may already be in your IDE project and add a new one, 3 naming it C1A5E1_main.c. Write a program in that file to implement a survey that prompts respondents 4 to enter a decimal integer value within a specified range to indicate how much they like a product. 5 The survey will end and the results will be displayed when either a specific number of legal responses 6 have been entered or a specific number of consecutive out-of-range responses have been entered. 7 8 Since the program must be adaptable to any arbitrary number of respondents, response values, and 9 out-of-range counts, define and use the following 4 required macros wherever this information is 10 needed: 11 1. MAX_RESPONDENTS – the maximum number of respondents; 12 2. MIN_RESPONSE_VALUE – the lowest permissible response value; 13 3. MAX_RESPONSE_VALUE – the highest permissible response value; 14 4. OUT_OF_RANGE_LIMIT – the number of consecutive out-of-range responses required to end the 15 survey. 16 You may define additional macros if you wish, but it must not be necessary to explicitly change any of 17 their values if the values associated with any of the 4 required macros above are changed. 18 19 The code in function main must conduct the survey and display the results as follows: 20 1. Use a 1-dimensional array having exactly the number of elements as there are legal response 21 values. Each element represents a specific legal response value and contains a count of how 22 many of them have occurred (similar to note 6.3). No other arrays are permitted. 23 2. Use a variable named consecutiveRangeErrors to count the number of consecutive 24 out-of-range responses: 25 a. If an illegal response occurs increment and test that variable. If the maximum count has 26 not yet been reached display an error message and re-prompt the same user; if it has 27 been reached end the survey. 28 b. If a legal response occurs set the variable back to 0 and increment the appropriate array 29 element. End the survey if the maximum number of respondents have entered legal 30 responses. 31 3. Once the survey has ended display a table like the one below that indicates the total number of 32 responses for each possible rating. The least significant digits of all values must be aligned for 33 readability: 34 35 Rating Responses 36 10 25 37 9 50 38 8 100 39 ... ... 40 -1239 0 41 42 Your program must work correctly for all cases where MIN_RESPONSE_VALUE is less than or equal to 43 MAX_RESPONSE_VALUE, regardless of their actual values. This includes cases where one or both are 44 negative. 45 46 Manually re-run your program several times with at least the following sets of macro values and a 47 sufficient number of user input values to verify functionality. To test with different macro values you will, 48 of course, need to recompile after each change: 49 Test MAX_ MIN_RESPONSE_ MAX_RESPONSE_ OUT_OF_RANGE_ 50 Set RESPONDENTS VALUE VALUE LIMIT 51 A 3 0 0 4 52 B 20 3 15 2 53 C 5 -100 -86 3 54 D 17 -27 9 1
1992-2017 Ray Mitchell Page 2 of 7
1 Submitting your solution 2 Send your source code file to the Assignment Checker with the subject line C1A5E1_ID, where ID is your 3 9-character UCSD student ID. 4 See the course document titled “Preparing and Submitting Your Assignments” for additional exercise 5 formatting, submission, and Assignment Checker requirements. 6 7 8 Hint: 9 See note 6.3 for a similar exercise. Do not initialize your automatic array to all 0s using a loop but instead 10 initialize it when declared using the standard syntax: 11 12 int ratingCounters[RESPONSE_VALUES] = {0}; 13 14 Be sure the array contains the correct number of elements. For example, if MIN_RESPONSE_VALUE were 15 -3 and MAX_RESPONSE_VALUE were 7, the number of elements required would be 11. Also, be sure your 16 algorithm can support negative response values and response ranges that do not start or end with 0. 17 This can easily be accomplished by always subtracting MIN_RESPONSE_VALUE from the user input 18 response value when using it as an index into the array. Finally, be sure you reset your “bad response” 19 count to its initial value each time a correct response is received.
1992-2017 Ray Mitchell Page 3 of 7
1 Exercise 2 (4 points – C++ Program) 2 Exclude any existing source code files that may already be in your IDE project and add three new ones, 3 naming them C1A5E2_ComputeMinimum.cpp, C1A5E2_ComputeMaximum.cpp, and 4 C1A5E2_main.cpp. Do not use #include to include any of these three files in each other or in any other 5 file. However, you may use it to include any appropriate header file(s) you need. 6 7 File C1A5E2_ComputeMinimum.cpp must contain a function named ComputeMinimum and 8 C1A5E2_ComputeMaximum.cpp must contain a function named ComputeMaximum. Each function 9 must: 10 1. have exactly two formal parameters, each of type “reference to const double”; 11 2. return type “reference to double” (not “reference to const double”); 12 3. contain only one statement; 13 4. not use variables other than its formal parameters; 14 5. not use anything that requires #define or #include; 15 6. not use literal values; 16 7. not do assignment, addition, subtraction, multiplication, or division; 17 8. not use if, switch, or looping statements; 18 9. not call functions or macros; 19 10. not display anything. 20 ComputeMinimum must compare the values referenced by its parameters and return a reference to the 21 smallest of those values whereas ComputeMaximum must compare the values referenced by its 22 parameters and return a reference to the greatest of those values. 23 24 File C1A5E2_main.cpp must contain function main, which must: 25 1. use no more than two variables; 26 2. prompt the user to enter any space-separated pair of decimal numeric values on the same line; 27 3. pass references to the user-entered values to both ComputeMinimum and ComputeMaximum as 28 arguments; 29 4. display the results of both function calls using the following 2-line format, where the question 30 marks represent the values whose references are passed to and returned from the functions: 31 ComputeMinimum(?, ?) returned ? 32 ComputeMaximum(?, ?) returned ? 33 34 Do not attempt to detect cases where the user input values are equal. Instead, simply treat them 35 exactly like any other values. 36 37 Manually re-run your program several times, testing with at least the following 5 sets of user input values, 38 where each set represents the argument values in left-to-right order: 39 6.9 6.4 6.4 6.9 -5.8 5.8 -0.0 0.0 8.4e3 6.2e-1 40 41 42 Submitting your solution 43 Send your three source code files to the Assignment Checker with the subject line C1A5E2_ID, where ID 44 is your 9-character UCSD student ID. 45 See the course document titled “Preparing and Submitting Your Assignments” for additional exercise 46 formatting, submission, and Assignment Checker requirements. 47 48 49 Hints: 50 Use the conditional operator to both compare the values referenced to by each parameter and 51 produce the reference that references the greatest value. Return the entire conditional expression 52 (Note 3.16), type casting it as (double &) to override the “const-ness”. (Same principle as in note 6.12).
1992-2017 Ray Mitchell Page 4 of 7
1 Exercise 3 (4 points – C++ Program) 2 Exclude any source code existing files that may already be in your IDE project and add three new ones, 3 naming them C1A5E3_ComputeMinimum.cpp, C1A5E3_ComputeMaximum.cpp, and 4 C1A5E3_main.cpp. Do not use #include to include any of these three files in each other or in any other 5 file. However, you may use it to include any appropriate header file(s) you need. 6 7 File C1A5E3_ComputeMinimum.cpp must contain a function named ComputeMinimum and 8 C1A5E3_ComputeMaximum.cpp must contain a function named ComputeMaximum. Each function 9 must: 10 1. have exactly two formal parameters, each of type “pointer to const double”; 11 2. return type “pointer to double” (not “pointer to const double”); 12 3. contain only one statement; 13 4. not use variables other than its formal parameters; 14 5. not use anything that requires #define or #include; 15 6. not use literal values; 16 7. not do assignment, addition, subtraction, multiplication, or division; 17 8. not use if, switch, or looping statements; 18 9. not call functions or macros; 19 10. not display anything. 20 ComputeMinimum must compare the values pointed to by its parameters and return a pointer to the 21 smallest of those values whereas ComputeMaximum must compare the values pointed to by its 22 parameters and return a pointer to the greatest of those values. 23 24 File C1A5E3_main.cpp must contain function main, which must: 25 1. use no more than two variables; 26 2. prompt the user to enter any space-separated pair of decimal numeric values on the same line; 27 3. pass pointers to the user-entered values to both ComputeMinimum and ComputeMaximum as 28 arguments; 29 4. display the results of both function calls using the following 2-line format, where the question 30 marks represent the values whose pointers are passed to and returned from the functions and 31 the ampersands are displayed literally to remind the user that pointers are being passed and 32 returned, not the values themselves: 33 ComputeMinimum(&?, &?) returned &? 34 ComputeMaximum(&?, &?) returned &? 35 36 Do not attempt to detect cases where the user input values are equal. Instead, simply treat them 37 exactly like any other values. 38 39 Manually re-run your program several times, testing with at least the following 5 sets of user input values, 40 where each set represents the argument values in left-to-right order: 41 6.9 6.4 6.4 6.9 -5.8 5.8 -0.0 0.0 8.4e3 6.2e-1 42 43 44 Submitting your solution 45 Send your three source code files to the Assignment Checker with the subject line C1A5E3_ID, where ID 46 is your 9-character UCSD student ID. 47 See the course document titled “Preparing and Submitting Your Assignments” for additional exercise 48 formatting, submission, and Assignment Checker requirements. 49 50 51 Hints:
1992-2017 Ray Mitchell Page 5 of 7
1 Use the conditional operator to both compare the values pointed to by each parameter and produce 2 the pointer that points to the greatest value. Return the entire conditional expression (Note 3.16), type 3 casting it as (double *) to override the “const-ness”. (Note 6.12)
1992-2017 Ray Mitchell Page 6 of 7
Get a Consolidated Assignment Report (optional) If you would like to receive a consolidated report containing the results of the most recent version of each exercise submitted for this assignment, send an empty email to the assignment checker with the subject line C1A5_ID, where ID is your 9-character UCSD student ID. Inspect the report carefully since it is what I will be grading. You may resubmit exercises and report requests as many times as you wish before the assignment deadline.