1 of 37

Basics of C

1

2 of 37

The C Language

2

  • Currently, the most commonly-used language for embedded systems
  • “High-level assembly”
  • Very portable: compilers exist for virtually every processor
  • Easy-to-understand compilation
  • Produces efficient code

3 of 37

C History

3

  • Developed between 1969 and 1973 along with Unix
  • Due mostly to Dennis Ritchie
  • Designed for systems programming
    • Operating systems
    • Utility programs
    • Compilers

4 of 37

Hello World in C

4

#include <stdio.h>

int main()

{

printf(“Hello, world!\n”);

}

5 of 37

Hello World in C

5

#include <stdio.h>

int main()

{

printf(“Hello, world!\n”);

}

Program mostly a collection of functions

“main” function special: the entry point

“int” qualifier indicates function returns an integer

I/O performed by a library function: not included in the language

6 of 37

6

Name

Description

Size*

Range*

char

Character or small integer

1 byte

signed: -128 to 127�unsigned: 0 to 255

short int

(short)

Short integer

2 bytes

signed: -32768 to 32767�unsigned: 0 to 65535

int

Integer

4 bytes

signed: -2147483648 to 2147483647�unsigned: 0 to 4294967295

long int

(long)

Long integer

4 bytes

signed: -2147483648 to 2147483647�unsigned: 0 to 4294967295

float

Floating point number

4 bytes

3.4e +/- 38 (7 digits)

double

Double precision floating point number

8 bytes

1.7e +/- 308 (15 digits)

long double

Long double precision floating point number

8 bytes

1.7e +/- 308 (15 digits)

Data types

7 of 37

Variable types

7

  • Local variable

Local variables are declared within the body of a function, and can only be used within that function.

  • Static variable

Another class of local variable is the static type. It is specified by the keyword static in the variable declaration.

The most striking difference from a non-static local variable is, a static variable is not destroyed on exit from the function.

  • Global variable

A global variable declaration looks normal, but is located outside any of the program's functions. So it is accessible to all functions.

8 of 37

Variables

  • A variable is a name that represents one or more memory locations used to hold program data
  • A variable may be thought of as a container that can hold data used in a program

8

int myVariable;

myVariable = 5;

myVariable

5

9 of 37

9

An example

int global = 10; //global variable

int func (int x)

{

static int stat_var; //static local variable

int temp; //(normal) local variable

int name[50]; //(normal) local variable

……

}

10 of 37

Variables

  • Variables are names for storage locations in memory

10

41

5.74532370373175

× 10-14

0

15

Data Memory (RAM)

int warp_factor;

float length;

char first_letter;

‘A’

11 of 37

Variables

  • Variable declarations consist of a unique identifier (name)…

11

char first_letter;

int warp_factor;

float length;

41

5.74532370373175

× 10-14

0

15

Data Memory (RAM)

‘A’

12 of 37

Variables

…and a data type

Determines size and how values are interpreted

12

char first_letter;

float length;

int warp_factor;

41

5.74532370373175

× 10-44

0

15

Data Memory (RAM)

‘A’

13 of 37

Identifiers

  • Names given to program variables
  • Valid characters in identifiers:

  • Case sensitive!
  • Only first 31 characters significant

13

I

d

e

n

t

i

f

i

e

r

First Character

_’ (underscore)

A’ to ‘Z

a’ to ‘z

Remaining Characters

_’ (underscore)

A’ to ‘Z

a’ to ‘z

0’ to ‘9

14 of 37

How to Declare a Variable?

  • A variable must be declared before it can be used
  • The compiler needs to know how much space to allocate and how the values should be handled

14

Syntax

type identifier1, identifier2,…,identifiern;

Examples

int x, y, z;

float warpFactor;

char text_buffer;

unsigned index;

Variables

15 of 37

�How to Declare a Variable?

Variables may be declared in a few ways:

15

Syntax

type identifier;

