0% found this document useful (0 votes)
72 views

C Programming Arrays

The document discusses various C/C++ programming concepts including type conversions, booleans, relational operators, and branching. It provides examples and explanations of type conversions between integers and floats, boolean variables and operators, relational operators for comparison, and if/else conditional statements for branching program execution based on boolean conditions. Key topics covered include type promotions and demotions during conversions, casting to specific types, prefix and postfix increment/decrement operators, and syntax for if/else conditional branching.

Uploaded by

Agga
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
72 views

C Programming Arrays

The document discusses various C/C++ programming concepts including type conversions, booleans, relational operators, and branching. It provides examples and explanations of type conversions between integers and floats, boolean variables and operators, relational operators for comparison, and if/else conditional statements for branching program execution based on boolean conditions. Key topics covered include type promotions and demotions during conversions, casting to specific types, prefix and postfix increment/decrement operators, and syntax for if/else conditional branching.

Uploaded by

Agga
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 30

CH-230-A

Programming in C and C++


C/C++

Lecture 2

Dr. Kinga Lipskoch

Fall 2019
Conversions Booleans Relational Operators Branching Iterations

Type Conversions
I When data of different types are combined (via operators)
some rules are applied
I Types are converted to a common type
I Usually, to the larger one (called promotion)
I Example: while summing an int and a float, the int is
converted into a float and then the sum is performed
I A demotion is performed when a type is converted to a
smaller one
I Example: a function takes an int parameter and you provide
a float
I A demotion implies possible loss of information
I Therefore, be careful with what to expect
I In the above example, the fractional part will be lost

C/C++ Fall 2019 2 / 30


Conversions Booleans Relational Operators Branching Iterations

Casting

I It is possible to overcome standard conversions (casting)


I To force to a different data type, put the desired data type
before the expression to be converted
(type name) expression
I Casting is a unary operator with high precedence

C/C++ Fall 2019 3 / 30


Conversions Booleans Relational Operators Branching Iterations

Casting: An Example

1 int a ;
2 float f1 = 3.456;
3 float f2 = 1.22;
4 /* these operations imply demotions */
5 a = ( int ) f1 * f2 ; /* a is now 3 */
6 a = ( int ) ( f1 * f2 ) ; /* a is now 4 */

C/C++ Fall 2019 4 / 30


Conversions Booleans Relational Operators Branching Iterations

Incrementing and Decrementing

I The unary operators ++ and -- can be applied to increase or


decrease a variable by 1

1 int a , b ;
2 a = b = 0;
3 a ++; b - - ; ++ a ; --b ;

I Note that they can be both prefix and postfix operators


I The two versions are different

C/C++ Fall 2019 5 / 30


Conversions Booleans Relational Operators Branching Iterations

Prefix and Postfix Modes

I Prefix means that first you modify and then you use the value
I Postfix means that first you use and then you modify the value
I int a = 10, b;

Expression New value of a New value of b


b = ++a; 11 11
b = a++; 11 10
b = --a; 9 9
b = a--; 9 10

C/C++ Fall 2019 6 / 30


Conversions Booleans Relational Operators Branching Iterations

The sizeof() Operator


I sizeof() returns the number of bytes needed to store a
specific object
I Useful for determining the sizes of the different data types on
your system
1 int a ;
2 printf ( " size int % lu \ n " , sizeof ( a ) ) ;
3 printf ( " size float % lu \ n " , sizeof ( float ) ) ;
4 printf ( " size double % lu \ n " , sizeof ( double ) ) ;

I For strings do not confuse sizeof() with strlen()


I Compile-time operator, will not work for dynamically allocated
memory

C/C++ Fall 2019 7 / 30


Conversions Booleans Relational Operators Branching Iterations

Boolean Variables

I A boolean variable can assume only two logic values: true or


false
I Boolean variables and expressions are widely used in computer
languages to control branching and looping
I Some operators return boolean values
I A boolean expression is an expression whose value is true or
false

C/C++ Fall 2019 8 / 30


Conversions Booleans Relational Operators Branching Iterations

Boolean Operators

I Boolean operators can be applied to boolean variables


I AND, OR, NOT

