programming in ccse.iitkgp.ac.in/~pralay/teaching/2020s/pds/ls_week2.pdf · programming and data...

29
Spring 2020; CSE@IIT KGP Programming and Data Structure Pralay Mitra CS10001 Programming and Data Structures (PDS) (Theory: 3-0-0) Class Teacher: Pralay Mitra Department of Computer Science and Engineering Indian Institute of Technology Kharagpur Programming in C

Upload: others

Post on 21-Mar-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

CS10001 Programming and Data Structures

(PDS) (Theory: 3-0-0)

Class Teacher: Pralay Mitra

Department of Computer Science and Engineering Indian Institute of Technology Kharagpur

Programming in C

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

#include <stdio.h> int main() { printf(“Hello World\n”); return 0; }

Universal starting point

A program must have an output.

1. Write a program and save it. 2. Compile the program using the correct compiler. 3. Execute the program

Three steps to follow

1. vi hello.c #include <stdio.h> int main() { printf("Hello World\n"); return 0; } 2. $ cc –Wall hello.c $ 3. $ ./a.out Hello World

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

#include <stdio.h> #define PI 3.1416 int main() { int squareSide; float area; scanf(“%d”, &squareSide); area= PI * (squareSide/2) * (squareSide/2); printf(“%f\n”, area); return 0; }

A C program Include header files

Declare global variables

There must be a main function in any C program.

int :: integer quantity

Typically occupies 4 bytes (32 bits) in memory.

char :: single character

Typically occupies 1 byte (8 bits) in memory.

float :: floating-point number (a number with a decimal point)

Typically occupies 4 bytes (32 bits) in memory.

double :: double-precision floating-point number

Basic Data Types in C

Precision refers to the number of significant digits after the decimal point.

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Augmented Data Type

• Some of the basic data types can be augmented by using certain data type qualifiers: – short

– long

– signed

– unsigned

• Typical examples: – short int

– long int

– unsigned int

Integer type

Type Storage size (in byte)

Value range

char 1 -128 to 127 or 0 to 255

unsigned char 1 0 to 255

signed char 1 -128 to 127

int 2 or 4 -32,768 to 32,767 or -2,147,483,648 to 2,147,483,647

unsigned int 2 or 4 0 to 65,535 or 0 to 4,294,967,295

short 2 -32,768 to 32,767

unsigned short

2 0 to 65,535

long 4 -2,147,483,648 to 2,147,483,647

unsigned long 4 0 to 4,294,967,295

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Integer type

unsigned char 1 byte 8 bits 00000000 to 11111111 0 to 255 11111111 127+ 126+ 125+ 124+ 123+ 122+ 121+ 120

signed char 1 byte 8 bits 00000000 to 11111111 -128 to 127 1111111 126+ 125+ 124+ 123+ 122+ 121+ 120

Floating-point type

Type Storage size (in byte)

Value range Precision

float 4 1.2E-38 to 3.4E+38 6 decimal places

double 8 2.3E-308 to 1.7E+308 15 decimal places

long double 10 3.4E-4932 to 1.1E+4932 19 decimal places

E or e means “10 to

the power of”

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Some Examples of Data Types

• int

0, 25, -156, 12345, 99820

• char

‘a’, ‘A’, ‘*’, ‘/’, ‘ ’

• float

23.54, 0.00345, 25.0

2.5E12, 1.234e-5

E or e means “10 to

the power of”

The C Character Set

• The C language alphabet: – Uppercase letters ‘A’ to ‘Z’

– Lowercase letters ‘a’ to ‘z’

– Digits ‘0’ to ‘9’

– Certain special characters:

! # % ^ & * ( )

- _ + = ~ [ ] \

| ; : ‘ “ { } ,

. < > / ? blank

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

ASCII Table

Extended ASCII Table (American Standard Code for Information Interchange)

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Identifiers • Identifiers

– Names given to various program elements (variables, constants, functions, etc.)

– May consist of letters, digits and the underscore (‘_’) character, with no space between.

– First character must be a letter.

– An identifier can be arbitrary long. • Some C compilers recognize only the first few characters

of the name (16 or 31).

– Case sensitive • ‘area’, ‘AREA’ and ‘Area’ are all different.

Keywords

• Keywords – Reserved words that have standard, predefined meanings

in C.

– Cannot be used as identifiers.

– OK within comments.

– Standard C keywords:

auto break case char const continue default do

double else enum extern float for goto if

int long register return short signed sizeof static

struct switch typedef union unsigned void volatile while

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Valid and Invalid Identifiers

• Valid identifiers X

abc

simple_interest

a123

LIST

stud_name

Empl_1

Empl_2

avg_empl_salary

