EECE.2160 ECE Application Programming

Slides:



Advertisements
Similar presentations
ECE Application Programming Instructor: Dr. Michael Geiger Spring 2012 Lecture 31: PE5.
Advertisements

Lecture 22: Reviews for Exam 2. Functions Arrays Pointers Strings C Files.
ECE Application Programming Instructors: Dr. Michael Geiger & Nasibeh Nasiri Fall 2015 Lecture 31: Structures (cont.) Dynamic memory allocation.
ECE Application Programming
ECE Application Programming
ECE Application Programming
ECE Application Programming
ECE Application Programming
ECE Application Programming
ECE Application Programming
ECE Application Programming
ECE Application Programming
ECE Application Programming
ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
Instructor: Dr. Michael Geiger Spring 2019 Lecture 13: Exam 1 Preview
EECE.2160 ECE Application Programming
Instructor: Dr. Michael Geiger Spring 2019 Lecture 4: Functions in C++
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.3220 Data Structures Instructor: Dr. Michael Geiger Spring 2019
EECE.2160 ECE Application Programming
Instructor: Dr. Michael Geiger Spring 2017 Lecture 12: Exam 1 Preview
EECE.2160 ECE Application Programming
EECE.3220 Data Structures Instructor: Dr. Michael Geiger Spring 2019
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.3220 Data Structures Instructor: Dr. Michael Geiger Spring 2017
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
Presentation transcript:

EECE.2160 ECE Application Programming Instructors: Dr. Michael Geiger Summer 2017 Lecture 10 Structures Exam 2 Preview

ECE Application Programming: Lecture 10 Lecture outline Announcements/reminders Program 6 due tomorrow Program 7 due Wednesday, 6/14 Exam 2: Monday, 6/12 Will be allowed one 8.5” x 11” note sheet Today’s lecture Structures Exam 2 Preview 4/7/2019 ECE Application Programming: Lecture 10

ECE Application Programming: Lecture 10 Review: strings Represented as character arrays Can be initialized using string constants char hello[] = "Hello"; Can access individual elements hello[3] = 'l'; Can print directly or with formatting Print directly: printf(hello); Print w/formatting using %s: printf("%s\n", hello); Reading strings: scanf("%s", str); Reads all characters up to (but not including) first space, tab, or newline Must leave enough room for terminating '\0' 4/7/2019 ECE Application Programming: Lecture 10

Review: String functions In <string.h> library: Copying strings: char *strcpy(char *dest, const char *source); char *strncpy(char *dest, const char *source, size_t num); Return dest strncpy() not guaranteed to add null terminator Comparing strings: int strcmp(const char *s1, const char *s2); int strncmp(const char *s1, const char *s2, size_t num); Character-by-character comparison of character values Returns 0 if s1 == s2, 1 if s1 > s2, -1 if s1 < s2 4/7/2019 ECE Application Programming: Lecture 10

Review: String functions (cont.) Find # of characters in a string size_t strlen(const char *s1); Returns # characters before ‘\0’ Not necessarily size of array “Add” strings together—string concatenation char *strcat(char *dest, const char *source); char *strncat(char *dest, const char *source, size_t num); Returns dest strncat() guaranteed to add null terminator 4/7/2019 ECE Application Programming: Lecture 10

ECE Application Programming: Lecture 10 Structures Arrays: groups of data with same type Structures: groups of data with (potentially) different types Example: record to store information about student: First name (char []) Middle initial (char) Last name (char []) ID # (unsigned int) GPA (double) Any data type—scalar, array, pointer (even other structures) allowed 4/7/2019 ECE Application Programming: Lecture 10

