SlideShare una empresa de Scribd logo
1 de 71
Descargar para leer sin conexión
C FOR ENGINEERS           R.G.Salokhe



FOR OTHER BOOKS WRITTEN BY ME PLEASE VISIT

http://www.geocities.com/arutacomp/

or mail me on

arutacomp@rediffmail.com


The books available are

1] AutoCAD 2007 – The third dimension
2] Visual Basic 6 – from bottom to top
3] MS-ACCESS

Thank you.
Rajendra Salokhe
C FOR ENGINEERS                      R.G.Salokhe


The C language was created, designed and written by Dennis Ritchie in 1972 at Bell
Laboratories. C was designed to run under UNIX operating system on the DEC, PDP11
computer.

Features of C :-
a) Portability :- The best feature for which C gained popularity is the portability of
code. The C language programs could be run on variety of computers with a little or no
change in the source code. Which means the C language code can be used under various
operating systems.

b) Efficiency :- The C language is efficient in two ways I) The source code is very
compact ii) Memory Management through C is very efficient.

c) Modularity :- C allows separately compiled modules which can be linked together.
The programs can be written in well structured manner. C is a language of functions.
Various modules are written as functions.

d) Pointer Operations :- C is very powerful in pointer operations. Pointers can be set to
various data types as well as to funtions, structures etc. Arrays can be manipulated with
the help of pointers.

e) Flexible level :- C programs can be written with the features of high level languages
as well as that of low level languages. C thus fits in between the two. C is not a ‘strongly
typed’ language. There are no bounds to number of array elements.

f) Case Sensitivity :- C is case sensitive. Which means the upper case and lower case
characters are treated differently in variable names, function names etc.


ANSI C      :- ANSI stands for American National Standard Institute. The ANSI set a
standard for C language in 1990. This was for the various compiler developers to use this
standard. However many compilers are not strictly adhering to the ANSI standard.

Structure of C Programs :- Since C is a language of functions, let us understand
what a function means;
A function is an entity which accepts some input, processes the same and gives the
output. The type of function is determined by its output. The function can be used as its
output.

                                 >>>           >>>
                                input Function output
C FOR ENGINEERS                        R.G.Salokhe




                           4                          2

                      Numeric                     Numeric
                      Input                       Output


4 input to function              gives 2 as output. The function     4      can be used as

value 2. e.g. 6 X     4   = 12. Here      4 is used as 2.




                                  30       SINE      1/2

                                degrees            number

Let us look at the structure of a C program;


/*PROG1.C */                               Comment
# include < stdio.h >                      Header
main ( )                                    Function Main
{                                           Body of Main starts
;                                           Null statement
}                                           Main ( ) ends


We have written the program name as comments. The comments, spaces, tabs, newline
characters are ignored by the C Compiler.

At this stage we will keep aside the discussion on header file. just remember that ‘ stdio ‘
stands for standard input output.
C FOR ENGINEERS                      R.G.Salokhe


Every set of C programs should have one main ( ) function. This is called the driving
function. The program execution starts at ‘ { ‘, the opening brace of the main function
body and ends at the ‘ } ‘ closing brace.



We have included a null statement, a statement which does not mean anything in the
body of the main ( ) function. Every statement in C ends with a ‘ ; ‘ ( semicolon ).

The above prgram will run but would not produce any results. Let us slightly modify the
program;

/* PROG2.C */
# include < stdio.h >
main ( )
{
printf ( quot;Hello friends! quot; ) ;
}

Output -
Hello friends!

printf ( ) is another function available in the C library and declared in the stdio.h file.
Thus whichever functions we use, we have to include corresponding header files into our
programs.

/* PROG3.C */
# include < stdio.h >
main ( )
{
printf ( quot; Hello friends !  n quot; )
printf ( quot; How are you ?  n quot; ) ;
}

Output -

Hello friends!
How are you?




The  ( backslash ) causes escape from the normal printing process and n causes the
computer to skip one line while printing. Other escape sequences are ;

b backspace              t tab
C FOR ENGINEERS                          R.G.Salokhe


f form feed                 ’ single quote
r carriage return           0 null




C character set :-
C uses the following character set;

a) Alphabets upper case ( A to Z )
b) Alphabets lower case ( a to z )
c) Decimal digits ( 0 to 9 )
d) Other characters;
comma ( , ), semicolon ( ; ), period ( . ) querry ( ? ), exclaimation ( ! ), colon ( : ),
plus ( + ), minus ( - ), asterisk ( * ), slash ( / ), backslash (  ), vertical bar ( | ), single
quote ( ‘ ), double quote ( “ ),tild ( ~ ) , right parantheses ( ( ), left paranthese ( ) ), right
bracket ( [ ),left bracket ( ] ), right brace ( { ), left brace ( } ), right angle bracket ( < ), left
angle bracket ( > ), equal sign ( = ), ampersand ( & ), percent sign ( % ), pound sign ( # )
caret ( ^ ), under score ( _ ).

Variable Names :-
As a very basic concept we can say that a variable is an entity whose value changes. We
use a lot of variables in Algebra. When we say

a = 5;

a is a variable and we are assigning the value of 5 to a.

Coming to a better concept a variable is the name assigned to the address of a cell in the
memory.
                                     Memory cell

                                        Name         a
                                        Address      2529
                                        Value        5




When you say
C FOR ENGINEERS                       R.G.Salokhe


a =6;
Then the value 5 vanishes and the value of 6 is put into the cell.

a = a+6;

is a wrong algebric equation but it is a valid computer equation as it means add 6 to the
present value of a and assign the resulting value to a. Thus a becomes 12.

a + 5 = 6 ; / * wrong * /

The above equation is wrong for the computer as you can not add anything to the name.

We have used a as a variable name. We can use any name for the variable within the
following rules.

1) The variable name can not have a space, comma or characters like ( #,?,&,$,!,| ) - why
use funny characters?

2) The name uses underscore, alphabet and numeric characters only. e.g.

   _ total
    BASIC
    D_A
etc.

3) The language reserved words or key words can not be used as variable names. e.g.
double, int,auto etc.

4) The first character of name can not be a digit.
The variable name can be 31 characters long.

Data Types :-
        Larger the value, larger is the space required in memory to store the number. If
you are using a variable whose value varies between 0 and 255 then there is no need to
allocate more space in memory for storing this number. The data types are created for
efficient use of the memory.
        How much memory is alloted for the various types depends on the machine.




Character Data Types :-
C FOR ENGINEERS                        R.G.Salokhe



The basic data types is the character variable. Character variable occupies 1 byte of the
memory. 1 byte comprises of 8 bits and the maximum value of 8 bit binary number is
255.
                                                         1 byte = 8 bits


                  27   26    25   24   23   22   21   20

                128+ 64 +32 +16 + 8 + 4 + 2 + 0 = 255

If the character is unsigned then it can store values from 0 to 255. In other words we can
say that total values that can be stored in 8 bits is 28 or 256.


/ * PROG4.C * /
# include < stdio.h >
main ( )
{
char a ;                                    a is declared to be of character type.
a=‘A‘;
printf ( quot; A = %c quot;, a ) ;
}

output -
 A=A

Variable a is declared as character type and then assigned a value 'A' which is a character
constant. A character enclosed in single quotes makes a character constant.

Type char and unsigned char are equivalent.

signed char can store values from -128 to 127 ( 128 + 127 + 1 for zero = 256 )

C has a unique feature by which numeric values can be mixed with characters or
characters can be treated as numbers.




/ * PROG5.C * /
C FOR ENGINEERS                     R.G.Salokhe


# include < stdio.h >
main ( )
{
char a ;                                  a is declared as character.
a = 65 ;                                 a is assigned a numeric value
printf ( quot; Decimal value of a is %d n ,quot;a ) ;
printf ( quot; Character value of a is %c n,quot;a) ;
}

output -
Decimal value of a is 65
Character value of a is A

The ASCII value of A is 65. B is 66 etc. Thus A can mean 65 or B can mean 66. ASCII
value of lower case a is 97 and that of b is 98 etc. This feature can be used to convert
upper case letters into lower case and vice versa.




/ * PROG6.C * /
# include < stdio.h >
main ( )
{
char a, b ;
a = 'A'
print f ( quot; value of a is % c nquot;, a ) ;
a = a +32;                     Adding 32 to character converts upper case to lower case.
printf ( quot; now a is %c quot; , a ) ;
}

output -
value of a is A
 now a is a




Initially we have assigned upper case A to variable a. Later we have added 32 to variable
a. Now the value stored in variable a is lower case a.

We have used char type in above examples. However the char type can be declared in
three ways;
C FOR ENGINEERS                       R.G.Salokhe


                                              char
                                              signed char
                                              unsigned char

Simply mentioning char declares the variable to be of signed char type ( However for
some compilers it is unsigned char.)

The range for char varies from -128 to 127 and for unsigned char it is 0 to 255, total
256 numbers.

The characters have a space of 1 byte or 8 bits available. The first bit is taken up by the
sign




                sign           maximum number you can store in 7 bits is 127.

and the maximum number that can be stored in the remaining 7 bits is 127. So how can
you store the number -128 ?


It is something called as 2’S compliment method ;


                  1    0   0    0     0   0    0    0         -128


                  1    0   0    0     0   0     0   1         -127


                  1    0   0    0     0   0     1   0         -126




Integer Type :-
Integer variables store a value which are whole numbers i.e. a number with or without
sign but no fractional part and hence are declared as;

                        int i;
Integers have the following range ;
C FOR ENGINEERS                       R.G.Salokhe




               Declaration            Bytes            Range

              short int                 2              -32768 to 32767

              signed short int          2              -32768 to 32767
              unsigned short int        2               0 to 65535
              int                       2              -32768 to 32767
              signed int                2              -32768 to 32767
              unsigned int              2               0 to 65535
              long int                  4              -2147483648 to 2147483647
              unsigned long int         4               0 to 4294967295
              signed long int           4              -2147483648 to 2147483647




a) The int word may be ommitted in all the cases except where you want to declare the
variable as int only. eg.

                                   int i;
                                   long i ;
                                   unsigned long i ;


b) int and signed int are same.
   long and signed long are same.




/ * PROG7.C * /
# include < stdio.h >
main ( )
{
int i;
i=5;
printf ( quot; Value of i is = %dnquot;, i);
i=6;
printf ( quot; Value of i is = %dnquot;, i);
C FOR ENGINEERS                             R.G.Salokhe


}

output -
Value of i is = 5
 Value of i is = 6

For printing long int an ‘ ld ‘ format is used in the printf eg.
long i;
printf ( “%ld “ , i);

Floating Point Type :-
Floating point variables store a number which has fractional part. Thus the floating
number is divided into two parts;

1) Mantissa :- The digits are stored in the Mantissa part. The number of digits of accuracy
is decided by the Mantissa part.

2) Exponent :- The exponent part decides the 10s power the Mantissa is to be raised to
and thus the range of the number.

/ * PROG8.C * /
main( )
{
float f ;
f = 3.142 ;
printf ( quot; %f quot; , f ) ;
}

output -
3.142000
                    6 digits are printed.




For more accuracy the floating point numbers can also be declared as double or
long double. Modifier L is used in printf to denote long double as;


printf ( “ %Lf “ , f ) ;

        Declaration        Precision digits    Bytes               Range

            float                 7              4        3.4 X 10-38 to 3.4 X 10+38
C FOR ENGINEERS                      R.G.Salokhe



           double           15             8        1.7 X 10-308 to 1.7 X 10+308


       long double          19            10       3.4 X 10-4932 to 3.4 X 10+4932


What if you exceed the limit :-
If you exceed the limit of the variable you would not get an error message. Instead value
of the variable is reset in the rotational manner.

If you declare i to be a character then the values stored in i will range from -128 to 127.
If you assign a value of +128 to i then i becomes -127. Value of 129 will make i equal to
-127 and so on.

Let us solve a question from Mumbai University paper,

/ *PROG9.C * /
main ( )
{
int i = 320 ;
char j ;
j=i;
printf ( quot; %c quot; , j ) ;
}

output -
@




j can take a maximum value of 127, after 127 it will become -128. we have to go on
substracting 128 from 320 till we get a feasible value.
                                                   320
                                                 - 128
                                              -----------
                                                    192
                                                  - 128
                                              -----------
                                                     64
since 64 falls in the range of j, the character a whose ASCII value is 64 will be printed.
Instead of i = 320 if you make it 321 then the value of j will be 65 and A will be printed.
C FOR ENGINEERS                      R.G.Salokhe



/* PROG10.C */
main()
{
       int i=32;
       i=i*(i/3)*100+800;
       printf( quot;%dquot;,i);
}

Output :-
-32736

       Here again i/3 will be 10 because i is integer and it can not store fractional part.
We are trying to assign a new value which is 32*10*100+800 = 32800 to i. This is out of
range of the integer.
-32768+32800 = 32
-32768+32       = -32736

You must have observed that assigning float value to integer truncates the fractional part.
If you change the program as

/* PROG11.C */
main()
{
       int i=32;
       long j;
       j=i*(i/3)*100+800
       printf (quot; %dquot;,j);
}

Output :-
-32736

You may think that because j is of long type it will hold the value 32800, but before the
value is assigned to j, the right hand side evaluates to an integer value which is -32736.
Try the following to get the correct result.
        j=i*(i/3)*100+800l;




Constants :-
C FOR ENGINEERS                      R.G.Salokhe


        We deal with the constant since our childhood. Constant is an entity whose value
does not change. All the numbers are constants. However we have to have diffrent types
in constant as that of variables for efficient management of memory.

Named Constants :-
Named constant will have a name like variable but the value of the named constant would
not change as

                                     float PI=3.142;

Here you declare PI as floating type variable but you are not supposed to change the
value of PI.
       However you may accidently change the value of PI. To avoid this you can use
const key word in the declaration as

                                  const float PI= 3.142;

Now the compiler itself would not allow you to change the value of PI and you can use
PI into any expression as;

                                        c=2*PI*j;

Symbolic or substitution constants :-
For using symbolic constant the have to use a preprocessor directive called # define eg.

                              #define PI 3.142

When you compile the C program the preprocessor gets an instruction from the above
statement to substitue PI with 3.142. Whereever it finds PI written in the program the
same is substituted by 3.142. PI is not a variable name. PI is not a variable it cannot be
used as the variable .
C FOR ENGINEERS                       R.G.Salokhe


/* PROG12.C */
#define PI 3.142
main()
{
       float c;
       int r;
       r=15;
       c=2*PI*r;               ( 3.142 is substitued in place of PI. )
       printf( quot;%f quot;,c);
}


Integer Constants :-
Numbers without fractional parts constitued integers.eg.

       i=5 ;

here 5 is an integer constant. Long integers can have l suffix.eg.

       long int i;
       i=1234567 l;


Floating Point Constants :-
Are numbers with fractional part. eg.
      79.462
      123E-3 equivalent to 123*10-3
Long double floating point constants can have L suffix as
      d= 12345.32L;
You can also suffix f to floating point constants as
      f=79.46f;

Character Constants :-
The characters constants are enclosed in the single inverted comma or single quotation
mark. eg.

                                      'A' , 'b' , '1' etc.

You can have only one character inside the quotation mark.
                                            char ch;
                                            ch='A';
C FOR ENGINEERS                       R.G.Salokhe


Charater constants also represent the type int . The value then is the ASCII value of the
character. eg. ASCII value of A is 65, that of B is 66 etc. and thus A also means 65.
        char ch;
        ch='A';
        ch=ch+1;
        printf(“ %c”,ch);
will print 'B'




Non printable characters :-
We have used ' character in printf. This is non printable charater and represents new
                n'                        a
line. Thus when we write
       printf (quot; Hello nquot;);      ( new line character to skip one line . )
       printf(quot; Hiquot;);

'Hello' is printed on first line and 'Hi' is printed on the next line. If not there the
                                                                     n is
printout will be HelloHi;


The use of  before a printable character to print non- printable character is also called
escape sequence. The escape sequences available are.

               character           description          Hexadecimal Value
               '
               n'           New line / Line feed       '
                                                        x0a'
               '
               t'           Tabs                       '
                                                        x09'
               '
               r'           Carriage Return            '
                                                        x0d'
               '
               v'           Vertical Tabs              '
                                                        x0b'
               '
               f'           Form feed / Page Eject     '
                                                        x0c'
               '
               b'           Back space                 '
                                                        x08'
               '
               a'           Bell                       '
                                                        x07'
               '
               '            Single quote               '
                                                        x27'
                '
                quot;           Double quote               '
                                                        x22'
               '
               0'           String terminating null    '
                                                        x0'




/* PROG13.C */
main()
C FOR ENGINEERS                     R.G.Salokhe


{
         char ch,ch1;
         ch='a';
         ch1=' n';
         printf (quot; %cquot;,ch);
         printf (quot;Helloquot;);
         printf (quot;%cquot;,ch1);
         printf (quot;x0a Hello quot;);              quot;x0a can be used in place of n
         printf (quot;x07 Hello quot;);              quot;x07 bell
}

Output :-
* bell *
Hello
Hello *bell* Hello

String Constants Or String Literals :-

String is a array of characters. ( We will discuss about this later ). The characters
enclosed in double quotes represent a srting. The string may or may not contain any
characters.
       quot; quot; - empty string
       quot;Helloquot;

are the examples of strings. If we want a double quotes and back slash in the string then
we have to put a back slash before this as.
        quot;quot; Hello quot; quot;
        quot; Hello quot;
The string is automatically terminated with the null 0 character. This is always the last
character of the string. The string quot;Helloquot; is actually stored in memory as;

H    E      L   L    O    0

/* PROG 14.C */
main( )
{
       char ch[]= quot;Helloquot;;                   ( ch declared as array of characters )
       printf (quot;%squot;,ch);
}

Output :-
       Hello


Octal Constants :-

Octal constants use digits from 0 to 7 like the decimal constants which use digits from
C FOR ENGINEERS                          R.G.Salokhe


0 to 9

              83     82     81       80
            512      64      8       1

                            1        7                 =8+7 = 15 in decimal

                            7        4                 56+4 = 60


Octal constants are written with starting 0. as 017 , 074 etc.


Hexadecimal constants :-
Hexadecimal constants use digits from 0 to 15 and thus powers of 16. The numbers after
9 are represented with A,B,C,D,E,F.

A=10, B=11, C=12, D=13, E=14, F=15


         162   161    160
         256   16     1

               1      7          = 16+7 = 23 in decimal
               3      F          = 48+15= 63 in decimal


Declaring And Defining The Variables :-
Before you use any variables it is required to be declared so that the compiler knows that
you are going to use the variable in the program. It also knows the type of variable and
the memory required to be allocated for that variable. This way you can avoid duplicate
variable names and also errors in spelling the variable name. eg.if you declare

                            int day-of-week ;

and later on say
                            day-of-wek=5;


The compiler will point out the error, since there is a spelling difference in the variable
declared and the variable you are trying to use. In some interpreter languages another
variable day-of-wek will be created causing errors and mishaps to the logic of the
program.
C FOR ENGINEERS                      R.G.Salokhe


Defining the variables means setting aside memory for the variables. Since the
statements so far used by us also set aside memory for the variable we are doing the job
of declaring and defining at the same time.

                           When you declare
                           int i;

We are informing the compiler that we are going to use a variable name called i , i is
going to be of integer type and a memory of 2 bytes should be alloted to i . The size of
memory alloted depends on the type and machine.

The variables is required to be decleared before use. The declarations are made at the
beginning of the block.

                                        examples :
                                            int i=0;

                                               int i,j;
                                              float x;
                                               i=j=0;

                                           int i=5, j=2 ;

                                  char name[ ] = quot;Ajayquot;


Enumerated Constants And Variables :-
Enumerated Variables are like integer variables but they are associated with named
constants and their values can vary within a limit only. eg.

                         enum color ( Yellow, Cyan, Magenta );

