Title: Introduction to Computing
1Introduction to Computing
- Programming is an activity that is carried out
through some programming language. Here the
programming language we use is called C.
Programming is instructing the computer how to
solve a computational problem. In a
computational problem, there will be some input
, and for each input there is some desired
output . A program instructs how to obtain
the desiredoutput from the given input.
2Notion of a program
- A program is a sequence of instructions to the
computer. - For example, a program for adding two numbers may
be that sequence of instructions which tells the
computer how to carry out the algorithm for
addition we had learnt in school. - Given any two numbers to be added, the computer
executes the program to find the result. - Here the input is the two numbers, and the
output is their sum.
3Other examples
- A more complex example of a computational problis
the monthly pay-bill computation. - Here, the input is various data about the
ployees of a firm--- their attendance record,
overtime record, salary, overtime rate etc. - The output is the amount to be paid to each
ployee. - The program bodies the method of computing
monthly salary.
4- A program is a series of easy to follow steps
-
- A computer knows how to carry out some simple
instructions. - Let us explain this idea by an example.
- Suppose we have a computer that knows how to
carry out the instruction - drawline (x1, y1, x2, y2)
-
- (x1, y1) and (x2, y2) are co-ordinates of any two
points on the screen. - This instruction makes the computer draw on
the screen a straight line from point (x1, y1)
to point (x2, y2).
5- Complex tasks from simple tasks
- The four instructions below
- drawline ( 0, 0, 0,10)
- drawline ( 0,10,10,10)
- drawline (10,10,10, 0)
- drawline (10, 0, 0, 0)
- when executed, will draw a square on the screen.
- Thus by performing a series of simple
instructions, each drawing a straight line, we
have managed to get a more complex task, drawing
a square, done.
6Programming language C
- The programming language C provides a set of
instructions. - A program in C is a sequence of such
instructions. - C is complete if a computational probl does
- have a solution, then it is possible to write a C
program for the probl. - Examples of other programming languages Fortran,
Basic, Cobol, Pascal, Prolog, - Lisp, C etc.
- Moreover, it is easy to pick up many other
languages once you know C.
7Basic Notions
- Now we introduce certain basic notions
likethe notion of variables. We also discuss
some basic kinds of instructions-- you will see
their parallels in C shortly. - Using these instructions, we shall write a
programand discuss how the program works. This
is not a C program but we hope it will prepare
you for your first C program that you will see
shortly.
8Variables
- A fundamental notion in languages like C is the
notion of variables. A non-trivial program will
have a number of variables. Each variable has a
name, like x, tp, etc. as given by the
programmer. At any time a variable has a
value, and the value of the variable, in general,
changes as the program executes. Recall that
we said that a program is a sequence of
instructions. It is these instructions which
change, update, and/or test values of variables.
9Expressions, assignment
- Suppose a program has the variables x, y,
z, and tp.Let us say that these variables have
values 5, 3, -9, and 50.Consider - 2 ( x y ) tp This is an
expression, and it evaluates to a value, in this
case, its value is 66. A fundamental
instruction is assignment which assigns the value
of an expression to a variable.The general form
of assignment instruction is - variable expressionwhich tells the computer
to first evaluate expression to get a value,
and then assign this value to the variable.
10Sequencing of instructions is important
- Remember that executing a program is
executing a sequence of instructions, which is
what the program is. - A program starts its execution by first executing
the first instruction, then the second
instruction, and so on. - Execution of the program ends when there are no
more instructions left to be executed. - The order of sequencing of instructions is
important. For example, the effect of two
sequences. - Sequence 1
- y x y x x 1
11Sequencing is important cont'd
- and Sequence 2
- x x 1
- y x y
- are different, even though both have the same
two assignments. To see this, suppose we start
with the case x has 3, y has 5. - Then effect of sequence 1 isx has 4, y has
8.But the effect of sequence 2 will result in
x has 4, y has 9.
12Other kinds of instructions
- There are instructions which do something if some
condition holds. - For example, if ( x y ) z z 1 The
effect of this instruction is to increment z by 1
only if x and y both have the same value,
otherwise no value gets changed. An example of
another form of such a conditional instruction is
if ( x y ) z z 1 else z z
- 1 This instruction increments z by 1 if x and
y have same value, else it decrements z by 1.
13Expressions evaluating to true/false
- In the above
-
- ( x y )
- is also an expression its value is, however,
- not a number but true or false.Such expressions
are called boolean expressions
14Iterative Instructions
- In a program, some action might need to be
repeated till some condition is met. Iterative
instructions help us in achieving this. One
important instruction in this class has the form
while( B ) S - where B is a boolean expression, and S is a
sequence of one or more instructions. On reaching
such a statement, first B is tested, if false
nothing gets done. But if B is true, S is done,
and then B is tested again. If false, the work is
over, otherwise S is done again, and so on. S
gets done repeatedly till B becomes false.
15Example
- Here is a program', (not in C) using
instructions - that we have seen.
- a x b y while( a ! b )
if( a gt b ) a a - b else b b - a
How do we understand what this program is
doing? We can see that there are four variables,
x, y, a, and b, and the instructions modify a and
b.To understand what the program does, we need
to observe how the values of the variables
change.
16When to observe
- To see changes, we would like to observe the
values of variables just before and just after
each instruction.But after an instruction,
usually, another instruction follows.Therefore,
we observe the variables just before an
instruction is about to be executed.
17Example cont'd
Observation time Where in program x y a b
1 Before 1st instn. 4 6
2 Before 2nd instn 4 6 4
3 About to test a!b 4 6 4 6
4 About to test agtb 4 6 4 6
5 About to test a!b 4 6 4 2
6 About to test a gt b 4 6 4 2
7 About to test a!b 4 6 4 2
18Example Contd
- When both a, b have the same value, (here it was
2), the test in while instruction evaluates to
false. That ends the while instruction. After
this, our example program had no other
instructions to execute, therefore, the execution
of the program ends.What we have done is to
hand-execute the program. The final value of a in
this case is 2.Had we started with x as 12 and y
as 8, the final value of a would have been 4.In
general, the final value of a will be the gcd of
x and y, provided both are greater than
0.Therefore, the program is doing something
useful! To compute gcd of x and y, we can execute
the program, and print the final value of a as
the result.
19Programming Language C
- Now, we shall discuss a problem which is to be
solved using the computers. - We shall design a method to solve the problem,
and then implement the method using a C program.
20A problem
- Arrange a list of n numbers a1, a2, a3, ..., an
in ascending order. - A solution Using Insertion sort.
- What is Insertion sort?
- Insertion sort works as follows we look at the
numbers one by one, maintaining the numbers
already seen in sorted order. Each new number is
inserted into its proper place in this sorted
list so that the sorted order is preserved.
21A solution cont'd.
- Suppose the given list of numbers is 5, 7, -3,
2, 20. - Following the idea above, we obtain the
following sorted lists increntally5 ( after
inserting 5 into its proper place in an pty list
!) 5, 7 (after inserting 7 ...)-3, 5, 7 (after
inserting -3 ...)-3, 2, 5, 7 (after inserting
2...)-3, 2, 5, 7, 20 (after inserting
20....)Finally, we obtain a sorted list of all
the numbers.
22A program for insertion sort
- We address the problem of designing a program
for insertion sort. The approach that we shall
adopt is one of handling complexity by adding
details incrementally. This is popularly known
as the top-down or stepwise refinement
approach to programming. - A first cut in a top-down approachStep1
Read listStep2 Insert-Sort listStep3
Print list
23A program for insertion sort cont'd.
- Top-down approach A second cut
- .
- .
- Step 2 for i 1 to n do insert ai
into sorted(a1, a2, ..., ai-1),
by linear search from the high-end . - .
24A program for insertion sort cont'd.
- Top-down approach A third cut
- To insert ai we first claim space for it to
the right of ai-1 and propagate it left if
necessary. - Step 2 for i 2 to n do set ai-1 as
current element while (position not found) do
if no more elements insert ai and
report position found
25Full-fledged C-program
- include ltstdio.hgtmain() int n / number
of elements to sort / int i, j / loop
counters / int key / element to insert /
int a15 / storage for list / / read
in the list /
26Full-fledged C program cont'd.
- scanf("dn", n)
- /n is the number of integers to be sorted /
- for (i0 iltn i) scanf("d", ai)
/read in the numbers // find the correct
position of key, that is aj, / - /in the sorted list a0,a1, ... ,aj-1
/ - for (j1 jltn j) / initialize while-loop
variables / key aj ij-1
27Full-fledged C program cont'd.
- while (i gt 0 ai gt key) ai1
ai i i - 1 - / insert key in the correct
position / ai1 key / print the
sorted list / for (i0 iltn i)
printf("d\n", ai)
28Variables and constants
- Data that can be changed by the actions in a
program are called variables. - Variables have names and locations in mory
corresponding to these names, that store the
associated values. - Data that cannot be changed by the actions in a
program are called constants. - There may or may not be (symbolic) names
corresponding to constants.
29Names in C
- These are a combination of letters, digits and
underscore, beginning with a letter. - At most 31 characters long
- Case-sensitive
- Variable names in lower case
- Names of symbolic constants in upper case
- Keywords like else, if... cannot be used
- Examples of valid names abc, a_bc, a12,
a_1_b, ABc, A_Bc, PI, .... - Some invalid ones are a-bc, 1ab, A b, ....
30Basic types in C
- The type of a variable indicates the values that
it can assume - Among other things, we need different types of
variables to be able to handle different types
of data - In C, we have variables of the following basic
types - char The type char corresponds to the
set of all possible 8-bit (that is a byte)
values. - int The type int denotes the set of
values that can be stored in a number of bits
equal to the host machine's word size.
31Basic types in C cont'd.
- float The type float corresponds to the set
of floating-point numbers that can be represented
in the host machine. - double The type double corresponds to the set
of double-precision floating-point numbers that
can be represented in the host machine.
32Qualified types
- We get more types by qualifying the basic types
- signed, unsigned, long, short int
- give us eight different ways of prefixing
the type int. - For example, signed long int, short int
etc. - signed, unsigned char
- give us two different ways of prefixing the
type char. - For example, signed char
- long double
- We can prefix the type double by long
33Constants
- Like variables, we also have different types of
constants. - Numerical constants are of the types
- integers For example, 123, -12354 etc.
- integers suffixed with u, U l, L 123457L or
1234567l is of type long int - 1234567uL is of type unsigned long
- integers in octal and hex representation
- An octal integer constant is prefixed with 0
- a hexadecimal integer constant with 0x or 0X
- 077 is the octal equivalent of 63, while
0xAF is the hexadecimal equivalent of 175. These
can also be suffixed with u, U and l, L. - For example, 077777U is an unsigned octal
constant.
34Constants cont'd
- String constants These are a sequence of 0 or
more characters put inside double quotes. For
example, "I am going. - Enumeration constants We can define our own
type, by associating a name with this type and
explicitly enumerating the associated set. - A constant of the enumerated type is one of a
list of values of such an explicitly enumerated
type. For example, - enum hotmonths MAY, JUNE, JULY, AUGUST
- is an enumerated type. MAY, JUNE, JULY,
AUGUST are enumerated (symbolic) constants in
this list whose values are 0, 1, 2, 3
respectively.
35Declarations
- What are declarations?
- A C program is made up of declarations,
followed - by statements. In the declarations part we
describe - the data, that is, choose suitable names and
types for the data. - For example
- int lower, upper, step
- char c, line100
36Declarations Contd
- Why declarations ?
- The most important reason is that declarations
enable a compiler to check that the actions that
are being performed on this data are indeed
permissible. The technical term for this is
type-checking. -
- It also enables a programmer to control the
life-time (or scope) of any data.
37Operators, Expressions, and Statements
- Operators allow us to manipulate the data
represented by constants and variables - Arithmetic operators , , /, -, .
- The first four are the familiar plus, product,
division, subtraction while the last is
themodulus operator - a b gives the remainder
in the division of a by b.
38Precedence of operators
- Operators are used with variables and constants
to build up expressions. For example, a b - 2
is an expression. In the presence of several
operators in any expression, the rules that tell
us the order in which to do the operations are
called precedence rules. - The precedence of binary , - are the same so
are those of , /, the unary and - also
have the same precedence. The first group has
lower precedence than the second which in turn
have lower precedence than the third. - In cases of equal precedence, arithmetic
operators associate from left to right. With
these rules, the expression 2 3 - 4evaluates
to 2 instead of -2.
39Relational Equality Operators
- Relational lt, lt, gt
- Equality , !
- Equality operators have higher precedence than
relational but lower than arithmetic operators. - Evaluation of the expression
- 2 lt 3 ! 5
- gives us 0 (which is the value of false in C)
40Logical operators
- The relational operators give us relational
expressions which are combined using the
logical operators and (), or (), not (!) - For example, in the expression i gt 0 ai
gt keyprecedence order is gt, gt, - The precedence of is lower than that of
while both have lower precedence than the
equality operators. - The unary operator ! converts a non-zero
operand true into false ( 0), and a 0 operand
into 1.
41Operators cont'd
- Increment operator
- it is a unary operator which can be prefixed or
suffixed to its operand. The effect is to
increase the value of itsoperand by 1. Thus the
effect of both n and n is to increase n
by 1. - Decrement operator - -
- it is a unary operator which can be prefixed or
suffixed to its operand. The effect is to
decrease the value of itsoperand by 1. Thus the
effect of both --n and n-- is to decrease n
by 1.
42Expressions
- An expression is made up of variables, constants
and operators. - An arithmetic expression evaluates to a numerical
value. A boolean expression is either a
relational expression or a logical expression
that evaluates to true or false. - For example, if a, b, c are all of type int
then - a b - c is an arithmetic expression, a
! b is a relational one and - (a lt b) (b gt c) is a logical expression.
43Expressions cont'd.
- An assignment expression has the form
- variable expressionThe value of such an
expression is the value of its left-operand,
obtained by evaluating the expression on the
right. Thus as a result of the assignment x
5 2 x has the value 7.
44statements
- A statement causes an action to be carried out.
- In C, statements are either expression
statements, compound statements or control
statements. - Expression statement
- This is an expression, terminated by a semicolon.
For examplea 3 c a b n
45statements cont'd.
- Compound statements
- These consist of several statements enclosed with
a pair of braces For example while (i gt 0
ai gt key) - ai1 ai i i - 1
- Control statements
- We will discuss these later.
46Operators Once More
- Assignment operator This has the form op.
The assignment expression n n 2 can be
written as n 2.As such n and 2 become the
operands of the operator .In general, if op
is a binary operator, we have expr1 expr1
op expr2,which can be written as expr1 op
expr2so that expr1 and expr2 are the operands
of the operator op which we call the
assignment operator.
47The sizeof operator
- The sizeof operator operates on either a variable
name, or a type name. - It gives the number of bytes occupied by the
givenvariable, or any variable of the given type
respectively. - For examplesizeof(int)would have the value 4.
48Precedence among operators
- Operators Associativity
- ( ) left to right !
-- - type sizeof right to left /
left to right - left to right lt
lt gt gt left to right ! left to
right left to right left to
right ? right to left - /
left to right - The precedence decreases from the top to
thebottom of the table.
49Type conversions
- The constituent variables and constants in an
expression can be of different types. Then the
question that naturally arises is what is the
type of the value of an expression. - For example, if in the expression a b, a
is of type int and b is of type float, then
what is the type of the sum? - Type conversion rules tell us what should be the
type of the sum. We address these questions in
the next couple of slides.
50Type conversions cont'd.
- Implicit type conversionsSuch conversions in C
take place in several contexts. - In arithmetic operations
- When operands of an arithmetic operator have
different types.For example, if a is of type
int and b is of type char then the type of the
result of a b is int. - The general rule here is that 'a lower' type is
elevated to 'a higher' type.
51Type conversions cont'd.
- Across assignments
- In an assignment expression the right-hand side
is first evaluated the returned value is the
value of the left-hand side and also the value
of the assignment expression. The type of the
left-hand side and that of the assignment
expression is the type of the right hand side. - For example,if x is of type int and i is of
char then as a result of the assignment x i,
x becomes of type char.
52Type conversions cont'd
- Explicit type conversions This is done by using
the cast operator. The syntax is (type-name)
expressionThe meaning is that the type of the
expression is changed to the type specified
within round-brackets. For example, - sin((float) n)
- converts the value of n to type float
before passing it on to sin.
53Input and Output
- Basic Input Output Functions
- printf
- scanf
- getchar
- putchar
54printf
- It is a function in the standard library
ltstdio.hgt - It converts internal values to charactersThe
syntax is printf( format string, arg1,
arg2,...) - The format string contains, within double
quotes, formatting information for the arguments
to be printed viz., arg1, arg2,.. - There is one group of characters for each
argument. - Each such group contains a percentage sign ,
followed by a conversion character
55printf cont'd.
- For example, in the insertion sort program, we
had - printf("d\n", ai)In this case, we had only
one argument ai, and its formatting
information is given by d, indicating that
ai is a decimal integer. The \n indicates that
after printing ai we should move to a newline.
56printf examples
- include ltstdio.hgtmain()
- char line20 ramanujam" int x
123 float y 123.45printf("d f s", x, y,
line) - Output
- 123 123.449997 ramanujam
57printf examples
- include ltstdio.hgtmain()
- int i 12345, j -13579, k -24680long
ix 123456789short sx -2222unsigned ux
5555float a 2.2, b -6.2 - printf("d d d ld d u\n", i, j, k, ix, sx,
ux)printf(" i 3d j 3d 3d \n", i, j,
k)printf(" 4.2f 7.1f \n", a, b) Output - 12345 -13579 -24680 123456789 -2222 5555
- i 12345 j -13579 -24680 2.20
-6.2
58printf cont'd.
- We can summarise the formatting specifications
as follows - Each conversion specification begins with a
and ends with a conversion character. Between
the and the conversion character there may be,
in order A minus sign, which specifies left
adjustment of the converted argument A number
that specifies the minimum field width A period,
which separates the field width from the
precision A number that specifies the precision
An h if the integer is to be printed as short
or l if as long
59scanf
- This is a function in the standard library
ltstdio.hgt. - It reads characters from standard input The
syntax is scanf( format string, arg1,
arg2,...) - The format string contains, within double
quotes, formatting information for the way the
arguments are to be stored - It controls how arguments are stored
- There is one group of characters for each
argument - Each such group contains a percentage sign ,
followed by a conversion character
60scanf cont'd.
- Note that each argument is an address, indicating
where in the mory the corresponding argument is
to be stored - For example, in the insertion sort program we
had scanf("d\n", n)the count of numbers to
be read in. - In this case we had only one argument n, and
itsformatting information is given by d,
indicating that n is to be stored as a decimal
integer. Once again the \n indicates that
after reading n we should move to a newline.
61scanf examples
- include ltstdio.hgtmain() char line20
int x float y scanf("d f s", x, y,
line)
62scanf examples cont'd
- The following data it can be entered during
execution 12345 0.05 ramanujamor even one
per line as123450.05ramanujam - Note that we have a different conversion
character for each of the three different
argument types
63scanf examples cont'd.
- If we input the following data from the
terminal 10 256.875 TAfter executing the
following program include ltstdio.hgtmain() - char c int i float x scanf("3d 5f
c", i, x, c) - 10 will be assigned to i, 256.8 to x and
the character 7 to c.
64Functions getchar and putchar
- When we need to read or write data character by
character, functions getchar and putchar are
very handy. - To read a single character in variable c, we
give - c getchar() (equivalent to scanf("c", c)
- To write the character in variable c, we give
- putchar(c)(equivalent to printf("c", c)
65The execution flow
- The execution of any C program starts from the
first line of the program and proceeds
sequentially downwards. - For example, if a program has ten assignment
statements, these would be executed in order of
their appearance. - However, in most of the programs that we would
like to write,we would want to execute some
statements only if some condition holds. - For example, a program that takes as input marks
between 0 and 100, and outputs FAIL if the marks
are less than 40.
66control statement
- We use the if control statement to achieve
this.The syntax of an if statement is if (
condition) statement - The statement is executed only if the
conditional expression condition is true,
otherwise the control goes to the statement
following the if statement. - Note that the statement may actually be a
compoundstatement, or a control statement, or a
combination.
67Example program
main() int marks printf("input marks
") scanf("d", marks) if (marks lt 40) /
fail / printf("FAIL\n")
68The if-else statement
- When, depending on a condition, we want to
execute onestatement block or other, we use
if-else statement. Its syntax is if (
condition) statement1 else statement2
statement1 is executed if the condition is
satisfied otherwise statement2 is executed.
69Example
- main() int marks printf("input marks
") scanf("d", marks) if ((marks lt 0)
(marks gt 100)) printf("Out of range!\n")
else if (marks lt 40) / fail /
printf("FAIL\n") else / pass /
printf("PASS\n")
70Example
- main() int a, b printf("Give two
numbers ") scanf("d d", a, b)
printf("\nLarger number is ") if (a gt b)
printf("d\n", a) else
printf("d\n", b)
71if-else ladder
- main()
- int marks
- printf("input marks ") scanf("d",
marks) if ((marks lt 0) (marks gt 100))
printf("Out of range!\n") else if (marks lt 40)
/ fail / printf("Grade F\n")
else if (marks lt 70)
printf("Grade B\n")
else printf("Grade A\n")
72The ? operator
- Suppose we want to assign different values to a
variable depending upon whether some condition is
true or not.One way to do it is, of course,
using an if-else statement.There is another,
more concise, way of doing this via the ?
operator.The syntax of the operator is - condition ? expn-1 expn-2
- The above expression returns the value of
expression expn-1 if the conditional expression
condition evaluates to true, otherwise returns
the value of expn-2.
73An example
- Suppose that there were only two rates of taxes
- No tax for income less than or equal to 150,000
and a flat rate of 10 above it. - Then the tax calculation program ismain()
int income float tax printf("Enter the
taxable income ") scanf("d", income) - tax (income lt 150000)? 0.0
- (income - 150000)0.1 printf
("tax f\n", tax)
74Correct but not advised example
- main() int income float tax
printf("Enter the taxable income ")
scanf("d", income) tax (income lt 150000)
? 0.0 ((income lt 300000) ?
(income - 150000) 0.10
((income lt 500000) ? 15000
(income - 300000) 0.2
55000 (income - 500000) 0.3))) printf
("tax f\n", tax)
75Iterations Loops
- The computational power of a machine is exploited
at the program level by means of constructs that
repeat a set of actions again and again until
some conditions are satisfied. - For example, in the Insertion-sort program we
repeatedly take a new element from the unsorted
list, and insert it into its proper place among
the elements already seen and kept in sorted
order. - Or consider evaluating the sine of a quantity x
by using the power series expansion of sin x. - C has several repetitive constructs, like the
for- loop, the while- loop etc.
76The while - loop
- Syntax while ( expression)
statementwhile is a key word, expression and
statement are programmer-defined. - Meaning of the constructThe statement is
executed as long as expression evaluates to
true (non-zero value)
77while loop Example
- . . while (i gt
0 ai gt key) ai1 ai
i i - 1 - . . This while- loop
had been used in the Insertion-sort program
discussed earlier.
78while - loop example program
- include ltstdio.hgtinclude ltmath.hgtmain()
- int sum, n scanf("d", n) sum
0 while (n ! 0) sum n 10 - n / 10 printf("The sum of the
digits is d", sum)
79The for - loop
- The syntax for ( expr1 expr2 expr3)
statement - Meaning of the construct The initialization of
the loop-control variable is done by means of the
expression expr1 the second expression expr2
controls the number of times the statement that
follows is executed the third expression expr3
updates the loop control variable after each
execution of the statement.
80for-loop program first n positive numbers
- include ltstdio.hgtmain()
- int n, i long sum /sum is a long
integer/ printf("How many numbers to sum ? ")
scanf("d", n) / input how many to/
/add / sum 0 for(i 1 i
lt n i) sum i printf("The sum is
ld\n", sum)
81 while versus for
- A for- loop as a while- loopexpr1while (
expr2) statement expr3Centralized loop
control of for is an advantage in some
situations.Otherwise the choice between the two
is largely a matter of personal preference.