C programming language Tutorial-Page1

Introduction:

This C programming language tutorial covers basics of C variable data types, control flow statements,arithmetic,logical,relational operators, C function declaration and definition,array,pointer,structure,union,typedef,enum and more.

C variable data types

Following table summarizes C variable data types,C keyword, size(in bytes) and range.

Data Type C keyword Size(bytes) Range
Character char 1 -128 to 127
Integer int 2 -32768 to 32767
Short integer short 2 -32768 to 32767
Long integer long 4 -2,147,483,648 to 2,147,438,647
Unsigned character unsigned char 1 0 to 255
Unsigned integer unsigned int 2 0 to 65535
Unsigned short integer unsigned short 2 0 to 65535
Unsigned long integer unsigned long 4 0 to 4,294,967,295
Single-precision floating-point float 4 1.2E-38 to 3.4E381
Double-precision floating-point double 8 2.2E-308 to 1.8E3082

Control flow statements in C

Following are some of the control flow loops,selection statements similar to other programming languages.

For Loop:
for ( initial; condition; increment )
{
Statements (one or multiple);
}

For example,
for (i=0;i<10;i++)
{

}

While and Do while:
while (condition check)
{
Statements; //one or many
}

do
{
Statements; //one or many
}
While(condition check)

If else statement:
If (conditioncheck1 )
{
//Statements (one or many)
}
else if(conditioncheck2 )
{
//Statements(one or many)
}
else if(conditioncheck3 )
{
//Statements(one or many)
}

else
{
//Statements(one or many)
}

Switch statement:
Switch (condition)
{
Case condition1: //statements
Case condition2: //statements
Case condition3: //statements
Default: //statements
}

One can insert break statement in each case to bring program control out of that particular case.

Break statement
Bring program control out of the loop or function is has been called.

Continue
Inside switch statement, and when called in the loop (while, for) it causes next iteration of the loop to execute.

Operators-Arithmetic,Logical,Relational

Arithmetic operators:
Addition +
Subtraction -
Multiplication *
Division /
Modulus %
Increment ++
Decrement --


Relational operators:
Equal ==
Greater than >
Less than <
Greater than or equal to >=
Less than or equal to <=
Not equal !=

Logical operators:
AND &&
OR ||
NOT !

Bitwise logical operators:
& Bitwise AND
| Bitwise inclusive OR
^ Bitwise exclusive OR
<< left shift
>> right shift
~ one's complement

Compound Assignment operators:
a+=b can be writtern for a=a+b. This is(+=) called compound assignment operator for addition. Few operators are outlined below and so on:
Addition +=
Substration -=
Bitwise AND assignment &=
Bitwise left shift <<=

Member and Pointer Operator:
Array subscript : a[0]
Indirection(Object pointed to by a) : *a
Reference(address of a) : &a
Structure dereference (member b of object pointed to by a) : a->b
Structure reference (member 'b'of object'a'):a.b

Other operators:
Function call: a(a1,a2)
Comma: a,b
Ternary Condition: a?b:c
Sizeof: sizeof(a)
Type cast: (type)a

C Function declaration/definition

Functions:
  •Modules in C
  •Programs combine user-defined functions with library functions
  •C standard library has a wide variety of functions
Function calls:
 •Invoking functions:
  •Provide function name and arguments (data)
  •Function performs operations or manipulations
  •Function returns results
 •Function call analogy:
  •Boss asks worker to complete task
  •Worker gets information, does task, returns result
  •Information hiding: boss does not know details

Any file with .c extension is called as c file. Any c file contains functions and variables as per c program structure.

Function declaration:
return_valuefunction_name( arg_1,...,arg_n);

Function Definition
return_value function_name( arg_1,...,arg_n);

{
/*C statements and local variables if any, should end with semicolon(;) */
}

Function prototype declaration for example,
doublecube_number( int number );
number is the argument which is of int type. There may be more than one arguments.
Function name is cube_number which calculates cube of a number and returns a value of type double.

