Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Programming Systems
Jennifer Rexford
Introductions
Lectures
Preceptors
Assembly Language
Application Program
language
levels
tour
Machine Language
Operating System
service
levels
tour
Hardware
C is a lower-level language
C provides more opportunities to create abstractions
C has some flaws
Cs flaws motivate discussions of software engineering
principles
Power Programmer!!!
Precepts
Discussion forum
Piazzza: http://www.piazzza.com
Join or create your class now
School: Princeton University
Class: COS 217
Fill in your Princeton e-mail address
Click get started link in your email to activate
Please use your real name when signing up
10
Resources: Books
Required book
Resources: Manuals
Manuals (for reference only, available online)
See also
12
Linux
GNU
Your
Pgm
fez
fedora
Lab TAs
13
Linux
Your PC/Mac/Linux
Computer
SSH
GNU
Your
Pgm
fez
fedora
14
Notes
Grading
Seven programming assignments (50%)
Working code
Clean, readable, maintainable code
On time (penalties for late submission)
Final assignment counts double (12.5%)
Exams (40%)
Midterm (15%)
Final (25%)
16
Programming Assignments
Programming assignments
1.
2.
3.
4.
5.
6.
7.
A de-comment program
A string module
A symbol table module
IA-32 assembly language programs
A buffer overrun attack
A heap manager module
A Unix shell
17
18
Policies
Study the course Policies web page!!!
Especially the assignment collaboration policies
Some highlights:
Course Schedule
Very generally
Weeks
Lectures
Precepts
1-2
Intro to C (conceptual)
3-6
Intro to Linux/GNU
Intro to C (mechanical)
Advanced C
Midterm Exam
Recess
8-13
Assembly Language
Pgmming Assignments
Reading Period
Final Exam
20
21
We will use
1960
BCPL
LISP
1970
1972
1978
1989
1999
K&R C
ANSI C89
ISO C90
ISO/ANSI C99
Smalltalk
C++
Java
22
23
Implications for C
24
25
27
28
Hello.java:
hello.c:
#include <stdio.h>
Building
% javac Hello.java
% ls
Hello.class
Hello.java
%
% gcc217 hello.c
% ls
a.out
hello.c
%
Running
% java Hello
Hello, world
%
% a.out
Hello, world
%
Overall
Program
Structure
int main(void) {
printf("Hello, world\n");
return 0;
}
29
char
Integral types
byte
short
int
long
//
//
//
//
Floating point
types
float
double
// 32 bits
// 64 bits
Logical type
boolean
// 16-bit unicode
8 bits
16 bits
32 bits
64 bits
C
char /* 8 bits */
(unsigned)
(unsigned)
(unsigned)
(unsigned)
char
short
int
long
float
double
long double
/* no equivalent */
/* use integral type */
void*
Constants
30
Arrays
int a[10];
float b[5][20];
Array bound
checking
// run-time check
/* no run-time check */
Pointer type
// Object reference is an
// implicit pointer
int *p;
Record type
class Mine {
int x;
float y;
}
struct Mine {
int x;
float y;
}
31
String s1 = "Hello";
String s2 = new
String("hello");
String
concatenation
Logical ops
s1 + s2
s1 += s2
#include <string.h>
strcat(s1, s2);
&&, ||, !
&&, ||, !
Relational ops
Strings
+, -, *, /, %, unary -
Bitwise ops
Assignment
ops
32
if stmt
if (i < 0)
statement1;
else
statement2;
if (i < 0)
statement1;
else
statement2;
switch stmt
switch (i) {
case 1:
...
break;
case 2:
...
break;
default:
...
}
switch (i) {
case 1:
...
break;
case 2:
...
break;
default:
...
}
goto stmt
// no equivalent
goto SomeLabel;
33
for stmt
int i;
for (i=0; i<10; i++)
statement;
while stmt
while (i < 0)
statement;
while (i < 0)
statement;
do {
do-while stmt
statement;
} while (i < 0)
do {
statement;
continue stmt
continue;
continue;
labeled
continue stmt
continue SomeLabel;
/* no equivalent */
break stmt
break;
break;
labeled break
stmt
break SomeLabel;
/* no equivalent */
34
return 5;
return;
return 5;
return;
statement1;
statement2;
statement1;
statement2;
Exceptions
Comments
/* comment */
// another kind
Method /
function call
f(x, y, z);
someObject.f(x, y, z);
SomeClass.f(x, y, z);
/* comment */
f(x, y, z);
35
Example C Program
#include <stdio.h>
#include <stdlib.h>
const double KMETERS_PER_MILE = 1.609;
int main(void) {
int miles;
double kmeters;
printf("miles: ");
if (scanf("%d", &miles) != 1) {
fprintf(stderr, "Error: Expect a number.\n");
exit(EXIT_FAILURE);
}
kmeters = miles * KMETERS_PER_MILE;
printf("%d miles is %f kilometers.\n",
miles, kmeters);
return 0;
}
36
Conclusions
Getting started with C