type identifier = InitialValue;

type identifier1, identifier2, identifier3;

type identifier1 = Value1, identifier2 = Value2;

One declaration on a line

One declaration on a line with an initial value

Multiple declarations of the same type on a line

Multiple declarations of the same type on a line with initial values

Variables

16 of 37

�How to Declare a Variable

16

Examples

int x;

int y = 12;

int a, b, c;

long int myVar = 0x12345678;

long z;

char first = 'a', second, third = 'c';

float big_number = 6.02e+23;

Variables

17 of 37

A Simple C Program

17

#include <stdio.h>

int main(void)

{

float radius, area, PI;

//Calculate area of circle

radius = 12.0;

PI = 3.1416;

area = PI * radius * radius;

printf("Area = %f", area);

}

Header File

Function

Variable Declarations

Comment

Preprocessor Directives

18 of 37

Variables and Data Types

18

Variable

Declarations

Data Types

Variables in use

#include <stdio.h>

int main(void)

{

float radius, area, PI;

//Calculate area of circle

PI = 3.1416;

radius = 12.0;

area = PI * radius * radius;

printf("Area = %f", area);

}

A Simple C Program

19 of 37

printf()

19

The printf() function can be instructed to print integers, floats and string properly.

  • The general syntax is

printf( “format”, variables);

  • An example

int stud_id = 5200;

char name[20] = “Mike”; // array discussed in LO4

printf(“%s ‘s ID is %d \n”, name, stud_id);

20 of 37

printf()

20

  • Format Identifiers

%d decimal integers

%x hex integer

%c character

%f float number

%lf double number

%s string

%p pointer

%e decimal exponent

  • How to specify display space for a variable?

printf(“The student id is %5d \n”, stud_id);

The value of stud_id will occupy 5 characters space in the print-out.

21 of 37

21

  • Why “\n”

It introduces a new line on the terminal screen.

\a

alert (bell) character

\\

backslash

\b

backspace

\?

question mark

\f

formfeed

\’

single quote

\n

newline

\”

double quote

\t

horizontal tab

\v

vertical tab

escape sequence

22 of 37

printf()

22

23 of 37

scanf()

23

Description:

The C library function

int scanf(const char *format, ...) reads formatted input from keyboard. The function returns how many values where read. If scanf returns a 0 it means nothing was read.

Declaration:

Following is the declaration for scanf() function.

int scanf(const char *format, ...)

Example:

int a, result;

result = scanf("%d", &a);

24 of 37

scanf()

24

Example: The following example shows the usage of scanf() function to read strings.

Note: in scanf, we do not use & with array names

#include <stdio.h>

int main()

{

char str1[20], str2[30];

printf("Enter name: ");

scanf("%s", str1);

printf("Enter your website name: ");

scanf("%s", str2);

printf("Entered Name: %s\n", str1);

printf("Entered Website:%s", str2);

}

Enter name: admin

Enter your website name: www.tutorialspoint.com

Entered Name: admin

Entered Website: www.tutorialspoint.com

25 of 37

scanf()

25

What happens in this program? An integer called pin is defined. A prompt to enter in a number is then printed with the first printf statement. The scanf routine, which accepts the response, has a control string and an address list.

In the control string, the format specifier %d shows what data type is expected.

The &pin argument specifies the memory location of the variable the input will be placed in. After the scanf routine completes, the variable pin will be initialized with the input integer. This is confirmed with the second printf statement. The & character has a very special meaning in C. It is the address operator.

Is a function in C which allows the programmer to accept input from a keyboard. The following program illustrates the use of this function.

#include <stdio.h>

main() {

int pin;

printf("Please type in your PIN\n");

scanf("%d",&pin);

printf("Your access code is %d\n",pin);

}

26 of 37

26

Negative

- (unary)

Subtraction

-

Positive

+ (unary)

Modulo

%

Addition

+

NOTE - An int divided by an int returns an int:

