Top Banner

of 38

Week2.pptx

Apr 14, 2018

Download

Documents

Minh Tieu
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 7/27/2019 Week2.pptx

    1/38

    CS1010: Programming Methodologyhttp://www.comp.nus.edu.sg/~cs1010/

    http://www.comp.nus.edu.sg/~cs1101/http://www.comp.nus.edu.sg/~cs1101/
  • 7/27/2019 Week2.pptx

    2/38

    Week 2: Overview of C Programming

    Objectives: Able to create programs using the editorvim

    Able to execute your first program

    Understand basic C constructs, interactive input, output,

    and arithmetic operations

    Understand basic programming style

    CS1010 (AY2013/4 Semester 1)

    References:

    Chapter 1, Lessons 1.6 1.9

    Chapter 2 Variables, Arithmetic Expressions and Input/Output

    Vim Quick Reference Card:http://tnerual.eriogerg.free.fr/vimqrc.pdf

    Getting Started with UNIX:http://www.comp.nus.edu.sg/~cs1010/labs/2012/intro_lab/gettingStarted.html

    Week2 - 2

    http://tnerual.eriogerg.free.fr/vimqrc.pdfhttp://www.comp.nus.edu.sg/~cs1010/labs/2012/intro_lab/gettingStarted.htmlhttp://www.comp.nus.edu.sg/~cs1010/labs/2012/intro_lab/gettingStarted.htmlhttp://www.comp.nus.edu.sg/~cs1010/labs/2012/intro_lab/gettingStarted.htmlhttp://tnerual.eriogerg.free.fr/vimqrc.pdf
  • 7/27/2019 Week2.pptx

    3/38

    Week 2: Outline

    1. General

    2. Our first sample program

    3. Errors: syntax, run-time, logic, and undetected errors

    4. Demo: Getting your program to execute

    * Demo on ssh, basic UNIX commands* Exercise #1: Using vim and gcc

    5. Exercise #2: Temperature Convert

    6. Program structure as:* Input: scanf()* Compute: variables, data type, constants, precedence rules

    * Output: printf()

    7. Exercise #3: Temperature Estimate

    8. Style: naming, presentation, simplicity and efficiency

    9. Common mistakes

    CS1010 (AY2013/4 Semester 1)

    0. Algorithms (last week)

    Week2 - 3

    This symbol indicates the focus of todays lesson.

  • 7/27/2019 Week2.pptx

    4/38

    1. GeneralProgram:A sequence of instructions that a computer can interpret

    and execute. The instructions follow the rules of the

    language chosen.

    There are many types of programming languages: A to Z

    http://en.wikipedia.org/wiki/List_of_programming_languages_by_category

    C: A general-purpose computer programming language developedin 1972 by Dennis Ritchie at the Bell Telephone Lab for use with

    the UNIX operating system.

    We will follow theANSI C standard (see Lesson 1.3 in book for more

    details)

    CS1010 (AY2013/4 Semester 1)

    A+, APL, Ada Basic C, C#, C++ D, Delphi E, Eiffel

    F, Fortran, F# G, Haskell IDL, Io, ICI Java, JASS

    K, Lisp, Logo M, Maple Nimrod Oz

    Pascal, Python Q, R, RPG, Ruby Smalltalk, Scheme Tcl, Today

    uniPaaS Vimscript, VBA Winbatch X++, XL Y, Z++

    Week2 - 4

    http://en.wikipedia.org/wiki/List_of_programming_languages_by_categoryhttp://en.wikipedia.org/wiki/List_of_programming_languages_by_category
  • 7/27/2019 Week2.pptx

    5/38

    Edit, Compile and Execute

    Week2 - 5

    producesSource code

    welcome.cEditor

    eg: vim welcome.c

    producesExecutable code

    a.outCompiler

    eg: gcc welcome.c

    Executeeg: a.out

    producesHello,

    welcome to

    CS1010!

    Output

    CS1010 (AY2013/4 Semester 1)

    Incorrect

    result?

    Cannotcompile?

    Test, test, and test!

  • 7/27/2019 Week2.pptx

    6/38

    /*

    * Converts distance in miles to kilometres.*/#include /* printf, scanf definitions */#define KMS_PER_MILE 1.609/* conversion constant */

    int main(void) {float miles, // input distance in miles

    kms; // output distance in kilometres

    /* Get the distance in miles */printf("Enter distance in miles: ");scanf("%f", &miles);

    // Convert the distance to kilometreskms = KMS_PER_MILE * miles;

    // Display the distance in kilometresprintf("That equals %9.2f km.\n", kms);

    return0;}

    Week2_MileToKm.c

    2. Our First Program (1/4)

    CS1010 (AY2013/4 Semester 1)

    Samp le Run

    $ gcc Week2_MileToKm.c$ a.out

    Enter distance in miles: 10.5

    That equals 16.89 km.Week2 - 6

  • 7/27/2019 Week2.pptx

    7/38

    2. Our First Program (2/4)

    CS1010 (AY2013/4 Semester 1)

    General form of a C program:

    preprocessor directives

    main function heading{

    declarations

    executable statements

    }

    Week2 - 7

  • 7/27/2019 Week2.pptx

    8/38

    /*

    * Converts distance in miles to kilometres.*/#include /* printf, scanf definitions */#define KMS_PER_MILE 1.609/* conversion constant */

    int main(void) {float miles, // input distance in miles

    kms; // output

    distance in kilometres

    /* Get the distance in miles */printf("Enter distance in miles: ");scanf("%f", &miles);

    // Convert the distance to kilometres

    kms = KMS_PER_MILE * miles;// Display the distance in kilometresprintf("That equals %9.2f km.\n", kms);

    return0;}

    2. Our First Program (3/4)

    CS1010 (AY2013/4 Semester 1)

    preprocessor

    directives

    standard header file

    comments

    constant

    reservedwords

    variables

    functions

    special

    symbols

    punctuations

    Week2 - 8

  • 7/27/2019 Week2.pptx

    9/38

    2. Our First Program (4/4)

    CS1010 (AY2013/4 Semester 1)

    At the beginning

    memory

    Executable code of

    Week2_MileToKm.c

    miles

    ?

    ?

    kms

    After user enters: 10.5to

    scanf("%f", &miles);

    memory

    Executable code of

    Week2_MileToKm.c

    miles

    10.5

    ?

    kms

    After this line is executed:

    kms = KMS_PER_MILE * miles;

    memory

    Executable code of

    Week2_MileToKm.c

    miles

    10.5

    16.89

    kms

    Week2 - 9

    What happens in the computer memory?

    Do not assume that

    uninitialised variables

    contain zero! (Very

    common mistake.)

  • 7/27/2019 Week2.pptx

    10/38

    Notes (1/2)

    CS1010 (AY2013/4 Semester 1)

    Basic steps of a program1. Read inputs (scanf)

    2. Compute

    3. Print outputs (printf)

    We will stick to interactive inputs

    Standard input stream (stdin) default is keyboard

    Use scanf() function

    Assume input data are according to specification

    No need to validate input data, unless otherwise stated

    Outputs

    Standard output stream (stdout) default is monitor

    Use printf() function

    Week2 - 10

  • 7/27/2019 Week2.pptx

    11/38

    Notes (2/2)

    CS1010 (AY2013/4 Semester 1)

    Include to use scanf() and printf() functions

    Include the header file (for portability sake) even though some

    systems do not require you to do so

    Read

    Lessons 1.6 1.9

    Important! (CodeCrunch issue)

    Make sure you have a newline character (\n) at the end of your

    last line of output, or CodeCrunch may mark your output as

    incorrect.

    Week2 - 11

    printf("That equals %9.2f km.\n", kms);

  • 7/27/2019 Week2.pptx

    12/38

    3. Errors

    CS1010 (AY2013/4 Semester 1)

    Syntax Errors (and warnings)

    Program does not obey C construct /grammar such as invalid choice ofidentifier name, invalid expression, missing semi-colon, etc.

    Warning happens, for example, incomparable use of types for output

    We advise you to use gccWall to compile your programs

    Run-time Errors

    Program terminates unexpectedly due to illegal operation, such asdividing a number by zero

    Logic Errors

    Program produces result as opposed to what is expected (wrong

    algorithm)

    Undetected Errors Exist if we are not able to test all cases

    The process of correcting errors in

    programs is called debugging.

    This process can be very time-consuming!Week2 - 12

  • 7/27/2019 Week2.pptx

    13/38

    4. Demo: Getting Program to Execute (1/2)

    CS1010 (AY2013/4 Semester 1)

    Log into your UNIX account in sunfire

    Follow last weeks instructions (Logging into UNIX system)

    If this is your first time logging in (that is, you did not

    attend the Intro Workshop)

    Run the setup script as shown in section 2.4 Setting up your

    sunfire account ofhttp://www.comp.nus.edu.sg/~cs1010/labs/2012/intro_lab/gettingStarted.html:

    ~cs1010/workshop/setupsource .bash_profile

    Go to the c subdirectory This subdirectory should have been created if you have run the

    above setup step during the Intro Workshop

    Week2 - 13

    http://www.comp.nus.edu.sg/~cs1010/labs/2012/intro_lab/gettingStarted.htmlhttp://www.comp.nus.edu.sg/~cs1010/labs/2012/intro_lab/gettingStarted.html
  • 7/27/2019 Week2.pptx

    14/38

    4. Demo: Getting Program to Execute (2/2)

    CS1010 (AY2013/4 Semester 1)

    vim: an editor with no need of a mouse (setup .vimrc) insertvs commandmode

    Examples of commands: i, , dd, :w, ZZ, p, o

    The configuration file (.vimrc) is created and put into your home

    directory when you did the setup; it controls how your vim looks

    and works

    Compile: gcc filename.c Wall o filename gcc does compile-assembly-linking all in one go

    Executing a program: a.out or filename

    Exercise #1: Using vim and gcc Use vim to create the program Week2_MileToKm.c

    Correct/compile your program till it is free of (syntax) errors

    Execute and test your program till it is free of (run-time and logic)

    errors

    Week2 - 14

  • 7/27/2019 Week2.pptx

    15/38

    5. Exercise #2 (Fahrenheit to Celsius) (1/2)

    CS1010 (AY2013/4 Semester 1)

    Write a program to convert a temperature in degreesFahrenheit to degrees Celsius

    celsius = 5 / 9 * (fahrenheit 32)

    Use the vim editor to create Week2_FtoC.c

    Correct/compile your program till free of (syntax) errors

    Make sure your program is free of (run time, logic) errors Test on the following Fahrenheit degrees:

    32.5,0,-54.3,100 (and others of your choice)

    Sample output:

    Enter temperature in Fahrenheit: 32.5

    That equals 0.277778 Celsius.

    Week2 - 15

  • 7/27/2019 Week2.pptx

    16/38

    5. Exercise #2 (Fahrenheit to Celsius) (2/2)

    CS1010 (AY2013/4 Semester 1)

    Do you get the correct answers?

    (Optional) Format the number of output digits to 2 decimal places

    (Optional) Write another program to convert Celsius to Fahrenheit

    Enter temperature in Fahrenheit: 32.5

    That equals 0.277778 Celsius.

    Week2 - 16

  • 7/27/2019 Week2.pptx

    17/38

    6. Program Structure

    CS1010 (AY2013/4 Semester 1)

    A program has 3 main parts:

    (plus Preprocessor Directives: #include , #include )

    Input : through stdin (using scanf),or file input

    Compute: through arithmetic operations

    Output: through stdout(using printf), or file output

    Week2 - 17

    We will learn

    file input/output

    later.

  • 7/27/2019 Week2.pptx

    18/38

    6. Program Structure: Input/Output (1/2)

    Week2 - 18

    Input/output statements: printf ( format string, print list );

    printf ( format string );

    scanf( format string, input list );

    age

    20

    Address of variableage varies each

    time a program is

    run.

    CS1010 (AY2013/4 Semester 1)

    One version:

    int age;double cap; // cumulative average pointprintf("What is your age? ");scanf("%d", &age);printf("What is your CAP? ");scanf("%lf", &cap);printf("You are %dyears old, and your CAP is %f\n", age, cap);

    Week2_InputOutput.cAnother version:

    int age;double cap; // cumulative average pointprintf("What are your age and CAP? ");scanf("%d %lf", &age, &cap);printf("You are %dyears old, and your CAP is %f\n", age, cap);

    Week2_InputOutputV2.c

    age refers to value in the variable age.

    &age refers to (address of) the memorycell where the value ofage is stored.

  • 7/27/2019 Week2.pptx

    19/38

    6. Program Structure: Input/Output (2/3)

    CS1010 (AY2013/4 Semester 1)

    %d and %lf are examples offormat specifiers; they are

    placeholders for values to be displayed or readPlaceholder Variable Type Function Use

    %c char printf / scanf

    %d int printf / scanf

    %f float or double printf%f float scanf

    %lf double scanf

    %e float or double printf (for scientific notation)

    Examples of format specifiers used in printf(): %5d: to display an integer in a width of 5, right justified %8.3f: to display a real number (float or double) in a width of 8, with 3

    decimal places, right justified

    See Table 2.3 (page 65) for sample displays

    Note: Forscanf(), just use the format specifier without indicating

    width, decimal places, etc. Week2 - 19

  • 7/27/2019 Week2.pptx

    20/38

    6. Program Structure: Input/Output (3/3)

    CS1010 (AY2013/4 Semester 1)

    \n is an example ofescape sequence

    Escape sequences are used in printf() function for certain special

    effects or to display certain characters properly

    See Table 1.4 (pages 32 33)

    These are the more commonly used escape sequences:

    Escapesequence

    Meaning Result

    \n New line Subsequent output will appear on the next line

    \t Horizontal tab Move to the next tab position on the current line

    \" Double quote Display a double quote "

    %% Percent Display a percent character %

    Week2 - 20

    Note the error in Table 1.4. It should be %% and not \%

  • 7/27/2019 Week2.pptx

    21/38

    6. Program Structure: Compute (1/10)

    Week2 - 21

    Computation is through function So far, we have used one function: int main(void)

    main() function: where execution of program begins

    A function body has two parts

    Declarations statements: tell compiler what type of memory cellsneeded

    Executable statements: describes the processing on the memory

    cells

    int main(void) {

    /* declaration statements *//* executable statements */

    return 0;

    }

    CS1010 (AY2013/4 Semester 1)

  • 7/27/2019 Week2.pptx

    22/38

    6. Program Structure: Compute (2/10)

    CS1010 (AY2013/4 Semester 1)

    Declaration Statements (2 parts: data type & identifier)

    Part 1: Standard Data Types

    (data type: tells computer how to store a particular value in memory and what

    operations can be performed on the value.)

    int 32 bits, hence value between -2,147,483,648 (-231) through

    +2,147,483,647 (231 1) float (and double)

    an abstraction for real numbers (as it does not include all real numbers)

    3.14159

    15.0e-4 or 15.0E-4 (value is 0.0015)

    12e+5 or 12E+5 (value is 1200000.0)

    char individual character, which is a letter, a digit, or a special symbol

    enclosed in a pair of single quotes 'A' 'z' '2' '9' '*' '?' ' ' '\n'

    More data types later

    Week2 - 22

  • 7/27/2019 Week2.pptx

    23/38

    6. Program Structure: Compute (3/10)

    CS1010 (AY2013/4 Semester 1)

    Declaration Statements Part 2: Identifier:name of a variable or function

    Reserved words (orkeywords)

    e.g. int, void, double, return

    Standard identifiers e.g. printf, scanf

    User-defined identifiers

    Avoid reserved words and standard identifiers

    Consist only of letters, digit characters and underscores, and

    must not begin with a digit character

    Case-sensitive

    e.g. invalid:1Letter,double, int,TWO*FOUR,joes

    valid: maxEntries,_X1234,this_IS_a_long_name

    Week2 - 23

  • 7/27/2019 Week2.pptx

    24/38

    6. Program Structure: Compute (4/10)

    CS1010 (AY2013/4 Semester 1)

    Executable Statements I/O statements(e.g. printf,scanf)

    Assignment statements

    stores a value or a computational result in a variable

    (Note:= is notequality, but assignment)

    e.g. kms = KMS_PER_MILE * miles;

    Week2 - 24

  • 7/27/2019 Week2.pptx

    25/38

    6. Program Structure: Compute (5/10)

    CS1010 (AY2013/4 Semester 1)

    e.g. sum = sum + item;

    Week2 - 25

    Examples of invalid assignment (result in compilation errorlvalue

    required as left operand of assignment): 32 = a;

    a + b = c;

    Assignment can be cascaded, with associativity from right to left: a = b = c = 3 + 6; // 9 assigned to variables c, b and a

    The above is equivalent to: a = (b = (c = 3 + 6));

    which is also equivalent to:c = 3 + 6;

    b = c;

    a = b;

    Note: Left side of an

    assignment statement is

    called lvalue it must be

    assignable

  • 7/27/2019 Week2.pptx

    26/38

    6. Program Structure: Compute (6/10)

    CS1010 (AY2013/4 Semester 1) Week2 - 26

    Side Effect: An assignment statement does not just assigns, it also has the

    side effect of returning the value of its right-hand side

    expression

    Hence a = 12; has the side effect of returning the value of 12,

    besides assigning 12 to a Usually we dont make use of its side effect, but sometimes we

    do, eg:

    z = a = 12; // or z = (a = 12);

    The above makes use of the side effect of the assignment

    statement a = 12; (which gives 12) and assigns it to z Side effects have their use, but avoid convoluted codes:

    a = 5 + (b = 10); // assign 10 to b, and 15 to a

    Side effects also apply to expressions involving other operators

    (eg: logical operators). We will see more of this later.

  • 7/27/2019 Week2.pptx

    27/38

    6. Program Structure: Compute (7/10)

    CS1010 (AY2013/4 Semester 1)

    Arithmetic operations Binary Operators: +,, *, /, % (modulo or remainder)

    Left Associative (from left to right)

    46 / 15 / 2 3 / 2 1

    19 % 7 % 3 5 % 3 2

    Unary operators:+, Right Associative

    x = 23 p = +4 * 10

    Execution from left to right, respecting parentheses rule, and

    then precedence rule, and then associative rule (next page)

    addition, subtraction are lower in precedence than multiplication,division, and remainder

    Truncated result if result cant be stored (the page after next)

    int n; n = 9 * 0.5; results in 4 being stored in n.

    Week2 - 27

    Try out Week2_ArithOps.c

  • 7/27/2019 Week2.pptx

    28/38

    6. Program Structure: Compute (8/10)

    CS1010 (AY2013/4 Semester 1)

    Arithmetic operators: Associativity & Precedence (Table 2.6, Page 76)

    Week2 - 28

  • 7/27/2019 Week2.pptx

    29/38

    6. Program Structure: Compute (9/10)

    CS1010 (AY2013/4 Semester 1)

    Mixed-Type Arithmetic Operations

    int m = 10/4; means

    float p = 10/4; means

    int n = 10/4.0; means

    float q = 10/4.0; means

    int r = -10/4.0;means

    Type Casting

    Use a cast operatorto change the type of an expression

    syntax: (type) expression

    int aa = 6; float ff = 15.8;float pp = (float) aa / 4; means

    int nn = (int) ff / aa; means

    float qq = (float) (aa / 4); means

    Week2 - 29

  • 7/27/2019 Week2.pptx

    30/38

    6. Program Structure: Recall Exercise #2 (10/10)

    Week2 - 30CS1010 (AY2013/4 Semester 1)

  • 7/27/2019 Week2.pptx

    31/38

    7. Exercise #3 (temperature estimate) (1/2)

    CS1010 (AY2013/4 Semester 1)

    Write a program Week2_Freezer.c that estimates the temperature ina freezer (in oC) given the elapsed time (hours) since a power

    failure. Assume this temperature (T) is given by:

    where tis the time since the power failure.

    Your program should prompt the user to enter how long it has been

    since the start of the power failure in hours and minutes, both values

    in integers.

    Note that you need to convert the elapsed time into hours in real

    number (use type float). For example, if the user entered 2 30(2 hours 30 minutes), you need

    to convert this to 2.5 hours before applying the above formula.

    202

    42

    t

    tT

    Week2 - 31

  • 7/27/2019 Week2.pptx

    32/38

    7. Exercise #3 (temperature estimate) (2/2)

    CS1010 (AY2013/4 Semester 1)

    Refer to the sample run below. Follow the output format.

    Enter hours and minutes since power failure: 2 45Temperature in freezer = -13.63

    How long does it take the freezer to get to zero degree? Which of

    the following is the closest answer?

    a) 3 hours

    b) 4 hours 10 minutes

    c) 6 hours 30 minutes

    d) 8 hours

    This is your take-home exercise. Bring your program to class next

    week.

    This exercise is mounted on CodeCrunch as a practice exercise.

    Week2 - 32

  • 7/27/2019 Week2.pptx

    33/38

    8. Style

    CS1010 (AY2013/4 Semester 1)

    Identifier naming for variables and functions User-defined identifiers: use lower-case with underscore or capitalise

    first character of every subsequent word (Eg: celsius, sum,

    second_max, secondMax)

    User-defined constants: use upper-case (Eg: KMS_PER_MILE,

    DAYS_IN_YEARS)

    Use names that are descriptive

    Consistent indentation, and spacing to emphasize block structure

    int main(void) {

    // statements

    }

    Comments major code segments adequately:

    Your name, Matric. number, discussion group, programs purpose, etc.

    // line comment, or/* block comment */

    Refer to some C Style Guides on the module website

    http://www.comp.nus.edu.sg/~cs1010/2_resources/online.html

    Week2 - 33

    http://www.comp.nus.edu.sg/~cs1010/2_resources/online.htmlhttp://www.comp.nus.edu.sg/~cs1010/2_resources/online.html
  • 7/27/2019 Week2.pptx

    34/38

    9. Common mistakes

    CS1010 (AY2013/4 Semester 1)

    Not initialising variables

    Week2 - 34

    int a, b;a = b + 3; // but what is the value of b?

    int x = 0;x = 531;

    Unnecessary initialisation of variables

    int x = 0;scanf("%d", &x);

    Forgetting & in a scanf() statement

    Cannot assume that the

    initial value of b is zero!

    int x;

    scanf("%d", x);

    Sometimes when your program crashes, a core dump may

    happen. Remove the file core (UNIX command: rm core) in your

    directory as it takes up a lot of space.

  • 7/27/2019 Week2.pptx

    35/38

    Summary for Today

    Using vim to edit programs.

    Using gcc to compile C programs.

    Learn about basic structure of C programs: Input (scanf)

    Compute Output (printf)

    Learn about some data types, arithmetic operations,

    and assignment statements.

    CS1010 (AY2013/4 Semester 1) Week2 - 35

  • 7/27/2019 Week2.pptx

    36/38

    Announcements/Things-to-do

    Do Exercise #3 Discussion classes start in week 3 (next

    week).

    Check out IVLE regularly for announcements

    and updates.

    Revise Chapters 1 and 2

    To prepare for next weeks lecture:

    Bring your Exercise #3 program Week2_Freezer.c Read

    Chapter 3 The Basics of C

    Chapter 5 Functions

    CS1010 (AY2013/4 Semester 1) Week2 - 36

  • 7/27/2019 Week2.pptx

    37/38

    Next Week On how to design a bigger program from problem

    definition

    Lots about functions, besides the main function

    CS1010 (AY2013/4 Semester 1)

    Analysis

    Design

    Implementation

    Testing

    Determine

    problem features

    Write algorithm

    Produce code

    Check for correctness

    and efficiency

    Rethink as

    appropriate

    Week2 - 37

  • 7/27/2019 Week2.pptx

    38/38

    End of File