39
1 Agenda Variables (Review) Example Input / Output Arithmetic Operations Casting Char as a Number (if time allow)

1 Agenda Variables (Review) Example Input / Output Arithmetic Operations Casting Char as a Number (if time allow)

  • View
    224

  • Download
    0

Embed Size (px)

Citation preview

1

Agenda

Variables (Review) Example Input / Output Arithmetic Operations Casting Char as a Number (if time allow)

2

Why do We Need Variables? Computer programs manipulate

data Data is given as input or calculated

throughout the program To be later accessed, variables must

be remembered Thus, variables are stored in the

memory Variable name memory address

3

What is a Variable?

A memory chunk that is linked to a name Stores data (of a predefined type) Read/write Definition: type name Assignment: name = value Definition + assignment: type name =

value

4

Why do we Need Different Types?

Saving memory Execution speed Makes compiler “life” easier

5

Data representation Bit – a binary digit: 0 or 1

Bits are always grouped! Byte – a group of 8 bits

Therefore, a byte can represent up to 28=256 values The values can range from 0 to 255 or from -128 to

127 The fundamental data unit of a computer

Word – a group of (usually) 4 (or 8) bytes 4 bytes = 32 bits Value range: 0 to 232 -1 (4,294,967,295 ) Or, more often: -231 to 231-1 (-2,147,483,648 to

+2,147,483,647)

6

Data Types char – a single byte character Integer:

short int (or short) – usually 2 bytes (rarely used) int - usually 4 bytes long int (or long) – 4 or 8 bytes (rarely used)

Real: float – a single precision real number – usually 4

bytes double – a double precision real number – usually 8

bytes long double - a double precision real number –

usually 8 bytes (rarely used) Signed vs. unsigned

7

Variable Naming Rules Letters, digits, underscores Legal: i, CSE_5a,

a_very_long_name_that_isnt_very_useful, fahrenheit

Illegal: 5a_CSE (first character cannot be a digit) my-var

Case sensitive CSE_5a is different from cse_5a

Variables names should have a meaning

8

Agenda

Variables (Review) Example Input / Output Arithmetic Operations Casting Char as a Number (if time allow)

9

Example: Swap Two Variables/* Swap1 – swaps two variables a,b using a temporary variable */

#include <stdio.h>int main(){

int a = 2, b = 5, temp;temp = a;a = b;b = temp;printf("a = %d, b = %d\n",a,b);return 0;

}

10

Example: Swap Two Variables

How to swap two variables without using a temporary variable?

11

Example: Swap Two Variables

int a, b;

// User is requested to enter a and bprintf("Enter a: ");scanf("%d", &a);printf("Enter b: ");scanf("%d", &b);

a = a + b; // this way b is still "alive"b = a - b; // a + b - b = aa = a - b; // a + b - a = bprintf("a = %d, b = %d\n", a, b);

12

Agenda

Variables (Review) Example Input / Output Arithmetic Operations Casting Char as a Number (if time allow)

13

printf and scanf

printf – prints to the screen. Can also accept variables and print

their values scanf – gets values from the

standard input and assigns to corresponding variables

14

printf can Print Variable Values

printf ("z=%d\n", z ); The sequence %d is a special

sequence and is not printed It indicates to printf to print the

value of an integer variable written after the printed string

15

scanf Gets Input from the User

scanf("%lf", &var); Wait for the user to type in a double

value, and store it in the variable ‘var’ ‘&var’ – “address” of var (we shall

deal with it later on the course) To get 2 doubles from the user, use –

scanf("%lf %lf", &var1, &var2);

16

prinft/scanf Conversion Codes A %<conversion code> in the printf/scanf

string is replaced by a respective variable %c – a character %d – an integer, %u – an unsigned integer %f – a float %lf – a double %g – a nicer way to show a double (in

printf) %% - the ‘%’ character (in printf)

17

Example

int a = 2, b = 3, c, e;double h;c = a * b;printf(“%d\n”,c); // 6 printf(“%d * %d = %d\n”,a,b,c); // 2 * 3 = 6printf(“%d * %d = %d\n”,a,b,a*b); // 2 * 3 = 6 printf(“%d\n”,2*3); // 6scanf(“%d %lf”, &e, &h);

18

What does the ‘&’ means?

scanf("%d", &var); var – value of var &var – address of var Our intension is to insert the input

to the var’s “cell” in memory What happens if we discard the

‘&’?

19

Agenda

Variables (Review) Input / Output Arithmetic Operations Casting Char as a Number (if time allow)

20

Arithmetic operators An operator is a mathematical action

performed on constants and/or variables (operands)

Some operators: Braces () Assignment = Addition + Subtraction - Multiplication * Division / Modulo %

21

