Ge2112 - Fundamentals of Computing and Programming: Unit Iv C
Ge2112 - Fundamentals of Computing and Programming: Unit Iv C
com
GE2112 - FUNDAMENTALS OF COMPUTING AND PROGRAMMING
UNIT IV
INTRODUCTION TO C
Overview of C – Constants, Variables and Data Types – Operators and Expressions – Managing Input and Output
operators – Decision Making - Branching and Looping.
OVERVIEW OF C
As a programming language, C is rather like Pascal or Fortran.. Values are stored in variables. Programs are
structured by defining and calling functions. Program flow is controlled using loops, if statements and function
calls. Input and output can be directed to the terminal or to files. Related data can be stored together in arrays or
structures.
Of the three languages, C allows the most precise control of input and output. C is also rather more terse than
Fortran or Pascal. This can result in short efficient programs, where the programmer has made wise use of C's
range of powerful operators. It also allows the programmer to produce programs which are impossible to
understand. Programmers who are familiar with the use of pointers (or indirect addressing, to use the correct term)
will welcome the ease of use compared with some other languages. Undisciplined use of pointers can lead to
errors which are very hard to trace. This course only deals with the simplest applications of pointers.
A Simple Program
#include <stdio.h>
main()
{
printf("Programming in C is easy.\n");
}
In C, lowercase and uppercase characters are very important! All commands in C must be lowercase. The C
programs starting point is identified by the word
main()
This informs the computer as to where the program actually starts. The brackets that follow the keyword main
indicate that there are no arguments supplied to this program (this will be examined later on).
The two braces, { and }, signify the begin and end segments of the program. The purpose of the statment
include <stdio.h>
is to allow the use of the printf statement to provide program output. Text to be displayed by printf() must be
enclosed in double quotes. The program has only one statement
printf("Programming in C is easy.\n");
printf() is actually a function (procedure) in C that is used for printing variables and text. Where text appears in
double quotes "", it is printed without modification. There are some exceptions however. This has to do with the \
Programming in C is easy.
and the cursor is set to the beginning of the next line. As we shall see later on, what follows the \ character will
determine what is printed, ie, a tab, clear screen, clear line etc. Another important thing to remember is that all C
statements are terminated by a semi-colon ;
C programs are essentially constructed in the following manner, as a number of well defined sections.
/* HEADER SECTION */
/* Contains name, author, revision number*/
/* INCLUDE SECTION */
/* contains #include statements */
/* FUNCTIONS SECTION */
/* user defined functions */
/* main() SECTION */
int main()
{
User defined variables must be declared before they can be used in a program. Variables must begin with a
character or underscore, and may be followed by any combination of characters, underscores, or the digits 0 - 9.
Local
These variables only exist inside the specific function that creates them. They are unknown to other functions and
to the main program. As such, they are normally implemented using a stack. Local variables cease to exist once
the function that created them is completed. They are recreated each time a function is executed or called.
Global
These variables can be accessed (ie known) by any function comprising the program. They are implemented by
associating memory locations with variable names. They do not get recreated if the function is recalled.
Example:
#include <stdio.h>
int add_numbers( void ); /* ANSI function prototype */
/* These are global variables and can be accessed by functions from this point on */
int value1, value2, value3;
main()
{
auto int result;
result = add_numbers();
printf("The sum of %d + %d + %d is %d\n",
value1, value2, value3, final_result);
}
The scope of global variables can be restricted by carefully placing the declaration. They are visible from the
declaration until the end of the current source file.
#include <stdio.h>
void no_access( void ); /* ANSI function prototype */
void all_access( void );
C programs have a number of segments (or areas) where data is located. These segments are typically,
_DATA Static data
_BSS Uninitialized static data, zeroed out before call to main()
_STACK Automatic data, resides on stack frame, thus local to functions
_CONST Constant data, using the ANSI C keyword const
The use of the appropriate keyword allows correct placement of the variable onto the desired data segment.
Example:
main()
{
int i;
Example:
main()
{
int i;
while( i < 3 ) {
demo();
i++;
}
}
Program output
auto = 0, static = 0
auto = 0, static = 1
auto = 0, static = 2
Static variables are created and initialized once, on the first call to the function. Subsequent calls to the function
do not recreate or re-initialize the static variable. When the function terminates, the variable still exists on the
_DATA segment, but cannot be accessed by outside functions.
Automatic variables are the opposite. They are created and re-initialized on each entry to the function. They
disappear (are de-allocated) when the function terminates. They are created on the _STACK segment.
• INTEGER
These are whole numbers, both positive and negative. Unsigned integers (positive values only) are
supported. In addition, there are short and long integers.
int
An example of an integer value is 32. An example of declaring an integer variable called sum is,
int sum;
sum = 20;
• 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;
• 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;
• CHARACTER
These are single characters. The keyword used to define character variables is,
•
• char
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.
Example:
main()
{
int sum;
float money;
char letter;
double pi;
In C variables may be initialised with a value when they are declared. Consider the following declaration, which
declares an integer variable count which is initialised to 10.
The = operator is used to assign values to data variables. Consider the following statement, which assigns the
value 32 an integer variable count, and the letter A to the character variable letter
count = 32;
letter = 'A'
Variable Formatters
%d decimal integer
%c character
%s string or character array
%f float
%e double
HEADER FILES
Header files contain definitions of functions and variables which can be incorporated into any C program by using
the pre-processor #include statement. Standard header files are provided with each compiler, and cover a range of
areas, string handling, mathematical, data conversion, printing and reading of variables.
To use any of the standard functions, the appropriate header file should be included. This is done at the beginning
of the C source file. For example, to use the function printf() in a program, the line
#include <stdio.h>
should be at the beginning of the source file, because the definition for printf() is found in the file stdio.h All
header files have the extension .h and generally reside in the /include subdirectory.
#include <stdio.h>
#include "mydecls.h"
The use of angle brackets <> informs the compiler to search the compilers include directory for the specified file.
The use of the double quotes "" around the filename inform the compiler to search in the current directory for the
specified file.
An expression is a sequence of operators and operands that specifies computation of a value, or that designates
an object or a function, or that generates side effects, or that performs a combination thereof.
ARITHMETIC OPERATORS:
Example:
#include <stdio.h>
main()
{
int sum = 50;
float modulus;
PRE means do the operation first followed by any assignment operation. POST means do the operation after any
assignment operation. Consider the following statements
#include <stdio.h>
main()
{
int count = 0, loop;
If the operator precedes (is on the left hand side) of the variable, the operation is performed first, so the statement
loop = ++count;
really means increment count first, then assign the new value of count to loop.
== equal to
!= not equal
< less than
<= less than or equal to
> greater than
>= greater than or equal to
Example:
#include <stdio.h>
printf("\n");
}
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");
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 );
}
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,
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;
#include <stdio.h>
main()
{
int input;
BIT OPERATIONS
C has the advantage of direct bit manipulation and the operations available are,
Example:
main()
{
int n1 = 10, n2 = 20, i = 0;
Example:
value1 ^= value2;
value2 ^= value1;
value1 ^= value2;
printf("Value1 = %d, Value2 = %d\n", value1, value2);
}
Example:
main()
{
int loop;
Printf ():
printf() is actually a function (procedure) in C that is used for printing variables and text. Where text appears in
double quotes "", it is printed without modification. There are some exceptions however. This has to do with the \
and % characters. These characters are modifier's, and for the present the \ followed by the n character represents
a newline character.
Example:
#include <stdio.h>
main()
{
printf("Programming in C is easy.\n");
printf("And so is Pascal.\n");
}
@ Programming in C is easy.
And so is Pascal.
Scanf ():
Scanf () is a function in C which allows the programmer to accept input from a keyboard.
Example:
#include <stdio.h>
The following characters, after the % character, in a scanf argument, have the following effect.
Getchar, Putchar
getchar() gets a single character from the keyboard, and putchar() writes a single character from the
keyboard.
Example:
main()
{
int i;
int ch;
The program reads five characters (one for each iteration of the for loop) from the keyboard. Note that getchar()
gets a single character from the keyboard, and putchar() writes a single character (in this case, ch) to the console
screen.
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,
if( expression )
program statement;
Example:
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()
{
int number;
int valid = 0;
while( valid == 0 ) {
IF ELSE
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;
}
NESTED IF ELSE
Example:
#include <stdio.h>
main()
{
int invalid_operator = 0;
char operator;
float number1, number2, result;
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");
Example:
printf("\n");
}
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 = count + 1 );
which adds one to the current value of count. Control now passes back to the conditional test,
printf("\n");
which prints a newline, and then the program terminates, as there are no more statements left to execute.
The while provides a mechanism for repeating C statements whilst a condition is true. Its format is,
while( condition )
program statement;
Somewhere within the body of the while loop a statement must alter the value of the condition to allow the loop to
finish.
Example:
main()
{
int loop = 0;
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 allows a loop to continue whilst a condition evaluates as TRUE (non-zero). The loop is
executed as least once.
Example:
/* Demonstration of DO...WHILE */
#include <stdio.h>
main()
{
int value, r_digit;
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,
switch ( expression ) {
case value1:
program statement;
program statement;
......
break;
case valuen:
program statement;
.......
break;
default:
.......
.......
break;
}
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 the end of the case selections.
#include <stdio.h>
main()
{
int menu, numb1, numb2, total;