10/3 = 3

Use modulo to get the remainder:

10%3 = 1

Multiplication

*

Division

/

Operator

Result

Operation

Example

-x

x - y

+x

x % y

x + y

x * y

x / y

Negative value of x

Difference of x and y

Value of x

Remainder of x divided by y

Sum of x and y

Product of x and y

Quotient of x and y

Arithmetic Operations

27 of 37

Arithmetic Assignment Operators

27

28 of 37

28

Operator

Result (FALSE = 0, TRUE ≠ 0)

Operation

Example

Equal to

==

Not equal to

!=

Greater than

>

Greater than or equal to

>=

Less than

<

Less than or

equal to

<=

x == y

x != y

x > y

x >= y

x < y

x <= y

True if x equal to y, else false

True if x not equal to y, else false

True if x greater than y, else

false

True if x greater than or equal to y, else false

True if x less than y, else false

True if x less than or equal to y, else false

Relational Operations

29 of 37

Increment and Decrement Operators

29

awkward

easy

easiest

x = x+1;

x += 1

x++

x = x-1;

x -= 1

x--

30 of 37

Example

30

  • Arithmetic operators

int i = 10;

int j = 15;

int add = i + j; //25

int diff = j – i; //5

int product = i * j; // 150

int quotient = j / i; // 1

int residual = j % i; // 5

i++; //Increase by 1

i--; //Decrease by 1

31 of 37

Example

31

  • Comparing them

int i = 10;

int j = 15;

float k = 15.0;

j / i = ?

j % i = ?

k / i = ?

k % i = ?

  • The Answer

j / i = 1;

j % i = 5;

k / i = 1.5;

k % i It is illegal.

Note: For %, the operands can only be integers.

32 of 37

Logical Operations

32

  • What is “true” and “false” in C

In C, there is no specific data type to represent “true” and “false”. C uses value “0” to represent “false”, and uses non-zero value to stand for “true”.

  • Logical Operators

A && B => A and B

A || B => A or B

A == B => Is A equal to B?

A != B => Is A not equal to B?

33 of 37

Logical Operations

33

A > B => Is A greater than B?

A >= B => Is A greater than or equal to B?

A < B => Is A less than B?

A <= B => Is A less than or equal to B?

  • Don’t be confused

&& and || have different meanings from & and |.

& and | are bitwise operators.

34 of 37

No operator for exponent in C

  •  

34

35 of 37

OPERATOR PRECEDENCE

35

Precedence and Associativity of C Operators

Symbol

Type of Operation

Associativity

[ ] ( ) . –> postfix ++ and postfix ––

Expression

Left to right

prefix ++ and prefix –– sizeof &   *   + – ~ !

Unary

Right to left

typecasts

Unary

Right to left

* / %

Multiplicative

Left to right

+ –

Additive

Left to right

<< >>

Bitwise shift

Left to right

< > <= >=

Relational

Left to right

== !=

Equality

Left to right

&

Bitwise-AND

Left to right

^

Bitwise-exclusive-OR

Left to right

|

Bitwise-inclusive-OR

Left to right

&&

Logical-AND

Left to right

||

Logical-OR

Left to right

? :

Conditional-expression

Right to left

= *= /= %= 

+= –= <<= >>= &=

^= |=

Simple and compound assignment

Right to left

,

Sequential evaluation

Left to right

36 of 37

36

Some practices

Compute the value of the following logical expressions?

int i = 10; int j = 15; int k = 15; int m = 0;

if( i < j && j < k) =>

if( i != j || k < j) =>

if( j<= k || i > k) =>

if( j == k && m) =>

if(i) =>

if(m || j && i ) =>

37 of 37

Answers

37

int i = 10; int j = 15; int k = 15; int m = 0;

if( i < j && j < k) => false

if( i != j || k < j) => true

if( j<= k || i > k) => true

if( j == k && m) => false

if(i) => true

if(m || j && i ) => true