here color is the tag name and it can be used to declare a variable of enum type .
Yellow, Cyan, and Magenta are named constants and their values will be;

Yellow = 0; Cyan =1; Magenta =2 and so on if you have more names in the bracket.



*PROG15.C * 
main ( )
{
       enum color (yellow, cyan, Magenta);
       enum color Y,C,M ;
       Y=Yellow ;
       C=Cyan;
C FOR ENGINEERS                     R.G.Salokhe


        M=Magenta;
        printf (quot;%d nquot;,Y);
        printf (quot;%d nquot; ,C);
        printf (quot;%d nquot; ,M);
}

Output :-
       0
       1
       2

Since Y, C and M are declared of enum color type their values can vary only from 0 to 2.
‘Yellow ‘ means 0, ‘Cyan’ means 1, Magenta means 2 and thus;

                                       Y=Yellow;
will store 0 in y

You can however assign a different value to Yellow or Cyan or Magenta in the
declaration. The subsequent values will also change. eg.

                       enum color ( Yellow =5, Cyan, Magenta );

in this case Yellow will have a value of 5, Cyan will have a value of 6 and Magenta will
have value of 7.

You can have

enum color ( Yellow, Cyan =8, Magenta );

In this case Yellow will be 0 ,Cyan will be 8 and Magenta will be 9.



                                ======= **** =======
C FOR ENGINEERS                      R.G.Salokhe


Input Output Functions:-
Formatted output printf( ):-

We have so far used the printf( ) function to output information on the screen. Let us
discuss the printf( ) function in a little detail.

The printf( ) function is a formatted output function. You have to specify the format in
which you want the output. The format is specified in double quotes.

                             printf (quot;value of A=%d nquot;,A);

                          Function         Format                  Optional argument
                                            string            Escape sequence

                                                Conversion
                                              specification for
                                               the argument

The simplest form of printf( ) will be without any arguments as ;

                           printf( quot;Mumbai is a great cityquot;);

The conversion specification:-
The conversion specification follows with % sign. The number of conversion
specifications depend on the number of arguments. The conversion specification will
have the following format;
                       %[flag][width][precision][modifier][type]

All the fields shown in the brackets are optional.

The following types may be used;

                            d or i     -     decimal
                            u          -     unsigned
                            o          -     octal
                            x or X     -     hexadecimal
                            f          -     fixed floating point
                            e or E     -     exponential
                            g or G     -     shortesh of f and e
                            c          -     character
                            s          -     string
                            p          -     pointer

The following flags may be used;
C FOR ENGINEERS                     R.G.Salokhe



-     Left justify the number
+     Leading + sign for d,i,f,e,E,g or G type
space Positive values with leading space for d,i,f,e,E,g,G types only.


The width fields specifies the minimum width in which the number should be printed.
However if the width of the number to be printed exceeds the specified width then the
specified width is ignored. The width may be specified with leading 0 so that 0 are
printed leading the number.

The Precision field decides the number of digits to be printed after the decimal point. If
no precision is specified then the default width is 6. Though integer numbers do not have
a fractional field the precision may be specifed. In that case the precision decides the
maximum number of digits to print. For g or G type the precision specifies the
maximum number of digits to be printed after the decimal point. For s type the
precision decides the number of characters to be printed.

* PROG16 .C *
main( )
{
int i=1234;
printf (quot; %d n quot;,i);
printf (quot; %-5d n quot;,i);                      /* negatative flag */
printf (quot; %5d n quot;,i);
printf (quot; %3d nquot; ,i);                       /* width less than number */
printf (quot; %+d nquot;,i);
printf (quot; %d n quot;,i);                /* space before type */
printf (quot; %05d nquot;,i);
printf (quot; %.5d n quot;,i);                      /* precision specification */
printf (quot; % 5.2d n quot;,i);
}



Output :-
               1234                  left justified
               1234                  left justified
                1234
               +1234
               01234
               01234
                1234



* PROG17.C*
C FOR ENGINEERS                        R.G.Salokhe


main( )
{
float f =3.142 ;
printf (quot; %f n quot;,f);
printf (quot; %e n quot;,f);
printf (quot; %.2f n quot;,f);
printf (quot; %.2e n quot;,f);
printf (quot; %6.2f n quot;,f);
}


Output :-

     3.142000
     3.142000e+00
     3.14
     4.14e+00
      3.14


the 6.2 width means total width of 6 including decimal points and fractional digits.

                                   1     3   .   1   4

Do not try use wrong type specification for the values. It will give wrong results, as
    float i =3.5;
    printf ( quot;%d n quot;,i);

            integer float type
            type



or

     int i = 7.2;
     printf ( quot;%f n quot;, i);

            float integer type
            type

The assignment int i = 7.2 ; is however correct. That case the value of i will be 7.




Formatted input scanf()
C FOR ENGINEERS                        R.G.Salokhe



You must be starting for a function which can accept values from the key board. scanf( )
is the function used for this purpose. scanf( ) is a little tricky function in the sence that it
requires the address of the variable in its parameters. why ? we will learn when we learn
the functions. Let us see what the address means.

So far we have learned that every variable declared will have a name, a value and a type.
The further parameter the variable will have will be the address in the memory where the
variable is stored.

                                    NAME     VALUE
                                      i        35
                                    TYPE ADDRESS
                                     int      4099
                                        VARIABLE

The address of any variable is representated by &i.

/* PROG18.C*/
main( )
{
int i = 35;
printf(quot; %d n quot;,&i);
}

Output :-
4099             you may get a diffrent answer. This is the address where value of i is
                 stored.

The simplest form of scanf( ) will be

*PROG19.C*
main( )
{
int i ;
printf(quot; Type a number quot;);
scanf(quot; %d quot;, &i);
printf( quot; n You typed %d quot;,i);
}

Input / Output

Type a number 35

You typed 35
C FOR ENGINEERS                      R.G.Salokhe



You can input two values at a time

*PROG20.C*
main( )
{
float i,j ;
printf(quot; Type two values quot;);
scanf(quot; %f %f quot;, &i,&j );
printf(quot; n Sum is %f quot;, i+j);
printf(quot; n Multiplication is %f quot;,i*j);
printf(quot; n Division is %f quot;, i/j);
}

Input / Output

    Type two values 21        3

    Sum is            24.000000
    Multiplication is 63.000000
    Division is        7.000000

If you want to input the values seperated by comma then you can use
scanf(quot; %f , %f quot;, &i , &j );


You may specify the field width and not separate the values as
scanf(quot; %3d%2d quot;, &i,&j );

You can type 23145 and the value of i will be 231 and that of j will be 45. You can also
use scanf( ) for inputting characters and strings but scanf() is little tricky for string.



/*PROG21.C*/
main ( )
{
char ch [30];                   string is array of characters
scanf(quot;%squot;,ch);                & is not used for arrays.
printf (quot; n Good Morning Mr. %Squot;,ch);
}
printf (quot;type a Name nquot;);

input output

Type a Name
Satish
C FOR ENGINEERS                      R.G.Salokhe


Good Morning Mr. Satish


If you type Satish Sharma then also Good Morning Mr. Satish will be printed. Scanf ( )
will just ignore the surname as it is followed by a space. You can solve the problem by
writing the scanf function something like.

scanf(quot;%[A-Z a-z]nquot;,ch)
                             space is required here.


 /*PROG22.C*/
Main ( )
{
char c1,c2 ;
printf (quot;Type two charctersnquot;);
scanf (quot;%c%cquot;, &c1,&c2);
printf (quot;First charcter % cnquot;,c1);
printf (quot;Second character % cnquot;,c2);
}



Input/Output

Type two characters
 AB              do not separate the characters.

First Character A
Second Character B

Because space is also a character you do not separate the characters with space. If you
have to separate the input characters with a space then you have to write the scanf ( ) as.

               scanf (quot;%c %cquot;,&c1,&c2);
                             space

Incase of floating point numbers quot;%f %fquot; and quot;%f %f quot; will mean the same thing.

Normally scanf ( ) will follow printf ( ) so that the operator is prompted as to what is
requested to inputed. You have to also ensure that the data types inputed are correct as
per format.




Conversion of fahrenheit to centigrade.
C FOR ENGINEERS                      R.G.Salokhe



/* PROG23.C*/
main ( )
{
float fa,ce;
printf (quot;Enter fahrenneit temperaturenquot;);
scanf (quot;%fquot;,&fa);
ce= (5/9-0) * (fa-32);
printf (quot;Fahrenneit = %fquot;,fa);
printf (quot;Centigrade = %fquot;,ce);
}

Input/Output

Enter Fahrenneit temperature
 32

Fahrenneit = 32.000000
Centigrade = 0 .000000

Note that if you write 5/9 instead of 5/9-0 it will work out to be 0 because the division
       of two integers will be an integer number without fractional part.




Function gets( )
The scanf function puts a limitation on the input when a string is entered. If you write

/*PROG24.C*/
main ( )
{
char ch[ ];
scanf (quot;% squot;, ch);
printf (quot;% squot;, ch);
}

Input/Output

       Rajendra Salokhe

       Rajendra
C FOR ENGINEERS                     R.G.Salokhe


The surname has vanished in the output. scanf scans the string till a white space is
encountered. There is a better function available which inputs the string till new line or
end of file (^z) is reached.

/*PROG25.C*/
main ( )
{
char ch[ ];
gets (ch);
puts (ch);
}

Input/Output
               Rajendra Salokhe
               Rajendra Salokhe

We have also used the puts function which outputs the string on the screen.

scanf ( ) poses another problem when character input is considered;

/*PROG26.C*/
main ( )
{
char c,d;
scanf (quot;%c%cquot;, c,d);
printf (quot;% dnquot;,c);
printf (quot;% dnquot;,d):
}

Input/Output
               A

               65
               10

You want to input two values for c and d. When you type A and press enter the enter key
is considered as another character. Thus value for A=65 and values of enter key=10 is
outputed. The computer does not wait for another character. How do you input the value
of d ? It is by two methods;

1) scanf (quot;% cnquot;,c);
   scanf (quot;% cnquot;,d);
                            Take a dummy variable e,

2) scanf (quot;%c %cquot;, c,e);

To handle characters and strings c has made available some other functions.
C FOR ENGINEERS                      R.G.Salokhe



getch( )/getehe( )
Both this functions allow to input a character from the keyboard with a little difference;

/*PROG27.C*/
# include <conio.h>
main( )
{
char ch;
ch=getch( );
printf (quot;n%cnquot;, ch);
ch= getehe( );
printf (quot;n%cnquot;, ch);
}

Input/Output
                A       This is not shown on the screen.

                A       No enter key is required to press.

                A       When you use getehe( ) what you
                        type is shown on the screen.

These are also other functions available to output the character. We will use these
functions with another input function.

/*PROG28.C*/
# include < conio.h >
main( )
{
 char ch;
 ch= getehar( );           getehar( ) needs an enter key to be pressed.
 putchar (ch);             output to standared output device.
 ch= getch ( );
 putch (ch);               output to text window, for now it is same as putehar( )
}

Input/Output
                r                Enter key is requited

               r t t             No enter key required.
                                 Nothing is shown on screen.

If you recollect our discussion about the functions we know that all the functions output
something or return some value. and the function represents the output value. That is
why we can assign.
C FOR ENGINEERS                      R.G.Salokhe



               ch=getch( );

We have to remember that all the input functions discussed by us return an integer value
and not the character value. It is thus advisable that insted of declaring ch as character.
ch should be declared as integer as.

               int ch;

Another thing to note that we have included the conio.h (pronounced con-eye-o) file in
the program because gethe( ), getch( ) and putch( ) functions are declared in the conio.h
file.
Also note that getehar( ) is not a function but is macro extracted from fgetchar( )
function. Macro is something you obtain with a #define statement.

In the above context even the printf( ) function returns an integer value for printf it is
number of characters printed.

/*PROG29.C*/
main( )
{
printf(quot;% dquot;, printf(quot;Helloquot;));
}

Output 5

Type Conversions
When you write an expression you come across mixing various types in the expression as

               5+2.5

           Integer Float

Here we are adding an integer constand to the constant of float type. This type of
addition is not easy for the computer. as integer and floats are stored in different formats.
The process required to be done is to convert the integer into float and then do the
addition. Since we may mix a lot of different types the rules followed by C are in the
following steps

Step1 :- Convert all short and char operands to int type.
Step2 :- Convert all float operands to double.
Step3 :- After the above conversion if a double operand is there then all the operands are
         coverted double.
Step4 :- If a long to operand is there then all the operands are converted to long.
Step5 :- If any of the operand is unsigned then all the operands are converted to
unsigned.
C FOR ENGINEERS                      R.G.Salokhe


Step6 :- Since all the operands are convereted into a single type the result will be
         calculated in that type.


       'A'+3+5.0
               Char is converted to int Float converted to double.
       65+3+5.0
                Integers converted to double
       65.0+3.0+5.0
                 Result is double
           73.0




ASSIGNMENT CONVERSION :-
Evaluating the expression to a certain type and assigning it some other vanable are
different things. While the expressions as discussed above evaluate to maximum
accuracy the assignment works in the reverse fation.

                   Float=Double;
Value is rounded and truncated eg.

           Float f=12345678.5 will store a value of 12345679.0 in f.

                     Long=Float;
Fraction part of float is truncated. In the above example the value stored in long will be
12345679.
               Int=Long;
When the value exceeds that of type int it goes back to - 32768 and starts add in further.

In any case the value thus obtained may be unpredictable and will cause errors in the
program.

ARITHMATIC OPERATORS :-
We are aware of some of the arithmatic operators. These are as follows

Unary :-
Unary operators work only on one operand eg.

                -5, -d, f
C FOR ENGINEERS                      R.G.Salokhe


They change the value of the operand to negative if the operand is positive and positive if
the value of operand in negative.

+ Operator :-
The plus operator does various addition. (We will come across other additions later).
Grouping of + operator is done from left to night.
                d= a+b+c;
                d= (a+b)+c;
a and b are first added and then c is added to the addition.




- Operator :-

Is used for substraction.

* Operator - Is used for multiplication. and have higher precedance than + or -.
                d=5+3*4;
                          multiplication is done before addition.

               d=5+12
                 =17
       If addition has higher precedance then the above expression will evaluate as

       (5+3) * 4 = 8 * 4 =32 Which is wrong.

/ Operator:-
This operator performs division .Interger type divided by integer yields interger type.
Thus 5/9 will always give and answer equal to 0.

% Modulus operator

The moudulus operator works on interger data types and yields in the result equal to the
remainder of the division.
e.g.           7%5=2
               7%6=1
               7%7=0
               7%8=7       ( 7 * 0 = 0 and remainder is 7 ).
C FOR ENGINEERS                        R.G.Salokhe


RELATIONAL OPERATORS :-
 < (Less than ), <= (less than or equal to ) , > (greater than ), >= (greater than or equal to )
are the relational operators which are used to test the conditions between two operands.

/* PROG30.C */
main ( )
{
int i;
printf ( quot; Type a number quot; );
scanf ( quot; %d quot; , & i);
if ( i > 0 ) printf ( quot; n the number is positive quot;);
}


The program is self explainatory . The important point you have to remember is that the
experssion
(i >0 ) evaluates to be 1(true) or 0 (false). If you write

                               printf ( quot; %d quot; ,5 >7);
the answer will be 0 as 5>7 is false.


EQUITY OPERATORS:-
= = ( equal to ) and ! = ( not equal to ) are the equity operators which work similar to
relational operators.They compare the operands. The students many a times confuse
between (= equal to) assignment operator and = = equity operator. The assignment
actually assigns value to the variable but the = = operator just compares the values. e.g.

                               i = 5; will change the value of i to 5.
                               i = = 5; will compare the value of i if it is 5.

LOGICAL OPERATORS :-
                && ( logical and )
                 | | ( logical or )
                  ! ( logical not )
are the logical operators.

/* PROG31.C */
main ( )
{
int i,j;
printf ( quot; Input two values quot; );
scanf ( quot; %d %d quot;,i ,j);
C FOR ENGINEERS                             R.G.Salokhe


if ( (i >0 ) &&(j >0) ) printf ( quot;Both are positive quot;)
}

Remember to put two times & while using the logical & operator .

/*PROG32.C */
main ( )
{
printf ( quot; %d quot;, 3&&4);
}
Output 1
 3 is true and 4 is true, so that 3&&4 is true which is 1.
Let us analyse the results.

i               j                    i >0            j>0          (i >0 ) && ( j >0 )

2               2                    1(true)          1 (true)    1 (true)
2               -2                   1 (true) 0 (false)           0 (false)
-2              2                    0 (false)        1 (true)    0 (false)
-2              -2                   0 (false)        0 (false)            0 (false)


Thus
        True &&        true    is true
        True &&        false   is false
        False &&       true    is false
        False &&       false   is false


Similarly for | | ( or ) the values are

        True | |    true is true
        True | |    false is true
        False | |   true is true
        False | |   false is false

/*PROG33.C*/
{
int i=0;
if (!i) printf (quot;number is zeroquot;);
}

Writing (!i) is equivalent to writing ( i = = 0 ) when i is equal to zero (false), !i becomes
true. In the above case because i is 0, !i becomes true and the quot;Number is zeroquot; will be
printed.
C FOR ENGINEERS                      R.G.Salokhe


Increment and decrement operators

Increment and decrement operators are unary operators. Which means they operate on a
single operand. They increase or decrease the value of the operand. eg.

                       Consider a = 5, b = 6
                       c = a + b + +;
                       c = a +( b + + );
                       c = a + b; b = b + 1;
                       c becomes 11, b becomes 7.

While if we write

                       c = a + + + b;
                       c = a + ( + + b );
                       b = b + 1; c = a + b
                       b becomes 7, c becomes 12.

Thus a + + means use the value of a and then increment.
      + + a means increment the value of a and then use.
/*PROG32.C*/
main ( )
{
int i = 0, j = 0;
int k;
k=i+++++j;
printf ( quot;%dnquot;,k );
k + +;                           used like this + + k and k + + will mean the same thing.
printf ( quot;%dnquot;, k ) ;
}

output
               1
               2



               k = i + + + + + j;
               k=(i++)+(++j);
               k=0+1=1

i becomes 1 after its value 0 is used. After executing the above statements the value of all
i,jand k becomes 1.


Conditional Expression:-
C FOR ENGINEERS                           R.G.Salokhe


The query or turnary operator ? is used in conditional expression as;

                 ( a> b ) ? a : b;

if the value of a is greater than b then the value of a is returned otherwise the value of b
will be returned.

/*PROG33.C*/
main ( )
{
int i,j,k,max;
printf (quot;Type two numbersnquot;);
scanf (quot;%d %dquot;, i,j );
max = ( i>j ) ? i:j ;
printf (quot;Maximum is %dquot;, max );
}
Input/ output

                 Type two numbers

                 2    3
                 Maximum is 3


The conditional expression can be used to find out the maximum of 3 numbers as;

( a > b ) ? (a > c ) ? a : c : ( b > c ) ? b : c
C FOR ENGINEERS                     R.G.Salokhe


CONTROL STATEMENTS :-
We have so far seen small programs which are executed line by line. However the major
requirement of programs is to have forward and backward jumps to different lines. The
statements which allow such jumps are called control statements.

If Statements:-
If statements allows forward jumps depending upon the condition specified. If has
following two formats;

          true

if (condition ) statement;

         false
if ( condition) {
                Statement 1;
                Statement 2;


                 }             No semicolon.

      false


/*PROG34.C*/
main ( )
{
int i,j,max;
printf ( quot; Type two numbers n quot;);
scanf ( quot;%d %d quot;, i,j);
max=i;
if ( i<j ) max=j;
printf (quot;n Maximum of two is %dquot;,max);
}
C FOR ENGINEERS                       R.G.Salokhe




