Computer Programming: Skills & Concepts (INF-1-CP1) the C Programming Language: 2

Computer Programming: Skills & Concepts (INF-1-CP1) the C Programming Language: 2

Computer Programming: Skills & Concepts (INF-1-CP1) The C Programming Language: 2 28th September, 2010 CP1–4 – slide 1 – 28th September, 2010 Tutorials I Start in week 3 (next week!) I Tutorial groups can be viewed from the appropriate webpage: https://www.inf.ed.ac.uk/admin/itodb/mgroups/stus/cp1.html I Contact the ITO if your tutorial group clashes with another lecture, or if you have not been assigned to any group (and are officially registered for CP1). CP1–4 – slide 2 – 28th September, 2010 Summary of Lecture 3 I Edit → Compile → Run cycle. I “Hello World” example. I Mistakes. CP1–4 – slide 3 – 28th September, 2010 printf I To output text to the screen: (\n means ‘newline’): printf("This text will be output\n"); I To write out a variable: printf("The number is %d \n",number); %d is a placeholder meaning “print the next argument here” % introduces placeholders, d means “print an integer in decimal” I To write several numbers, use several placeholders in order: printf("x is %d, and y is %d\n", x, y); CP1–4 – slide 4 – 28th September, 2010 Overview I Maths in C. I Basic numeric types: double and int. I Numeric variables. I Common problems. CP1–4 – slide 5 – 28th September, 2010 Today’s problem Convert pre-decimal British money to decimal We know: I The number of old pence in a shilling (12) and old pence in a pound (240). I The number of new pence in a pound (100). How to compute £4 7/8 in decimal? Always do financial arithmetic with integers! CP1–4 – slide 6 – 28th September, 2010 C program #include <stdio.h> #include <stdlib.h> const int OLD_PENCE_PER_SHILLING = 12; const int OLD_PENCE_PER_POUND = 240; const int NEW_PENCE_PER_POUND = 100; int main(void) { int pounds, shillings, oldpence, newpence; pounds = 4; shillings = 7; oldpence = 8; oldpence = oldpence + shillings * OLD_PENCE_PER_SHILLING; newpence = ( oldpence * NEW_PENCE_PER_POUND ) / OLD_PENCE_PER_POUND; printf("%d %d/%d in old money ", pounds, shillings, oldpence); printf("is %d.%d in new money.\n", pounds, newpence); return EXIT_SUCCESS; } CP1–4 – slide 7 – 28th September, 2010 Integer arithmetic in C Why did we write newpence = ( oldpence * NEW_PENCE_PER_POUND ) / OLD_PENCE_PER_POUND; instead of newpence = oldpence * ( NEW_PENCE_PER_POUND / OLD_PENCE_PER_POUND ); Integer arithmetic is all integer – no fractions! (92 ∗ 100)/240 = 9200/240 = 38, but 92 ∗ (100/240) = 92 ∗ 0 = 0 Very common mistake – watch for it. CP1–4 – slide 8 – 28th September, 2010 The int type in C I An integer (whole number): I for example, 1, 2, −16000, 0; 3 31 31 I 2 2 possible values {−2 ,..., 2 − 1}: I Some types of computer are more limited; 31 I 2 = 2, 147, 483, 648. I Fully accurate within this range; I Often used in indexing and status codes; I Print with printf("%d", integerVariable). I Arithmetic operations: I plus: 12 + 7 = 19 I minus: 12 − 7 = 5 I times: 12 ∗ 7 = 84 I divides: 12 / 7 = 1 (integer division!) I remainder: 12 % 7 = 5 (N.B. x = (x / y) ∗ y + (x % y) always.) CP1–4 – slide 9 – 28th September, 2010 Precedence (of arithmetic operators) oldpence = oldpence + shillings * OLD_PENCE_PER_SHILLING; Means oldpence = oldpence + ( shillings * OLD_PENCE_PER_SHILLING ); Not oldpence = ( oldpence + shillings ) * OLD_PENCE_PER_SHILLING; Precedence-based evaluation I Multiplication (*), division (/) and remainder (%) are evaluated before addition (+) and subtraction (−). I Use parentheses to force an evaluation order I If in any doubt, USE PARENTHESES! or just use them all the time! CP1–4 – slide 10 – 28th September, 2010 Variables in C Variables are “boxes” to store a value I Bit like variables in mathematics (may have varying assignments); I A C variable holds a single value; I Have to define what type of item a variable will hold, eg: int x; or int x = 2; I In C, the value can change over time as a result of program statements which act on the variable, eg: x = x + 1; VITAL TO REMEMBER: In C, a single equals sign = always means ‘gets set to’; it never means ‘is equal to’. Beware when people are mixing mathematical notation and C notation. With gcc -Wall, the compiler will warn you any time it sees an = where it thinks you probably meant ‘is equal to’ (==), but it’s not telepathic. CP1–4 – slide 11 – 28th September, 2010 Updating Variables int n; <-- n is declared as int n = 2 * n; <-- n is doubled (from what? ERROR) n = 9; <-- n gets the value 9 n = n + 1; <-- n gets the value 9+1, ie 10 n = 22 * n + 1; <-- n gets the value ? ++n; <-- n gets the value ? n++; <-- n gets the value ? CP1–4 – slide 12 – 28th September, 2010 Swapping Values Aim: Swap the values of x and y int x = 5; int y = 10; x = y; y = x; CP1–4 – slide 13 – 28th September, 2010 Swapping Values (Wrong) Aim: Swap the values of x and y int x = 5; int y = 10; x = y; y = x; CP1–4 – slide 14 – 28th September, 2010 Swapping Values (Correct) int x = 5; int y = 10; int temp; temp = x; x = y; y = temp; We used an auxiliary variable (“box”) to temporarily store x CP1–4 – slide 15 – 28th September, 2010 Variable Names (Identifiers) I Can be a letter, underscore, or a digit I BUT first character CANNOT be a digit! I See section 2.2 and 2.5 of “A Book on C” OK: EXIT SUCCESS, Celsius, t0, n. Not OK: hyper-modern, J@inf, 4tet. CP1–4 – slide 16 – 28th September, 2010 Identifiers in Practice I Use meaningful names I (maybe) follow some convention: I FunctionNames I variableNames I CONSTANT VALUES I The particular convention is not so important ... But one convention per program please! If you’re modifying someone else’s program, follow their convention, even if it’s silly. CP1–4 – slide 17 – 28th September, 2010 C program again #include <stdio.h> #include <stdlib.h> const int OLD_PENCE_PER_SHILLING = 12; const int OLD_PENCE_PER_POUND = 240; const int NEW_PENCE_PER_POUND = 100; int main(void) { int pounds, shillings, oldpence, newpence; pounds = 4; shillings = 7; oldpence = 8; oldpence = oldpence + shillings * OLD_PENCE_PER_SHILLING; newpence = ( oldpence * NEW_PENCE_PER_POUND ) / OLD_PENCE_PER_POUND; printf("%d %d/%d in old money ", pounds, shillings, oldpence); printf("is %d.%d in new money.\n", pounds, newpence); return EXIT_SUCCESS; } CP1–4 – slide 18 – 28th September, 2010 Type Modifiers: const const tells the compiler “this variable should never change” const int OLD_PENCE_PER_SHILLING = 12; const variables must be assigned at declaration ... the = is mandatory Why use const variables? I To avoid mistakes typing the same number over and over. I To make the program easier to read. I Because some constants are not so constant . CP1–4 – slide 19 – 28th September, 2010 Questions CP1–4 – slide 20 – 28th September, 2010.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    20 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us