510 likes | 762 Views
REACH. CECS 130 Mid-term Exam Review Summer, 2019. CECS 130 Mid-term Test Review. Provided by REACH – Resources for Academic Achievement Presenter:. Nikhil Paonikar. To download this presentation…. Go to reach.louisville.edu Click “Tutoring” at the top left of the page.
E N D
REACH CECS 130 Mid-term Exam Review Summer, 2019 CECS 130 Mid-term Test Review Provided by REACH – Resources for Academic Achievement Presenter: Nikhil Paonikar
To download this presentation… • Go to reach.louisville.edu • Click “Tutoring” at the top left of the page. • Click “Computer Tutoring” under the heading “TUTORING SERVICES FOR ALL STUDENTS.” • Click “CECS Test Reviews” on the right-hand column. • Scroll down to find your class. • Or, just go to tiny.cc/REACH4CECS
Variable Types To declare a constant (read only) value: const int x = 20; const float PI = 3.14;
scanf( ) ; printf( ) • int x = 0; • printf(“ What number should I print out? \n ”); • scanf(“%d”, &x); //variables require an “&” sign before them for scanf()! • printf(“\n You chose: %d \n”, x); //but not for printf()!!
Conversion Specifiers • Character - %c • Integer - %d • Float (decimal)- %f • String - %s • printf Format Tags: • Format: %[flags][width][.precision][length]specifier • Example: %[.precision]specifier • Output: 12.12, 12.123, 12.12343
Arithmetic, Logic and Order of Precedence *This is a highly abbreviated list. See https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence for the full order of precedence.
Predict the printout: User enters ‘2’ and ‘4’: Output: Please enter first number: 2 Enter second number: 4 The result is 5.
Can you predict the printout? Output: The result is 2.25
Comparisons > greater than 5 > 4 is TRUE < less than 4 < 5 is TRUE >= greater than or equal 4 >= 4 is TRUE <= less than or equal 3 <= 4 is TRUE == equal to 5 == 5 is TRUE != not equal to 5 != 4 is TRUE
Boolean Operators Do you know the answer to these? • A. !( 1 | | 0 ) • B. !( 1 | | 1>0 && 0 ) • C. !(( 1 | | 1>0 ) && 0)
B. Boolean Operators • Answers: • A. • C. • !(1||0) • =!(1) • =0 • !(1||1<0&&0) • =!(1||0&&0) • =!(1||0) • =!(1) • =0 • !((1||1<0)&&0) • =!((1||0)&&0) • =!(1&&0) • =!(0) • =1
Using if-statements, write a program that will ask a user to enter a number 1, 2, or 3, and print out the following: Example
The while( ) loop • while ( condition ) { Code to execute while the condition is true }
The for( ) loop • Often used when the # of iterations is already known. • Contains 3 separate expressions: • Variable initialization • Conditional expression • Increment/Decrement
Break/Continue Statements • break; Used to exit a loop. Once this statement is executed the program will execute the statement immediately following the end of the loop. • continue; Used to manipulate program flow in a loop. When executed, any remaining statements in the loop will be skipped and the next iteration of the loop will begin.
Function Prototypes & Definitions • Function Prototype Syntax • return-type function_name ( arg_type arg1, ..., arg_type argN ) • Function Prototypes tell you the data type returned by the function, the datatype of the function’s parameters, how many parameters it takes, and the order of parameters. • Function definitions implement the function prototype • Where are function prototypes located in the program? • Where do you find function definitions?
Function Prototypes & Definitions • Where are function prototypes located in the program? Answer: before the main( ) { } function. • Where do you find function definitions? Answer: function definitions are self-contained outside of the main( ) { } function, usually written below it.
Function Example • #include <stdio.h> • int mult (int,int); // function prototype • int main() • { • int x; • int y; • int z; • printf( “\n x = "); scanf( "%d", &x ); • printf( “\n y = ”); scanf( "%d", &y ); • printf( “\n z = ”); scanf( "%d", &z ); • printf( “\n x*y = %d\n", mult( x, y ) ); • printf( “\n z^2 = %d\n", mult( z, z ) ); • } • int mult (int a, int b) { //function definition • return a * b; • }
Function Example Output: x = 2 y = 3 z = 4 x*y = 6 z^2 = 16 • #include <stdio.h> • int mult (int,int); // function prototype • int main() • { • int x; • int y; • int z; • printf( “ x = " ); scanf( "%d", &x ); • printf( “\n y = ”); scanf( "%d", &y ); • printf( “\n z = ”); scanf( "%d", &z ); • printf( “\n\n x*y = %d\n", mult( x, y ) ); • printf( “\n z^2 = %d\n", mult( z, z ) ); • } • int mult (int a, int b) //function definition • { • return a * b; • }
Declaring a 1-D Array • How do you declare a one-dimensional array made up of 10 integers? Answer: int iArray[10] • Other array declarations: int iArray[10]; float fAverages[30]; double dResults[3]; short sSalaries [9]; char cName[19]; // 18 characters and 1 null character
Declaring a 1-D Array • Why do we initialize variables? Because memory spaces may not be cleared from previous values when arrays are created. • Can initialize an array directly. • E.g.: int iArray[5]={0,1,2,3,4}; • Can also initialize an array with a loop such as FOR( ) • #include <stdio.h> • main() { • int x; • int iArray[5]; • for( x=0; x < 5 ; x++) { • iArray[x] = x; • } • }
Example: searching an array • #include <stdio.h> • int main() { • int x, iValue; • int iFound = -1; • int iArray[5]; • // initialize the array • for( x=0; x < 5 ; x++) { • iArray[x] = ( x + x ); // array will = { 0, 2, 4, 6, 8 } • } • printf(“\n Enter value to search for:”); • scanf(“%d”, &iValue); • // search for number • for(x=0 ; x<5; x++) { • if( iArray[x] == iValue) { • iFound = x; • break; • } • } • if(iFound > -1) • printf(“\n I found your search value in element %d \n”, iFound); • else • printf(“\n Sorry, your search value was not found \n”); • return 0; • }
Pointers • Pointer variables, simply called pointers, are designed to hold memory addresses as their values. • Normally, a variable contains a specific value, e.g., an integer, a floating-point value, or a character. • However, a pointer contains the memory address of another variable.
Pointer Syntax dataType *pointer_name = &variable_name; (You can also initialize it “…= NULL;” or “… = 0;”) • It’s important to initialize pointers to prevent fatal runtime errors or accidentally modifying important data.
val *val_ptr Pointers 0x3F 5 int val = 5; //variable declaration int *val_ptr = &val; //pointer declaration 0x3F 0x83 name: name: Value Value location: location:
When an ampersand (&) is prefixed to a variable name, it refers to the memory address of this variable. Pointers 0x3F 5 name: *val_ptr name: val Value Value &val = 0x3F &val_ptr = 0x83 location: location:
Ampersand example • #include <stdio.h> • int main() • { • char someChar = 'x'; • printf(“%p\n", &someChar); • return 0; • } Output: ?????
Passing variables with pointers • void exchange(int*, int*); • main() { • int a = 5; • int b = 3; • exchange(&a,&b); • [(3)print a and b] • } • //pass by reference • void exchange(int *x, int *y) { • [(1)print *x and *y] • int temp = *i; • int *x = *y; • int *y = temp; • [(2)print *x and *y] • } • void exchange(int, int); • main() { • int a = 5; • int b = 3; • exchange(a,b); • [(3)print a and b] • } • //pass by value • void exchange(int x, int y) { • [(1)print x and y] • int temp = x; • int x = y; • int y = temp; • [(2)print x and y] • } Output: (1) x = 5, y = 3 (2) x = 3, y = 5 (3) a = 3, b = 5 Output: *x = 5, *y = 3 *x = 3, *y = 5 a = 3, b = 5 Output: (1) x = 5, y = 3 (2) x = 3, y = 5 (3) a = 5, b = 3
Pointers to Arrays An array variable without a bracket and a subscript represents the starting address of the array. An array variable is essentially a pointer. Suppose you declare an array of integer values as follows: int list[6] = {11, 12, 13, 14, 15, 16}; *(list + 1) is different from *list + 1. The dereference operator (*) has precedence over +. So, *list + 1 adds 1 to the value of the first element in the array, while *(list + 1) dereferences the element at address list[1] in the array.
Pointers to Arrays • main() • { • int list[3] = {10, 3, 5}; • int k = 0; • k = *list + 1; • printf(“k = %d”, k); • } • main() • { • int list[3] = {10, 3, 5}; • int k = 0; • k = *(list + 1); • printf(“k = %d”, k); • } Output: k = 11 Output: k = 3
Strings • #include <stdio.h> • #include <string.h> • int main() • { • char *str1 = “REACH”; • char str2[] = “Tutoring”; • printf(“\nThe length of string 1 is %d \n”, strlen(str1)); • printf(“\nThe length of string 2 is %d \n”,strlen(str2)); • return 0; • } Output: The length of string 1 is 5 The length of string 2 is 8
Strings • #include <stdio.h> • #include <string.h> • void convertL(char *); • int main() • { • char name1[] = “Barbara Bush”; • convertL(name1); • return 0; • } • void convertL(char *str) • { • int x; • for ( x = 0; x <=strlen(str) ; x++) • str[x] = tolower(str[x]); • printf(“\nThe name in lowercase is %s\n”, str); • } Output: The name in lowercase is barbara bush
Data Structures • Arrays require that all elements be of the same data type. • It is often necessary to group information of different data types. An example is a list of materials for a product. The list typically includes a name for each item, a part number, dimensions, weight, and cost. • C and C++ support data structures that can store combinations of character, integer, floating point and enumerated type data. • They are called - structs.
Struct Syntax • struct oneCar //elements in a list of cars • { • int year; • char make[10]; • char model[10]; • char tag[8]; • }fleet; //for short we’ll call it a fleet • fleet rentals[5]; // five cars that we rent out to clients • rentals[0].year = 2008; • rentals[0].make = “Honda”; • rentals[0].model = “Element”; • rentals[0].tag = “AS2395”; • […] • rentals[4].year = 2015; • rentals[4].make = “Tesla” • rentals[4].model = “Model S”; • rentals[4].tag = “2FST4U”; • fleet vans[3]; //company vans • vans[0].year = 2012; • vans[0].make = “Ford”; • vans[0].model = “EconoVan”; • Vans[0].tag = “MV1NUP”;
Dynamic memory allocation • These functions are defined in the <stdlib.h> header file. • void *calloc(int num, int size) Allocates an array of num elements each of whose size in bytes will be size. • void free(void *address) Releases a block of memory block specified by address. • void *malloc(int num) Allocates an array of num bytes and leave them uninitialised. • void *realloc(void *address, int newsize) Re-allocates memory extending it up to newsize.
On the test… Some types of problems you will likely encounter: • True/False questions • Fill-in-the-blanks questions • Finding errors in programs Common mistakes on this test: • Not appending lines of code with a semicolon (“;”) • Forgetting to use semicolons when writing a FOR loop • Forgetting to add an ampersand (“&”) to your variable parameter in SCANF functions (and mistakenly using the ampersand when using PRINTF) • Mixing up * and & in general. • Off-by-one errors when accessing an array, especially when using a FOR loop.
Avoid extensive study Conduct a brief review Do something relaxing Get plenty of sleep Avoid stress-inducing situations Maintain a positive attitude Test Success: The Night Before
Get off to a good start. Arrive on time or early. Compose yourself. Do a final revision of your notes. Maintain a confident attitude. Test Success: Day of the Test comic by KC Green (http://gunshowcomic.com/648)
This presentation was provided by REACH – Resources for Academic Achievement Hope for the best, prepare for the worst. Cheers and good luck! (If you have not signed in, please do so before you leave!)