• Invalid identifiers 10abc

“hello”

simple interest

(area)

%rate

Constants

Constants

Numeric

Constants

Character

Constants

string single

character

floating-point integer

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Integer Constants

• Consists of a sequence of digits, with possibly a plus or a minus sign before it. – Embedded spaces, commas and non-digit characters are

not permitted between digits.

• Maximum and minimum values (for 32-bit representations)

Maximum :: 2147483647

Minimum :: – 2147483648

Floating-point Constants

• Can contain fractional parts.

• Very large or very small numbers can be represented.

23000000 can be represented as 2.3e7

• Two different notations: 1. Decimal notation

25.0, 0.0034, .84, -2.234

2. Exponential (scientific) notation 3.45e23, 0.123e-12, 123E2 e means “10 to

the power of”

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Single Character Constants

• Contains a single character enclosed within a pair of single quote marks (‘ ’). – Examples :: ‘2’, ‘+’, ‘Z’

• Some special backslash characters ‘\n’ new line

‘\t’ horizontal tab

‘\’’ single quote

‘\”’ double quote

‘\\’ backslash

‘\0’ null

String Constants

• Sequence of characters enclosed in double quotes (“ “). – The characters may be letters, numbers, special

characters and blank spaces.

• Examples: “nice”, “Good Morning”, “3+6”, “3”, “C”

• Differences from character constants: – ‘C’ and “C” are not equivalent.

– ‘C’ has an equivalent integer value while “C” does not.

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

#include <stdio.h> #define PI 3.1416 int main() { int squareSide; float area; scanf(“%d”, &squareSide); area= PI * (squareSide/2) * (squareSide/2); printf(“Area of the circle enclosing the square of side %d is: %f\n”, squareSide, area); return 0; }

A C program Include header files

Declare global variables

There must be a main function in any C program.

Variables

• It is a data name that can be used to store a data value.

• Unlike constants, a variable may take different values in memory during execution.

• Variable names follow the naming convention for identifiers.

– Examples :: temp, speed, name2, current

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Example

int a, b, c;

char x;

a = 3;

b = 50;

c = a – b;

x = ‘d’;

b = 20;

a = a + 1;

x = ‘G’;

Variables

Constants

Declaration of Variables

• There are two purposes: 1. It tells the compiler what the variable name is. 2. It specifies what type of data the variable will hold.

• General syntax: data-type variable-list;

• Examples: int velocity, distance; int a, b, c, d; float temp; char flag, option;

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Assignment Statement

• Used to assign values to variables, using the assignment operator (=).

• General syntax: variable_name = expression;

• Examples: velocity = 20; b = 15; temp = 12.5; A = A + 10; v = u + f * t; s = u * t + 0.5 * f * t * t;

Advanced Assignment Statement

• Assignment during declaration

int speed = 30;

char flag = ‘y’;

• Multiple variable assignment

a = b = c = 5;

flag1 = flag2 = ‘y’;

speed = flow = 20.0;

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Operators in Expressions

Operators

Arithmetic

Operators

Relational

Operators

Logical

Operators

Arithmetic Operators

• Addition :: +

• Subtraction :: –

• Division :: /

• Multiplication :: *

• Modulus :: %

X + Y 48

X – Y 2

X * Y 575

X / Y ?

X % Y ??

X= 25; Y=23;

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Operator Precedence

• In decreasing order of priority 1. Parentheses :: ( )

2. Unary minus :: –5

3. Multiplication, Division, and Modulus

4. Addition and Subtraction

• For operators of the same priority, evaluation is from left to right as they appear.

• Parenthesis may be used to change the precedence of operator evaluation.

Examples: Arithmetic expressions

v = u + f * t; v = u+(f*t);

X = x * y / z X = (x*y)/z

A = a + b – c * d / e A = ((a+b)-((c*d)/e))

A = -b * c + d % e A = (((-b)*c)+(d%e))

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Integer Arithmetic

• When the operands in an arithmetic expression are integers, the expression is called integer expression, and the operation is called integer arithmetic.

• Integer arithmetic always yields integer values.

Real Arithmetic

• Involving only real or floating-point operands (including double, long double).

• Since floating-point values are rounded to the number of significant digits permissible, the final value is an approximation of the final result. A = 22/7*7*7 = (((22/7)*7)*7) = 153.86

=(((22*7)/7)*7) = 154

• The modulus operator cannot be used with real operands.

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Arithmetic – integer /real

• An expression contains only integer operands Integer arithmetic will be performed.

• An expression contains only real operands Real arithmetic will be performed.

• An expression contains integer and real both the operands Real arithmetic will be performed.

Type casting

• A faulty reciprocal finder

#include <stdio.h>

int main ()