A NOT A A B A AND B A B A OR B
false true false false false false false false
true false false true false false true true
true false false true false true
true true true true true true

C/C++ Fall 2019 9 / 30


Conversions Booleans Relational Operators Branching Iterations

Booleans in C

I Originally, C did not provide an ad-hoc boolean type but uses


rather the int type
I 0 is false, everything different from 0 is true
I In C99 the type _Bool was introduced, example: _Bool b = 0;
I Additionally, the library stdbool.h defines the type bool,
example: bool b = false;
I C also provides the three Boolean operators
I && for AND,
I || for OR,
I ! for NOT
I Applied to booleans they return booleans

C/C++ Fall 2019 10 / 30


Conversions Booleans Relational Operators Branching Iterations

Boolean Operators: Example

1 int main () {
2 int a , b , c ;
3 a = 0; /* a is false */
4 b = 57; /* b is true */
5 c = a || b ; /* c is true */
6 c = a && b ; /* c is false */
7 a = !a; /* a is now true */
8 c = a && b ; /* c is now true */
9 c = ( a && ! b ) && ( a || b);
10 return 0;
11 }

C/C++ Fall 2019 11 / 30


Conversions Booleans Relational Operators Branching Iterations

Relational Operators
I Relational operators are applied to other data types (numeric,
character, etc.) and produce boolean values
(b > 5) --> true
I Relational operators with boolean operators produce boolean
expressions
(b > 5) && (a < 1) --> true && false --> false
Relational operator Meaning
== Equality test
!= Inequality test
> Greater
< Smaller
>= Greater or equal
<= Smaller or equal

C/C++ Fall 2019 12 / 30


Conversions Booleans Relational Operators Branching Iterations

Relational Operators: Example


1 int main () {
2 int a = 2 , b , c ;
3 float f1 = 1.34;
4 float f2 = 3.56;
5 char ch = ’D ’;
6 b = f1 >= f2 ;
7 c = !b;
8 b = c == b ;
9 b = b != c ;
10 c = f2 > a ;
11 c = ch > a ;
12 return 0;
13 }

C/C++ Fall 2019 13 / 30


Conversions Booleans Relational Operators Branching Iterations

Branching

I Up to now programs seem to execute all the instructions in


sequence, from the first to the last (a linear program)
I Change the control flow of a program with branching
statements
I Branching allows to execute (or not to execute) certain parts
of a program depending on boolean expressions or conditions

C/C++ Fall 2019 14 / 30


Conversions Booleans Relational Operators Branching Iterations

Selection: if ... else

I In general selection constructs allow to choose a way in a


binary bifurcation
I De facto you can use it in three ways
I if () single selection
I if ()
else double selection
I if ()
else if ()
else if ()
...
else multiple selection

C/C++ Fall 2019 15 / 30


Conversions Booleans Relational Operators Branching Iterations

The if Syntax (1)

I General syntax:
1 if ( condition )
2 statement 1;
3 else
4 statement 2;
5 other_statement ; /* always executed */

I The else part can be omitted


I Statement: single statement or multiple statements
I Multiple statements need to be surrounded by braces { }

C/C++ Fall 2019 16 / 30


Conversions Booleans Relational Operators Branching Iterations

The if Syntax (2)

I Preferred syntax (always use braces)


1 if ( condition ) {
2 statements ;
3 }
4 else {
5 statements ;
6 }

I If you add statements, program flow is not changed (less


errors)
I Using indentation, you can easily see where block starts and
ends

C/C++ Fall 2019 17 / 30


Conversions Booleans Relational Operators Branching Iterations

if: Flow Chart

condition
TRUE FALSE

statement 1 statement 2

other_statement

C/C++ Fall 2019 18 / 30


Conversions Booleans Relational Operators Branching Iterations

if: Example
1 # include < stdio .h >
2 int main () {
3 int first , second ;
4 printf ( " Type the first number :\ n " ) ;
5 scanf ( " % d " , & first ) ;
6 printf ( " Type the second number :\ n " ) ;
7 scanf ( " % d " , & second ) ;
8 if ( first > second ) {
9 printf ( " The larger one is % d \ n " , first ) ;
10 }
11 else {
12 printf ( " The larger one is % d \ n " , second ) ;
13 }
14 printf ( " Can you see the logical error ?\ n " ) ;
15 return 0;
16 }
C/C++ Fall 2019 19 / 30
Conversions Booleans Relational Operators Branching Iterations