Declaring structure types Can define structure as a type using typedef Could omit typedef, but would need “struct” before type name Syntax: typedef struct { <list of variables> } <typeName>; Example: typedef struct { char first[50]; char middle; char last[50]; unsigned int ID; double GPA; } StudentInfo; typedef usually at program start (with #include, #define) <typeName> usually starts with capital letter 4/7/2019 ECE Application Programming: Lecture 10

ECE Application Programming: Lecture 10 Using structure types Once defined, can declare variables using that type Scalar: StudentInfo student1; Array: StudentInfo classList[10]; Pointer: StudentInfo *sPtr; 4/7/2019 ECE Application Programming: Lecture 10

Using structure variables Initialization very similar to array initialization: StudentInfo student1 = { “John”, ‘Q’, “Smith”, 12345678, 3.75 }; Accessing structure elements: . operator Syntax: <var name>.<element name> Examples: printf(“%s %c %s”, student1.first, student1.middle, student1.last); student1.GPA = 3.5; 4/7/2019 ECE Application Programming: Lecture 10

Example: Using structures What does the following print? typedef struct { double real; double imag; } Complex; int main() { Complex a = {1, 2}; Complex b = {3.4, 5.6}; Complex c, d, e; printf("A = %.2lf+%.2lfi\n", a.real, a.imag); printf("B = %.2lf+%.2lfi\n", b.real, b.imag); c = a; d.real = a.real + b.real; d.imag = a.imag + b.imag; e.real = a.real - b.real; e.imag = a.imag - b.imag; printf("C = %.2lf+%.2lfi\n", c.real, c.imag); printf("D = %.2lf+%.2lfi\n", d.real, d.imag); printf("E = %.2lf+%.2lfi\n", e.real, e.imag); return 0; } 4/7/2019 ECE Application Programming: Lecture 10

ECE Application Programming: Lecture 10 Example solution A = 1.00 + 2.00i B = 3.40 + 5.60i C = 1.00 + 2.00i D = 4.40 + 7.60i E = -2.40 + -3.60i Note: code in handout has spaces before and after ‘+’ for readability; code on previous slide doesn’t because it wouldn’t fit! 4/7/2019 ECE Application Programming: Lecture 10

Structures and functions Can pass structures to functions int f(StudentInfo s); Structures consume significant memory Usually much more efficient to simply pass pointer int g(StudentInfo *s); 4/7/2019 ECE Application Programming: Lecture 10

Example: Structures and functions Write the following functions that use the StudentInfo structure Given a pointer to a single StudentInfo variable, print all of the student info to the screen using the following format: Michael J. Geiger ID #12345678 GPA: 1.23 Given an array of StudentInfo variables and the size of the array, compute and return the average GPA of all students in the list Prompt the user to enter 3 lines of input (using the format below), read the appropriate values into StudentInfo elements, and return a value of type StudentInfo Format (user input underlined) Enter name: Michael J. Geiger Enter ID #: 12345678 Enter GPA: 1.23 4/7/2019 ECE Application Programming: Lecture 10

ECE Application Programming: Lecture 10 Example solution void printStudent(StudentInfo *s) { printf(“%s %c. %s\n”, s->first, s->middle, s->last); printf(“ID #%u\n”, s->ID); printf(“GPA %.2lf\n”, s->GPA); } 4/7/2019 ECE Application Programming: Lecture 10

Example solution (cont.) double avgGPA(StudentInfo list[], int n) { int i; int sum = 0; for (i = 0; i < n; i++) sum += list[i].GPA; return sum / n; } 4/7/2019 ECE Application Programming: Lecture 10

Example solution (cont.) StudentInfo readStudent() { StudentInfo s; printf(“Enter name: ”); scanf(“%s %c. %s”, s.first, &s.middle, s.last); printf(“Enter ID #: ”); scanf(“%u”, &s.ID); printf(“Enter GPA: ”); scanf(“%lf”, &s.GPA); return s; } 4/7/2019 ECE Application Programming: Lecture 10

ECE Application Programming: Lecture 10 Nested structures Variables inside structures can be structures themselves Example: general structure for names typedef struct { char first[50]; // First name char middle; // Middle initial char last[50]; // Last name } Name; 4/7/2019 ECE Application Programming: Lecture 10

Nested structures (cont.) Example (cont.): Could use Name structure any time you need name within a structure Redefining StudentInfo: typedef struct { Name stu_name; // Student name unsigned int ID; // ID # double GPA; // Grade point } StudentInfo; Will need multiple dot operators to access field within nested structure Given StudentInfo s1; s1.stu_name  Name structure within s1 s1.stu_name.middle  middle initial of name within s1 4/7/2019 ECE Application Programming: Lecture 10

ECE Application Programming: Lecture 10 Exam 2 notes Allowed one 8.5” x 11” double-sided note sheet No other notes No electronic devices (calculator, phone, etc.) Exam will last 2 hours and 20 minutes Covers material starting after Exam 1, through lecture 9 (lectures 6-9) Structures are not on Exam 2 Same general format as Exam 1 1 multiple choice (character arrays and strings) 1 code reading (arrays) 1 code writing (complete 2 of 3 parts; all 3 for extra credit) (functions) 4/7/2019 ECE Application Programming: Lecture 10

ECE Application Programming: Lecture 10 Review: functions Used to break programs into smaller pieces Useful when code sequences repeated Functions have: An optional return value A name Optional arguments Must be prototyped or written completely prior to use Arguments can be: Passed by value: copy of argument is sent to function Arguments cannot be modified outside function Passed by address: address of argument Use pointers or address operator (&) Arguments can be modified outside function—used to “return” multiple values 4/7/2019 ECE Application Programming: Lecture 10

ECE Application Programming: Lecture 10 Review: pointers Pointer: address of a variable Can get address of existing object using & Can get value of existing pointer using * Can assign pointers of same type to each other Pointer declaration: <base type>* <pointer name> Base type determines how reference is interpreted Use pointers as function arguments  pass by address 4/7/2019 ECE Application Programming: Lecture 10

Review: arrays & pointers Arrays: groups of data with same type x[10] has 10 elements, x[0] through x[9] Can also define with initial values e.g. double list[] = {1.2, 0.75, -3.233}; Must be sure to access inside bounds Array name is a pointer Arrays are always passed by address to functions Should pass size of array as additional argument e.g. void f(int arr[], int n); 4/7/2019 ECE Application Programming: Lecture 10

ECE Application Programming: Lecture 10 Review: 2D arrays Declared similarly to 1D arrays Example (see below): int x[3][4]; Index elements similarly to 1-D arrays Initialize: int y[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }; Typically used with nested for loops Can pass to functions—must specify # columns e.g. void f2(int arr[ ][4], int nRows); Col. 0 Col. 1 Col. 2 Col. 3 Row 0 x[0][0] x[0][1] x[0][2] x[0][3] Row 1 x[1][0] x[1][1] x[1][2] x[1][3] Row 2 x[2][0] x[2][1] x[2][2] x[2][3] 4/7/2019 ECE Application Programming: Lecture 10

ECE Application Programming: Lecture 10 Review: strings Represented as character arrays Can be initialized using string constants char hello[] = “Hello”; Can access individual elements hello[3] = ‘l’; Can print directly or with formatting Print directly: printf(hello); Print w/formatting using %s: printf(“%s\n”, hello); Reading strings: scanf(“%s”, str); Reads all characters up to (but not including) first space, tab, or newline Must leave enough room for terminating ‘\0’ 4/7/2019 ECE Application Programming: Lecture 10

Review: String functions In <string.h> library: Copying strings: char *strcpy(char *dest, const char *source); char *strncpy(char *dest, const char *source, size_t num); Return dest strncpy() not guaranteed to add null terminator Comparing strings: int strcmp(const char *s1, const char *s2); int strncmp(const char *s1, const char *s2, size_t num); Character-by-character comparison of character values Returns 0 if s1 == s2, 1 if s1 > s2, -1 if s1 < s2 4/7/2019 ECE Application Programming: Lecture 10

Review: String functions (cont.) Find # of characters in a string size_t strlen(const char *s1); Returns # characters before ‘\0’ Not necessarily size of array “Add” strings together—string concatenation char *strcat(char *dest, const char *source); char *strncat(char *dest, const char *source, size_t num); Returns dest strncat() guaranteed to add null terminator 4/7/2019 ECE Application Programming: Lecture 10

ECE Application Programming: Lecture 10 Final notes Next time Exam 2 Reminders: Program 6 due tomorrow Program 7 due Wednesday, 6/14 Exam 2: Monday, 6/12 Will be allowed one 8.5” x 11” note sheet 4/7/2019 ECE Application Programming: Lecture 10