{

int n;

scanf("%d",&n);

printf("%d\n",1/n);

return 0;

}

The division 1/n is of integers (quotient). The format %d is for printing integers.

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Type casting

#include <stdio.h>

int main ()

{

int n;

scanf("%d",&n);

printf("%f\n",1.0/n);

return 0;

}

#include <stdio.h>

int main ()

{

int n;

float x;

scanf("%d",&n);

x=(float)1/n;

printf("%f\n",x);

return 0;

}

Type casting

Integer to real

int a=10;

float b;

b=(float)a;

Real to integer

int a;

float b=3.14;

a=(int)b;

Real to real

float b;

double c=3.14;

b=(float)c;

Real to real

float b;

double c;

c=22.0/7.0;

b=(float)c;

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Relational Operators

• Used to compare two quantities.

< is less than

> is greater than

<= is less than or equal to

>= is greater than or equal to

== is equal to

!= is not equal to

Relational Operators int x = 20;

int y=3;

float a=20.3;

if ( x > y ) /* 20 > 3 True */

printf (“%d is larger\n”, x);

If ( x + x > y * 6 ) /* 20+20 > 3*6 (20+20)>(3*6) True */

printf(“Double of %d is larger than 6 times %d”,x,y);

If ( x > a ) /* Type cast??? */

printf(“%d is larger than %f”,x, a);

else

printf(“%d is smaller than %f”,x, a);

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Logical Operators • Unary and Binary Operators

! Logical NOT, logical negation (True if the operand is False.)

&& Logical AND (True if both the operands are True.)

|| Logical OR (True if either one of the operands is True.)

X Y X && Y X || Y

FALSE FALSE FALSE FALSE

FALSE TRUE FALSE TRUE

TRUE FALSE FALSE TRUE

TRUE TRUE TRUE TRUE

int x = 20; int y=3; float a=20.3;

if((x>y) && (x>a)) /* FALSE */ printf(“X is largest.”); if((x>y) || (x>a)) /* TRUE */ printf(“X is not smallest.”); if(!(x==y)) /* TRUE */ printf(“X is not same as Y.”); if(x!=y) /* TRUE */ printf(“X is not same as Y.”);

X !X

FALSE TRUE

TRUE FALSE

Control Statements

Branching Looping

Statement takes more than one branches based upon a condition test comprising of relational and/or logical (may be arithmetic) operators.

Some set of statements are being executed iteratively until a condition test comprising of relational and/or logical (may be arithmetic) operators are not being satisfied.

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Conditions

• Using relational operators.

– Four relation operators: <, <=, >, >=

– Two equality operations: ==, !=

• Using logical operators / connectives.

– Two logical connectives: &&, | |

– Unary negation operator: !

Condition Tests

if(count <= 100) /* Relational */

if((math+phys+chem)/3 >= 60) /* Arithmetic, Relational */

if((sex==‘M’) && (age>=21)) /* Relational, Logical */

if((marks>=80) && (marks<90) ) /* Relational, Logical */

if((balance>5000) | | (no_of_trans>25)) /* Relational, Logical */

if(! (grade==‘A’)) /* Relational, Logical */

Condition Evaluation

True (Non-zero, preferably 1)

False (Zero)

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Operator confusion

Equality (==) and Assignment (=) Operators

• What is expected in condition? – Nonzero values are true, zero values are false – Any expression that produces a value can be used in control structures

int age=20;

if ( age > 18 ) /* Logical Operator; Evaluated as TRUE */ printf( "You are not a minor!\n" );

if ( age >= 18 ) /* Logical Operator; Evaluated as TRUE */ printf( "You are not a minor!\n" );

if ( age == 20 ) /* Logical Operator; Evaluated as TRUE */ printf( "You are not a minor!\n" );

if ( age = 18 ) /* Arithmetic Operator; Evaluated as TRUE */ printf( "You are not a minor!\n" );

if ( age = 17 ) /* Arithmetic Operator; Evaluated as TRUE */ printf( "You are not a minor!\n" );

Equality (==) and Assignment (=) Operators int age=20;

if ( age > 18 ) /*Logical Operator; Evaluated TRUE*/ printf( "You are not a minor!\n" );

if ( age >= 18 ) /*Logical Operator; Evaluated TRUE*/ printf( "You are not a minor!\n" );

if ( age == 20 ) /*Logical Operator; Evaluated TRUE*/ printf( "You are not a minor!\n" );

if ( age = 18 ) /*Arithmetic Operator; Evaluated TRUE*/ printf( "You are not a minor!\n" );

if ( age = 17 ) /*Arithmetic Operator; Evaluated TRUE*/ printf( "You are not a minor!\n" );

