01intro · 2019-09-04 · cs33 intro to computer systems i–2 copyright © 2019 thomas w....
TRANSCRIPT
![Page 1: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/1.jpg)
CS33 Intro to Computer Systems I–1 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
CS 33Introduction to Computer Systems
![Page 2: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/2.jpg)
CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Welcome!• Prof: Tom Doeppner• HTAs: Ilan Bigio, Peter Cho, Kielan Donahue, Lisa
Phinisee• UTAs: Ariana Barzinpour, Chris Avalos, Casey Nelson,
Christine Wang, Conrad Zborowski, David Charatan, Delmy Garcia, Daphne Li-Chen, Daniel Park, David Promisel, Ethan Sattler, Evan Velasquez, Grace Bramley-Simmons, Gus Cantieni, Garret Kern, George Lee, Isa Milefchik, Jason Fischman, Jarrett Huddleston, Jason Ludmir, Symone Houston, Katherine Kwan, Raghu Nimmagadda, Mohammad Amoush, Moustafa Makhlouf, Nazem Aldroubi, Prithu Dasgupta, Rahul Dey, Rudra Srivastava, Rachel Wang, Shelley Jain, Star Su, Tim Park, William Adriance, William Jurayj, Zsozso Biegl
![Page 3: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/3.jpg)
CS33 Intro to Computer Systems I–3 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
What You’ll Learn
• Programming in C• Data representation• Programming in x86 assembler language• High-level computer architecture• Optimizing programs• Linking and libraries• Basic OS functionality• Memory management• Network programming (Sockets)• Multithreaded programming (POSIX threads)
![Page 4: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/4.jpg)
CS33 Intro to Computer Systems I–4 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Prerequisites:What You Need to Know
• Ability to program in an object-oriented or procedural language (e.g., Java)
– CS15 or CS18
![Page 5: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/5.jpg)
CS33 Intro to Computer Systems I–5 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
What You’ll Do
• Twelve 2-hour labs (done in pairs)• Nine one- to two-week programming
assignments– most will be doable on OSX as well as on SunLab
machines• No exams!• Top Hat for in-class quizzes
– not anonymous: a small portion of your grade– full credit (A) for each correct answer– partial credit (B) for each wrong answer– NC for not answering– one to three or so questions per class
![Page 6: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/6.jpg)
CS33 Intro to Computer Systems I–6 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Grad Students
• You’re welcome to take the class!• Weekly homeworks, just for you
– 10% of your grade– ugrads encouraged to try them, but we’ll grade only
those of grad students• Send me email if youʼd like to register
![Page 7: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/7.jpg)
CS33 Intro to Computer Systems I–7 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Gear-Up Sessions
• Optional weekly sessions– handle questions about the week’s assignment and
course material– generally Thursdays, 7-8pm
» the first will be Monday, September 9– in CIT 165 (Motorola)
![Page 8: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/8.jpg)
CS33 Intro to Computer Systems I–8 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Collaboration Policy• Learn by doing• You may:
– discuss the requirements with others– discuss the high-level approach with others
• Write your own code• Debug your own code• If you get stuck debugging
– others may help you debug– may not give you solutions or test cases
• Acknowledge (in README) those who assist you
• We run MOSS on all relevant assignments– your MOSS score will be supplied with your grade
![Page 9: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/9.jpg)
CS33 Intro to Computer Systems I–9 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Textbook
• Computer Systems: A Programmer’s Perspective, 3rd Edition, Bryant and O’Hallaron, Prentice Hall 2015
![Page 10: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/10.jpg)
CS33 Intro to Computer Systems I–10 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
![Page 11: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/11.jpg)
CS33 Intro to Computer Systems I–11 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
If Programming Languages Were Cars …
• Java would be an SUV– automatic transmission– stay-in-lane technology– adaptive cruise control– predictive braking– gets you where you want to go
» safe» boring
• Pyret would be a Tesla– you drive it like an SUV
» definitely cooler» but limited range
![Page 12: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/12.jpg)
CS33 Intro to Computer Systems I–12 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
If Programming Languages Were Cars …
• C would be a sports car– manual everything– dangerous– fun– you really need to know what you’re doing!
![Page 13: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/13.jpg)
CS33 Intro to Computer Systems I–13 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
U-Turn Algorithm(Java and Pyret Version)
1. Switch on turn signal2. Slow down to less than 3 mph3. Check for oncoming traffic4. Press the accelerator lightly while turning the
steering wheel pretty far in the direction you want to turn
5. Lift your foot off the accelerator and coast through the turn; press accelerator lightly as needed
6. Enter your new lane and begin driving
![Page 14: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/14.jpg)
CS33 Intro to Computer Systems I–14 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
U-Turn Algorithm(C Version)
1. Enter turn at 30 mph in second gear2. Position left hand on steering wheel so you can
quickly turn it one full circle3. Ease off accelerator; fully depress clutch4. Quickly turn steering wheel either left or right as
far as possible5. A split second after starting turn, pull hard on
handbrake, locking rear wheels6. As car (rapidly) rotates, restore steering wheel to
straight-ahead position7. When car has completed 180° turn, release
handbrake and clutch, fully depress accelerator
![Page 15: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/15.jpg)
CS33 Intro to Computer Systems I–15 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
History of C
• Early 1960s: CPL (Combined Programming Language)
– developed at Cambridge University and University of London
• 1966: BCPL (Basic CPL): simplified CPL– intended for systems programming
• 1969: B: simplified BCPL (stripped down so its compiler would run on minicomputer)
– used to implement earliest Unix• Early 1970s: C: expanded from B
– motivation: they wanted to play “Space Travel” on minicomputer
– used to implement all subsequent Unix OSes
![Page 16: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/16.jpg)
CS33 Intro to Computer Systems I–16 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
More History of C
• 1978: Textbook by Brian Kernighan and Dennis Ritchie (K&R), 1st edition, published
– de facto standard for the language• 1989: ANSI C specification (ANSI C)
– 1988: K&R, 2nd edition, published, based on draft of ANSI C
• 1990: ISO C specification (C90)– essentially ANSI C
• 1999: Revised ISO C specification (C99)• 2011: Further revised ISO C specification
(C11)– not widely used
![Page 17: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/17.jpg)
CS33 Intro to Computer Systems I–17 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
CS 33Introduction to C
![Page 18: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/18.jpg)
CS33 Intro to Computer Systems I–18 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
A C Program
int main( ) {printf("Hello world!\n");return 0;
}
![Page 19: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/19.jpg)
CS33 Intro to Computer Systems I–19 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Compiling and Running It$ ls
hello.c
$ gcc hello.c
$ ls
a.out hello.c
$ ./a.out
Hello world!
$ gcc -o hello hello.c
$ ls
a.out hello hello.c
$ ./hello
Hello world!
$
![Page 20: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/20.jpg)
CS33 Intro to Computer Systems I–20 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
What’s gcc?
• gnu C compiler– it’s actually a two-part script
» part one compiles files containing programs written in C (and certain other languages) into binary machine code (known as object code)
» part two takes the just-compiled object code and combines it with other object code from libraries to create an executable
• the executable can be loaded into memory and run by the computer
![Page 21: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/21.jpg)
CS33 Intro to Computer Systems I–21 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
gcc Flags
• gcc [-Wall] [-g] [-std=gnu99]• -Wall
» provide warnings about pretty much everything that might conceivably be objectionable
• -g» provide extra information in the object code, so that
gdb (gnu debugger) can provide more informative debugging info
• discussed in lab• -std=gnu99
» use the 1999 version of C syntax, rather than the 1990 version
![Page 22: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/22.jpg)
CS33 Intro to Computer Systems I–22 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Declarations in C
int main() {
int i;
float f;
char c;
return 0;
}
Types are promises– promises can be broken
Types specify memory sizes– cannot be broken
![Page 23: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/23.jpg)
CS33 Intro to Computer Systems I–23 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Declarations in C
int main() {
int i;
float f;
char c;
return 0;
}
Declarations reserve memory space– where?
Local variables can be uninitialized– junk– whatever was there before
![Page 24: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/24.jpg)
CS33 Intro to Computer Systems I–24 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Declarations in C
int main() {
int i;
float f;
char c;
return 0;
}
14350978156.1734e-23
þ
ifc
![Page 25: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/25.jpg)
CS33 Intro to Computer Systems I–25 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Using Variables
int main() {int i;float f;char c;i = 34;c = 'a';
}
346.1734e-23
a
ifc
![Page 26: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/26.jpg)
CS33 Intro to Computer Systems I–26 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
printf Again
ifc $ ./a.out
3434 a
int main() {int i;float f;char c;i = 34;c = 'a';printf("%d\n",i);printf("%d\t%c\n",i,c);
}
![Page 27: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/27.jpg)
CS33 Intro to Computer Systems I–27 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
printf Again
if
$ ./a.out34 a
int main() {…printf("%d\t%c\n",i,c);
}
Two parts• formatting instructions• arguments
![Page 28: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/28.jpg)
CS33 Intro to Computer Systems I–28 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
printf Again
if
$ ./a.out34 a
int main() {…printf("%d\t%c\n",i,c);
}
Formatting instructions• Special characters
– \n : newline– \t : tab– \b : backspace– \" : double quote– \\ : backslash
![Page 29: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/29.jpg)
CS33 Intro to Computer Systems I–29 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
printf Again
if
$ ./a.out34 a
int main() {…printf("%d\t%c",i,c);
}
Formatting instructions• Types of arguments
– %d: integers– %f: floating-point numbers– %c: characters
![Page 30: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/30.jpg)
CS33 Intro to Computer Systems I–30 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
printf Again
if
$ ./a.out34 a
int main() {…printf("%6d%3c",i,c);
}
Formatting instructions• %6d: decimal integer at least 6 characters wide• %6f: floating point at least 6 characters wide• %6.2f: floating point at least 6 wide, 2 after the decimal point
![Page 31: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/31.jpg)
CS33 Intro to Computer Systems I–31 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
printf Again
if
int main() {int i;float celsius;for(i=30; i<34; i++) {celsius = (5.0/9.0)*(i-32.0);printf("%3d %6.1f\n", i, celsius);
}}
$ ./a.out30 -1.131 -0.632 0.033 0.6
![Page 32: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/32.jpg)
CS33 Intro to Computer Systems I–32 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
For Loops
if
int main() {int i;float celsius;for (i=30 ; i<34 ; i=i+1) {celsius = (5.0/9.0)*(i-32.0);printf("%3d %6.1f\n", i, celsius);
}}
before the loop
after each iteration
should loop continue?
![Page 33: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/33.jpg)
CS33 Intro to Computer Systems I–33 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Some Primitive Data Typeschar
– a single byte: interpreted as either an 8-bit integer or a charactershort
– integer: 16 bitsint
– integer: 16 bits or 32 bits (implementation dependent)long
– integer: either 32 bits or 64 bits, depending on the architecturelong long
– integer: 64 bitsfloat
– single-precision floating pointdouble
– double-precision floating point
![Page 34: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/34.jpg)
CS33 Intro to Computer Systems I–34 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
What is the size of my int?
if
int main() {int i;printf("%d\n", sizeof(i));
}
$ ./a.out4
sizeof– returns the size of a variable in bytes– very very very very very very important function in C
![Page 35: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/35.jpg)
CS33 Intro to Computer Systems I–35 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Arrays
int main() {int a[100];int i;
}
ia[0]a[1]a[2]
a[99]
.
.
.
![Page 36: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/36.jpg)
CS33 Intro to Computer Systems I–36 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Arrays
int main() {int a[100];int i;for(i=0;i<100;i++)a[i] = i;
}
1000
ia[0]
12
99
a[1]a[2]
a[99]
.
.
.
![Page 37: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/37.jpg)
CS33 Intro to Computer Systems I–37 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Array Bounds
int main() {int a[100];int i;for(i=0;i<=100;i++)a[i] = i;
}
.
.
.
1010
ia[0]
12
99
a[1]a[2]
a[99]100a[100]
![Page 38: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/38.jpg)
CS33 Intro to Computer Systems I–38 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Arrays in C
C Arrays = Storage + Indexing– no bounds checking– no initialization
WELCOME TO THE JUNGLE
![Page 39: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/39.jpg)
CS33 Intro to Computer Systems I–39 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Welcome to the Jungle
int main() {int j=8;int a[100];int i;for(i=0;i<=100;i++)a[i] = i;
printf("%d\n", j);}
$ ./a.out????
ia[0]a[1]a[2]
a[99]
.
.
.
8j
![Page 40: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/40.jpg)
CS33 Intro to Computer Systems I–40 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Quiz 1
• What is printed for the value of j when the program is run?a) 0b) 8c) 100d) indeterminate
![Page 41: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/41.jpg)
CS33 Intro to Computer Systems I–41 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Welcome to the Jungle
int main() {int j=8;int a[100];int i;for(i=0;i<=100;i++)a[i] = i;
printf("%d\n", j);}
$ ./a.out100
1010
ia[0]
12
99
a[1]a[2]
a[99]
.
.
.
100j
![Page 42: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/42.jpg)
CS33 Intro to Computer Systems I–42 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Welcome to the Jungle
int main() {int j;int a[100];int i;for(i=0;i<100;i++)a[i] = i;
printf("%d\n", j);}
$ ./a.out???
ia[0]a[1]a[2]
a[99]
.
.
.
j
![Page 43: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/43.jpg)
CS33 Intro to Computer Systems I–43 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Quiz 2
• What is printed for the value of j when the program is run?a) 0b) 8c) 100d) indeterminate
![Page 44: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/44.jpg)
CS33 Intro to Computer Systems I–44 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Welcome to the Jungle
int main() {int j;int a[100];int i;for(i=0;i<100;i++)a[i] = i;
printf("%d\n", j);}
$ ./a.out-1880816380
1000
ia[0]
12
99
a[1]a[2]
a[99]
.
.
.
-1880816380j
![Page 45: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/45.jpg)
CS33 Intro to Computer Systems I–45 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Welcome to the Jungle
int main() {int a[100];int i;a[-3] = 25;printf("%d\n", a[-3]);
}
$ ./a.out25
![Page 46: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/46.jpg)
CS33 Intro to Computer Systems I–46 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Welcome to the Jungle
if
int main() {int a[100];int i;a[-3] = 25;a[11111111] = 6;printf("%d\n", a[-3]);
} $ ./a.outSegmentation fault
What is a segmentation fault?• attempted access to an invalid memory location
![Page 47: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/47.jpg)
CS33 Intro to Computer Systems I–47 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Function Definitions
if
int main() {printf("%f\n", fact(5));return 0;
}
int fact(int i) {int k;int res;for(res=1,k=1; k<=i; k++)res = res * k;
return res;}
main• is just another
function• starts the program
All functions• have a return type
![Page 48: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/48.jpg)
CS33 Intro to Computer Systems I–48 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Compiling It
$ gcc –o fact fact.c$ ./fact120
![Page 49: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/49.jpg)
CS33 Intro to Computer Systems I–49 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Function Definitions
if
int main() {printf("%f\n", fact(5));return 0;
}float fact(int i) {int k;float res;for(res=1,k=1; k<=i; k++)res = res * k;
return res;}
![Page 50: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/50.jpg)
CS33 Intro to Computer Systems I–50 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Function Definitions
$ gcc –o fact fact.cmain.c:27: warning: type mismatch with previous implicit declarationmain.c:23: warning: previous implicit declaration of 'fact'main.c:27: warning: 'fact' was previously implicitly declared to return 'int'
$ ./fact1079902208
![Page 51: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/51.jpg)
CS33 Intro to Computer Systems I–51 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Function Declarations
if
float fact(int i);
int main() {printf("%f\n", fact(5));return 0;
}float fact(int i) {int k;float res;for(res=0,k=1; k<=i; k++)res = res * k;
return res;}
Declares the function
$ ./fact120.000000
![Page 52: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/52.jpg)
CS33 Intro to Computer Systems I–52 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Methods
• C has functions• Java has methods
– methods implicitly refer to objects– C doesn’t have objects
• Don’t use the “M” word– itʼs just wrong
?
![Page 53: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/53.jpg)
CS33 Intro to Computer Systems I–53 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Function Declarations
#include "fact.h"int main() {printf("%f\n", fact(5));return 0;
}float fact(int i) {int k; float res;for(res=1,k=1; k<=i; k++)res = res * k;
return res;}
float fact(int i);
fact.h fact.c
![Page 54: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/54.jpg)
CS33 Intro to Computer Systems I–54 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
The Preprocessor
#include
• calls the preprocessor to include a fileWhat do you include?• your own header file:#include "fact.h"– look in the current directory
• standard header file:#include <assert.h>#include <stdio.h>– look in a standard place
Contains declaration of printf (and other things)
![Page 55: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/55.jpg)
CS33 Intro to Computer Systems I–55 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
#define
#define SIZE 100int main() {
int i;int a[SIZE];
}
#define
• defines a substitution• applied to the program by the preprocessor
![Page 56: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/56.jpg)
CS33 Intro to Computer Systems I–56 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
#define
#define forever for(;;)int main() {
int i;forever {printf("hello world\n");
}}
![Page 57: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/57.jpg)
CS33 Intro to Computer Systems I–57 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
assert
if
#include <assert.h>float fact(int i) {int k; float res;assert(i >= 0);for(res=1,k=1; k<=i; k++)res = res * k;
return res;} int main() {printf("%f\n", fact(-1));return 0;
}
assert• verify that the
assertion holds• abort if not
$ ./factmain.c:4: failed assertion 'i >= 0'Abort
![Page 58: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/58.jpg)
CS33 Intro to Computer Systems I–58 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Parameter passingPassing arrays to a function
int average(int a[], int size) {int i; int sum;for(i=0,sum=0; i<size; i++)sum += a[i];
return sum/s;}int main() {
int a[100];…printf("%d\n",average(a,100));
}
• Note that I need to pass the size of the array
• This array has no idea how big it is
![Page 59: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/59.jpg)
CS33 Intro to Computer Systems I–59 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Swapping
Write a function to swap two entries of an array
void swap(int a[], int i, int j) {int tmp;tmp = a[j];a[j] = a[i];a[i] = tmp;
}
![Page 60: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/60.jpg)
CS33 Intro to Computer Systems I–60 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Selection Sort
void selectsort(int array[], int length){int i, j, min;for (i = 0; i < length; ++i){
/* find the index of the smallest item from i onward */min = i;for (j = i; j < length; ++j)
if (array[j] < array[min])min = j;
/* swap the smallest item with the i-th item */swap(array, i, min);
}/* at the end of each iteration, the first i slots have the i
smallest items */}
![Page 61: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/61.jpg)
CS33 Intro to Computer Systems I–61 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Swapping
Write a function to swap two ints
void swap(int i, int j) {
}int main() {
int a = 4;int b = 8;swap(a, b);printf("a:%d b:%d", a, b);
}
Parameters are passed by value
![Page 62: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/62.jpg)
CS33 Intro to Computer Systems I–62 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Swapping
Write a function to swap two ints
void swap(int i, int j) {int tmp;tmp = j; j = i; i = tmp;
}int main() {
int a = 4;int b = 8;swap(a, b);printf("a:%d b:%d", a, b);
}
$ ./a.outa:4 b:8
Darn!
![Page 63: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/63.jpg)
CS33 Intro to Computer Systems I–63 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
CS Town Hall Meeting!
• CIT 3rd-floor atrium• 4pm Thursday (tomorrow)• Hear about:
–new faculty–new courses–research opportunities–and more!
![Page 64: 01Intro · 2019-09-04 · CS33 Intro to Computer Systems I–2 Copyright © 2019 Thomas W. Doeppner. All rights reserved. Welcome! •Prof: Tom Doeppner •HTAs: IlanBigio, Peter](https://reader033.vdocument.in/reader033/viewer/2022041700/5e4153c5d001ca28384eec75/html5/thumbnails/64.jpg)
CS33 Intro to Computer Systems I–64 Copyright © 2019 Thomas W. Doeppner. All rights reserved.
Industry Partners Program (IPP)
• Find and apply for job and internship postings in CS• Learn about IPP employer tech talks & challenges• Attend resumé reviews with industry professionals
• cs.brown.edu/about/partners
• To sign up for notifications about upcoming events:– http://bit.ly/brownipp
• Questions? Contact [email protected]