mith College
Computer Science
Dominique Thiébaut [email protected]
CSC231Week 13— Introduction to C
Fall 2019
Complete the code
shown here
Computer Science Dominique Thiebaut
getcopy C/decrementArray.c
Exercise
Complete the code
shown here
Computer Science Dominique Thiebaut
Solution
Exercise
Computer Science Dominique Thiebaut
• Write a C program that uses functions to find the largest integer in A. The result is passed back using a return statement.
Solutiongetcopy C/findMaxUsingFunctionSol.c
Computer Science Dominique Thiebaut
Exercise
• Write another program that does the same thing but the max is passed back by reference.
Computer Science Dominique Thiebaut
Solutiongetcopy C/findMaxUsingFunction2sol.c
Computer Science Dominique Thiebaut
Input/OutputIO
Input From User
Computer Science Dominique Thiebaut
(cont’d)
a.outEnter your name, please: MickeyEnter your age: 21Enter your version of pi: 3.14159Mickey is 21 years old, and thinks pi is 3.1415901184
Computer Science Dominique Thiebaut
Dynamic Variables
Computer Science Dominique Thiebaut
• Dynamic: think "new" in Java
• malloc() = Memore Allocation for new data structure
Computer Science Dominique Thiebaut
RAM
Computer Science Dominique Thiebaut
user
pro
g
malloc()
user
pro
g
malloc()
RAM
Computer Science Dominique Thiebaut
OperatingSystem
RAM
Computer Science Dominique Thiebaut
OperatingSystem
dyn
user
pro
g
malloc()
RAM
Computer Science Dominique Thiebaut
OperatingSystem
dyn
(void*) p
user
pro
g
malloc()
RAM
Computer Science Dominique Thiebaut
OperatingSystem
dyn
(void*) p
p
user
pro
g
malloc()
Computer Science Dominique Thiebaut
getcopy C/malloc1.c
Malloc
Exercise• Modify the previous program that computed the
max of an array, but this time you allocate the array dynamically, with numbers provided by the user.
Computer Science Dominique Thiebaut
Solution
Computer Science Dominique Thiebaut
getcopy C/findMaxUsingFunction3sol.c
sizeof()can be tricky…
Computer Science Dominique Thiebaut
sizeof ()
Computer Science Dominique Thiebaut
sizeof(A) = 20sizeof(A[0]) = 4sizeof(B) = 8sizeof(B[0]) = 4sizeof(p) = 8sizeof(*p) = 4sizeof(name) = 14strlen(name) = 13sizeof(a) = 4sizeof(x) = 4
sizeof ()
Computer Science Dominique Thiebaut
sizeof(A) = 20sizeof(A[0]) = 4sizeof(B) = 8sizeof(B[0]) = 4sizeof(p) = 8sizeof(*p) = 4sizeof(name) = 14strlen(name) = 13sizeof(a) = 4sizeof(x) = 4
Different!
sizeof ()
Computer Science Dominique Thiebaut
File IO
File I/O: Output
Computer Science Dominique Thiebaut
C/fileIOOutput.c
File I/O: Input
Computer Science Dominique Thiebaut
C/fileIOInput.c
Computer Science Dominique Thiebaut
File I/O: Reading Ints [~handout] cat fileOfInts.txt 41 2 34 5 67 8 910 11 12
Computer Science Dominique Thiebaut
File I/O: Reading Ints
C/fileIOReadNumbers.c
Computer Science Dominique Thiebaut
[~handout] gcc fileIOReadNumbers.c[~handout] a.out1, 2, 34, 5, 67, 8, 910, 11, 12
File I/O: Reading Ints
Exercise• Write a program that reads the file data.txt, which
has the number of ints it contains on the first line, then one int per line for the rest of the file. Your program must use a dynamic array to store the numbers, and find the max of the array, and print it.
Computer Science Dominique Thiebaut
Function Prototypes
and Multi-File Projects
Computer Science Dominique Thiebaut
Original
Computer Science Dominique Thiebaut
myfuncs.c
smallestLargestSum3.c
Computer Science Dominique Thiebaut
myfuncs.h
Computer Science Dominique Thiebaut
Summary• C has a lot in common with Java
• C programmers must know how to use memory (malloc, pointers)
• No garbage collector: free dynamic structures yourself!
• Explicitly pass arguments by value or by reference to functions
Computer Science Dominique Thiebaut
D. Thiebaut, Computer Science, Smith College
End of Video Lecturehttps://www.youtube.com/watch?v=LFpoUFIfV0M&a=youtu.be
D. Thiebaut, Computer Science, Smith College
Logistics and Update
• Video lecture for Monday's snow day + Quiz
• No office hours today
• Office hours tomorrow (12/5) 12-1 p.m.
• Homework extended to 12/5 11:55 p.m.
• Homework 11 (optional) released tomorrow morning
D. Thiebaut, Computer Science, Smith College
And now, something completely different…
Executablegcc addition.c
D. Thiebaut, Computer Science, Smith College
And now, something completely different…
Executablegcc addition.c
gcc -S -m32 -masm=intel addition.c
D. Thiebaut, Computer Science, Smith College
ReviewMalloc
D. Thiebaut, Computer Science, Smith College
ReviewMalloc
Linked-Listsin C
Computer Science Dominique Thiebaut
D. Thiebaut, Computer Science, Smith College
Outline
• Linked Lists in C
• Structures in C
• Creating a Node
• Adding a Node
• Removing a Node
‘Alpha’
‘Zero’
‘Beta’
‘Apple’
head
"Alpha"
"Zero"
"Beta"
"Apple"
head
Computer Science Dominique Thiebaut
Computer Science Dominique Thiebaut
NULL
((void *)0)
"Alpha"
"Zero"
"Beta"
"Apple"
head
The Node in C"Alpha"
Computer Science Dominique Thiebaut
http://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Structures
C Structs
• Early attempt at encapsulating data
• Members are accessed using the dot notation:
http://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Structures
Computer Science Dominique Thiebaut
Struct Example
Computer Science Dominique Thiebaut
Struct Example
Computer Science Dominique Thiebaut
Struct Example
Computer Science Dominique Thiebaut
getcopy C/structExample.c
The Head of the List
Computer Science Dominique Thiebaut
head
The Head of the List
Computer Science Dominique Thiebaut
head
That’s anempty list!
Displaying the List
Computer Science Dominique Thiebaut
"Alpha" "Zero" "Apple"
head
"Beta"
Creating the List
Computer Science Dominique Thiebaut
"Apple"
head
"Beta"
Computer Science Dominique Thiebaut
Computer Science Dominique Thiebaut
Computer Science Dominique Thiebaut
getcopy C/linkedListStrings.c
Exercise
• Add code to the linkedListStrings.c program that will remove all the nodes from the list, one by one (and free them).
• Make your code display the list after each deletion
Computer Science Dominique Thiebaut
Exercise
• Use functions for adding and removing nodes…
Computer Science Dominique Thiebaut
Main ProgramCalling
Functions
Solution
Computer Science Dominique Thiebaut
getcopy C/linkedListStrings2.c
D. Thiebaut, Computer Science, Smith College
We stopped herelast time!