/*PROG35.C*/
main ( )
{
/* I has to be maximum */
int i,j,t;
printf ( quot;Type two numbers n quot;);
scanf ( quot;%d %d quot;, &i,&j);
if ( i > j)        {
              t=i;
              i=j;           Interchanging values of i and j. (swapping)
              j=t;
            }         no semicolon
printf ( quot;n i = %d j=%d n quot;, i, j);
}

We have used a technique of swapping the values of i and j variables. For this you have
to first store the value of i into a temporary variable t .Then you can equate i to j and then
j to t. So that values of i and j are interchanged. Another technique you can use is .
                 float i =5, j=6;               i        j
                 i = i *j;                    30.0      5.0
                 j = i /j ;                   30.0      6.0
                 i = i /j ;                    5.0      6.0
The above method will not work for integers .




if           ; else        ; statement :-
     if (expression ) statement 1;

FALSE            TRUE                        Note semicolons

       else statement 2;
C FOR ENGINEERS                     R.G.Salokhe




       if (expression )
                             TRUE
              {
              statement1;
FALSE         statement2;

              }                       No semicolon.

              else
              {
              Statement 3;
              Statement 4;
              }                      No semicolon.

/* PROG36.C*/
/*Maximum of two numbers*/
main ( )
{
int max,i=5,j=7;
if (i >j ) max =i ;
else max =j;                     Note semicolons.
printf ( quot;n %d is max n quot;,max );
}


/*PROG37.C*/
/* Roots of quadratic equation*/
#include < stdlib.h>                for exit ( )
#include <math.h>                   for sqrt ( )
main ( )
{
double x1,x2,a,b,c,t;
printf (quot;Type values of a b c quot;);
scanf (quot;%d %d %d quot;, &a,&b,&c);
if (b*b -4*a*c<0) {
printf ( quot;Roots are imaginary n quot;);
exit (0 );
                  }                              No semicolon.
else {
t=sqrt (b*b -4*a*c);
x1=(-b+t)/(2*d);
x2=(-b-t )/(2*a);
printf (quot;The roots are %f %f quot;,x1,x2);
       }                               No semicolon
}
C FOR ENGINEERS                      R.G.Salokhe



input                         4       2       5


Nested if :-
The if statement can be nested in following ways.
        if (condition )
           if (condition)
                 statement;                 This if is attached to else.
        else
            statement;

/* PROG38.C*/
main ( )
{
int i;
scanf ( quot;%d quot;,&n);
if (n >0)
if (n<100)
printf ( quot;Number is between 0 and 100 quot;);
else
printf ( quot;Number is greater than 100 quot;);
}


The else statement does not correspond to the first if . The else statement is marked to
second if so that when n is not less than 100 the else is executed. If we want to match the
else statement to the first if then it can be done in two ways.

if (n >0) {
        if (n<100)
        printf (quot;Number is between 0 and 100quot;);
        }
else
        printf( quot;Number is less than 100quot;);
or
if (n >0)
        if (n<100)
        printf (quot;Number is between 0 and 100quot;);
        else ;         Dummy else.
else
        printf (quot;Number is less than 100quot;);
C FOR ENGINEERS                     R.G.Salokhe




The If ______ else chain :-
We can have series of if -else statements in the following manner.
      if      (expression) statement;
      else if (experssion) statement;
      else if (experssion) statement;



/* PROG39.C*/
main ( )
{
int mark;
char rank;
scanf (quot;%d quot;,&mark);
if mark >80 rank = 'E';
else if mark >70 rank= 'A';
else if mark >60 rank= 'B';
else if mark >50 rank= 'C';
else rank = 'F';
printf ( quot;Rank is %cquot;,rank);
}




/* PROG40.C*/
/*Printing a number in reverse order */
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
void main ( )
{
clrscr( );
int i ;
int t ,h, ten,o;
printf ( quot;Enter a 4 digits no nquot;);
scanf ( quot;%dquot;,& i);
t= i /1000 ;
printf (quot;t =%dquot;,t);
h= (i - t* 1000)/100;
printf (quot;h =%dquot;,h);
ten= (i -t*1000 - h*100)/10;
C FOR ENGINEERS                      R.G.Salokhe


printf (quot;ten =%dquot;,ten);
o=i -t*1000 -h*100 - ten*10;
printf (quot;o =%dquot;,o);
printf( quot;Your number in reverse order is nquot;);
if (t = = 0 && h= = 0&&ten= =0 )
 printf ( quot; %d quot; ,o);
else if (h = =0 && t = = 0) printf ( quot;%dquot;,o*10+ten);
else if ( t = = 0) printf (quot;%dquot;,o*100+ten*10+h);
else printf( quot; %dquot;,o*1000+100*ten+h*10+t);
getch( );
}


Switch Statement :-
The switch statement is equivalent to writing series of if statements. The structure of
switch is;
                switch (experssion )
                {
                case constant1 :      statement;
                                      statement;
                case constant2 :      statement;
                                      statement;
                        |
                default        :      statement;
                                      statement;
                }
/*PROG41.C*/
main ( )
{
int i,j,op;
float ans=0.0;
printf (quot;Type two numbers quot;);
scanf (quot;%d %d quot;,&i,&i);
printf (quot;n Type operation +, -, /, * nquot;);
scanf (quot;%dquot;,&op);
switch (op) {
         case '+' : ans = i+j ; break;
         case ' : ans = i ; break;
               -'          -j
         case '/' : ans = i /j ; break;
         case '*' : ans = i*j ; break;
         default : printf (quot;Invalid operation n quot;);
             }
printf ( quot;%f quot;,ans );
}
C FOR ENGINEERS                     R.G.Salokhe


The important thing to remember about the switch statement is that you have include the
break statement after each case. Otherwise all the cases after the matching conditions are
executed.




/*PROG42.C*/
main ( )
{
int ch, digit, space, other;
int count = 0
while ( ( ch = getehar( ) ) ! = EOF ) {
switch (ch) {
                case '0':
                case '1':
                case '2':
 if character case '3':
 input is '3' case '4':
 all the        case '5':
 cases upto case '6':
 '9' are        case '7':
 executed.      case '8':
                case '9': digit ++;count++;break;
                case ' ':
                case'n':
                case' space ++; count ++; break;
                     t':
                default : other ++; count ++;
                }
                }
                        break transfers control here
printf ( quot;Total characters %dnquot;, count ) ;
printf ( quot; Digits typed %dnquot;,digit);
printf ( quot; White spaces %dnquot;, space);
}

You can input a string terminated by control Z to terminate the while loop.



The For Loop:-
We have studied the if statement which jumps the control to the end of the body and not
backwards. The loops allow a backward jump and thus the body of the loop can be
repeated several times. for is one such most frequently used loops in C.
C FOR ENGINEERS                         R.G.Salokhe




The structure of for loop is;

                        for ( j =0; j < 10; j + + ) statement;

                            initialise condition      increment
                                            FALSE
                                           |
                        for ( i = o; i < =10; i + + ) statement;

                                      TRUE
                                {
                                     statement;
                                     statement;



                        }                No semicolon



/*PROG43.C*/
main ( )
{
int i ;
                               Note semicolons
for ( i = 1 ; i < = 5; i + + )
printf ( quot;%d %dnquot;, i, i * i );
}

Output
                1       1
                2       4
                3       9
                4      16
                5      25

The initial value of i is taken as 1. The first values of i and i * i are printed. Then the
value of i is increased by 1. so i becomes 2 and, 2 and 4 are printed.

We can find out the pairs of three numbers i, j, k such that i2 =j2 +k2 which means i, j, k
are sides of right angle triangle.
C FOR ENGINEERS                      R.G.Salokhe




main ( )
{
int i,j,k;
for ( i = 1; i < = 100; i + + )
for ( j = 1; j < = 10; j + + )
for ( k =1; k< = 10; k + +)
if ( k<i && j <i)
if ( i * i = j * j + k * k)
printf (quot;%d%d%dnquot;,i,j,k);
}

Initially
        i=1    j=1    k=1
               j=1    k=2
               j=1    k=3
               j=1    k=10
               j=2    k=1
               j=2    k=2
                      ___
                      ___
                      ___
                      k=10
               ===
               j=10 k=1
                      ---
                      k=10
i=2    -----   j=1--- k=1

              For every value of i , j various from 1 to 10. For every value of j , k
various from 1 to 10 and so on.


/*PROG44.C*/
/* sum of first 5 numbers */
main( )
{
int i ; int sum = 0 ;
 for ( i=1 ; i<=5 ; i+ +)                    make this i<=100 and
                                             you get sum of 100 nos.
{
sum=sum +i ; }
printf (quot;sum is =%dnquot;, sum);
C FOR ENGINEERS                         R.G.Salokhe


}

Output
                        sum is=15




Let us draw a flow chart of the above logic and the memory map.



                 i=1
                 sum = 0                                            i     sum
                                                            1       0    initial
                                   NO    print               1      1
                 is i <=5?                sum                2      1+2=3
                                                             3      3+3=6
         i=i+1               yes                             4      6+4=10
                                                             5      10+5=15
                 sum=sum+i


A simple modification in the program will help us find out the factorial.

/*PROG45.C*/
/*Program to find factorial*/
main ( )
{
 float i;fact=1.0;
 for (i=1 ; i<=5 ; i+ +){
 fact= fact * i ; }
 printf (quot;%fquot;, fact);
}


Output

                        120.000000




You can modify the program asking for the input value and write
C FOR ENGINEERS                     R.G.Salokhe



                i<=n in place of i<=5

We can write a program to find out the power x n

       x n = x * x* x -------n times so we can go on multiplying x, n times



/*PROG46.C*/
main ( )
{
float x, power=0.0;
int n;
printf (quot; Type a number nquot;);
scanf (quot;% fquot;,&x);
printf (quot; Raise this number tonquot;);
scanf (quot;%dquot;, &n);
for( i=1; i<=n; i+ +){
               power= power*x;}
printf (quot;% f Raised to %d is % fquot;, x,n,power);
}


 /*PROG47.C*/
/* Printing a triangle of Numbers */
main ( )
{
int i, n, j ;
printf (quot;Type a number nquot;);
scanf (quot;%dquot;, &n);
for (i=1 ; i<n ; i+ +){
for (i=1 ; j<=i ; i+ +)
                                             Note i here
printf (quot;%3dquot;, j);
printf (quot;nquot;);
}

Output :
              Type a number
              5
              1
              1 2
              1 2 3
              1 2 3 4
              1 2 3 4 5
C FOR ENGINEERS                         R.G.Salokhe


         for every value of i, j will vary from 1 to i




/*PROG48.C*/
/* Pascal Triangle*/
main ( )
int nn,i Ξ =, m =1
int k,n,j =40, l = 0;
clrscr ( );                                   clears the screen.
printf (quot;Type No nquot;);
scanf (quot; %dquot;, &nn);
for(k =1;k < = nn; k =k+2) {
for (n =1;n < =39-3*m;n++ ) printf (quot; quot;);
for (i =m++;i< =k; ++i) printf (quot;%3dquot;, i);
for (i =k-1, j = l++; j > =1; j- -,i - -)printf (quot;%3dquot;,i);
printf (quot;nquot;);
}
getch ( );
}

output
                                    9
                                    1
                             2      3   2
                           3 4      5   4 3
                         4 5 6      7   6 5 4
                       5 6 7 8      9   8 7 6 5
k decides the middle column and thus varies as 1, 3, 5, 7,9

i prints the left hand side value as 1, 2 3, 3 4 5, 4 5 6 7, 5 6 7 8 9 value of i in third loop
starts with m + + which initially is 1 and then becomes 2, 3, 4 and lastly 5.

In forth for loop i starts with k thus when k becomes 3 i becomes k-1=2 next time it
 becomes 4 then 6 and 8. This prints the right side as


                                2
         i in second            43
         for loop               654
                                8765
C FOR ENGINEERS                      R.G.Salokhe


                                    How many numbers eg. 4 is decided by the i in second
for initial value of l is taken from l which increment from 1 to 4.

The second for loop is for bringing the display into center of the screen. It prints spaces
39-3m times = 36 times for first line and 39 - 3*2 = 33 times for second time etc.

                           1
Edge 36 space
of                         232
screen 33 space
                      34543
       30 space

There is program which print the range of integer variables. We have already discussed
that the range varius from - 32768 to 32767.

/*PROG 49.C*/
main ( )
{
int low, high, i,i ;
low = high= 0 ;                Note the type of assignment
for (i=1 ; high<= 0; i=i+2){
for (low=1, i=1 ; k=i ; i + +)
low = -2*low ;
high = low -1 ;
        }
printf (quot;Range for integers %d, %dquot;, low,high);
}

In C you will come across very interesting and intelligent logic. In the above program i
various from 1 in the steps of 2 . So value of i becomes 1, 3, 5, 7 etc.

When i becomes 3 the second for loop is executed 3 times and the values of low changes
as follows ;

                        Iterations    Value of low
       low = -2 * low       1                -2
                            2                +4
                            3                -8


Value of low will go on increasing but to the negative side. Since we are assigning high
= low-1 the value of high remains negative till low becomes - 32768 When we subtract 1
from - 32768 it becomes + 32767 We have already discussed in earlier chapters the
effect of increasing the range of data types. ( 32767+1 becomes - 32768 )

         -1       0   -1
C FOR ENGINEERS                         R.G.Salokhe


     -2                   2
                              3
   -3                          4


-32767
     -32768      +32767
                                   32767+1 becomes - 32768

Thus when value of low is - 32768 the value of high becomes + 32767 and the first for
loop terminates. The control is transferred to printf statement.


We have seen that the for statement can initialise any number of variables as for
(i =1, j =2 ; i <=5 ; i + +, j+ +);

We can have a for loop without initialisation for (j + + i<9 ;);

You can have the for loop without any parameters

