Download presentation
Presentation is loading. Please wait.
Published byDouglas Hall Modified over 8 years ago
1
Week 9 - Wednesday
2
What did we talk about last time? structs
5
C combines the power and performance of assembly language with the flexibility and ease- of-use of assembly language. Anonymous C combines the power and performance of assembly language with the flexibility and ease- of-use of assembly language. Anonymous
7
What about printing out a human-readable version of the time? ctime() takes a time_t value and returns a string giving the day and time Alternatively, strftime() has a set of specifiers (similar to printf() ) that allow for complex ways to format the date and time printf(ctime(time(NULL)); //prints Fri Mar 15 14:22:34 2013 printf(ctime(time(NULL)); //prints Fri Mar 15 14:22:34 2013
8
struct tm { int tm_sec; // Seconds (0-60) int tm_min; // Minutes (0-59) int tm_hour; // Hours (0-23) int tm_mday; // Day of the month (1-31) int tm_mon; // Month (0-11) int tm_year; // Year since 1900 int tm_wday; // Day of the week (Sunday = 0) int tm_yday; // Day in the year (0-365; 1 Jan = 0) int tm_isdst; /* Daylight saving time flag > 0: DST is in effect; = 0: DST is not effect; < 0: DST information not available */ }; struct tm { int tm_sec; // Seconds (0-60) int tm_min; // Minutes (0-59) int tm_hour; // Hours (0-23) int tm_mday; // Day of the month (1-31) int tm_mon; // Month (0-11) int tm_year; // Year since 1900 int tm_wday; // Day of the week (Sunday = 0) int tm_yday; // Day in the year (0-365; 1 Jan = 0) int tm_isdst; /* Daylight saving time flag > 0: DST is in effect; = 0: DST is not effect; < 0: DST information not available */ };
9
gmtime() and localtime() convert a time_t value to a struct that contains "broken down" time gmtime() gives UTC time (used to be called Greenwich Mean Time) localtime() gives the local time, assuming it is set up correctly mktime() can convert from a broken down time back into time_t time_t seconds = time(NULL); struct tm* brokenDownTime = NULL; brokenDownTime = localtime(&seconds); if( (*brokenDownTime).tm_wday == 1 ) printf("It's just another manic Monday.\n"); time_t seconds = time(NULL); struct tm* brokenDownTime = NULL; brokenDownTime = localtime(&seconds); if( (*brokenDownTime).tm_wday == 1 ) printf("It's just another manic Monday.\n");
10
How accurate is the microsecond part of gettimeofday() ? It depends on the accuracy of the software clock in your system This clock measures time in units called jiffies A jiffy used to be 10 milliseconds (100 Hz) They raised the accuracy to 1 millisecond (1000 Hz) Now, it can be configured for your system to 10, 4 (the default), 3.3333, and 1 milliseconds
11
For optimization purposes, it can be useful to know how much time a process spends running on the CPU This time is often broken down into User time: the amount of time your program spends executing its own code System time: the amount of time spent in kernel mode executing code for your program (memory allocation, page faults, file opening)
12
You can time a program's complete execution by running it with the time command It will give the real time taken, user time, and system time Let's say you've got a program called timewaster Run it like this: Output might be: time./timewaster real 0m4.84s user 0m1.030s sys 0m3.43s real 0m4.84s user 0m1.030s sys 0m3.43s
14
Read in 100 student names, GPAs, and ID numbers Sort them by ID numbers Print out the values struct student { char name[100]; double GPA; int ID; }; struct student { char name[100]; double GPA; int ID; };
15
You might have noticed that there are all these odd types floating around time_t size_t On some systems, you will even see aliases for your basic types FLOAT INT32 How do people create new names for existing types?
16
The typedef command allows you to make an alias for an existing type You type typedef, the type you want to alias, and then the new name Don't overuse typedef It is useful for types like time_t which can have different meanings in different systems typedef int SUPER_INT; SUPER_INT value = 3; //has type int typedef int SUPER_INT; SUPER_INT value = 3; //has type int
17
The typedef command is commonly used with structs Often it is built into the struct declaration process It allows the programmer to leave off the stupid struct keyword when declaring variables The type defined is actually struct _wombat We can refer to that type as wombat typedef struct _wombat { char name[100]; double weight; } wombat; typedef struct _wombat { char name[100]; double weight; } wombat; wombat martin;
18
You can actually typedef the name of the struct to be the same without the struct part Or, if you don't need the name of the struct inside itself, you can typedef an anonymous struct typedef struct wombat { char name[100]; double weight; } wombat; typedef struct wombat { char name[100]; double weight; } wombat; typedef struct { char name[100]; double weight; } wombat; typedef struct { char name[100]; double weight; } wombat;
20
Since you have all taken CS122 (and many have taken CS221), you all know the power of the linked list A linked list is a dynamic data structure with the following features: Insertion, add, and delete can be O(1) time Search is O(n) time They are ideally suited for a merge sort They are a pain to program
21
Node consists of data and a single next pointer Advantages: fast and easy to implement Disadvantages: forward movement only X head 23 47 58
22
Since C doesn't have classes, we can't make a self-contained linked list But we can create nodes and a set of operations to use on them Clearly, we will need a struct to make the node It will contain data It will contain a pointer to the next node in the list Doubly-linked lists are possible too
23
We'll use this definition for our node for singly linked lists Somewhere, we will have the following variable to hold the beginning of the list typedef struct _node { int data; struct _node* next; } node; typedef struct _node { int data; struct _node* next; } node; node* head = NULL;
24
Let's define a function that takes a pointer to a (possibly empty) linked list and adds a value to the front There are two possible ways to do it Return the new head of the list Take a pointer to a pointer and change it directly node* add(node* head, int value); void add(node** headPointer, int value);
25
Let's define a function that takes a pointer to a (possibly empty) linked list and a value and returns the node containing the value Or NULL if there is no such node node* find(node* head, int value);
26
Let's define a function that takes a pointer to a (possibly empty) linked list and returns the sum of the values inside An empty list has a sum of 0 int sum(node* head);
27
Let's define a function that takes a pointer to a (possibly empty) linked list and deletes the first occurrence of a given value List is unchanged if the value isn't found There are two possible ways to do it Return the new head of the list Take a pointer to a pointer and change it directly node* remove(node* head, int value); void remove(node** headPointer, int value);
28
Let's define a function that takes a pointer to a (possibly empty) linked list and adds a value in sorted order (assuming that the list is already sorted) There are two possible ways to do it Return the new head of the list Take a pointer to a pointer and change it directly node* add(node* head, int value); void add(node** headPointer, int value);
31
The enum type Lab 9
32
Finish Project 4 Due Friday by midnight! Keep reading K&R chapter 6
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.