UNIT I Notes
UNIT I Notes
Introduction to 'C' programming fundaments – Structure of 'C' program - compilation and linking processes
- Constants, Variables: Data Types, Expressions using Operators in 'C', Managing Input and Output
Operators, Decision Making and Branching, Looping statements, Solving Simple Scientific and Statistical
Problems.
INTRODUCTION TO C PROGRAMMING FUNDAMENTALS
C is a high-level language which also provides the capabilities that enable the programmers to ‘get in
close’with the hardware and allows them to interact with the computer on a much lower level.
a) C is a core language : In computing, C is a general purpose, cross-platform, block
structuredprocedural, imperative computer programming language.
b) C is a small language: C has only thirty-two keywords. This makes it relatively easy to learn
compared to bulkier languages.
c) C is quick: can write codes which run quickly, and the program can be very ‘close to the hardware’.
d) C is portable: C programs written on one system can be run with little or no modification on other
systems. If modifications are necessary, they can often be made by imply changing a few entries
in aheader fi le accompanying the main program.
DEVELOPING PROGRAMS IN C
There are mainly three steps:
1. Writing the C program
2. Compiling the program and
3. Executing it.
• For these steps, some software components are required, namely an operating system, a text
editor(integrated development environment), the C compiler, assembler, and linker.
• C uses a semicolon as a statement terminator; the semicolon is required as a signal to the
compiler to indicate that a statement is complete.
• All program instructions, which are also called statements, have to be written in lower case
characters.
A brief explanation of each of the processes involved in the compilation model is given as follows:
Writing or Editing the source program using a text editor or an IDE and saving it with .c extension.
Programming Environment Most programming language compilers come with a specifi c editor that
canprovide facilities for managing the programs. Such an editor offers a complete environment for
writing, developing, modifying, deploying, testing, and debugging the programs. Such software is
referred to as anintegrated development environment or IDE.
Preprocessing is the fi rst phase of the C compilation. It processes include-fi les, conditional
compilationinstructions and macros. preprocessor directive is a statement (such as #defi ne) that gives
the preprocessor specifi c instructions on how to modify your source code. The preprocessor
is invoked as the fi rst part of your compiler program’s compilation step. It is usually hidden from the
programmer because it is run automatically by the compiler.
Compilation is the second pass. It takes the output of the preprocessor, and the source code, and
generatesassembler source code.
Assembly is the third stage of compilation. It takes the assembly source code and produces an assembly
listing with offsets. The assembler output is stored in an object file.
Linking is the final stage of compilation. After the program has been translated into object code, it is
readyto be linked. The purpose of the linking phase is to get the program into a final form for execution
on the
computer. The program may use other source programs that were previously processed by the
compiler.
These functions are stored as separate object fi les which must be
linked to our object fi le. There are three types of errors that may
occur:
a) Compile errors These are given by the compiler and prevent the program from not running.
b) Linking errors These are given by the linker or at runtime and ends the program. The linker can
also detect and report errors, for example, if part of the program is missing or a non-existent library
component is referenced.
c) Runtime errors These are given by the operating system. Removing errors from a program is called
debugging.
A SIMPLE C PROGRAM
/* A Simple C
Program */#include
<stdio.h>
int main(void)
{
printf(“C is
Sea\n”);return 0;
}
A comment
line
/* A Simple C Program */
This is a comment line.In C, the comments can be included in the program. The comment lines start
with
/* and terminate with */. These statements can be put anywhere in the program. The compiler
considersthese as non-executable statements.
Preprocessor
In C, all lines that begin with # are directives for the preprocessor, which means that all these directives
will be processed before the program is actually compiled. The #include directive includes the contents
ofa fi le during compilation. In this case, the fi le stdio.h is added in the source program before the
actual compilation begins. stdio.h is a header fi le that comes with the C compiler and contains
information aboutinput and output functions
e.g. printf()
(a) they must begin in the fi rst column and no spaces are allowed between ‘#’ and include and
(b) theyare not terminated by a semicolon.
main()
This is the starting point of the program. A C program may contain one or more functions one
of which must be main(). Functions are the building blocks of a C program. For now the functions
may be recognized by the presence of parentheses after their names.
{}
This is a brace. As the name implies, braces come in packs of two, i.e. for every open brace
there must be a matching close. Braces allow me to lump pieces of program together. Such a lump of
programis often called a block. Such a block of program instructions, within these braces, form the
body of thefunction main().
printf(“C is Sea\n”);
printf() is a ‘library function’ The \n (pronounced backslash n) in the string argument of the
function printf() “C is Sea\n” is an example of an escape sequence. It is used to print the new line
character. If the program is executed, the \n does not appear in the output. Each \n in the string
argumentof a printf() causes the cursor to be placed at the beginning of the next line of output. Think
of an escapesequence as a ‘substitute character’ for outputting special characters or some positional
action on the printing point, known as cursor, when the output device is a visual diaplay unit.
return 0;
This statement indicates that the value returned by the function main(), after the program
instructions in its body
void - It indicates no value.
int – indicates integer datatype
other user-defined functions are correct. This form of checking helps to ensure the semantic
correctness of the program.
PHILOSOPHY : MAIN
• main() is a user defined function. main() is the first function in the program which gets called
whenthe program executes. The start up code c calls main() function. We can’t change the
name of the main() function.
• main() is must.
• According to ANSI/ISO/IEC 9899:1990 International Standard for C, the function called at
programstart up is named main. The implementation declares no prototype for this function. It
can be defined with no parameters:
int main(void) { /* ... */ }
• or with two parameters (referred to here as argc and argv) :
• int main(int argc, char *argv[ ]) { /* ... */ }
STRUCTURE : C PROGRAM
These are whole numbers, both positive and negative. Unsigned integers (positive values only)
are supported. In addition, there are short and long integers.
The keyword used to define integers is,
int
An example of an integer value is 32. An example of declaring an integer variable called sum is,
int sum;
sum = 20;
2. FLOATING POINT
These are numbers which contain fractional parts, both positive and negative. The keyword used to
define float variables is,
float
An example of a float value is 34.12. An example of declaring a float variable called money is,
float money;
money =0.12;
3. DOUBLE
These are exponetional numbers, both positive and negative. The keyword used to define double
variables is,
double
An example of a double value is 3.0E2. An example of declaring a double variable called big is,
double big;
big =312E+7;
4. CHARACTER
These are single characters. The keyword used to define character variables is,
char
An example of a character value is the letter A. An example of declaring a character
variable called letter is,
char letter;
letter= 'A';
Note: the assignment of the character A to the variable letter is done by enclosing the
value in single quotes. Remember the golden rule: Single character - Use single quotes.
Sample program illustrating each data type
Example:
#include < stdio.h >
main()
{
int sum;
float money;
char letter;
double pi;
sum = 10; /* assign integer value */
money = 2.21; /* assign float value */
letter = 'A'; /* assign character value */
pi = 2.01E6; /* assign a double value */
printf("value of sum = %d\n", sum );
printf("value of money = %f\n", money);
printf("value of letter = %c\n", letter);
printf("value of pi = %e\n", pi );
}
Sample program output
value of sum = 10
value of money =2.210000
value of letter =A
value of pi = 2.010000e+06
TYPE CONVERSION
Though the C compiler performs automatic type conversions, the programmer should be aware of
what is going on so as to understand how C evaluates expressions.
When a C expression is evaluated, the resulting value has a particular data type. If all the
variables in the expression are of the same type, the resulting type is of the same type as well.
For example, if x and y are both of int type , the expression x +y is of int type as well.
The smallest to the largest data types conversion with respect to size is along the arrow as
shown below:
}
RELATIONALS (AND, NOT, OR, EOR)
Combining more than one condition
These allow the testing of more than one condition as part of selection statements. The symbols
are
LOGICAL AND &&
Logical and requires all conditions to evaluate as TRUE (non-zero).
LOGICAL OR ||
Logical or will be executed if any ONE of the conditions is TRUE (non-zero).
LOGICAL NOT !
logical not negates (changes from TRUE to FALSE, vsvs) a condition.
LOGICAL EOR ^
Logical eor will be excuted if either condition is TRUE, but NOT if they are all true.
Example:
The following program uses an if statement with logical AND to validate the users input to be in
the range 1-10.
#include <stdio.h>
main()
{
int number; int
valid = 0;
while( valid == 0 ) {
printf("Enter a number between 1 and 10 -->");
scanf("%d", &number);
if( (number < 1 ) || (number > 10) ){
printf("Number is outside range 1-10. Please re-enter\n");
valid = 0;
}
else
valid = 1;
}
printf("The number is %d\n", number );
}
Example:
NEGATION
#include <stdio.h>
main()
{ int flag = 0;
if( ! flag ) {
printf("The flag is not set.\n");
flag = ! flag;
}
printf("The value of flag is %d\n", flag);
}
Example:
Consider where a value is to be inputted from the user, and checked for validity to be within a
certain range, lets say between the integer values 1 and 100.
#include <stdio.h>
main()
{
int number;
int valid = 0;
while( valid == 0 ) {
printf("Enter a number between 1 and 100");
scanf("%d", &number );
if( (number < 1) || (number > 100) ) printf("Number
is outside legal range\n");
else
valid = 1;
}
printf("Number is %d\n", number );
}
THE CONDITIONAL EXPRESSION OPERATOR or TERNARY OPERATOR
This conditional expression operator takes THREE operators. The two symbols used to denote
this operator are
the ? and the :. The first operand is placed before the ?, the second operand between the ? and the
:, and the third after the :. The general format is,
condition ? expression1 : expression2
If the result of condition is TRUE ( non-zero ), expression1 is evaluated and the result of the
evaluation becomes the result of the operation. If the condition is FALSE (zero), then expression2
is evaluated and its result becomes the result of the operation. An example will help,
s = ( x < 0 ) ? -1 : x * x;
{
int n1 = 10, n2 = 20, i = 0;
i = n2 << 4; /* n2 shifted left four times */printf("%d\n", i);
i = n1 >> 5; // n1 shifted right five times
printf("%d\n", i);
}
Example:
/* Example program using EOR operator */
#include <stdio.h>
main()
{
int value1 = 2, value2 = 4;
value1 ^= value2;
value2 ^= value1;
value1 ^= value2;
printf("Value1 = %d, Value2 = %d\n", value1, value2);
}
Example:
/* Example program using AND operator */
#include <stdio.h>
main()
{
int loop;
#include <stdio.h>
main()
{
printf("Programming in C is easy.\n");
printf("And so is Pascal.\n");
}
OUTPUT:
Programming in C is easy.
And so is Pascal.
FORMATTERS for printf are, Cursor Control
Formatters
\n newline
\t tab
\r carriage return
\f form feed
\v vertical tab
Scanf ():
Scanf () is a function in C which allows the programmer to accept input from a keyboard.
Example:
#include <stdio.h>
main() /* program which introduces keyboard input */
{
int number;
printf("Type in a number \n");
scanf("%d", &number);
printf("The number you typed was %d\n", number);
}
Functions Description
Reads a single character from the user at the
getch()
console, without echoing it.
Reads a single character from the user at the console, and
getche()
echoing it.
Reads a single character from the user at the console, and
getchar()
echoing it, but needs an Enter key to be pressed at the end.
gets() Reads a single string entered by the user at the console.
puts() Displays a single string's value at the console.
putch() Displays a single character value at the console.
putchar() Displays a single character value at the console.
DECISION MAKING
IF STATEMENTS
The if statements allows branching (decision making) depending upon the value or state of
variables. This allows statements to be executed or skipped, depending upon decisions. The
basic format is,
Syntax
if( expression ) program
statement;
Example
if( students < 65 )
++student_count;
In the above example, the variable student_count is incremented by one only if the value of the
integer variable students is less than 65.
The following program uses an if statement to validate the users input to be in the range 1-10.
Example:
#include <stdio.h>
main()
{
while( valid == 0 ) {
printf("Enter a number between 1 and 10 -->");scanf("%d", &number);
/* assume number is valid */ valid = 1;
if( number < 1 ) {
printf("Number is below 1. Please re-enter\n"); valid = 0;
}
if( number > 10 ) {
printf("Number is above 10. Please re-enter\n"); valid = 0;
}
}
printf("The number is %d\n", number );
}
IF ELSE
The general format for these are,
Syntax:
if( condition 1 ) statement1;
else if( condition 2 ) statement2;
else if( condition 3 ) statement3;
else statement4;
The else clause allows action to be taken where the condition evaluates as false (zero).
The following program uses an if else statement to validate the users input to be in the range 1-10.
Example:
#include <stdio.h>
main(){
int number; int valid =0;
while( valid == 0 ) {
printf("Enter a number between 1 and 10 -->");
scanf("%d",&number);
if( number < 1 ) {
printf("Number is below 1. Please re-enter\n"); valid = 0;
}
else if( number > 10 ) {
printf("Number is above 10. Please re-enter\n");
valid = 0;
}
else
valid = 1;
}
printf("The number is %d\n", number );
}
This program is slightly different from the previous example in that an else clause is used to setthe variable
valid to 1. In this program, the logic should be easier to follow.
NESTED IF ELSE
/* Illustates nested if else and multiple arguments to the scanf function. */
Example:
#include <stdio.h>
main(){
int invalid_operator = 0;char
operator;
float number1, number2, result;
printf("Enter two numbers and an operator in the format\n");
printf(" number1 operator number2\n");
scanf("%f %c %f", &number1, &operator, &number2);
if(operator == '*')
result = number1 * number2;else
if(operator == '/')
result = number1 / number2;else
if(operator == '+')
result = number1 + number2;else if
( operator == ' -' )
result = number1 - number2 ;else
invalid_operator = 1;
if( invalid_operator != 1 )
printf("%f %c %f is %f\n", number1, operator, number2, result );
else
printf("Invalid operator.\n");
}
SWITCH CASE:
The switch case statement is a better way of writing a program when a series of if elses occurs.The
general format for this is,
Syntax
switch ( expression ) {
case value1:
program statement;
program statement;
......
break;
case valuen:
program statement;
.......
break;
default:
.......
.......
}
The keyword break must be included at the end of each case statement. The default clause is
optional, and is executed if the cases are not met. The right brace at the end signifies theend of
the case selections.
Example:
main()
{
int menu, numb1, numb2, total;
printf("enter in two numbers -->");
scanf("%d %d", &numb1, &numb2 );
printf("enter in choice\n");
printf("1=addition\n");
printf("2=subtraction\n"); scanf("%d",&menu );
switch( menu ) {
case 1: total = numb1 + numb2; break; case 2:
total = numb1 - numb2; break; default:
printf("Invalid option selected\n");
}
if( menu == 1 )
printf("%d plus %d is %d\n", numb1,numb2,total );else
if( menu == 2 )
printf("%d minus %d is %d\n", numb1, numb2, total );
}
The above program uses a switch statement to validate and select upon the users input choice,simulating a simple
menu of choices.
BRANCHING AND LOOPING
The program declares an integer variable count. The first part of the for statement
for( count = 1;
initialises the value of count to 1. The for loop continues whilst the condition
count <= 10;
evaluates as TRUE. As the variable count has just been initialised to 1, this
condition is TRUE and so the program statement
printf("%d ", count );
is executed, which prints the value of count to the screen, followed by a space character.
Next, the remaining statement of the for is executed
count = count + 1 );
which adds one to the current value of count. Control now passes back to the conditionaltest,
count <= 10;
which evaluates as true, so the program statement
printf("%d ", count );
is executed. Count is incremented again, the condition re-evaluated etc, until count reaches a
value of 11.
When this occurs, the conditional test
count <= 10
evaluates as FALSE, and the for loop terminates, and program control passes to the statement
printf("\n");
which prints a newline, and then the program terminates, as there are no more statements left toexecute.
THE WHILE STATEMENT
The while provides a mechanism for repeating C statements whilst a condition is true. Its format is,
Syntax:
while( condition )
program statement;
Somewhere within the body of the while loop a statement must alter the value of the conditionto
allow the loop to finish.
Example:
/* Sample program including while */
#include <stdio.h>
main()
{
int loop = 0;
while( loop <= 10 ) {
printf("%d\n", loop);
++loop;
}
}
The above program uses a while loop to repeat the statements
printf("%d\n", loop);
++loop;
whilst the value of the variable loop is less than or equal to 10.
Note how the variable upon which the while is dependant is initialised prior to the while statement (in this
case the previous line), and also that the value of the variable is altered within the loop, so that eventually the
conditional test will succeed and the while loop will terminate.
This program is functionally equivalent to the earlier for program which counted to ten
THE DO WHILE STATEMENT
The do { } while statement allows a loop to continue whilst a condition evaluates as TRUE (non-zero).
The loop is executed as least once.
Syntax:
while( condition )
program statement;
Example:
/* Demonstration of DO...WHILE */
#include <stdio.h>
main(){
int value, r_digit;
printf("Enter the number to be reversed.\n");
scanf("%d", &value);
do {
r_digit = value % 10;
printf("%d", r_digit); value
= value / 10;
} while( value != 0 );
printf("\n");
}
The above program reverses a number that is entered by the user. It does this by using the modulus
% operator to extract the right most digit into the variable r_digit. The original number is thendivided by
10, and the operation repeated whilst the number is not equal to 0.