int number, newNumber;int ones, tens, hundreds;

printf("Please enter a 3-digit number ");scanf("%d", &number);

// divide number to ones, tens, hundredsones = number % 10;tens = (number%100)/10;hundreds = number/100;

// calculate the new numbernewNumber = ones * 100 + tens * 10 + hundreds;printf("The reversed number is %d\n", newNumber);

Example: Reverse a 3-digit Number

22

Operations on Different Types Operation on two different types

(e.g., 5 + 6.5) The result is of the generalized

operand (e.g., int is a float is a double) 5/2.0 2.5

When the operands are of the same type, the result is of that type as well 5/2 2

23

Examples

3 + 4 = 7 3.0 + 4 = 7.0 3 / 4 = 0 3.0 / 4 = 0.75

24

Agenda

Variables (Review) Input / Output Arithmetic Operations Casting Char as a Number (if time allow)

25

Casting (המרה)

Sometimes it is desirable for a variable of one type to be considered as belonging to another in an operation

We say the variable is cast to the new type

Syntax: (type)operation/variable

26

Example – find what’s wrong

#include <stdio.h>

int main(){

int a = 10; int b = 20;

printf("The average of %d and %d is %d\n", a, b, (a + b) * (1 / 2));

return 0;}

27

Alternatives#include <stdio.h>

int main(){

int a = 10; int b = 20;

printf(“Avg of %d and %d is %g\n", a, b, (a + b) * ((double)1 / 2));printf(“Avg of %d and %d is %g\n", a, b, (a + b) * (1.0 / 2));

// will the following work?printf(“Avg of %d and %d is %g\n", a, b, (a + b) * (double)(1 / 2));

return 0;}

28

More Examples

int a = 11;int b = 20;double x = 4.5;int y = x; // implicit cast

printf("y = %g\n",y); // ERROR - do not relay on implicit cast in printfprintf("y = %d\n",y);printf ("The average of %d and %d is %g\n", a, b, ((a+b) * (1.0/2)));printf ("The average of %d and %d is %d\n", a, b, (int)((a+b) * (1.0/2)));printf ("The average of %d and %d is %d\n", a,b, (a + b)*(1.0 / 2)); // ERRORprintf ("The average of %d and %d is %d\n", a,b, (int)((a + b)*(1.0 / 2)));

29

Will this Work?#include <stdio.h>

int main(){

int a = 10; int b = 20;

printf ("The average of %d and %d is %d\n", a,b, (a + b)*(1.0 / 2));

return 0;}

30

Summary on Implicit Cast (Q&A)

int a = 4.5; // implicit cast from double (4.5) to int (4), it is legal but might cause problem, thus usually results with a compilation warning (possible lose of data)

double x = 4; // implicit cast from int to double, no compilation warning since "int is a double" relation hold

printf("%g\n", a); // printf/scanf is "dumb", in this case there is no compilation warnings, but the output will be wrong

printf("%d \n", 2.5); // same here: no warnings, wrong output

31

Agenda

Variables (Review) Input / Output Arithmetic Operations Casting Char as a Number (if time

allow)

32

Char is also a number!

A char variable is used to store a text character: Letters. Digits. Keyboard signs. Non-printable characters. But also small numbers (0 to 255 or -

128 to 127).

33

Text as numbers Every character is assigned a

numeric code There are different sets of codes:

ASCII (American Standard Code for Information Interchange) – most common

EBCDIC – ancient, hardly used today Maybe others

We will use ASCII The ASCII table.

34

More about character encoding

most of the time, you don't care what the particular numbers are

The table above shows only 128 characters (7 bits). Some are non-printable

Extended ASCII code contains 256 characters

35

More about character encoding

ASCII code 0 (NULL character) is important – we will see it again

Note contiguous sets of numbers, upper case and lower case characters

36

Example of char as both a character and a small number#include <stdio.h>int main(void){

char i = 'b';printf("i as a character is %c\n", i);printf("i as an integer is %d\n", i);printf("The character after %c is %c\n", i, i + 1);

return 0;}

37

Another example/* Get the position of a letter in the abc */#include <stdio.h>

int main(void){

char letter;

printf("Please enter a lowercase letter\n");scanf("%c", &letter);printf("The position of this letter in the abc is %d\n", letter-'a'+1);

return 0;}

38

Exercise

Write a program that accepts as input – A lowercase letter

and outputs – The same letter in uppercase

(e.g., if the input is ‘g’, the output should be ‘G’)

39

Solution/* Convert a letter to uppercase */#include <stdio.h>

int main(void){

char letter;

printf("Please enter a lowercase letter\n");scanf("%c", &letter);printf("This letter in uppercase is %c\n", letter-'a'+’A’);

return 0;}