*PROG50.C*
# include <ctype.h>
main( )
{
int c, vowels =0 , count =0 ;
for ( ; ;){
c= getche( );
switch (toupper((c)) {
                case 'A' :
                case 'E' :
                case 'I' :
                case 'O' :
                case 'U' : vowels + +;
                           count + +;
                           break ;        Breaks
                           default : count + +;
                }
if(c = = EOF) break ;                              Breaks the for loop
printf (quot;Total characters %d %nquot; , count);
printf (quot;Vowels are %d %nquot; , vowels);
}
Toupper( ) function converts the character into upper case if it is lower case. This
function is included in ctype.h file

Evaluating a series :-
sum =1 + (1/2)2 + (1/3)3 + (1/4)4
C FOR ENGINEERS                      R.G.Salokhe




/*PROG51.C*/
# include <math.h>
main( )
{
double term , sum;
int i, n;
printf (quot;Type no. of terms for seriesnquot;);
scanf (quot;%dquot;, &n);
for (i =1; i <=n; i + +){
term =1/(double)i ;               Type casting

sum = sum+ pow(term, (double) i);
printf (quot;The sum of series is %fquot;, sum);
}

With i the term becomes 1, 1/2, 1/3 etc.
this is then raised to i th power with pow( ) function and added to sum

Let us write a program for evaluating the series;

       x - x3/3! + x5/5! - x7/7!

/*PROG52.C*/
main( )
{
int i, n, denominator =1;
float x, sum, term;
printf (quot;Type value of xnquot;);
scanf (quot;%fquot;,&x);
printf (quot;Type number of termsnquot;);
scanf (quot;%fquot;, &n);
for (sum =x, term =x, i =2; i<=n; + +i){
denominator = (2*i-2) (2*i-1);
term*= (-x * x) / (float) denominator;
sum + = term;
         }
printf (quot;value of series is = %fquot;, sum);
}


Let us see how the term varies;
C FOR ENGINEERS                    R.G.Salokhe



i          denominator       Term
2          2*3 =3!           (+x) (-x2)/3! = -x3/3!
3          4*5               - x3/3! * -x2/4*5 = +x5/5!


The Fibonacci series

The series is Obtained by adding two precious numbers to obtain the third number eg.
       1 1 2 3 5 8 13 21 34 etc.
       1+1 =2
       1+2 =3
       2+3 =5
       3+5 =8         and so on

/*PROG53.C*/
# include <stdio.h>
main( )
{
int next =0 ; int n;
int last =1;
for next =0; next <1000;){
n= next + last;
next = last;
last = n;
                }
}

Let us see how the things are happening

    next         last        n

      0          1           1
      1          1           1      next = last, last = n
      1          1           2
      1          2           3
      2          3           5
      :          :           :




The While loop
C FOR ENGINEERS                        R.G.Salokhe



       The syntax of while loop is as follows ;

       while ( expression ) statement ;

               FALSE            TRUE

       while ( expression ) {
               statement 1;
               statement 2;
               -------

                      }


The statement are evaluated as long as the expression is true. When the condition
becomes false jump is made to out side of the body of while.

*PROG54.C*
main( )
{
int n =999;
while (n< =999,) scanf (quot;%dquot;&n);
printf (quot;%dquot;, n);
}

This program will allow you to enter the number till the number is less than or equal to
999. Which means the loop will not break till you enter a number which is greater than
999 that is a four digit number.

Program to count number of words, characters & lines

/*PROG55.C*/
# define YES 1
# define NO 0
void main( )
{
int c, nl, nw, nc, inward;
inward =NO;
nl =nw =nc =0;
while ( (c =getche ( ))! =EOF){
+ +nc;
if (c = =' ' | | c = n' | | c = =' '){
                     ='           t
if (c ='n') nl + +;
inward =NO; }
else if (inward = = NO){
inward = YES;
C FOR ENGINEERS                     R.G.Salokhe


+ +nw;          }

        }
printf (quot;NO of lones %d words %d character %dquot;, nl, nw, nc);
}
}

(c =getehe ( )) !=EOF
Accept character from keyboard. Assign it to c. check it the character is EOF(^z) which
numbers the while loop terminated when the character input from keyboard is ^z.
+ +nc       nc is incremented every time a character is input.
Then the character is checked if it is a white space character. Let us take an example.


       Mumbai is a great city ^z
       c    nc       nw      inward
       0    0        0       NO
       M    1        1       YES
       4    2        1       YES
       m    3        1       YES
       b    4        1       YES
       a    5        1       YES
       i    6        1       YES
note space 7         1       NO
change l    8        2       YES
at     s    9        2       YES
space space 10       2       NO
       a    11       3       YES

if you want only an alphabetic character to be inputed you can use the while loop as
        char ch ='a' ;
while( ch <= ' && ch> = 'A' | |
               z'
        ch<= 'g' && ch> ='&'){
        scanf (quot;%dquot;,&c);}




/*PROG56.C*/
/* program to display a series of prime no.s */
main( )
{
int no, chk; int prime =1; no=1;
while (no<=400){
for (chk=2; chk<=no/2; chk)
if (no%chk = =0){
C FOR ENGINEERS                      R.G.Salokhe


prime =0;
break;                                        Break passes control here
if (prime = =1) printf(quot;%dquot;,no);
prime=1;
        }
}


The outer while loop varies the no from 1 to 400.
supposing you want to find out if 11 is a prime number or not then you have to divide it
by numbers from 2 to (11/2) =5. If it is divisible by any of the numbers between 2 and 5
then it is not a prime number. In our case 11 is not divisible by numbers between 2 and
5. Thus prime remains equal to 1 and the number is printed.

no % chk will be 0 when no is divisible by 2 and the if is execute which makes prime =0
and breaks the loop since prime is 0 the number is not printed. prime becomes 1 and
while is executed.




The do ... while loop


The syntax of do....while is do statement ;
while ( condition );

       or
do {
       statement 1;
       statement 2;
       ----
   } while ( condition );




Let us take the earlier example where we want to allow numbers greater than 1000 to be
entered. We can write the program as




/*PROG57.C*/
main( )
{
C FOR ENGINEERS                      R.G.Salokhe


     int n;
     do scanf (quot;%dquot;,&n);
     while (n<1000);
      printf (quot;%dquot;,n);
}


This program will go on executing the scanf till you enter a number which is greater than
or equal to 1000. Let us take another example.


/*PROG58.C*/
main( )
{
int n;
int sum;
do {printf (quot;n Enter a number nquot;);
scanf (quot;%d, &n);
sum+ = n;
} while (n>0);
}


This program will allow you to enter the numbers and sum them till the number is
greaterr than 0. If you enter a negative number the same will be added to sum. The
program will terminate.

Note that the do loop is very similar to while loop.




Break Statement


We have used the break statement in switeh.... case and for loops. The break statement
psses control out of the do, for, while and switeh statement.

       for ( ; ; ){
                  ---;
                  ---;
C FOR ENGINEERS                        R.G.Salokhe


               if( ) break;
               for (; ;){
                        - - -;
                        - - -;
                        if( ) break;
                        - - -;
                        - - -;
                        }
               }




Continue Statement


The continue statement jumps to one line before the break statement. i.e. at the end of the
body of for ,do or while loop.

       for ( ; ; ){
                    - - - -;
                    - - - -;
                 if ( ) continue;
                 for ( ; ; ){
                    - - - -;
                    - - - -;
                 if ( ) continue;
                   - - - -;
                             }
                   }




       /*PROG59.C*/
       /* Adding numbers 1+3+5+7 with continue */
       main( )
       {
       int sum =0 ;
       int i = 1, z = -1 ;
       for (i= 1; i<=100; i++)
               {
C FOR ENGINEERS                      R.G.Salokhe


                 z= -z;
              if (z<0) continue;
              sum+ = i ;
              }
       printf(quot;n%d nquot;, sum);
}


Initially f = -1 and t = -z will make z as +1 the statement sum + =i will be executed next
time when i becomes 2 z will become -1 and continue will pass control to and of for
loop thus not executing sum + =i statement. Thus t will vary between +1 and -1 making
the continue statement execute alternatively.

/*PROG60.C*/
/* binary to decimal conversion */
# include <math.h>
main( )
{
long binary;
int dec=0, i=0;
printf (quot;n Enter a binary Nonquot;);
scanf (quot;%dquot;, &binary);
while(binary>0)
{
dec + =(binary% 10)*pow(2,i++);
binary/=10;
}
printf (quot;your no. converted to decimal is %dquot;, dec);
}


This is a very interesting logic. supposing your binary number is 101 which is 22+0+20
=5




dec= (binary %10)* pow (2,i++)
   = (101 %10)* pow(2,0) i=1
   = (1) * 20
   = 1
binary= binary/10
      = 101/10
      = 10
C FOR ENGINEERS                    R.G.Salokhe


In next interation

dec=1+(10%10)* pow (2,1)
   = 1+0 =1
binary= 10/10 =1  i=2

In next interation

dec=1+(1%10)* pow (2,2)
   =1+ 1*22
   =1+4
   =5       which is the answer


The goto statement

C allows a non conditional jump with goto statement. However such jumps are not
adviced and the program looses structurality.

       The syntax is
       goto LABEL;
       -------
       -------
       LABEL :


/*PROG61.C*/
main( )
{
float i, i;
printf(quot;Enter devisornquot;);
scanf (quot;%fquot;, &i);
printf(quot;Enter dividornquot;);
scanf(quot;%fquot;, &j);
if(j= =0) goto CRASH;
printf(quot;%fquot;, i/j);
exit(0);
CRASH :
         printf(quot;dividor cannot be zeroquot;);
}

/*PROG.62C*/
/* finding square root of a number */
# include <math.h>
main( )
{
float x, y,z ;
C FOR ENGINEERS                     R.G.Salokhe


printf (quot;Type a numberquot;);
scanf (quot;%fquot;, &x);
y= 1.0;
do{
z= x/y;
y= (y+z)/2 ;
 } while (fabs(y-z)>0.000001);
printf(quot;Root is % 7.3fquot;, y);
        }



fabs( ) function is used to return the absolute value of floating point numbers.
If you type 4 as the number the following changes take place in the value of z and y.

       z              y

       4             2.5
      1.6            2.05
      1.95           2.006
      1.999          2.000
       2.0           2.00     The final output is 2.
C FOR ENGINEERS                       R.G.Salokhe



FUNCTIONS

We now enter into the soul of C language. As discussed in the I st chapter C is the
language of functions main ( ) itself is a function. We have been introduced to some
standard functions as printf( ), scanf( ), etc. We will now write our own function.

       /*             */
       main( )
       {
       void print( );            Function declaration or prototype.
       Print( ) ;                Function call.
       }
       void print( )              No semicolon.
       {
       int i ;
       for (i=1; i<=10; i ++) printf( quot;*quot; );
       }

Output         **********

Function declaration :         As we declare the variables before we use them, the
function is also required to be declared before it is called. The declaration here is very
simple.
        Void print ( );

 Not returning         Name No parameters
 anything

The print function is not accepting any parameters and is not returning anything as the
value of the function.
The function is defined below the body of the main. When you call the function as
               print( );
The print function is executed which prints ten asterisks and returns to main. We will
now pass a parameters the function.

       /                /
       main( )
       {
       int i ;
       void print(int);
       printf(quot;Type a numberquot;);
       scanf(quot;%aquot;, & i);
       print(i);            Value of i is passed to this i
       printf(quot;nquot;);
       print(i);
       }
C FOR ENGINEERS                       R.G.Salokhe


       void print (ir)+ i)
       {
       int j =1 ;
       for (j =1; j<=i; j ++) printf(quot;*quot;);
       }

Output
         Type a number 5
         *****
         *****

In this program we have passed a value of 5 to i in the function print. So it prints 5
asterisks. However the i in the main program and i in the function print has no relation.
It you change value of i in function print( ) the value of i in function main( ) is not
changed.
This means we have passed the parameter by value.

       /*               */
       main( )
       {
       int i=5;
       void change(int);
       change (i);
       printf(quot;%aquot;,i);
       }
       void change (int i)
       {
       i=10;                 Changing the value of i in the function
       }                      would not change the value in main( ).
Output 5
Finding out the maximum of two numbers using mfunction
       /*               */
       main( )
       {
       int i, j , k;
       int max (int,int);
       printf(quot;Type two numbersnquot;);
       scanf(quot;%a%aquot;, i,j);
       k= max(i,j);
       printf(quot;Maxmum of the two isquot;);
       printf(quot;%aquot;,k);
       }
       int max(int i, int j)
       {
       int m;
       m= i>j?i:j;
       return m;
C FOR ENGINEERS                      R.G.Salokhe


         }
In this example the function max is made to return an integer value
         int max(int, int);

   Function will
   return integer value.
The value returned by the function is returned by the statement
   return m ;
   which returns the value of m

Which is maximum of i and j. When you want to do the calculators repeatedly the
function comes fo your resume. Let us see how we can evaluate the series.

       1+1/2! +1/3! +1/4!

        /*              */
        main( )
        {
        long fact(int n);
        float sum=1.0;
        int i=1;
for (i=1; i<=5; i ++){
        sum=sum + (1.0/fact(i));}
        }
long fact(int n)
        {
        long x=1;
        int i=1;
for(i=1; i<=n; i+ +) x=x*i ;
        return x ;
        }

The function may be called any time from other functions and the value returned by
functions may or may not be assigned to any variable.

       /*             */
       main( )
       {
       int i;
       for(i=1; i<=10; i+ +)
       printf(quot;%3d %5d %7dquot;, i, Sq(i) cube(i))
       Sq(10);          Sq ( ) is called but it's value is not assigned
       }
       int Sq(int i)
       {
       return i*i;
       }
C FOR ENGINEERS                            R.G.Salokhe


       int cube(i)
       {                       Sq( ) function is called from cube( )
       return i* Sq(i);
       }

Output

       1         1        1
       2         4        8
       3         9        27
       4         16       64
       5         25       125
       6         36       216
       7         49       343
       8         64       512
       9         81       729
       10        100      1000

SCOPE OF VARIABLES :-
As there is no print in unnecessarily occupies the memory by using lot of variables, the
variables are given other properties as visibility and life time. So that the variables can
be available in the particular segments of the program and they can die after their use.
The scope of the variable is the section of the program in which the variable is available.
There are basically two types of scopes.
        1) Global Scope
        2) Local Scope
The variables declared outside any function have global scope and are refered to as global
variable.

/*              */
int i=1;               i is global
main( )
{
printf(quot;%aquot;,i);           i is available in both
void print( );            main( )&print( )
print( );
}
void print( ) {
printf( quot;%aquot;,i);
         }

Global variables are visible the point of declaration to the end of the program and are
initialized to 0 if not initialized.

       /*                 */
       main( )
       {
C FOR ENGINEERS                        R.G.Salokhe


        int i;
        }
        int y=5;        y is global but not available in main( )
        void print ( ){
                printf(quot;%aquot;,y);                         variable is available
                        }                       in print( ) and print 1( )
        void print1( ){
                printf(quot;%aquot;,y);
                        }

LOCAL SCOPE / LOCAL VARIABLES :

The local variables are declared inside the body of the function and they can be used in
that function only. Thus they loose scope outside the function and thus variable with
same name can be used in the other function. Which has no relation with one declared in
the other function.

        /*             */
        main( )
        {
        int x =5;
        void print( );
        printf(quot;%aquot; ,x);
        }

Output          10/5

X is declared in function main( ) as local variable. Similarly x is also declared in
function print( ) as a local variable. The x in print( ) and x in main( ) has no relation.
Thus in main( ) even after calling the function
print( ) the value of x print is 5.

Similarly you can declare variables in the body of if also.
On the first line we have declared i=6. Which is a global variable and is available from
top to bottom of the program.

Let us call this variable G i
When we declared another variable int=5 in main( ) the G i looses scope in the main( )
function and another i is available in main( ) let us call the as
         main( ) i
This main( ) I further looses scope in if function and for loop. Where different i is
used.
In printf( ) value of main      i
is used.
We are calling the print( ) function with main        i the value of which is passed to k in
the print( ) function and we are printing i in the print( ) function. The value of G        i is
available in print( ) function and thus same is printed.
C FOR ENGINEERS                       R.G.Salokhe


       /*               */
       int i=6;                 Globle
       main( )
       {
       int j=5                  available in the body of main( )
       int j;
       void print(int);
       if(i= =5){
                int i;          Available in body of if
                i=9;
                printf(quot;in if %dnquot;,i);
                }
       printf(quot;In main %dnquot;,i);
       for (j=1, j<=2, j+ +){
                int i=17;               Available in body a for
       print(quot;in body a for %dnquot;,i);}
       print(i);
       }
       void print(int k)
       {
       printf(quot;in function %dnquot;,i);            Value from global variable.
       }

Output
      in If 9
      in MAIN
      in Body of for 17
      in Body of for 17
      in function pr 6

All the variables also have a life. They must die sooner or later to free the memory. The
global variables die when the program is exited.
The life of the variable is determined by the storage class specified for the variables.
The storage classes are

       1) Auto
       2) Static
       3) Extern
       4) Register
Extern storage class is available only for global variables.

AUTOMATIC VARIABLES

If no class is specified for the local variables then they are considered to be up to auto
variables. They are created when a particular function is called and die where the
execution of the function is completed. Most of the variable used and declared by us so
far were of upto type.
C FOR ENGINEERS                       R.G.Salokhe




STATIC VARIABLES
The variables declared static are visible only in the function in which they are declared
but are not destroyed when the function is exited. Instead they retain their values which
can be again used in the same function.

       /*              */
       main( )
       {
       void pr( );
       pr( );
       pr( );
       pr( );
       }
       void pr( )
       {
       static int i=1;
       printf(quot;%dnquot;,i + +);
       }

Output
                1
                2
                3
When the function pr( ) is first called the value of i is initialized to 1. This value is
printed and i becomes 2. When the function is exited i does not loose the value 2.
However i will not be available in main or any other functions. When the function is
called again the value of i=2 is available to the function and i is not initialized again.
Static variables are initialized to 0 no initial value assigned.

EXTERNAL VARIABLES
External variable are available from one program to another. Supposing you have two
defferent programs as

/*             */              /*               */
int i;                         extern int i;
main( )                        void pr( )
{                              {
i=5
printf(quot;%dquot;,i)                 printf(quot;%dquot;,i)
}                              }

We used the declaration extern in the second program which means that i is declared
some where else and the second program is supposed to us that i.

REGISTER VARIABLES
C FOR ENGINEERS                       R.G.Salokhe


Register variables are similar to automatic variables expect that instead of storing into the
random access memory the same are stored into register of microprocessor. This way
they can be accessed faster. There is a limitation on the number of register variables you
can declare. In case there is no space available for the register variable in the registers
then the same are treated as automatic variables register variables are declared as register
int i;

GLOBAL VARIABLES AS STATIC
Global variable can be declared of static scope. When declared thus they have a scope in
the program in which the same are declared and can not be used as external variables in
other programs.

Let us have the summery of variable visibility and life.

                       Global Variables


Class Declaration      Visibility                                        Life

-      Before all      Entire file & other files where
       functions       the variable is declared extern.                  Global

Extern Before all      Entire can not be initialized                     Global
       functions

Static Before all      Entire file but not other files initialized       Global
       functions       to 0 if not assigned a value.


                       Local Variable


None Inside a          Only in that function or block.                 Unit end of
or   function or                                                function block
auto block

Register -quot;-           -quot;-                                      -quot;-

Static Inside a        Only in that function                    Global
       function

RECURSION
Whenever a function is called the automatic variables declared in the function are pushed
in to the memory area called stack. These variables have a life fill the function ends. We
end the function either by a return statement or by the conduding braces. Before the
function ends you can called the same function again. Thus another set of variables is
C FOR ENGINEERS                           R.G.Salokhe


pushed in the memory. The process of a function calling itself is called decursion.
However some where the function has to terminate.
*               *
* finding factorial by decudsion *
main( )
{
int n;
float fact( );
printf(quot; Enter a number quot;);
scanf(quot;% d%fquot;,n,fact(n));
}
float fact(int n)
{
if (= =1) return(1);
else return n*fact(n-1);
}

The function fact is calling inself back with n-1. The process takes place as

   1             2          3            4           5
   1          2*1        3*2*1      4*3*2*1      5*4*3*2*1
  copy         copy       copy       copy         copy
     5           4          3          2            1


Fact( ) calls its copy2 with 4 which calls copy3 with3 and so on. The copy5 returns 1,
copy4 returns 2*1, copy 3 returns 3*2*1 and finally 5! Is returned.

THE FIBONACCI NUMBER BY RETURSION
We have already written a program to display the Fibonacci series. Now we will use
recursion to display the series.
Mathematically the Fibonacci series can be written as.
        F(1) =1
        F(2) =1
        F(n) =F(n-2) + F(n-1) for n>2

         *               *
         main( )
         {
         int fab(int);
         int n;
         for(n=1; n<=10; n + +)
              printf(quot;%dquot;, fab(n));
         }
         int fab (n)
         {
         if (n= =1 | | n= =2) return 1;
C FOR ENGINEERS                      R.G.Salokhe


      else return fab(n-1) + fab(n-2);
      }
Output
      1 1 2 3 5 8 13 21 34 55


        /*              */
        /* reversing a string with recursion */
        main( )
        {
        int n;
        void reverse ( );
        printf(quot;Type no of characters to reversequot;);
        scanf(quot;%dquot;,&n);
        printf(quot;nquot;);
        reverse(n);
        puts(quot;nquot;);
        }
        void reverse(int n)
        {
        char c;
        if(n= 1){
        c= getche( );
        puts(quot;/nquot;);
        putch(c);
        }
        else
        {
        c=getche( );
        reverse(- -n);
        putch(c);
        }
        return;
        }

Input          5       abcde

Output                 edcba

here we call the same function reverse before it is completed in the else block. The
putch(c) in the else is thus kept pending. When n becomes 1 the last copy of reverse is
complete and the function start returning. At the time of returning the pending putch( ) is
executed which prints the characters typed by you in reverse order.
C FOR ENGINEERS            R.G.Salokhe



THIS IS ALL I HAVE WRITTEN ON C


FOR OTHER BOOKS WRITTEN BY ME PLEASE VISIT

http://www.geocities.com/arutacomp/

or mail me on

arutacomp@rediffmail.com


The books available are

1] AutoCAD 2007 – The third dimension
2] Visual Basic 6 – from bottom to top
3] MS-ACCESS

Thank you.

Más contenido relacionado

La actualidad más candente

La actualidad más candente (19)

Unit ii ppt
Unit ii pptUnit ii ppt
Unit ii ppt
 
Programming in C Basics
Programming in C BasicsProgramming in C Basics
Programming in C Basics
 
C tutorial
C tutorialC tutorial
C tutorial
 
Basic c programming and explanation PPT1
Basic c programming and explanation PPT1Basic c programming and explanation PPT1
Basic c programming and explanation PPT1
 
C Programming
C ProgrammingC Programming
C Programming
 
C Language (All Concept)
C Language (All Concept)C Language (All Concept)
C Language (All Concept)
 
C programming language tutorial
C programming language tutorial C programming language tutorial
C programming language tutorial
 
Introduction to C programming
Introduction to C programmingIntroduction to C programming
Introduction to C programming
 
C programming Workshop
C programming WorkshopC programming Workshop
C programming Workshop
 
C language (Collected By Dushmanta)
C language  (Collected By Dushmanta)C language  (Collected By Dushmanta)
C language (Collected By Dushmanta)
 
Basics of c++
Basics of c++Basics of c++
Basics of c++
 
What is c
What is cWhat is c
What is c
 
Advanced C Language for Engineering
Advanced C Language for EngineeringAdvanced C Language for Engineering
Advanced C Language for Engineering
 
The smartpath information systems c pro
The smartpath information systems c proThe smartpath information systems c pro
The smartpath information systems c pro
 
C Programming Language Tutorial for beginners - JavaTpoint
C Programming Language Tutorial for beginners - JavaTpointC Programming Language Tutorial for beginners - JavaTpoint
C Programming Language Tutorial for beginners - JavaTpoint
 
Structure of a C program
Structure of a C programStructure of a C program
Structure of a C program
 
Fundamental of C Programming Language and Basic Input/Output Function
  Fundamental of C Programming Language and Basic Input/Output Function  Fundamental of C Programming Language and Basic Input/Output Function
Fundamental of C Programming Language and Basic Input/Output Function
 
Unit ii
Unit   iiUnit   ii
Unit ii
 
Basics of C programming
Basics of C programmingBasics of C programming
Basics of C programming
 

Destacado

0116-leadership-resilience-md
0116-leadership-resilience-md0116-leadership-resilience-md
0116-leadership-resilience-mdPat Sanaghan
 
Sulucionario electromagnetismo cheng
Sulucionario electromagnetismo cheng Sulucionario electromagnetismo cheng
Sulucionario electromagnetismo cheng Saku Garcia
 
Windows 8.1 Deployment - Tools, Tools, Tools
Windows 8.1 Deployment - Tools, Tools, ToolsWindows 8.1 Deployment - Tools, Tools, Tools
Windows 8.1 Deployment - Tools, Tools, ToolsRoel van Bueren
 
Dedicado a mis amig@s ciberentic@s
Dedicado a mis amig@s ciberentic@sDedicado a mis amig@s ciberentic@s
Dedicado a mis amig@s ciberentic@sstaro G.G
 
Ch2 2014 Kristen Ricker Nixa High School
Ch2 2014 Kristen Ricker Nixa High School Ch2 2014 Kristen Ricker Nixa High School
Ch2 2014 Kristen Ricker Nixa High School rickerkristen
 
Ea conference st albert feb 2014
Ea conference  st albert feb 2014Ea conference  st albert feb 2014
Ea conference st albert feb 2014tobylscott
 
Say little, do more.
Say little, do more.Say little, do more.
Say little, do more.SURAJ MISHRA
 
Everybody Polyglot! - Cross-Language RPC with Erlang
Everybody Polyglot! - Cross-Language RPC with ErlangEverybody Polyglot! - Cross-Language RPC with Erlang
Everybody Polyglot! - Cross-Language RPC with ErlangRusty Klophaus
 
