The C Language
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
Fairly concise
2
C History
Developed between 1969 and 1973 along with Unix
Due mostly to Dennis Ritchie
Designed for systems programming
Operating systems
Utility programs
Compilers
3
Hello World in C
#include <stdio.h>
int main()
{
printf(“Hello, world!n”);
}
4
Hello World in C
#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
5
Pieces of C
Types and Variables (LO2)
Definitions of data in memory
Expressions (LO2)
Arithmetic, logical, and assignment operators in an infix
notation
Statements (LO3)
Sequences of conditional, iteration, and branching
instructions
Functions (LO4)
Groups of statements and variables invoked recursively
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
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.
Variable types
8
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
int myVariable;
myVariable = 5;
5
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
char first_letter;
int warp_factor;
• Variable declarations consist of a unique identifier (name)…
float length;
41
Variables
5.74532370373175
× 10-14
0
15 Data Memory (RAM)
‘A’
12
char first_letter;
float length;
int warp_factor; 41
Variables
5.74532370373175
× 10-44
0
15 Data Memory (RAM)
‘A’
…and a data type
Determines size and how
values are interpreted
13
Identifiers
• Names given to program variables
• Valid characters in identifiers:
• Case sensitive!
• Only first 31 characters significant
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
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
Syntax
type identifier1, identifier2,…,identifiern;
Examples
int x, y, z;
float warpFactor;
char text_buffer;
unsigned index;
Variables
15
Syntax
How to Declare a Variable?
Variables may be declared in a few ways:
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
Examples
How to Declare a Variable
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
A Simple C Program
#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
Variables and Data Types
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
printf()
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
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.
printf()
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
r carriage return 000 octal number
t horizontal tab xhh hexadecimal number
v vertical tab
escape sequence
22
scanf()
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
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: %sn", str1);
printf("Entered Website:%s", str2);
}
scanf()
Enter name: admin
Enter your website name: www.tutorialspoint.com
Entered Name: admin
Entered Website: www.tutorialspoint.com
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.
scanf()
#include <stdio.h>
main() {
int pin;
printf("Please type in your
PINn");
scanf("%d",&pin);
printf("Your access code is
%dn",pin);
}
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
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
Increment and Decrement Operators
awkward easy easiest
x = x+1; x += 1 x++
x = x-1; x -= 1 x--
30
Example
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
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.
Example
32
Logical Operations
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
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.
Logical Operations
34
No operator for exponent in C
• In C, there is no operator which means “raise to the power”. The
symbol “^” means “Bitwise Exclusive Or” or “XOR” which gives a 1
if the two bits are different and zero otherwise.
• Assume char A = 60 and char B = 13 in binary format, they will be
as follows
• A = 0011 1100
• B = 0000 1101
• A&B = 0000 1100 Bitwise AND
• A|B = 0011 1101 Bitwise OR
• A^B = 0011 0001 Bitwise XOR
• If you need to find a power, you should use multiplication *
• For example, x*x*x is the same as 𝑥3
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
OPERATOR PRECEDENCE
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
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
Answers
38