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.pdf7/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_category7/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.html7/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.html7/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