Statements and Compound Statements

I Statements can be grouped together to form compound


statements
I A compound statement is a set of statements surrounded by
braces
1 int a = 3;
2 if ( a > 0) {
3 printf ( " a is positive % d \ n " , a ) ;
4 a = a - 2 * a;
5 printf ( " now a is negative % d \ n " , a )
6 }

C/C++ Fall 2019 20 / 30


Conversions Booleans Relational Operators Branching Iterations

Multiple Choices: switch

I switch can be used when an expression should be compared


with many values
I The same goal can be obtained with multiple if’s
I The expression must return an integer value

C/C++ Fall 2019 21 / 30


Conversions Booleans Relational Operators Branching Iterations

switch: The Syntax


1 switch ( expression ) {
2 case c1 :
3 statement1 ;
4 break ;
5

6 case c2 :
7 statement2 ;
8 break ;
9
10 ...
11

12 default :
13 def ault_s tateme nt ;
14 }

C/C++ Fall 2019 22 / 30


Conversions Booleans Relational Operators Branching Iterations

switch: Flow Chart

expression == c1
True statement 1

False
expression == c2 True statement 2
False
expression == cn True statement n
False
default
statement

C/C++ Fall 2019 23 / 30


Conversions Booleans Relational Operators Branching Iterations

switch: Example
1 # include < stdio .h >
2 int main () {
3 int c ;
4 for ( c = 0; c <= 3; c ++) {
5 printf ( " c : % d \ n " , c ) ;
6
7 switch ( c ) {
8 case 1:
9 printf ( " Here is 1\ n " ) ;
10 break ;
11 case 2:
12 printf ( " Here is 2\ n " ) ;
13 /* Fall through */
14 case 3:
15 case 4:
16 printf ( " Here is 3 , 4\ n " ) ;
17 break ;
18 default :
19 printf ( " Here is default \ n " ) ;
20 }
21 }
22 return 0;
23 }

C/C++ Fall 2019 24 / 30


Conversions Booleans Relational Operators Branching Iterations

Iterations

I In many cases it is necessary to repeat a set of operations


many times
I Example: compute the average grade of the exam
I Read all the grades, and sum them
I Divide the sum by the number of grades
I C provides three constructs

C/C++ Fall 2019 25 / 30


Conversions Booleans Relational Operators Branching Iterations

Iterations: while

I General syntax:
1 while ( condition ) {
2 statement ;
3 }

I Keep executing the statement as long as the condition is true

C/C++ Fall 2019 26 / 30


Conversions Booleans Relational Operators Branching Iterations

while: Flow Chart

condition
FALSE
TRUE

statement

other_statement

C/C++ Fall 2019 27 / 30


Conversions Booleans Relational Operators Branching Iterations

Example:
Compute the Sum of the First n Natural Numbers
1 # include < stdio .h >
2 int main () {
3 int idx , n , sum = 0;
4 printf ( " Enter a positive number " ) ;
5 scanf ( " % d " , & n ) ;
6 idx = 1;
7 while ( idx <= n ) {
8 sum += idx ;
9 idx ++;
10 }
11 printf ( " The sum is % d \ n " , sum ) ;
12 return 0;
13 }

C/C++ Fall 2019 28 / 30


Conversions Booleans Relational Operators Branching Iterations

Iterations: for

I General syntax:
1 for ( initial - statement ; condition ; iteration -
statement )
2 statement ;

I Example:
1 for ( n = 0; n <= 10; n ++)
2 printf ( " % d \ n " , n ) ;

I The for and while loops can be made interchangeable

C/C++ Fall 2019 29 / 30


Conversions Booleans Relational Operators Branching Iterations

for: Flow Chart


initial-
statement

condition
FALSE
iteration- TRUE
statement
statement

other_statement

C/C++ Fall 2019 30 / 30

You might also like