TBEX15 Asia Thailand Sara Meaney
TBEX15 Asia Thailand Sara MeaneyTBEX15 Asia Thailand Sara Meaney
TBEX15 Asia Thailand Sara MeaneyTBEX
 
Book4 unit1-lesson5
Book4 unit1-lesson5Book4 unit1-lesson5
Book4 unit1-lesson5stthomas8
 
Tarif jne-reg-2013-bdg-1-juni-2013
Tarif jne-reg-2013-bdg-1-juni-2013Tarif jne-reg-2013-bdg-1-juni-2013
Tarif jne-reg-2013-bdg-1-juni-2013ridwansf2
 

Destacado (20)

Hwswb
HwswbHwswb
Hwswb
 
Yg Ini 1
Yg Ini 1Yg Ini 1
Yg Ini 1
 
Inside sina weibo
Inside sina weiboInside sina weibo
Inside sina weibo
 
Ususnmptn2011
Ususnmptn2011Ususnmptn2011
Ususnmptn2011
 
0116-leadership-resilience-md
0116-leadership-resilience-md0116-leadership-resilience-md
0116-leadership-resilience-md
 
Sulucionario electromagnetismo cheng
Sulucionario electromagnetismo cheng Sulucionario electromagnetismo cheng
Sulucionario electromagnetismo cheng
 
Lulusan SMK PI class of 2014
Lulusan SMK PI class of 2014Lulusan SMK PI class of 2014
Lulusan SMK PI class of 2014
 
Windows 8.1 Deployment - Tools, Tools, Tools
Windows 8.1 Deployment - Tools, Tools, ToolsWindows 8.1 Deployment - Tools, Tools, Tools
Windows 8.1 Deployment - Tools, Tools, Tools
 
Changhong
ChanghongChanghong
Changhong
 
Dedicado a mis amig@s ciberentic@s
Dedicado a mis amig@s ciberentic@sDedicado a mis amig@s ciberentic@s
Dedicado a mis amig@s ciberentic@s
 
Ch2 2014 Kristen Ricker Nixa High School
Ch2 2014 Kristen Ricker Nixa High School Ch2 2014 Kristen Ricker Nixa High School
Ch2 2014 Kristen Ricker Nixa High School
 
Google inchina
Google inchinaGoogle inchina
Google inchina
 
Ea conference st albert feb 2014
Ea conference  st albert feb 2014Ea conference  st albert feb 2014
Ea conference st albert feb 2014
 
Visual Network Analysis
Visual Network AnalysisVisual Network Analysis
Visual Network Analysis
 
Say little, do more.
Say little, do more.Say little, do more.
Say little, do more.
 
Everybody Polyglot! - Cross-Language RPC with Erlang
Everybody Polyglot! - Cross-Language RPC with ErlangEverybody Polyglot! - Cross-Language RPC with Erlang
Everybody Polyglot! - Cross-Language RPC with Erlang
 
TBEX15 Asia Thailand Sara Meaney
TBEX15 Asia Thailand Sara MeaneyTBEX15 Asia Thailand Sara Meaney
TBEX15 Asia Thailand Sara Meaney
 
Book4 unit1-lesson5
Book4 unit1-lesson5Book4 unit1-lesson5
Book4 unit1-lesson5
 
1st Grade Unit 6: Blue jay finds a way
1st Grade Unit 6: Blue jay finds a way1st Grade Unit 6: Blue jay finds a way
1st Grade Unit 6: Blue jay finds a way
 
Tarif jne-reg-2013-bdg-1-juni-2013
Tarif jne-reg-2013-bdg-1-juni-2013Tarif jne-reg-2013-bdg-1-juni-2013
Tarif jne-reg-2013-bdg-1-juni-2013
 

Similar a C Programming

Introduction to C Programming
Introduction to C ProgrammingIntroduction to C Programming
Introduction to C ProgrammingMOHAMAD NOH AHMAD
 
Unit 4 Foc
Unit 4 FocUnit 4 Foc
Unit 4 FocJAYA
 
C prog ppt
C prog pptC prog ppt
C prog pptxinoe
 
MCA 101-Programming in C with Data Structure UNIT I by Prof. Rohit Dubey
MCA 101-Programming in C with Data Structure UNIT I by Prof. Rohit DubeyMCA 101-Programming in C with Data Structure UNIT I by Prof. Rohit Dubey
MCA 101-Programming in C with Data Structure UNIT I by Prof. Rohit Dubeykiranrajat
 
C programing Tutorial
C programing TutorialC programing Tutorial
C programing TutorialMahira Banu
 
Getting started with c++
Getting started with c++Getting started with c++
Getting started with c++K Durga Prasad
 
c_pro_introduction.pptx
c_pro_introduction.pptxc_pro_introduction.pptx
c_pro_introduction.pptxRohitRaj744272
 
C programming language
C programming languageC programming language
C programming languageAbin Rimal
 
Introduction to c programming
Introduction to c programmingIntroduction to c programming
Introduction to c programmingAlpana Gupta
 
Copy of UNIT 2 -- Basics Of Programming.pptx
Copy of UNIT 2 -- Basics Of Programming.pptxCopy of UNIT 2 -- Basics Of Programming.pptx
Copy of UNIT 2 -- Basics Of Programming.pptxrahulrajbhar06478
 
cmp104 lec 8
cmp104 lec 8cmp104 lec 8
cmp104 lec 8kapil078
 

Similar a C Programming (20)

Introduction to C Programming
Introduction to C ProgrammingIntroduction to C Programming
Introduction to C Programming
 
Unit 4 Foc
Unit 4 FocUnit 4 Foc
Unit 4 Foc
 
C prog ppt
C prog pptC prog ppt
C prog ppt
 
CProgrammingTutorial
CProgrammingTutorialCProgrammingTutorial
CProgrammingTutorial
 
MCA 101-Programming in C with Data Structure UNIT I by Prof. Rohit Dubey
MCA 101-Programming in C with Data Structure UNIT I by Prof. Rohit DubeyMCA 101-Programming in C with Data Structure UNIT I by Prof. Rohit Dubey
MCA 101-Programming in C with Data Structure UNIT I by Prof. Rohit Dubey
 
Cpu
CpuCpu
Cpu
 
C programing Tutorial
C programing TutorialC programing Tutorial
C programing Tutorial
 
Getting started with c++
Getting started with c++Getting started with c++
Getting started with c++
 
Getting started with c++
Getting started with c++Getting started with c++
Getting started with c++
 
C Programming Unit-1
C Programming Unit-1C Programming Unit-1
C Programming Unit-1
 
c_pro_introduction.pptx
c_pro_introduction.pptxc_pro_introduction.pptx
c_pro_introduction.pptx
 
C programming language
C programming languageC programming language
C programming language
 
Basics of c
Basics of cBasics of c
Basics of c
 
Introduction to c programming
Introduction to c programmingIntroduction to c programming
Introduction to c programming
 
5 introduction-to-c
5 introduction-to-c5 introduction-to-c
5 introduction-to-c
 
Copy of UNIT 2 -- Basics Of Programming.pptx
Copy of UNIT 2 -- Basics Of Programming.pptxCopy of UNIT 2 -- Basics Of Programming.pptx
Copy of UNIT 2 -- Basics Of Programming.pptx
 
cmp104 lec 8
cmp104 lec 8cmp104 lec 8
cmp104 lec 8
 
Chapter1.pptx
Chapter1.pptxChapter1.pptx
Chapter1.pptx
 
C introduction by thooyavan
C introduction by  thooyavanC introduction by  thooyavan
C introduction by thooyavan
 
Chapter1.pptx
Chapter1.pptxChapter1.pptx
Chapter1.pptx
 

Más de Adil Jafri

Csajsp Chapter5
Csajsp Chapter5Csajsp Chapter5
Csajsp Chapter5Adil Jafri
 
Programming Asp Net Bible
Programming Asp Net BibleProgramming Asp Net Bible
Programming Asp Net BibleAdil Jafri
 
Network Programming Clients
Network Programming ClientsNetwork Programming Clients
Network Programming ClientsAdil Jafri
 
Ta Javaserverside Eran Toch
Ta Javaserverside Eran TochTa Javaserverside Eran Toch
Ta Javaserverside Eran TochAdil Jafri
 
Csajsp Chapter10
Csajsp Chapter10Csajsp Chapter10
Csajsp Chapter10Adil Jafri
 
Flashmx Tutorials
Flashmx TutorialsFlashmx Tutorials
Flashmx TutorialsAdil Jafri
 
Java For The Web With Servlets%2cjsp%2cand Ejb
Java For The Web With Servlets%2cjsp%2cand EjbJava For The Web With Servlets%2cjsp%2cand Ejb
Java For The Web With Servlets%2cjsp%2cand EjbAdil Jafri
 
Csajsp Chapter12
Csajsp Chapter12Csajsp Chapter12
Csajsp Chapter12Adil Jafri
 
Flash Tutorial
Flash TutorialFlash Tutorial
Flash TutorialAdil Jafri
 

Más de Adil Jafri (20)

Csajsp Chapter5
Csajsp Chapter5Csajsp Chapter5
Csajsp Chapter5
 
Php How To
Php How ToPhp How To
Php How To
 
Php How To
Php How ToPhp How To
Php How To
 
Owl Clock
Owl ClockOwl Clock
Owl Clock
 
Phpcodebook
PhpcodebookPhpcodebook
Phpcodebook
 
Phpcodebook
PhpcodebookPhpcodebook
Phpcodebook
 
Programming Asp Net Bible
Programming Asp Net BibleProgramming Asp Net Bible
Programming Asp Net Bible
 
Tcpip Intro
Tcpip IntroTcpip Intro
Tcpip Intro
 
Network Programming Clients
Network Programming ClientsNetwork Programming Clients
Network Programming Clients
 
Jsp Tutorial
Jsp TutorialJsp Tutorial
Jsp Tutorial
 
Ta Javaserverside Eran Toch
Ta Javaserverside Eran TochTa Javaserverside Eran Toch
Ta Javaserverside Eran Toch
 
Csajsp Chapter10
Csajsp Chapter10Csajsp Chapter10
Csajsp Chapter10
 
Javascript
JavascriptJavascript
Javascript
 
Flashmx Tutorials
Flashmx TutorialsFlashmx Tutorials
Flashmx Tutorials
 
Java For The Web With Servlets%2cjsp%2cand Ejb
Java For The Web With Servlets%2cjsp%2cand EjbJava For The Web With Servlets%2cjsp%2cand Ejb
Java For The Web With Servlets%2cjsp%2cand Ejb
 
Html Css
Html CssHtml Css
Html Css
 
Digwc
DigwcDigwc
Digwc
 
Csajsp Chapter12
Csajsp Chapter12Csajsp Chapter12
Csajsp Chapter12
 
Html Frames
Html FramesHtml Frames
Html Frames
 
Flash Tutorial
Flash TutorialFlash Tutorial
Flash Tutorial
 

Último

Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 

Último (20)

Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 

