1 / 22

Prof. Béat Hirsbrunner Ammar Halabi, PhD student (exercises)

Imperative & System Programming IN.3011 – Systemnahe Programmierung IN.3011 – Programmation proche du système. Bachelor students : Major in computer science (3rd semester) Minor in computer science Optionnal course JMCS Gateway students :

carver
Download Presentation

Prof. Béat Hirsbrunner Ammar Halabi, PhD student (exercises)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Imperative & SystemProgramming IN.3011 – SystemnaheProgrammierungIN.3011 – Programmationprochedusystème • 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 Prof. Béat Hirsbrunner Ammar Halabi, PhD student (exercises) Dani Rotzetter, Master student (exercises) Prerequisite: Basic knowledge of a programming language, e.g. Java University of Fribourg, Department of Informatics Autumn Semester 2012, www.unifr.ch/diuf/pai/ip

  2. Hello World • #include <stdio.h> • main() • { • printf("hello, world\n"); • } % gcc -o hello hello.c // Compile hello.c % ./hello // Run hello % gcc hello.c // Compile hello.c % ./a.out // Run a.out Imperative and System Programming, B. Hirsbrunner, Lecture 1 – 19 September 2012Course organization: ~30’; Unix Tutorial: ~60’; C Tutorial: ~20’; KR – Chap 1: ~70’ (KR p6)

  3. Variables and Arithmetic Expressions (1) • #include <stdio.h> • /* 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)

  4. Variables and Arithmetic Expressions (2) • #include <stdio.h> • /* 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; • } • } (KR p12)

  5. The For Statement • #include <stdio.h> • /* 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)

  6. Symbolic Constants • #include <stdio.h> • #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)

  7. File Copying (1) • #include <stdio.h> • /* copy input to output; 1st version */ • main() • { • int c; • c = getchar(); • while (c != EOF) { • putchar(c); • c = getchar(); • } • } (KR p16)

  8. File Copying (2) • #include <stdio.h> • /* copy input to output; 2nd version */ • main() • { • int c; • while ((c = getchar()) != EOF) • putchar(c); • } (KR p17)

  9. Character Counting (v1) • #include <stdio.h> • /* count characters in input; 1st version */ • main() • { • long nc; • nc = 0; • while (getchar() != EOF) • ++nc; • printf("%ld\n", nc); • } (KR p18)

  10. Character Counting (v2) • #include <stdio.h> • /* count characters in input; 2nd version */ • main() • { • double nc; • for (nc = 0; getchar() != EOF; ++nc) • ; • printf("%.0f\n", nc); • } (KR p18)

  11. Line Counting • #include <stdio.h> • /* count lines in input */ • main() • { • long c, nl; • nl = 0; • while ((c = getchar()) != EOF) • if (c == '\n') • ++nl; • printf("%d\n", nl); • } (KR p19)

  12. Word Counting #include <stdio.h> #define IN 1 /* inside a word */ #define OUT 0 /* outside a word */ State machine /* count lines, words, and characters in input */ main() { int c, nl, nw, nc, state; state = OUT; nl = nw = nc = 0; c not in S c in S c not in S out in init c in S while ((c = getchar()) != EOF) { ++nc; if (c == '\n') ++nl; c == EOF c == EOF exit exit if (c == ' ' || c == '\n' || c == '\t') state = OUT; else if (state == OUT) { state = IN; ++nw; } S = {‘‘, ‘\n’, ‘\t’} ++nw : for every state transition "out" to "in" } printf("%d %d %d\n", nl, nw, nc); } (KR p20)

  13. Arrays(1 / declaration + initialization) ndigit ndigit[2] index 0 1 2 3 4 5 6 7 8 9 • #include <stdio.h> • /* 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)

  14. Arrays(2 / algo + output) • 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); • } // c - '0': See ASCII table ! (KR p22)

  15. Functions(1 / main program) • #include <stdio.h> • 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)

  16. Functions(2 / power function) power (base, n) = basen = base * base * … * base (n times) • /* 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; • } Function call Diagram (KR p24)

  17. Arguments – Call by Value power (base, n) = basen = base * base * … * base (n times) • /* 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; • } Function call Diagram (KR p27)

  18. Character Arrays(1 / main) • #include <stdio.h> • #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)

  19. Character Arrays(2 / getline + copy) • /* 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)

  20. 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 • char s[7] = “Hello”; Typical navigation for (i=0; s[i]!=‘\0’; ++i) { // Do some actions } (KR p30)

  21. Scope of the variables 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. Function Call Diagram (KR p31)

  22. #includename #definenamereplacementtext main() { } Summary while (expression) statement for (expr1;expr2;expr3) statement if (expr1) statement1 else if (expr2) statement2 … else statement_n Return-typefunction-name(parameter declarations, if any) { declarations statements } Definition. A statement is an expression followed by a semicolon or a sequence of 'expression;' surrounded by { }

More Related