More than one value can be passed to a function as arguments or more than one value can be returned from a function by using concept called "pass by reference". What we have seen above is pass by value. In pass by reference pointer is used as argument to a function or pointer is used as return variable. Pointer points to the starting address of either array or structure or union and hence all the elements can be accessed easily.

Array

Array stores similar data type elements in consecutive memory locations.
Single dimensional array
#define arr_size 10
int array[arr_size] = { 1, 2, 3,4,5,6,7,8,9,10 };
Multi dimensional array
#define no_rows 4
#define no_cols 3
int array[no_rows][no_cols] = { { 1, 2, 3 } , { 4, 5, 6 } ,
{ 7, 8, 9 } , { 10, 11, 12 } };

Pointer

Pointer stores address of some data type element viz. int, float, char, char string, structure, union, array or any C function. Hence using pointer directly respective data type can be accessed once pointer is initialized for the same.

typename *ptr;
typename can be any c variable type that pointer will point

For Example,
int *p1; //p1 is the pointer and points to int variable data type

Pointer Initializing:
int employee_number;
int arr[10];
int *ptr1, *ptr2;

ptr1=&employee_number;
ptr2=arr; //array name itself points to the memory address and no & required

Structure

Structure contains one or more variable of different types. It helps for easy management as different variable types are assigned by one common structure name. All the structure variables are stored consecutively in memory. Structure can hold another structure also as member.

struct  emp_record
{ char name[10];
int number[12];
float Salary;
};

Here structure name is emp_record and name,number,salary are structure member variables/elements. In order to access structure members, variable to structure is to be declared as mentioned below. It can be simple structure variable or pointer variable to the structure.

struct emp_record employee; // employee is the instance for the structure emp_record
struct emp_record *ptr; // ptr is the pointer to the structure emp_record

Structure member elements can be accessed using (.) operator if instance is non- pointer. Can be accessed using (->) operator if instance is pointer to the structure.

For example,
employee.name OR employee.number OR employee.Salary
ptr->name OR ptr->number OR ptr->Salary
ptr = &employee; //pointer need to be initialized with structure's memory location address

Union

Union is similar to the structure, the difference in allocating size in the memory and the keyword used here in union in place of struct.

union emp_record
{
char name[10];
int number[12];
float Salary;
};

If above declaration and instance for the same is of structure, then it allocates about 7 bytes ( 1 byte for char,2 for int and 4 for float) in memory.

If the same declaration and instance is for the union, it allocates size as of maximum size of the member variable(here it is Salary and hence size allocated will be 4bytes for this union). Here size allocated in memory is used by one member variable at a time.

Typedef

Typedef is the keyword which creates synonym of some variable type. It is mainly used to create synonym of structure/union. Hence it makes easy to call structure by one simple easy to remember name rather than calling entire structure/union all the time. Hence it minimizes lines of code in a C program.

For example,
typedef struct {
char name[10];
int number[12];
float Salary;
}emp_record;

Hence here emp_record is the synonym identifier of the following lines of code.
struct {
char name[10];
int number[12];
float Salary;
}

Enum type

enum employee_num {Rahul,Ramesh,Roopesh};
As per this enumspecifier C assigns automatically, Rahul=0, Ramesh=1 and Roopesh=2

Starting value can be pre-configured as below
enum employee_num {Rahul=100,Ramesh,Roopesh};

conditional Expression

C provides short way of representing a single if-else statement as follows.
if(a>b)
z=a;
else
z=b;

Above can be represented by single conditional expression, z=(a>b)?a:b
Here if a>b is TRUE then z=a and if a>b is FALSE then z=b.

Preprocessor directive

Preprocessor statements executes prior to actual compilation of the C program. All the preprocessor directives in C language,begin with # (which is a pound sign).
One must have seen #include preprocessor directive, which includes C header file in all the C programs.

Another common preprocessor directive is #define directive, which replaces any character string with some value or string.
For Example,
#define pi 3.1428
#define CITY_NAME "BANGALORE"

Another preprocessor directive is #ifdef and #endif

#ifdef MACRO_N
stat1
stat2
-----
statN
#endif

As shown MACRO_N is defined using #define directive, here based on MACRO_N set of statements are compiled prior to the other ones.