Better is avoid.

These statements are not logically correct!!!

There will be no syntax error.

Value of age will be 18

Value of age will be 17

Operator confusion

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Equality (==) and Assignment (=) Operators

#include <stdio.h> int main() { int x,y; scanf(“%d”,&x); y=x%2; /* y will be 1 or zero based on value entered and stored as x */ if(y=1) { /* y will be assigned with 1, condition will be evaluated as TRUE */ printf(“Entered number is odd.”); } else { printf(“Entered number is even.”); } return 0; }

Operator confusion

Unary Operator • Increment (++) Operation means i=i+1;

– Prefix operation (++i) or Postfix operation (i++)

• Decrement (--) Operation means i=i-1; – Prefix operation (--i) or Postfix operation (i--)

• Precedence – Prefix operation : First increment / decrement and then used in

evaluation

– Postfix operation : Increment / decrement operation after being used in evaluation

• Example

int t, m=1;

t=++m;

int t,m=1;

t=m++;

m=2 t=2

m=2 t=1

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

More Examples on Unary Operator

Initial values :: a = 10; b = 20;

x = 50 + ++a;

a = 11, x = 61

Initial values :: a = 10; b = 20;

x = 50 + a++;

x = 60, a = 11

Initial values :: a = 10; b = 20;

x = a++ + --b;

b = 19, x = 29, a = 11

Initial values :: a = 10; b = 20;

x = a++ – ++a; Undefined value (implementation dependent)

Shortcuts in Assignment Statements

• A+=C A=A+C

• A-=B A=A-B

• A*=D A=A*D

• A/=E A=A/E

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Input scanf (“control string”,arg1,arg2, …, argn);

– Performs input from the standard input device, which is the keyboard by default.

– It requires a control string refers to a string typically containing data types of the

arguments to be read in.

– And the (arguments) address or pointers of the list of variables into which the value received from the input device will be stored.

– The address of the variables in memory are required to mention (& before the

variable name) to store the data.

– The control string consists of individual groups of characters (one character group for each input data item). Typically, a ‘%’ sign, followed by a conversion character.

int size,a,b; float length;

scanf ("%d", &size) ; scanf ("%f", &length) ; scanf (“%d %d”, &a, &b);

Input Conversion Character Data Item meaning

c Single chacater

d Decimal integer

e Floating point value

f Floating point value

g Floating point value

h Short int

i Decimal/hexadecimal/octal integer

o Octal integer

s String

u Unsigned decimal integer

X Hexadecimal integer

We can also specify the maximum field-width of a data item, by specifying a number indicating the field width before the conversion character.

Example: scanf (“%3d %5d”, &a, &b);

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Output

printf (“control string”,arg1,arg2, …, argn);

– Performs output to the standard output device (typically defined to be the screen).

– Control string refers to a string containing formatting information and data types of the arguments to be output;

– The arguments arg1, arg2, … represent the individual output data items.

– The conversion characters are the same as in scanf. int size,a,b; float length;

scanf ("%d", &size) ; printf(“%d”,size); scanf ("%f", &length) ; printf(“%f”,length); scanf (“%d %d”, &a, &b); printf(“%d %d”,a,b);

Formatted Output

float a=3.0, b=7.0;

printf(“%f %f %f %f”,a,b,a+b,sqrt(a+b));

3.000000 7.000000 10.000000 3.162278

printf(“%4.2f %5.1f\na+b=%3.2f\tSquare Root=%-6.3f”,a,b,a+b,sqrt(a+b));

3.00 7.0

a+b=10.00 Square Root=3.162

Will be written exactly.

Left Align

Tab

Total Space

After decimal place

For integer, character and string decimal point will not be there. Rest is same.

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Character I/O char ch1;

scanf(“%c”,&ch1); /* Reads a character */

printf(“%c”,ch1); /* Prints a character */

ch1=getchar(); /* Reads a character */

putchar(ch1); /* Prints a character */

char name[20];

scanf(“%s”,name); /* Reads a string */

printf(“%s”,name); /* Prints a string */

gets(name); /* Reads a string */

puts(name); /* Prints a string */

Help for any command: $ man gets

Problem solving

• Step 1: – Clearly specify the problem to be solved.

• Step 2: – Draw flowchart or write algorithm.

• Step 3: – Convert flowchart (algorithm) into program code.

• Step 4: – Compile the program into executable file.

• Step 5: – For any compilation error, go back to step 3 for debugging.

• Step 6: – Execute the executable file (program).

Spring 2020; CSE@IIT KGP

Programming and Data Structure Pralay Mitra

Flowchart: basic symbols

Process

Flow Line

Terminal

Decision I/O Data

Predefined Process

Preparation

Connector