Download presentation
Presentation is loading. Please wait.
Published byNoah Tucker Modified over 9 years ago
1
Prof. Béat Hirsbrunner Ammar Halabi, PhD student (exercises) Dani Rotzetter, Master student (exercises) Bachelor students : Major in computer science (3rd semester) Minor in computer science Optionnal course JMCS Gateway students : Complementary course for the Joint Master in Computer Science Imperative & System Programming IN.3011 – SystemnaheProgrammierung IN.3011 – Programmationprochedusystème IN.3011 – Systemnahe Programmierung IN.3011 – Programmation proche du système University of Fribourg, Department of Informatics Autumn Semester 2012, www.unifr.ch/diuf/pai/ip Prerequisite: Basic knowledge of a programming language, e.g. Java
2
#include main() { printf("hello, world\n"); } (KR p6) Imperative and System Programming, B. Hirsbrunner, Lecture 1 – 19 September 2012 Course organization: ~30’; Unix Tutorial: ~60’; C Tutorial: ~20’; KR – Chap 1: ~70’ Hello World % gcc hello.c // Compile hello.c %./a.out // Run a.out % gcc -o hello hello.c // Compile hello.c %./hello // Run hello
3
2 #include /* Print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature table */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr - 32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } (KR p9) Variables and Arithmetic Expressions (1)
4
3 (KR p12) #include /* Print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ /* Floating-point version */ main() { float fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature table */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr - 32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } Variables and Arithmetic Expressions (2)
5
4 #include /* print Fahrenheit-Celsius table */ main() { int fahr; for (fahr = 0; fahr <= 300; fahr = fahr + 20) printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32)); } (KR p13) The For Statement
6
5 #include #define LOWER 0 /* lower limit of table */ #define UPPER 300 /* upper limit */ #define STEP 20 /* step size */ /* print Fahrenheit-Celsius table */ main() { int fahr; for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP) printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32)); } (KR p15) Symbolic Constants
7
6 #include /* copy input to output; 1st version */ main() { int c; c = getchar(); while (c != EOF) { putchar(c); c = getchar(); } (KR p16) File Copying (1)
8
7 #include /* copy input to output; 2nd version */ main() { int c; while ((c = getchar()) != EOF) putchar(c); } (KR p17) File Copying (2)
9
8 #include /* count characters in input; 1st version */ main() { long nc; nc = 0; while (getchar() != EOF) ++nc; printf("%ld\n", nc); } (KR p18) Character Counting (v1)
10
9 #include /* count characters in input; 2nd version */ main() { double nc; for (nc = 0; getchar() != EOF; ++nc) ; printf("%.0f\n", nc); } (KR p18) Character Counting (v2)
11
10 #include /* count lines in input */ main() { long c, nl; nl = 0; while ((c = getchar()) != EOF) if (c == '\n') ++nl; printf("%d\n", nl); } (KR p19) Line Counting
12
11 (KR p20) init S = {‘ ‘, ‘\n’, ‘\t’} c not in S c in S c not in S c in S exit c == EOF ++nw : for every state transition "out" to "in" inout State machine Word Counting if (c == ' ' || c == '\n' || c == '\t') state = OUT; else if (state == OUT) { state = IN; ++nw; } /* count lines, words, and characters in input */ while ((c = getchar()) != EOF) { ++nc; if (c == '\n') ++nl; main() { int c, nl, nw, nc, state; state = OUT; nl = nw = nc = 0; } printf("%d %d %d\n", nl, nw, nc); } #include #define IN 1 /* inside a word */ #define OUT 0 /* outside a word */
13
12 #include /* count digits, white space, others */ main() { int c, i, nwhite, nother; int ndigit[10]; nwhite = nother = 0; for (i = 0; i < 10; ++i) ndigit[i] = 0; (KR p22) Arrays (1 / declaration + initialization) 0123456789 index ndigitndigit[2]
14
13 while ((c = getchar()) != EOF) if (c >= '0' && c <= '9') ++ndigit[c - '0']; else if (c == ' ' || c == '\n' || c == '\t') ++nwhite; else ++nother; printf("digit ="); for (i = 0; i < 10; ++i) printf(" %d", ndigit[i]); printf(", white space = %d, other = %d\n",nwhite,nother); } (KR p22) Arrays (2 / algo + output) // c - '0': See ASCII table !
15
14 #include int power(int m, int n); // power: m,n m**n /* test power function */ main() { int i; for (i = 0; i < 10; ++i) printf("%d %d %d\n", i, power(2, i), power(-3, i)); return 0; } (KR p24) Functions (1 / main program)
16
15 /* power: raise base to n-th power; n >= 0 */ int power(int base, int n) { int i, p; p = 1; for (i = 1; i <= n; ++i) p = p * base; return p; } (KR p24) power (base, n) = base n Functions (2 / power function) Function call Diagram = base * base * … * base (n times)
17
16 /* power: raise base to n-th power; n >= 0; version 2 */ int power(int base, int n) { int p; for (p = 1; n > 0; -- n) p = p * base; return p; } (KR p27) Arguments – Call by Value Function call Diagram power (base, n) = base n = base * base * … * base (n times)
18
17 #include #define MAXLINE 1000/* maximum input line size */ int getline(char line[], int maxline); void copy(char to[], char from[]); /* print longest input line */ main() { int len; /* current line length */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ max = 0; while ((len = getline(line, MAXLINE)) > 0) if (len > max) { max = len; copy(longest, line); } if (max > 0) /* there was a line */ printf("%s", longest); return 0; } (KR p29) Character Arrays (1 / main)
19
18 /* getline: read a line into s, return length */ int getline(char s[], int lim) { int c, i; for (i = 0; i < lim-1 && (c = getchar())!= EOF && c!='\n'; ++i) s[i] = c; if (c == '\n') { s[i] = c; ++i; } s[i] = '\0'; return i; } /* copy: copy 'from' into 'to'; assume 'to' is big enough */ void copy(char to[], char from[]) { int i; i = 0; while ((to[i] = from[i]) != '\0') ++i; } (KR p29) Character Arrays (2 / getline + copy)
20
19 char s[7] = “Hello”; (KR p30) C String In C, a string is stored as an array of characters: containing the characters of the string and terminated with a ‘\0’ to mark the end Typical navigation for (i=0; s[i]!=‘\0’; ++i) { // Do some actions }
21
20 (KR p31) Scope of the variables Function Call Diagram int i=2; // global variable int f(int x) { int j=3; // local variable return i*j*x; } main() { int j=4, r1, r2; // local variables r1 = f(j); r2 = f(5*j); } A variable v1 declared inside any function, inclusive main(), is only known in that function, i.e. no other function can have direct access to it. A variable v2 declared outside any function is known and accessible everywhere. v1 is called a local or private variable, and v2 a global or public variable.
22
21 #include name #define name replacement text main() { } while (expression) statement for (expr1; expr2; expr3) statement if (expr1) statement1 else if (expr2) statement2 … else statement_n Return-type function-name (parameter declarations, if any) { declarations statements }Summary Definition. A statement is an expression followed by a semicolon or a sequence of 'expression;' surrounded by { }
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.