C Programming

  • 1. C FOR ENGINEERS R.G.Salokhe FOR OTHER BOOKS WRITTEN BY ME PLEASE VISIT http://www.geocities.com/arutacomp/ or mail me on arutacomp@rediffmail.com The books available are 1] AutoCAD 2007 – The third dimension 2] Visual Basic 6 – from bottom to top 3] MS-ACCESS Thank you. Rajendra Salokhe
  • 2. C FOR ENGINEERS R.G.Salokhe The C language was created, designed and written by Dennis Ritchie in 1972 at Bell Laboratories. C was designed to run under UNIX operating system on the DEC, PDP11 computer. Features of C :- a) Portability :- The best feature for which C gained popularity is the portability of code. The C language programs could be run on variety of computers with a little or no change in the source code. Which means the C language code can be used under various operating systems. b) Efficiency :- The C language is efficient in two ways I) The source code is very compact ii) Memory Management through C is very efficient. c) Modularity :- C allows separately compiled modules which can be linked together. The programs can be written in well structured manner. C is a language of functions. Various modules are written as functions. d) Pointer Operations :- C is very powerful in pointer operations. Pointers can be set to various data types as well as to funtions, structures etc. Arrays can be manipulated with the help of pointers. e) Flexible level :- C programs can be written with the features of high level languages as well as that of low level languages. C thus fits in between the two. C is not a ‘strongly typed’ language. There are no bounds to number of array elements. f) Case Sensitivity :- C is case sensitive. Which means the upper case and lower case characters are treated differently in variable names, function names etc. ANSI C :- ANSI stands for American National Standard Institute. The ANSI set a standard for C language in 1990. This was for the various compiler developers to use this standard. However many compilers are not strictly adhering to the ANSI standard. Structure of C Programs :- Since C is a language of functions, let us understand what a function means; A function is an entity which accepts some input, processes the same and gives the output. The type of function is determined by its output. The function can be used as its output. >>> >>> input Function output
  • 3. C FOR ENGINEERS R.G.Salokhe 4 2 Numeric Numeric Input Output 4 input to function gives 2 as output. The function 4 can be used as value 2. e.g. 6 X 4 = 12. Here 4 is used as 2. 30 SINE 1/2 degrees number Let us look at the structure of a C program; /*PROG1.C */ Comment # include < stdio.h > Header main ( ) Function Main { Body of Main starts ; Null statement } Main ( ) ends We have written the program name as comments. The comments, spaces, tabs, newline characters are ignored by the C Compiler. At this stage we will keep aside the discussion on header file. just remember that ‘ stdio ‘ stands for standard input output.
  • 4. C FOR ENGINEERS R.G.Salokhe Every set of C programs should have one main ( ) function. This is called the driving function. The program execution starts at ‘ { ‘, the opening brace of the main function body and ends at the ‘ } ‘ closing brace. We have included a null statement, a statement which does not mean anything in the body of the main ( ) function. Every statement in C ends with a ‘ ; ‘ ( semicolon ). The above prgram will run but would not produce any results. Let us slightly modify the program; /* PROG2.C */ # include < stdio.h > main ( ) { printf ( quot;Hello friends! quot; ) ; } Output - Hello friends! printf ( ) is another function available in the C library and declared in the stdio.h file. Thus whichever functions we use, we have to include corresponding header files into our programs. /* PROG3.C */ # include < stdio.h > main ( ) { printf ( quot; Hello friends ! n quot; ) printf ( quot; How are you ? n quot; ) ; } Output - Hello friends! How are you? The ( backslash ) causes escape from the normal printing process and n causes the computer to skip one line while printing. Other escape sequences are ; b backspace t tab
  • 5. C FOR ENGINEERS R.G.Salokhe f form feed ’ single quote r carriage return 0 null C character set :- C uses the following character set; a) Alphabets upper case ( A to Z ) b) Alphabets lower case ( a to z ) c) Decimal digits ( 0 to 9 ) d) Other characters; comma ( , ), semicolon ( ; ), period ( . ) querry ( ? ), exclaimation ( ! ), colon ( : ), plus ( + ), minus ( - ), asterisk ( * ), slash ( / ), backslash ( ), vertical bar ( | ), single quote ( ‘ ), double quote ( “ ),tild ( ~ ) , right parantheses ( ( ), left paranthese ( ) ), right bracket ( [ ),left bracket ( ] ), right brace ( { ), left brace ( } ), right angle bracket ( < ), left angle bracket ( > ), equal sign ( = ), ampersand ( & ), percent sign ( % ), pound sign ( # ) caret ( ^ ), under score ( _ ). Variable Names :- As a very basic concept we can say that a variable is an entity whose value changes. We use a lot of variables in Algebra. When we say a = 5; a is a variable and we are assigning the value of 5 to a. Coming to a better concept a variable is the name assigned to the address of a cell in the memory. Memory cell Name a Address 2529 Value 5 When you say
  • 6. C FOR ENGINEERS R.G.Salokhe a =6; Then the value 5 vanishes and the value of 6 is put into the cell. a = a+6; is a wrong algebric equation but it is a valid computer equation as it means add 6 to the present value of a and assign the resulting value to a. Thus a becomes 12. a + 5 = 6 ; / * wrong * / The above equation is wrong for the computer as you can not add anything to the name. We have used a as a variable name. We can use any name for the variable within the following rules. 1) The variable name can not have a space, comma or characters like ( #,?,&,$,!,| ) - why use funny characters? 2) The name uses underscore, alphabet and numeric characters only. e.g. _ total BASIC D_A etc. 3) The language reserved words or key words can not be used as variable names. e.g. double, int,auto etc. 4) The first character of name can not be a digit. The variable name can be 31 characters long. Data Types :- Larger the value, larger is the space required in memory to store the number. If you are using a variable whose value varies between 0 and 255 then there is no need to allocate more space in memory for storing this number. The data types are created for efficient use of the memory. How much memory is alloted for the various types depends on the machine. Character Data Types :-
  • 7. C FOR ENGINEERS R.G.Salokhe The basic data types is the character variable. Character variable occupies 1 byte of the memory. 1 byte comprises of 8 bits and the maximum value of 8 bit binary number is 255. 1 byte = 8 bits 27 26 25 24 23 22 21 20 128+ 64 +32 +16 + 8 + 4 + 2 + 0 = 255 If the character is unsigned then it can store values from 0 to 255. In other words we can say that total values that can be stored in 8 bits is 28 or 256. / * PROG4.C * / # include < stdio.h > main ( ) { char a ; a is declared to be of character type. a=‘A‘; printf ( quot; A = %c quot;, a ) ; } output - A=A Variable a is declared as character type and then assigned a value 'A' which is a character constant. A character enclosed in single quotes makes a character constant. Type char and unsigned char are equivalent. signed char can store values from -128 to 127 ( 128 + 127 + 1 for zero = 256 ) C has a unique feature by which numeric values can be mixed with characters or characters can be treated as numbers. / * PROG5.C * /
  • 8. C FOR ENGINEERS R.G.Salokhe # include < stdio.h > main ( ) { char a ; a is declared as character. a = 65 ; a is assigned a numeric value printf ( quot; Decimal value of a is %d n ,quot;a ) ; printf ( quot; Character value of a is %c n,quot;a) ; } output - Decimal value of a is 65 Character value of a is A The ASCII value of A is 65. B is 66 etc. Thus A can mean 65 or B can mean 66. ASCII value of lower case a is 97 and that of b is 98 etc. This feature can be used to convert upper case letters into lower case and vice versa. / * PROG6.C * / # include < stdio.h > main ( ) { char a, b ; a = 'A' print f ( quot; value of a is % c nquot;, a ) ; a = a +32; Adding 32 to character converts upper case to lower case. printf ( quot; now a is %c quot; , a ) ; } output - value of a is A now a is a Initially we have assigned upper case A to variable a. Later we have added 32 to variable a. Now the value stored in variable a is lower case a. We have used char type in above examples. However the char type can be declared in three ways;
  • 9. C FOR ENGINEERS R.G.Salokhe char signed char unsigned char Simply mentioning char declares the variable to be of signed char type ( However for some compilers it is unsigned char.) The range for char varies from -128 to 127 and for unsigned char it is 0 to 255, total 256 numbers. The characters have a space of 1 byte or 8 bits available. The first bit is taken up by the sign sign maximum number you can store in 7 bits is 127. and the maximum number that can be stored in the remaining 7 bits is 127. So how can you store the number -128 ? It is something called as 2’S compliment method ; 1 0 0 0 0 0 0 0 -128 1 0 0 0 0 0 0 1 -127 1 0 0 0 0 0 1 0 -126 Integer Type :- Integer variables store a value which are whole numbers i.e. a number with or without sign but no fractional part and hence are declared as; int i; Integers have the following range ;
  • 10. C FOR ENGINEERS R.G.Salokhe Declaration Bytes Range short int 2 -32768 to 32767 signed short int 2 -32768 to 32767 unsigned short int 2 0 to 65535 int 2 -32768 to 32767 signed int 2 -32768 to 32767 unsigned int 2 0 to 65535 long int 4 -2147483648 to 2147483647 unsigned long int 4 0 to 4294967295 signed long int 4 -2147483648 to 2147483647 a) The int word may be ommitted in all the cases except where you want to declare the variable as int only. eg. int i; long i ; unsigned long i ; b) int and signed int are same. long and signed long are same. / * PROG7.C * / # include < stdio.h > main ( ) { int i; i=5; printf ( quot; Value of i is = %dnquot;, i); i=6; printf ( quot; Value of i is = %dnquot;, i);
  • 11. C FOR ENGINEERS R.G.Salokhe } output - Value of i is = 5 Value of i is = 6 For printing long int an ‘ ld ‘ format is used in the printf eg. long i; printf ( “%ld “ , i); Floating Point Type :- Floating point variables store a number which has fractional part. Thus the floating number is divided into two parts; 1) Mantissa :- The digits are stored in the Mantissa part. The number of digits of accuracy is decided by the Mantissa part. 2) Exponent :- The exponent part decides the 10s power the Mantissa is to be raised to and thus the range of the number. / * PROG8.C * / main( ) { float f ; f = 3.142 ; printf ( quot; %f quot; , f ) ; } output - 3.142000 6 digits are printed. For more accuracy the floating point numbers can also be declared as double or long double. Modifier L is used in printf to denote long double as; printf ( “ %Lf “ , f ) ; Declaration Precision digits Bytes Range float 7 4 3.4 X 10-38 to 3.4 X 10+38
  • 12. C FOR ENGINEERS R.G.Salokhe double 15 8 1.7 X 10-308 to 1.7 X 10+308 long double 19 10 3.4 X 10-4932 to 3.4 X 10+4932 What if you exceed the limit :- If you exceed the limit of the variable you would not get an error message. Instead value of the variable is reset in the rotational manner. If you declare i to be a character then the values stored in i will range from -128 to 127. If you assign a value of +128 to i then i becomes -127. Value of 129 will make i equal to -127 and so on. Let us solve a question from Mumbai University paper, / *PROG9.C * / main ( ) { int i = 320 ; char j ; j=i; printf ( quot; %c quot; , j ) ; } output - @ j can take a maximum value of 127, after 127 it will become -128. we have to go on substracting 128 from 320 till we get a feasible value. 320 - 128 ----------- 192 - 128 ----------- 64 since 64 falls in the range of j, the character a whose ASCII value is 64 will be printed. Instead of i = 320 if you make it 321 then the value of j will be 65 and A will be printed.
  • 13. C FOR ENGINEERS R.G.Salokhe /* PROG10.C */ main() { int i=32; i=i*(i/3)*100+800; printf( quot;%dquot;,i); } Output :- -32736 Here again i/3 will be 10 because i is integer and it can not store fractional part. We are trying to assign a new value which is 32*10*100+800 = 32800 to i. This is out of range of the integer. -32768+32800 = 32 -32768+32 = -32736 You must have observed that assigning float value to integer truncates the fractional part. If you change the program as /* PROG11.C */ main() { int i=32; long j; j=i*(i/3)*100+800 printf (quot; %dquot;,j); } Output :- -32736 You may think that because j is of long type it will hold the value 32800, but before the value is assigned to j, the right hand side evaluates to an integer value which is -32736. Try the following to get the correct result. j=i*(i/3)*100+800l; Constants :-
  • 14. C FOR ENGINEERS R.G.Salokhe We deal with the constant since our childhood. Constant is an entity whose value does not change. All the numbers are constants. However we have to have diffrent types in constant as that of variables for efficient management of memory. Named Constants :- Named constant will have a name like variable but the value of the named constant would not change as float PI=3.142; Here you declare PI as floating type variable but you are not supposed to change the value of PI. However you may accidently change the value of PI. To avoid this you can use const key word in the declaration as const float PI= 3.142; Now the compiler itself would not allow you to change the value of PI and you can use PI into any expression as; c=2*PI*j; Symbolic or substitution constants :- For using symbolic constant the have to use a preprocessor directive called # define eg. #define PI 3.142 When you compile the C program the preprocessor gets an instruction from the above statement to substitue PI with 3.142. Whereever it finds PI written in the program the same is substituted by 3.142. PI is not a variable name. PI is not a variable it cannot be used as the variable .
  • 15. C FOR ENGINEERS R.G.Salokhe /* PROG12.C */ #define PI 3.142 main() { float c; int r; r=15; c=2*PI*r; ( 3.142 is substitued in place of PI. ) printf( quot;%f quot;,c); } Integer Constants :- Numbers without fractional parts constitued integers.eg. i=5 ; here 5 is an integer constant. Long integers can have l suffix.eg. long int i; i=1234567 l; Floating Point Constants :- Are numbers with fractional part. eg. 79.462 123E-3 equivalent to 123*10-3 Long double floating point constants can have L suffix as d= 12345.32L; You can also suffix f to floating point constants as f=79.46f; Character Constants :- The characters constants are enclosed in the single inverted comma or single quotation mark. eg. 'A' , 'b' , '1' etc. You can have only one character inside the quotation mark. char ch; ch='A';
  • 16. C FOR ENGINEERS R.G.Salokhe Charater constants also represent the type int . The value then is the ASCII value of the character. eg. ASCII value of A is 65, that of B is 66 etc. and thus A also means 65. char ch; ch='A'; ch=ch+1; printf(“ %c”,ch); will print 'B' Non printable characters :- We have used ' character in printf. This is non printable charater and represents new n' a line. Thus when we write printf (quot; Hello nquot;); ( new line character to skip one line . ) printf(quot; Hiquot;); 'Hello' is printed on first line and 'Hi' is printed on the next line. If not there the n is printout will be HelloHi; The use of before a printable character to print non- printable character is also called escape sequence. The escape sequences available are. character description Hexadecimal Value ' n' New line / Line feed ' x0a' ' t' Tabs ' x09' ' r' Carriage Return ' x0d' ' v' Vertical Tabs ' x0b' ' f' Form feed / Page Eject ' x0c' ' b' Back space ' x08' ' a' Bell ' x07' ' ' Single quote ' x27' ' quot; Double quote ' x22' ' 0' String terminating null ' x0' /* PROG13.C */ main()
  • 17. C FOR ENGINEERS R.G.Salokhe { char ch,ch1; ch='a'; ch1=' n'; printf (quot; %cquot;,ch); printf (quot;Helloquot;); printf (quot;%cquot;,ch1); printf (quot;x0a Hello quot;); quot;x0a can be used in place of n printf (quot;x07 Hello quot;); quot;x07 bell } Output :- * bell * Hello Hello *bell* Hello String Constants Or String Literals :- String is a array of characters. ( We will discuss about this later ). The characters enclosed in double quotes represent a srting. The string may or may not contain any characters. quot; quot; - empty string quot;Helloquot; are the examples of strings. If we want a double quotes and back slash in the string then we have to put a back slash before this as. quot;quot; Hello quot; quot; quot; Hello quot; The string is automatically terminated with the null 0 character. This is always the last character of the string. The string quot;Helloquot; is actually stored in memory as; H E L L O 0 /* PROG 14.C */ main( ) { char ch[]= quot;Helloquot;; ( ch declared as array of characters ) printf (quot;%squot;,ch); } Output :- Hello Octal Constants :- Octal constants use digits from 0 to 7 like the decimal constants which use digits from
  • 18. C FOR ENGINEERS R.G.Salokhe 0 to 9 83 82 81 80 512 64 8 1 1 7 =8+7 = 15 in decimal 7 4 56+4 = 60 Octal constants are written with starting 0. as 017 , 074 etc. Hexadecimal constants :- Hexadecimal constants use digits from 0 to 15 and thus powers of 16. The numbers after 9 are represented with A,B,C,D,E,F. A=10, B=11, C=12, D=13, E=14, F=15 162 161 160 256 16 1 1 7 = 16+7 = 23 in decimal 3 F = 48+15= 63 in decimal Declaring And Defining The Variables :- Before you use any variables it is required to be declared so that the compiler knows that you are going to use the variable in the program. It also knows the type of variable and the memory required to be allocated for that variable. This way you can avoid duplicate variable names and also errors in spelling the variable name. eg.if you declare int day-of-week ; and later on say day-of-wek=5; The compiler will point out the error, since there is a spelling difference in the variable declared and the variable you are trying to use. In some interpreter languages another variable day-of-wek will be created causing errors and mishaps to the logic of the program.
  • 19. C FOR ENGINEERS R.G.Salokhe Defining the variables means setting aside memory for the variables. Since the statements so far used by us also set aside memory for the variable we are doing the job of declaring and defining at the same time. When you declare int i; We are informing the compiler that we are going to use a variable name called i , i is going to be of integer type and a memory of 2 bytes should be alloted to i . The size of memory alloted depends on the type and machine. The variables is required to be decleared before use. The declarations are made at the beginning of the block. examples : int i=0; int i,j; float x; i=j=0; int i=5, j=2 ; char name[ ] = quot;Ajayquot; Enumerated Constants And Variables :- Enumerated Variables are like integer variables but they are associated with named constants and their values can vary within a limit only. eg. enum color ( Yellow, Cyan, Magenta ); here color is the tag name and it can be used to declare a variable of enum type . Yellow, Cyan, and Magenta are named constants and their values will be; Yellow = 0; Cyan =1; Magenta =2 and so on if you have more names in the bracket. *PROG15.C * main ( ) { enum color (yellow, cyan, Magenta); enum color Y,C,M ; Y=Yellow ; C=Cyan;
  • 20. C FOR ENGINEERS R.G.Salokhe M=Magenta; printf (quot;%d nquot;,Y); printf (quot;%d nquot; ,C); printf (quot;%d nquot; ,M); } Output :- 0 1 2 Since Y, C and M are declared of enum color type their values can vary only from 0 to 2. ‘Yellow ‘ means 0, ‘Cyan’ means 1, Magenta means 2 and thus; Y=Yellow; will store 0 in y You can however assign a different value to Yellow or Cyan or Magenta in the declaration. The subsequent values will also change. eg. enum color ( Yellow =5, Cyan, Magenta ); in this case Yellow will have a value of 5, Cyan will have a value of 6 and Magenta will have value of 7. You can have enum color ( Yellow, Cyan =8, Magenta ); In this case Yellow will be 0 ,Cyan will be 8 and Magenta will be 9. ======= **** =======
  • 21. C FOR ENGINEERS R.G.Salokhe Input Output Functions:- Formatted output printf( ):- We have so far used the printf( ) function to output information on the screen. Let us discuss the printf( ) function in a little detail. The printf( ) function is a formatted output function. You have to specify the format in which you want the output. The format is specified in double quotes. printf (quot;value of A=%d nquot;,A); Function Format Optional argument string Escape sequence Conversion specification for the argument The simplest form of printf( ) will be without any arguments as ; printf( quot;Mumbai is a great cityquot;); The conversion specification:- The conversion specification follows with % sign. The number of conversion specifications depend on the number of arguments. The conversion specification will have the following format; %[flag][width][precision][modifier][type] All the fields shown in the brackets are optional. The following types may be used; d or i - decimal u - unsigned o - octal x or X - hexadecimal f - fixed floating point e or E - exponential g or G - shortesh of f and e c - character s - string p - pointer The following flags may be used;
  • 22. C FOR ENGINEERS R.G.Salokhe - Left justify the number + Leading + sign for d,i,f,e,E,g or G type space Positive values with leading space for d,i,f,e,E,g,G types only. The width fields specifies the minimum width in which the number should be printed. However if the width of the number to be printed exceeds the specified width then the specified width is ignored. The width may be specified with leading 0 so that 0 are printed leading the number. The Precision field decides the number of digits to be printed after the decimal point. If no precision is specified then the default width is 6. Though integer numbers do not have a fractional field the precision may be specifed. In that case the precision decides the maximum number of digits to print. For g or G type the precision specifies the maximum number of digits to be printed after the decimal point. For s type the precision decides the number of characters to be printed. * PROG16 .C * main( ) { int i=1234; printf (quot; %d n quot;,i); printf (quot; %-5d n quot;,i); /* negatative flag */ printf (quot; %5d n quot;,i); printf (quot; %3d nquot; ,i); /* width less than number */ printf (quot; %+d nquot;,i); printf (quot; %d n quot;,i); /* space before type */ printf (quot; %05d nquot;,i); printf (quot; %.5d n quot;,i); /* precision specification */ printf (quot; % 5.2d n quot;,i); } Output :- 1234 left justified 1234 left justified 1234 +1234 01234 01234 1234 * PROG17.C*
  • 23. C FOR ENGINEERS R.G.Salokhe main( ) { float f =3.142 ; printf (quot; %f n quot;,f); printf (quot; %e n quot;,f); printf (quot; %.2f n quot;,f); printf (quot; %.2e n quot;,f); printf (quot; %6.2f n quot;,f); } Output :- 3.142000 3.142000e+00 3.14 4.14e+00 3.14 the 6.2 width means total width of 6 including decimal points and fractional digits. 1 3 . 1 4 Do not try use wrong type specification for the values. It will give wrong results, as float i =3.5; printf ( quot;%d n quot;,i); integer float type type or int i = 7.2; printf ( quot;%f n quot;, i); float integer type type The assignment int i = 7.2 ; is however correct. That case the value of i will be 7. Formatted input scanf()
  • 24. C FOR ENGINEERS R.G.Salokhe You must be starting for a function which can accept values from the key board. scanf( ) is the function used for this purpose. scanf( ) is a little tricky function in the sence that it requires the address of the variable in its parameters. why ? we will learn when we learn the functions. Let us see what the address means. So far we have learned that every variable declared will have a name, a value and a type. The further parameter the variable will have will be the address in the memory where the variable is stored. NAME VALUE i 35 TYPE ADDRESS int 4099 VARIABLE The address of any variable is representated by &i. /* PROG18.C*/ main( ) { int i = 35; printf(quot; %d n quot;,&i); } Output :- 4099 you may get a diffrent answer. This is the address where value of i is stored. The simplest form of scanf( ) will be *PROG19.C* main( ) { int i ; printf(quot; Type a number quot;); scanf(quot; %d quot;, &i); printf( quot; n You typed %d quot;,i); } Input / Output Type a number 35 You typed 35
  • 25. C FOR ENGINEERS R.G.Salokhe You can input two values at a time *PROG20.C* main( ) { float i,j ; printf(quot; Type two values quot;); scanf(quot; %f %f quot;, &i,&j ); printf(quot; n Sum is %f quot;, i+j); printf(quot; n Multiplication is %f quot;,i*j); printf(quot; n Division is %f quot;, i/j); } Input / Output Type two values 21 3 Sum is 24.000000 Multiplication is 63.000000 Division is 7.000000 If you want to input the values seperated by comma then you can use scanf(quot; %f , %f quot;, &i , &j ); You may specify the field width and not separate the values as scanf(quot; %3d%2d quot;, &i,&j ); You can type 23145 and the value of i will be 231 and that of j will be 45. You can also use scanf( ) for inputting characters and strings but scanf() is little tricky for string. /*PROG21.C*/ main ( ) { char ch [30]; string is array of characters scanf(quot;%squot;,ch); & is not used for arrays. printf (quot; n Good Morning Mr. %Squot;,ch); } printf (quot;type a Name nquot;); input output Type a Name Satish
  • 26. C FOR ENGINEERS R.G.Salokhe Good Morning Mr. Satish If you type Satish Sharma then also Good Morning Mr. Satish will be printed. Scanf ( ) will just ignore the surname as it is followed by a space. You can solve the problem by writing the scanf function something like. scanf(quot;%[A-Z a-z]nquot;,ch) space is required here. /*PROG22.C*/ Main ( ) { char c1,c2 ; printf (quot;Type two charctersnquot;); scanf (quot;%c%cquot;, &c1,&c2); printf (quot;First charcter % cnquot;,c1); printf (quot;Second character % cnquot;,c2); } Input/Output Type two characters AB do not separate the characters. First Character A Second Character B Because space is also a character you do not separate the characters with space. If you have to separate the input characters with a space then you have to write the scanf ( ) as. scanf (quot;%c %cquot;,&c1,&c2); space Incase of floating point numbers quot;%f %fquot; and quot;%f %f quot; will mean the same thing. Normally scanf ( ) will follow printf ( ) so that the operator is prompted as to what is requested to inputed. You have to also ensure that the data types inputed are correct as per format. Conversion of fahrenheit to centigrade.
  • 27. C FOR ENGINEERS R.G.Salokhe /* PROG23.C*/ main ( ) { float fa,ce; printf (quot;Enter fahrenneit temperaturenquot;); scanf (quot;%fquot;,&fa); ce= (5/9-0) * (fa-32); printf (quot;Fahrenneit = %fquot;,fa); printf (quot;Centigrade = %fquot;,ce); } Input/Output Enter Fahrenneit temperature 32 Fahrenneit = 32.000000 Centigrade = 0 .000000 Note that if you write 5/9 instead of 5/9-0 it will work out to be 0 because the division of two integers will be an integer number without fractional part. Function gets( ) The scanf function puts a limitation on the input when a string is entered. If you write /*PROG24.C*/ main ( ) { char ch[ ]; scanf (quot;% squot;, ch); printf (quot;% squot;, ch); } Input/Output Rajendra Salokhe Rajendra
  • 28. C FOR ENGINEERS R.G.Salokhe The surname has vanished in the output. scanf scans the string till a white space is encountered. There is a better function available which inputs the string till new line or end of file (^z) is reached. /*PROG25.C*/ main ( ) { char ch[ ]; gets (ch); puts (ch); } Input/Output Rajendra Salokhe Rajendra Salokhe We have also used the puts function which outputs the string on the screen. scanf ( ) poses another problem when character input is considered; /*PROG26.C*/ main ( ) { char c,d; scanf (quot;%c%cquot;, c,d); printf (quot;% dnquot;,c); printf (quot;% dnquot;,d): } Input/Output A 65 10 You want to input two values for c and d. When you type A and press enter the enter key is considered as another character. Thus value for A=65 and values of enter key=10 is outputed. The computer does not wait for another character. How do you input the value of d ? It is by two methods; 1) scanf (quot;% cnquot;,c); scanf (quot;% cnquot;,d); Take a dummy variable e, 2) scanf (quot;%c %cquot;, c,e); To handle characters and strings c has made available some other functions.
  • 29. C FOR ENGINEERS R.G.Salokhe getch( )/getehe( ) Both this functions allow to input a character from the keyboard with a little difference; /*PROG27.C*/ # include <conio.h> main( ) { char ch; ch=getch( ); printf (quot;n%cnquot;, ch); ch= getehe( ); printf (quot;n%cnquot;, ch); } Input/Output A This is not shown on the screen. A No enter key is required to press. A When you use getehe( ) what you type is shown on the screen. These are also other functions available to output the character. We will use these functions with another input function. /*PROG28.C*/ # include < conio.h > main( ) { char ch; ch= getehar( ); getehar( ) needs an enter key to be pressed. putchar (ch); output to standared output device. ch= getch ( ); putch (ch); output to text window, for now it is same as putehar( ) } Input/Output r Enter key is requited r t t No enter key required. Nothing is shown on screen. If you recollect our discussion about the functions we know that all the functions output something or return some value. and the function represents the output value. That is why we can assign.
  • 30. C FOR ENGINEERS R.G.Salokhe ch=getch( ); We have to remember that all the input functions discussed by us return an integer value and not the character value. It is thus advisable that insted of declaring ch as character. ch should be declared as integer as. int ch; Another thing to note that we have included the conio.h (pronounced con-eye-o) file in the program because gethe( ), getch( ) and putch( ) functions are declared in the conio.h file. Also note that getehar( ) is not a function but is macro extracted from fgetchar( ) function. Macro is something you obtain with a #define statement. In the above context even the printf( ) function returns an integer value for printf it is number of characters printed. /*PROG29.C*/ main( ) { printf(quot;% dquot;, printf(quot;Helloquot;)); } Output 5 Type Conversions When you write an expression you come across mixing various types in the expression as 5+2.5 Integer Float Here we are adding an integer constand to the constant of float type. This type of addition is not easy for the computer. as integer and floats are stored in different formats. The process required to be done is to convert the integer into float and then do the addition. Since we may mix a lot of different types the rules followed by C are in the following steps Step1 :- Convert all short and char operands to int type. Step2 :- Convert all float operands to double. Step3 :- After the above conversion if a double operand is there then all the operands are coverted double. Step4 :- If a long to operand is there then all the operands are converted to long. Step5 :- If any of the operand is unsigned then all the operands are converted to unsigned.
  • 31. C FOR ENGINEERS R.G.Salokhe Step6 :- Since all the operands are convereted into a single type the result will be calculated in that type. 'A'+3+5.0 Char is converted to int Float converted to double. 65+3+5.0 Integers converted to double 65.0+3.0+5.0 Result is double 73.0 ASSIGNMENT CONVERSION :- Evaluating the expression to a certain type and assigning it some other vanable are different things. While the expressions as discussed above evaluate to maximum accuracy the assignment works in the reverse fation. Float=Double; Value is rounded and truncated eg. Float f=12345678.5 will store a value of 12345679.0 in f. Long=Float; Fraction part of float is truncated. In the above example the value stored in long will be 12345679. Int=Long; When the value exceeds that of type int it goes back to - 32768 and starts add in further. In any case the value thus obtained may be unpredictable and will cause errors in the program. ARITHMATIC OPERATORS :- We are aware of some of the arithmatic operators. These are as follows Unary :- Unary operators work only on one operand eg. -5, -d, f
  • 32. C FOR ENGINEERS R.G.Salokhe They change the value of the operand to negative if the operand is positive and positive if the value of operand in negative. + Operator :- The plus operator does various addition. (We will come across other additions later). Grouping of + operator is done from left to night. d= a+b+c; d= (a+b)+c; a and b are first added and then c is added to the addition. - Operator :- Is used for substraction. * Operator - Is used for multiplication. and have higher precedance than + or -. d=5+3*4; multiplication is done before addition. d=5+12 =17 If addition has higher precedance then the above expression will evaluate as (5+3) * 4 = 8 * 4 =32 Which is wrong. / Operator:- This operator performs division .Interger type divided by integer yields interger type. Thus 5/9 will always give and answer equal to 0. % Modulus operator The moudulus operator works on interger data types and yields in the result equal to the remainder of the division. e.g. 7%5=2 7%6=1 7%7=0 7%8=7 ( 7 * 0 = 0 and remainder is 7 ).
  • 33. C FOR ENGINEERS R.G.Salokhe RELATIONAL OPERATORS :- < (Less than ), <= (less than or equal to ) , > (greater than ), >= (greater than or equal to ) are the relational operators which are used to test the conditions between two operands. /* PROG30.C */ main ( ) { int i; printf ( quot; Type a number quot; ); scanf ( quot; %d quot; , & i); if ( i > 0 ) printf ( quot; n the number is positive quot;); } The program is self explainatory . The important point you have to remember is that the experssion (i >0 ) evaluates to be 1(true) or 0 (false). If you write printf ( quot; %d quot; ,5 >7); the answer will be 0 as 5>7 is false. EQUITY OPERATORS:- = = ( equal to ) and ! = ( not equal to ) are the equity operators which work similar to relational operators.They compare the operands. The students many a times confuse between (= equal to) assignment operator and = = equity operator. The assignment actually assigns value to the variable but the = = operator just compares the values. e.g. i = 5; will change the value of i to 5. i = = 5; will compare the value of i if it is 5. LOGICAL OPERATORS :- && ( logical and ) | | ( logical or ) ! ( logical not ) are the logical operators. /* PROG31.C */ main ( ) { int i,j; printf ( quot; Input two values quot; ); scanf ( quot; %d %d quot;,i ,j);
  • 34. C FOR ENGINEERS R.G.Salokhe if ( (i >0 ) &&(j >0) ) printf ( quot;Both are positive quot;) } Remember to put two times & while using the logical & operator . /*PROG32.C */ main ( ) { printf ( quot; %d quot;, 3&&4); } Output 1 3 is true and 4 is true, so that 3&&4 is true which is 1. Let us analyse the results. i j i >0 j>0 (i >0 ) && ( j >0 ) 2 2 1(true) 1 (true) 1 (true) 2 -2 1 (true) 0 (false) 0 (false) -2 2 0 (false) 1 (true) 0 (false) -2 -2 0 (false) 0 (false) 0 (false) Thus True && true is true True && false is false False && true is false False && false is false Similarly for | | ( or ) the values are True | | true is true True | | false is true False | | true is true False | | false is false /*PROG33.C*/ { int i=0; if (!i) printf (quot;number is zeroquot;); } Writing (!i) is equivalent to writing ( i = = 0 ) when i is equal to zero (false), !i becomes true. In the above case because i is 0, !i becomes true and the quot;Number is zeroquot; will be printed.
  • 35. C FOR ENGINEERS R.G.Salokhe Increment and decrement operators Increment and decrement operators are unary operators. Which means they operate on a single operand. They increase or decrease the value of the operand. eg. Consider a = 5, b = 6 c = a + b + +; c = a +( b + + ); c = a + b; b = b + 1; c becomes 11, b becomes 7. While if we write c = a + + + b; c = a + ( + + b ); b = b + 1; c = a + b b becomes 7, c becomes 12. Thus a + + means use the value of a and then increment. + + a means increment the value of a and then use. /*PROG32.C*/ main ( ) { int i = 0, j = 0; int k; k=i+++++j; printf ( quot;%dnquot;,k ); k + +; used like this + + k and k + + will mean the same thing. printf ( quot;%dnquot;, k ) ; } output 1 2 k = i + + + + + j; k=(i++)+(++j); k=0+1=1 i becomes 1 after its value 0 is used. After executing the above statements the value of all i,jand k becomes 1. Conditional Expression:-
  • 36. C FOR ENGINEERS R.G.Salokhe The query or turnary operator ? is used in conditional expression as; ( a> b ) ? a : b; if the value of a is greater than b then the value of a is returned otherwise the value of b will be returned. /*PROG33.C*/ main ( ) { int i,j,k,max; printf (quot;Type two numbersnquot;); scanf (quot;%d %dquot;, i,j ); max = ( i>j ) ? i:j ; printf (quot;Maximum is %dquot;, max ); } Input/ output Type two numbers 2 3 Maximum is 3 The conditional expression can be used to find out the maximum of 3 numbers as; ( a > b ) ? (a > c ) ? a : c : ( b > c ) ? b : c
  • 37. C FOR ENGINEERS R.G.Salokhe CONTROL STATEMENTS :- We have so far seen small programs which are executed line by line. However the major requirement of programs is to have forward and backward jumps to different lines. The statements which allow such jumps are called control statements. If Statements:- If statements allows forward jumps depending upon the condition specified. If has following two formats; true if (condition ) statement; false if ( condition) { Statement 1; Statement 2; } No semicolon. false /*PROG34.C*/ main ( ) { int i,j,max; printf ( quot; Type two numbers n quot;); scanf ( quot;%d %d quot;, i,j); max=i; if ( i<j ) max=j; printf (quot;n Maximum of two is %dquot;,max); }
  • 38. C FOR ENGINEERS R.G.Salokhe /*PROG35.C*/ main ( ) { /* I has to be maximum */ int i,j,t; printf ( quot;Type two numbers n quot;); scanf ( quot;%d %d quot;, &i,&j); if ( i > j) { t=i; i=j; Interchanging values of i and j. (swapping) j=t; } no semicolon printf ( quot;n i = %d j=%d n quot;, i, j); } We have used a technique of swapping the values of i and j variables. For this you have to first store the value of i into a temporary variable t .Then you can equate i to j and then j to t. So that values of i and j are interchanged. Another technique you can use is . float i =5, j=6; i j i = i *j; 30.0 5.0 j = i /j ; 30.0 6.0 i = i /j ; 5.0 6.0 The above method will not work for integers . if ; else ; statement :- if (expression ) statement 1; FALSE TRUE Note semicolons else statement 2;
  • 39. C FOR ENGINEERS R.G.Salokhe if (expression ) TRUE { statement1; FALSE statement2; } No semicolon. else { Statement 3; Statement 4; } No semicolon. /* PROG36.C*/ /*Maximum of two numbers*/ main ( ) { int max,i=5,j=7; if (i >j ) max =i ; else max =j; Note semicolons. printf ( quot;n %d is max n quot;,max ); } /*PROG37.C*/ /* Roots of quadratic equation*/ #include < stdlib.h> for exit ( ) #include <math.h> for sqrt ( ) main ( ) { double x1,x2,a,b,c,t; printf (quot;Type values of a b c quot;); scanf (quot;%d %d %d quot;, &a,&b,&c); if (b*b -4*a*c<0) { printf ( quot;Roots are imaginary n quot;); exit (0 ); } No semicolon. else { t=sqrt (b*b -4*a*c); x1=(-b+t)/(2*d); x2=(-b-t )/(2*a); printf (quot;The roots are %f %f quot;,x1,x2); } No semicolon }
  • 40. C FOR ENGINEERS R.G.Salokhe input 4 2 5 Nested if :- The if statement can be nested in following ways. if (condition ) if (condition) statement; This if is attached to else. else statement; /* PROG38.C*/ main ( ) { int i; scanf ( quot;%d quot;,&n); if (n >0) if (n<100) printf ( quot;Number is between 0 and 100 quot;); else printf ( quot;Number is greater than 100 quot;); } The else statement does not correspond to the first if . The else statement is marked to second if so that when n is not less than 100 the else is executed. If we want to match the else statement to the first if then it can be done in two ways. if (n >0) { if (n<100) printf (quot;Number is between 0 and 100quot;); } else printf( quot;Number is less than 100quot;); or if (n >0) if (n<100) printf (quot;Number is between 0 and 100quot;); else ; Dummy else. else printf (quot;Number is less than 100quot;);
  • 41. C FOR ENGINEERS R.G.Salokhe The If ______ else chain :- We can have series of if -else statements in the following manner. if (expression) statement; else if (experssion) statement; else if (experssion) statement; /* PROG39.C*/ main ( ) { int mark; char rank; scanf (quot;%d quot;,&mark); if mark >80 rank = 'E'; else if mark >70 rank= 'A'; else if mark >60 rank= 'B'; else if mark >50 rank= 'C'; else rank = 'F'; printf ( quot;Rank is %cquot;,rank); } /* PROG40.C*/ /*Printing a number in reverse order */ #include<iostream.h> #include<conio.h> #include<stdio.h> void main ( ) { clrscr( ); int i ; int t ,h, ten,o; printf ( quot;Enter a 4 digits no nquot;); scanf ( quot;%dquot;,& i); t= i /1000 ; printf (quot;t =%dquot;,t); h= (i - t* 1000)/100; printf (quot;h =%dquot;,h); ten= (i -t*1000 - h*100)/10;
  • 42. C FOR ENGINEERS R.G.Salokhe printf (quot;ten =%dquot;,ten); o=i -t*1000 -h*100 - ten*10; printf (quot;o =%dquot;,o); printf( quot;Your number in reverse order is nquot;); if (t = = 0 && h= = 0&&ten= =0 ) printf ( quot; %d quot; ,o); else if (h = =0 && t = = 0) printf ( quot;%dquot;,o*10+ten); else if ( t = = 0) printf (quot;%dquot;,o*100+ten*10+h); else printf( quot; %dquot;,o*1000+100*ten+h*10+t); getch( ); } Switch Statement :- The switch statement is equivalent to writing series of if statements. The structure of switch is; switch (experssion ) { case constant1 : statement; statement; case constant2 : statement; statement; | default : statement; statement; } /*PROG41.C*/ main ( ) { int i,j,op; float ans=0.0; printf (quot;Type two numbers quot;); scanf (quot;%d %d quot;,&i,&i); printf (quot;n Type operation +, -, /, * nquot;); scanf (quot;%dquot;,&op); switch (op) { case '+' : ans = i+j ; break; case ' : ans = i ; break; -' -j case '/' : ans = i /j ; break; case '*' : ans = i*j ; break; default : printf (quot;Invalid operation n quot;); } printf ( quot;%f quot;,ans ); }
  • 43. C FOR ENGINEERS R.G.Salokhe The important thing to remember about the switch statement is that you have include the break statement after each case. Otherwise all the cases after the matching conditions are executed. /*PROG42.C*/ main ( ) { int ch, digit, space, other; int count = 0 while ( ( ch = getehar( ) ) ! = EOF ) { switch (ch) { case '0': case '1': case '2': if character case '3': input is '3' case '4': all the case '5': cases upto case '6': '9' are case '7': executed. case '8': case '9': digit ++;count++;break; case ' ': case'n': case' space ++; count ++; break; t': default : other ++; count ++; } } break transfers control here printf ( quot;Total characters %dnquot;, count ) ; printf ( quot; Digits typed %dnquot;,digit); printf ( quot; White spaces %dnquot;, space); } You can input a string terminated by control Z to terminate the while loop. The For Loop:- We have studied the if statement which jumps the control to the end of the body and not backwards. The loops allow a backward jump and thus the body of the loop can be repeated several times. for is one such most frequently used loops in C.
  • 44. C FOR ENGINEERS R.G.Salokhe The structure of for loop is; for ( j =0; j < 10; j + + ) statement; initialise condition increment FALSE | for ( i = o; i < =10; i + + ) statement; TRUE { statement; statement; } No semicolon /*PROG43.C*/ main ( ) { int i ; Note semicolons for ( i = 1 ; i < = 5; i + + ) printf ( quot;%d %dnquot;, i, i * i ); } Output 1 1 2 4 3 9 4 16 5 25 The initial value of i is taken as 1. The first values of i and i * i are printed. Then the value of i is increased by 1. so i becomes 2 and, 2 and 4 are printed. We can find out the pairs of three numbers i, j, k such that i2 =j2 +k2 which means i, j, k are sides of right angle triangle.
  • 45. C FOR ENGINEERS R.G.Salokhe main ( ) { int i,j,k; for ( i = 1; i < = 100; i + + ) for ( j = 1; j < = 10; j + + ) for ( k =1; k< = 10; k + +) if ( k<i && j <i) if ( i * i = j * j + k * k) printf (quot;%d%d%dnquot;,i,j,k); } Initially i=1 j=1 k=1 j=1 k=2 j=1 k=3 j=1 k=10 j=2 k=1 j=2 k=2 ___ ___ ___ k=10 === j=10 k=1 --- k=10 i=2 ----- j=1--- k=1 For every value of i , j various from 1 to 10. For every value of j , k various from 1 to 10 and so on. /*PROG44.C*/ /* sum of first 5 numbers */ main( ) { int i ; int sum = 0 ; for ( i=1 ; i<=5 ; i+ +) make this i<=100 and you get sum of 100 nos. { sum=sum +i ; } printf (quot;sum is =%dnquot;, sum);
  • 46. C FOR ENGINEERS R.G.Salokhe } Output sum is=15 Let us draw a flow chart of the above logic and the memory map. i=1 sum = 0 i sum 1 0 initial NO print 1 1 is i <=5? sum 2 1+2=3 3 3+3=6 i=i+1 yes 4 6+4=10 5 10+5=15 sum=sum+i A simple modification in the program will help us find out the factorial. /*PROG45.C*/ /*Program to find factorial*/ main ( ) { float i;fact=1.0; for (i=1 ; i<=5 ; i+ +){ fact= fact * i ; } printf (quot;%fquot;, fact); } Output 120.000000 You can modify the program asking for the input value and write
  • 47. C FOR ENGINEERS R.G.Salokhe i<=n in place of i<=5 We can write a program to find out the power x n x n = x * x* x -------n times so we can go on multiplying x, n times /*PROG46.C*/ main ( ) { float x, power=0.0; int n; printf (quot; Type a number nquot;); scanf (quot;% fquot;,&x); printf (quot; Raise this number tonquot;); scanf (quot;%dquot;, &n); for( i=1; i<=n; i+ +){ power= power*x;} printf (quot;% f Raised to %d is % fquot;, x,n,power); } /*PROG47.C*/ /* Printing a triangle of Numbers */ main ( ) { int i, n, j ; printf (quot;Type a number nquot;); scanf (quot;%dquot;, &n); for (i=1 ; i<n ; i+ +){ for (i=1 ; j<=i ; i+ +) Note i here printf (quot;%3dquot;, j); printf (quot;nquot;); } Output : Type a number 5 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5
  • 48. C FOR ENGINEERS R.G.Salokhe for every value of i, j will vary from 1 to i /*PROG48.C*/ /* Pascal Triangle*/ main ( ) int nn,i Ξ =, m =1 int k,n,j =40, l = 0; clrscr ( ); clears the screen. printf (quot;Type No nquot;); scanf (quot; %dquot;, &nn); for(k =1;k < = nn; k =k+2) { for (n =1;n < =39-3*m;n++ ) printf (quot; quot;); for (i =m++;i< =k; ++i) printf (quot;%3dquot;, i); for (i =k-1, j = l++; j > =1; j- -,i - -)printf (quot;%3dquot;,i); printf (quot;nquot;); } getch ( ); } output 9 1 2 3 2 3 4 5 4 3 4 5 6 7 6 5 4 5 6 7 8 9 8 7 6 5 k decides the middle column and thus varies as 1, 3, 5, 7,9 i prints the left hand side value as 1, 2 3, 3 4 5, 4 5 6 7, 5 6 7 8 9 value of i in third loop starts with m + + which initially is 1 and then becomes 2, 3, 4 and lastly 5. In forth for loop i starts with k thus when k becomes 3 i becomes k-1=2 next time it becomes 4 then 6 and 8. This prints the right side as 2 i in second 43 for loop 654 8765
  • 49. C FOR ENGINEERS R.G.Salokhe How many numbers eg. 4 is decided by the i in second for initial value of l is taken from l which increment from 1 to 4. The second for loop is for bringing the display into center of the screen. It prints spaces 39-3m times = 36 times for first line and 39 - 3*2 = 33 times for second time etc. 1 Edge 36 space of 232 screen 33 space 34543 30 space There is program which print the range of integer variables. We have already discussed that the range varius from - 32768 to 32767. /*PROG 49.C*/ main ( ) { int low, high, i,i ; low = high= 0 ; Note the type of assignment for (i=1 ; high<= 0; i=i+2){ for (low=1, i=1 ; k=i ; i + +) low = -2*low ; high = low -1 ; } printf (quot;Range for integers %d, %dquot;, low,high); } In C you will come across very interesting and intelligent logic. In the above program i various from 1 in the steps of 2 . So value of i becomes 1, 3, 5, 7 etc. When i becomes 3 the second for loop is executed 3 times and the values of low changes as follows ; Iterations Value of low low = -2 * low 1 -2 2 +4 3 -8 Value of low will go on increasing but to the negative side. Since we are assigning high = low-1 the value of high remains negative till low becomes - 32768 When we subtract 1 from - 32768 it becomes + 32767 We have already discussed in earlier chapters the effect of increasing the range of data types. ( 32767+1 becomes - 32768 ) -1 0 -1
  • 50. C FOR ENGINEERS R.G.Salokhe -2 2 3 -3 4 -32767 -32768 +32767 32767+1 becomes - 32768 Thus when value of low is - 32768 the value of high becomes + 32767 and the first for loop terminates. The control is transferred to printf statement. We have seen that the for statement can initialise any number of variables as for (i =1, j =2 ; i <=5 ; i + +, j+ +); We can have a for loop without initialisation for (j + + i<9 ;); You can have the for loop without any parameters *PROG50.C* # include <ctype.h> main( ) { int c, vowels =0 , count =0 ; for ( ; ;){ c= getche( ); switch (toupper((c)) { case 'A' : case 'E' : case 'I' : case 'O' : case 'U' : vowels + +; count + +; break ; Breaks default : count + +; } if(c = = EOF) break ; Breaks the for loop printf (quot;Total characters %d %nquot; , count); printf (quot;Vowels are %d %nquot; , vowels); } Toupper( ) function converts the character into upper case if it is lower case. This function is included in ctype.h file Evaluating a series :- sum =1 + (1/2)2 + (1/3)3 + (1/4)4
  • 51. C FOR ENGINEERS R.G.Salokhe /*PROG51.C*/ # include <math.h> main( ) { double term , sum; int i, n; printf (quot;Type no. of terms for seriesnquot;); scanf (quot;%dquot;, &n); for (i =1; i <=n; i + +){ term =1/(double)i ; Type casting sum = sum+ pow(term, (double) i); printf (quot;The sum of series is %fquot;, sum); } With i the term becomes 1, 1/2, 1/3 etc. this is then raised to i th power with pow( ) function and added to sum Let us write a program for evaluating the series; x - x3/3! + x5/5! - x7/7! /*PROG52.C*/ main( ) { int i, n, denominator =1; float x, sum, term; printf (quot;Type value of xnquot;); scanf (quot;%fquot;,&x); printf (quot;Type number of termsnquot;); scanf (quot;%fquot;, &n); for (sum =x, term =x, i =2; i<=n; + +i){ denominator = (2*i-2) (2*i-1); term*= (-x * x) / (float) denominator; sum + = term; } printf (quot;value of series is = %fquot;, sum); } Let us see how the term varies;
  • 52. C FOR ENGINEERS R.G.Salokhe i denominator Term 2 2*3 =3! (+x) (-x2)/3! = -x3/3! 3 4*5 - x3/3! * -x2/4*5 = +x5/5! The Fibonacci series The series is Obtained by adding two precious numbers to obtain the third number eg. 1 1 2 3 5 8 13 21 34 etc. 1+1 =2 1+2 =3 2+3 =5 3+5 =8 and so on /*PROG53.C*/ # include <stdio.h> main( ) { int next =0 ; int n; int last =1; for next =0; next <1000;){ n= next + last; next = last; last = n; } } Let us see how the things are happening next last n 0 1 1 1 1 1 next = last, last = n 1 1 2 1 2 3 2 3 5 : : : The While loop
  • 53. C FOR ENGINEERS R.G.Salokhe The syntax of while loop is as follows ; while ( expression ) statement ; FALSE TRUE while ( expression ) { statement 1; statement 2; ------- } The statement are evaluated as long as the expression is true. When the condition becomes false jump is made to out side of the body of while. *PROG54.C* main( ) { int n =999; while (n< =999,) scanf (quot;%dquot;&n); printf (quot;%dquot;, n); } This program will allow you to enter the number till the number is less than or equal to 999. Which means the loop will not break till you enter a number which is greater than 999 that is a four digit number. Program to count number of words, characters & lines /*PROG55.C*/ # define YES 1 # define NO 0 void main( ) { int c, nl, nw, nc, inward; inward =NO; nl =nw =nc =0; while ( (c =getche ( ))! =EOF){ + +nc; if (c = =' ' | | c = n' | | c = =' '){ =' t if (c ='n') nl + +; inward =NO; } else if (inward = = NO){ inward = YES;
  • 54. C FOR ENGINEERS R.G.Salokhe + +nw; } } printf (quot;NO of lones %d words %d character %dquot;, nl, nw, nc); } } (c =getehe ( )) !=EOF Accept character from keyboard. Assign it to c. check it the character is EOF(^z) which numbers the while loop terminated when the character input from keyboard is ^z. + +nc nc is incremented every time a character is input. Then the character is checked if it is a white space character. Let us take an example. Mumbai is a great city ^z c nc nw inward 0 0 0 NO M 1 1 YES 4 2 1 YES m 3 1 YES b 4 1 YES a 5 1 YES i 6 1 YES note space 7 1 NO change l 8 2 YES at s 9 2 YES space space 10 2 NO a 11 3 YES if you want only an alphabetic character to be inputed you can use the while loop as char ch ='a' ; while( ch <= ' && ch> = 'A' | | z' ch<= 'g' && ch> ='&'){ scanf (quot;%dquot;,&c);} /*PROG56.C*/ /* program to display a series of prime no.s */ main( ) { int no, chk; int prime =1; no=1; while (no<=400){ for (chk=2; chk<=no/2; chk) if (no%chk = =0){
  • 55. C FOR ENGINEERS R.G.Salokhe prime =0; break; Break passes control here if (prime = =1) printf(quot;%dquot;,no); prime=1; } } The outer while loop varies the no from 1 to 400. supposing you want to find out if 11 is a prime number or not then you have to divide it by numbers from 2 to (11/2) =5. If it is divisible by any of the numbers between 2 and 5 then it is not a prime number. In our case 11 is not divisible by numbers between 2 and 5. Thus prime remains equal to 1 and the number is printed. no % chk will be 0 when no is divisible by 2 and the if is execute which makes prime =0 and breaks the loop since prime is 0 the number is not printed. prime becomes 1 and while is executed. The do ... while loop The syntax of do....while is do statement ; while ( condition ); or do { statement 1; statement 2; ---- } while ( condition ); Let us take the earlier example where we want to allow numbers greater than 1000 to be entered. We can write the program as /*PROG57.C*/ main( ) {
  • 56. C FOR ENGINEERS R.G.Salokhe int n; do scanf (quot;%dquot;,&n); while (n<1000); printf (quot;%dquot;,n); } This program will go on executing the scanf till you enter a number which is greater than or equal to 1000. Let us take another example. /*PROG58.C*/ main( ) { int n; int sum; do {printf (quot;n Enter a number nquot;); scanf (quot;%d, &n); sum+ = n; } while (n>0); } This program will allow you to enter the numbers and sum them till the number is greaterr than 0. If you enter a negative number the same will be added to sum. The program will terminate. Note that the do loop is very similar to while loop. Break Statement We have used the break statement in switeh.... case and for loops. The break statement psses control out of the do, for, while and switeh statement. for ( ; ; ){ ---; ---;
  • 57. C FOR ENGINEERS R.G.Salokhe if( ) break; for (; ;){ - - -; - - -; if( ) break; - - -; - - -; } } Continue Statement The continue statement jumps to one line before the break statement. i.e. at the end of the body of for ,do or while loop. for ( ; ; ){ - - - -; - - - -; if ( ) continue; for ( ; ; ){ - - - -; - - - -; if ( ) continue; - - - -; } } /*PROG59.C*/ /* Adding numbers 1+3+5+7 with continue */ main( ) { int sum =0 ; int i = 1, z = -1 ; for (i= 1; i<=100; i++) {
  • 58. C FOR ENGINEERS R.G.Salokhe z= -z; if (z<0) continue; sum+ = i ; } printf(quot;n%d nquot;, sum); } Initially f = -1 and t = -z will make z as +1 the statement sum + =i will be executed next time when i becomes 2 z will become -1 and continue will pass control to and of for loop thus not executing sum + =i statement. Thus t will vary between +1 and -1 making the continue statement execute alternatively. /*PROG60.C*/ /* binary to decimal conversion */ # include <math.h> main( ) { long binary; int dec=0, i=0; printf (quot;n Enter a binary Nonquot;); scanf (quot;%dquot;, &binary); while(binary>0) { dec + =(binary% 10)*pow(2,i++); binary/=10; } printf (quot;your no. converted to decimal is %dquot;, dec); } This is a very interesting logic. supposing your binary number is 101 which is 22+0+20 =5 dec= (binary %10)* pow (2,i++) = (101 %10)* pow(2,0) i=1 = (1) * 20 = 1 binary= binary/10 = 101/10 = 10
  • 59. C FOR ENGINEERS R.G.Salokhe In next interation dec=1+(10%10)* pow (2,1) = 1+0 =1 binary= 10/10 =1 i=2 In next interation dec=1+(1%10)* pow (2,2) =1+ 1*22 =1+4 =5 which is the answer The goto statement C allows a non conditional jump with goto statement. However such jumps are not adviced and the program looses structurality. The syntax is goto LABEL; ------- ------- LABEL : /*PROG61.C*/ main( ) { float i, i; printf(quot;Enter devisornquot;); scanf (quot;%fquot;, &i); printf(quot;Enter dividornquot;); scanf(quot;%fquot;, &j); if(j= =0) goto CRASH; printf(quot;%fquot;, i/j); exit(0); CRASH : printf(quot;dividor cannot be zeroquot;); } /*PROG.62C*/ /* finding square root of a number */ # include <math.h> main( ) { float x, y,z ;
  • 60. C FOR ENGINEERS R.G.Salokhe printf (quot;Type a numberquot;); scanf (quot;%fquot;, &x); y= 1.0; do{ z= x/y; y= (y+z)/2 ; } while (fabs(y-z)>0.000001); printf(quot;Root is % 7.3fquot;, y); } fabs( ) function is used to return the absolute value of floating point numbers. If you type 4 as the number the following changes take place in the value of z and y. z y 4 2.5 1.6 2.05 1.95 2.006 1.999 2.000 2.0 2.00 The final output is 2.
  • 61. C FOR ENGINEERS R.G.Salokhe FUNCTIONS We now enter into the soul of C language. As discussed in the I st chapter C is the language of functions main ( ) itself is a function. We have been introduced to some standard functions as printf( ), scanf( ), etc. We will now write our own function. /* */ main( ) { void print( ); Function declaration or prototype. Print( ) ; Function call. } void print( ) No semicolon. { int i ; for (i=1; i<=10; i ++) printf( quot;*quot; ); } Output ********** Function declaration : As we declare the variables before we use them, the function is also required to be declared before it is called. The declaration here is very simple. Void print ( ); Not returning Name No parameters anything The print function is not accepting any parameters and is not returning anything as the value of the function. The function is defined below the body of the main. When you call the function as print( ); The print function is executed which prints ten asterisks and returns to main. We will now pass a parameters the function. / / main( ) { int i ; void print(int); printf(quot;Type a numberquot;); scanf(quot;%aquot;, & i); print(i); Value of i is passed to this i printf(quot;nquot;); print(i); }
  • 62. C FOR ENGINEERS R.G.Salokhe void print (ir)+ i) { int j =1 ; for (j =1; j<=i; j ++) printf(quot;*quot;); } Output Type a number 5 ***** ***** In this program we have passed a value of 5 to i in the function print. So it prints 5 asterisks. However the i in the main program and i in the function print has no relation. It you change value of i in function print( ) the value of i in function main( ) is not changed. This means we have passed the parameter by value. /* */ main( ) { int i=5; void change(int); change (i); printf(quot;%aquot;,i); } void change (int i) { i=10; Changing the value of i in the function } would not change the value in main( ). Output 5 Finding out the maximum of two numbers using mfunction /* */ main( ) { int i, j , k; int max (int,int); printf(quot;Type two numbersnquot;); scanf(quot;%a%aquot;, i,j); k= max(i,j); printf(quot;Maxmum of the two isquot;); printf(quot;%aquot;,k); } int max(int i, int j) { int m; m= i>j?i:j; return m;
  • 63. C FOR ENGINEERS R.G.Salokhe } In this example the function max is made to return an integer value int max(int, int); Function will return integer value. The value returned by the function is returned by the statement return m ; which returns the value of m Which is maximum of i and j. When you want to do the calculators repeatedly the function comes fo your resume. Let us see how we can evaluate the series. 1+1/2! +1/3! +1/4! /* */ main( ) { long fact(int n); float sum=1.0; int i=1; for (i=1; i<=5; i ++){ sum=sum + (1.0/fact(i));} } long fact(int n) { long x=1; int i=1; for(i=1; i<=n; i+ +) x=x*i ; return x ; } The function may be called any time from other functions and the value returned by functions may or may not be assigned to any variable. /* */ main( ) { int i; for(i=1; i<=10; i+ +) printf(quot;%3d %5d %7dquot;, i, Sq(i) cube(i)) Sq(10); Sq ( ) is called but it's value is not assigned } int Sq(int i) { return i*i; }
  • 64. C FOR ENGINEERS R.G.Salokhe int cube(i) { Sq( ) function is called from cube( ) return i* Sq(i); } Output 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 729 10 100 1000 SCOPE OF VARIABLES :- As there is no print in unnecessarily occupies the memory by using lot of variables, the variables are given other properties as visibility and life time. So that the variables can be available in the particular segments of the program and they can die after their use. The scope of the variable is the section of the program in which the variable is available. There are basically two types of scopes. 1) Global Scope 2) Local Scope The variables declared outside any function have global scope and are refered to as global variable. /* */ int i=1; i is global main( ) { printf(quot;%aquot;,i); i is available in both void print( ); main( )&print( ) print( ); } void print( ) { printf( quot;%aquot;,i); } Global variables are visible the point of declaration to the end of the program and are initialized to 0 if not initialized. /* */ main( ) {
  • 65. C FOR ENGINEERS R.G.Salokhe int i; } int y=5; y is global but not available in main( ) void print ( ){ printf(quot;%aquot;,y); variable is available } in print( ) and print 1( ) void print1( ){ printf(quot;%aquot;,y); } LOCAL SCOPE / LOCAL VARIABLES : The local variables are declared inside the body of the function and they can be used in that function only. Thus they loose scope outside the function and thus variable with same name can be used in the other function. Which has no relation with one declared in the other function. /* */ main( ) { int x =5; void print( ); printf(quot;%aquot; ,x); } Output 10/5 X is declared in function main( ) as local variable. Similarly x is also declared in function print( ) as a local variable. The x in print( ) and x in main( ) has no relation. Thus in main( ) even after calling the function print( ) the value of x print is 5. Similarly you can declare variables in the body of if also. On the first line we have declared i=6. Which is a global variable and is available from top to bottom of the program. Let us call this variable G i When we declared another variable int=5 in main( ) the G i looses scope in the main( ) function and another i is available in main( ) let us call the as main( ) i This main( ) I further looses scope in if function and for loop. Where different i is used. In printf( ) value of main i is used. We are calling the print( ) function with main i the value of which is passed to k in the print( ) function and we are printing i in the print( ) function. The value of G i is available in print( ) function and thus same is printed.
  • 66. C FOR ENGINEERS R.G.Salokhe /* */ int i=6; Globle main( ) { int j=5 available in the body of main( ) int j; void print(int); if(i= =5){ int i; Available in body of if i=9; printf(quot;in if %dnquot;,i); } printf(quot;In main %dnquot;,i); for (j=1, j<=2, j+ +){ int i=17; Available in body a for print(quot;in body a for %dnquot;,i);} print(i); } void print(int k) { printf(quot;in function %dnquot;,i); Value from global variable. } Output in If 9 in MAIN in Body of for 17 in Body of for 17 in function pr 6 All the variables also have a life. They must die sooner or later to free the memory. The global variables die when the program is exited. The life of the variable is determined by the storage class specified for the variables. The storage classes are 1) Auto 2) Static 3) Extern 4) Register Extern storage class is available only for global variables. AUTOMATIC VARIABLES If no class is specified for the local variables then they are considered to be up to auto variables. They are created when a particular function is called and die where the execution of the function is completed. Most of the variable used and declared by us so far were of upto type.
  • 67. C FOR ENGINEERS R.G.Salokhe STATIC VARIABLES The variables declared static are visible only in the function in which they are declared but are not destroyed when the function is exited. Instead they retain their values which can be again used in the same function. /* */ main( ) { void pr( ); pr( ); pr( ); pr( ); } void pr( ) { static int i=1; printf(quot;%dnquot;,i + +); } Output 1 2 3 When the function pr( ) is first called the value of i is initialized to 1. This value is printed and i becomes 2. When the function is exited i does not loose the value 2. However i will not be available in main or any other functions. When the function is called again the value of i=2 is available to the function and i is not initialized again. Static variables are initialized to 0 no initial value assigned. EXTERNAL VARIABLES External variable are available from one program to another. Supposing you have two defferent programs as /* */ /* */ int i; extern int i; main( ) void pr( ) { { i=5 printf(quot;%dquot;,i) printf(quot;%dquot;,i) } } We used the declaration extern in the second program which means that i is declared some where else and the second program is supposed to us that i. REGISTER VARIABLES
  • 68. C FOR ENGINEERS R.G.Salokhe Register variables are similar to automatic variables expect that instead of storing into the random access memory the same are stored into register of microprocessor. This way they can be accessed faster. There is a limitation on the number of register variables you can declare. In case there is no space available for the register variable in the registers then the same are treated as automatic variables register variables are declared as register int i; GLOBAL VARIABLES AS STATIC Global variable can be declared of static scope. When declared thus they have a scope in the program in which the same are declared and can not be used as external variables in other programs. Let us have the summery of variable visibility and life. Global Variables Class Declaration Visibility Life - Before all Entire file & other files where functions the variable is declared extern. Global Extern Before all Entire can not be initialized Global functions Static Before all Entire file but not other files initialized Global functions to 0 if not assigned a value. Local Variable None Inside a Only in that function or block. Unit end of or function or function block auto block Register -quot;- -quot;- -quot;- Static Inside a Only in that function Global function RECURSION Whenever a function is called the automatic variables declared in the function are pushed in to the memory area called stack. These variables have a life fill the function ends. We end the function either by a return statement or by the conduding braces. Before the function ends you can called the same function again. Thus another set of variables is
  • 69. C FOR ENGINEERS R.G.Salokhe pushed in the memory. The process of a function calling itself is called decursion. However some where the function has to terminate. * * * finding factorial by decudsion * main( ) { int n; float fact( ); printf(quot; Enter a number quot;); scanf(quot;% d%fquot;,n,fact(n)); } float fact(int n) { if (= =1) return(1); else return n*fact(n-1); } The function fact is calling inself back with n-1. The process takes place as 1 2 3 4 5 1 2*1 3*2*1 4*3*2*1 5*4*3*2*1 copy copy copy copy copy 5 4 3 2 1 Fact( ) calls its copy2 with 4 which calls copy3 with3 and so on. The copy5 returns 1, copy4 returns 2*1, copy 3 returns 3*2*1 and finally 5! Is returned. THE FIBONACCI NUMBER BY RETURSION We have already written a program to display the Fibonacci series. Now we will use recursion to display the series. Mathematically the Fibonacci series can be written as. F(1) =1 F(2) =1 F(n) =F(n-2) + F(n-1) for n>2 * * main( ) { int fab(int); int n; for(n=1; n<=10; n + +) printf(quot;%dquot;, fab(n)); } int fab (n) { if (n= =1 | | n= =2) return 1;
  • 70. C FOR ENGINEERS R.G.Salokhe else return fab(n-1) + fab(n-2); } Output 1 1 2 3 5 8 13 21 34 55 /* */ /* reversing a string with recursion */ main( ) { int n; void reverse ( ); printf(quot;Type no of characters to reversequot;); scanf(quot;%dquot;,&n); printf(quot;nquot;); reverse(n); puts(quot;nquot;); } void reverse(int n) { char c; if(n= 1){ c= getche( ); puts(quot;/nquot;); putch(c); } else { c=getche( ); reverse(- -n); putch(c); } return; } Input 5 abcde Output edcba here we call the same function reverse before it is completed in the else block. The putch(c) in the else is thus kept pending. When n becomes 1 the last copy of reverse is complete and the function start returning. At the time of returning the pending putch( ) is executed which prints the characters typed by you in reverse order.
  • 71. C FOR ENGINEERS R.G.Salokhe THIS IS ALL I HAVE WRITTEN ON C FOR OTHER BOOKS WRITTEN BY ME PLEASE VISIT http://www.geocities.com/arutacomp/ or mail me on arutacomp@rediffmail.com The books available are 1] AutoCAD 2007 – The third dimension 2] Visual Basic 6 – from bottom to top 3] MS-ACCESS Thank you.