C for Java Programmers - PowerPoint PPT Presentation

1 / 46
About This Presentation
Title:

C for Java Programmers

Description:

Unfortunately there's no pictures of Bjarney today. Nonetheless Bjarney is ... strcpy( jordan.hairColour, 'Brunette'); jordan.age = 24; jordan.nrOfPubs = 33; ... – PowerPoint PPT presentation

Number of Views:100
Avg rating:3.0/5.0
Slides: 47
Provided by: scie205
Category:

less

Transcript and Presenter's Notes

Title: C for Java Programmers


1
C for Java Programmers
  • Lecture 3

2
Last Lecture
  • Last Lecture we had a look at
  • Single Dimensional Arrays
  • Multi Dimensional Arrays
  • First Mention of Pointers
  • C-Style Strings
  • The Null Terminator
  • String Manipulation

3
Todays Lecture
  • This lecture we will be looking at
  • The ? command
  • Structs
  • Typedef Command
  • Functions
  • Unfortunately theres no pictures of Bjarney
    today.
  • Nonetheless Bjarney is with us in spirit.

4
The ? Operator
  • You can use the ? operator to replace if-else
    statements
  • However both the if and else parts must be part
    of the single expression not another statement.
  • The ? is called a ternary operator because it
    requires three operands.
  • Just like regular expressions in perl, this is
    the main contributor for making C/C unreadable

5
? operators General Form
  • Exp1 ? Exp2 Exp3
  • The value of a ? expression is determined as
    follows
  • Exp1 is evaluated.
  • If it is true Exp2 is evaluated and becomes the
    value of the entire ? expression
  • If Exp1 is false, Exp3 is evaluated and then that
    value becomes the value of the ? expression.

6
Example
  • y x 9 ? 100 200
  • This can be basically translated from Creek to
    mean
  • If x is greater than nine, then assign 100 to y,
    and if x is not greater than 9 assign 200 to y.
  • The point to note is that when using the ?
    operator, is that it will ultimately evaluate an
    expression - the following statement alone would
    do nothing
  • x 9 ? 100 200

7
When should you use it?
  • Only use this operator when it is the right
    situation!
  • The following statement shows how you might use
    the operator to return the square of a value i,
    but still preserving its sign
  • isquare i0 ? ii -(ii)
  • However the next bit of code which returns a
    certain prime number dependent on i, would be
    better written and much easier to understand for
    any reader using a switch statement
  • n i1?1i2?3i3?5i4?711

8
? evaluate expressions
  • You can use any valid expressions after the ?
    such as
  • int magic 10
  • int guess 17
  • if (guess magic) cout Blaine
  • else guess magic ? cout low

In this code fragment, having guessed wrong we
use the ? operator to help us display on screen
whether the guess was too high or too low.
9
Expressions in Conditionals
  • It can be confusing that that you are allowed to
    use any valid expression to control the if or the
    ? operator.You are not restricted to expressions
    which use relational operators (as you are in
    basic or pascal)
  • You can use any expression that resolves to a
    true (zero) or false (non-zero) value. For
    example
  • if (b) cout
  • else cout muppet

10
Structures
  • A structure is a collection of related data
    identified as a single storage unit.
  • Each element in a structure is called a data
    member.
  • After it has been declared, an instance of that
    structure can be created for use in your program.
  • It is almost an unwritten law in Computer Science
    lectures that any examples of structures must,
    and I mean must, be boring. Im talking about
    stuff like address books or bus timetables.

11
Jims Chauvinistic Struct
  • struct vital_Statistics
  • char modelsName50
  • char hairColour20
  • long int age
  • int nrOfPublications

Here our struct has two char arrays and 4 ints,
but we could have used any data types, including
other structs.
12
And the code would be
  • vital_statistics jordan
  • strcpy( jordan.modelsName, Jordan)
  • strcpy( jordan.hairColour, Brunette)
  • jordan.age 24
  • jordan.nrOfPubs 33

Note the use of the dot operator, sometimes
called the direct membership operator.
integers and other fundamental types can be
directly accessed. For the char arrays we use the
strcpy function.
13
You can have lots of instances
  • Once you have defined the struct you can create
    as many instance as you want
  • vital_Statistics brad
  • strcpy( brad.modelsName, Brad Pitt)
  • strcpy( brad.hairColour, Blonde-ish)
  • brad.nrOfPubs 13

Example for the girls so I dont get in trouble.
14
Quick Initialisation
  • Similar to the way you can initialise arrays when
    they are declared, you can also instantiate an
    object and supply all of its members at once
  • vital_Statistics anotherPerson
  • whoever,
  • ginger,
  • 87

You have to remember what order your data
elements were declared
15
Whats happening in memory?
modelsName (50 Bytes)
hairColour (20 Bytes)
age (32 Bytes)
nrOfPubs(16 Bytes)
16
Manipulating Structures
  • Accessing Structure Members
  • cout
  • Assigning to Structure Members
  • jordan.age 24
  • Assigning whole structures
  • vital_Statistics a,b
  • a.age 24
  • b a

Assigning one struct to the other.
17
Arrays of Structures
  • Perhaps the most common use of structures is in
    arrays of structures. To declare an array of
    structures, you must first define a structure,
    and then declare an array variable of that type
  • vital_Statistics topTrumps52
  • To access the structs variables simply index the
    the structure name as you would with a normal
    array
  • someString topTrumps7.name

18
Complex Structures
  • Members of structures can either be of type
  • simple or compound
  • Code fragment Example of a struct with compound
    members
  • struct phone_book
  • char address50
  • int number
  • vital_statistics info

Any of the built in data types such as an integer
or a character
Arrays of these fundamentals, or other structures
themselves.
19
Structs the origin of Classes
  • Structures are part of the C-subset and were
    inherited in C from the C Language.
  • But C Structs are very closely related to C
    Classes.
  • In C the role of a structure was expanded,
    allowing you to have both private and public
    variables and even methods. Its only difference
    from a class is that by default all members of a
    struct are public.
  • Struct and Classes are so similar why keep
    structs at all?
  • Tradition, but also because it allows the
    definition of a class to be free to evolve.
    Furthermore it allows C to remain compatible
    with C.

20
User Defined Types
  • You can define a new data type name using the
    keyword typedef.
  • It doesnt actually create a new type, but rather
    defines a new name for one.
  • General Form typedef type newName
  • Example typedef float balance

21
FUNCTIONS
  • Functions are the fundamentals of Procedural
    Programming. C is a language of this type.
  • Before OO this was how everything was written.
  • In many instances this is how things are still
    written.
  • Functions are the building blocks of C and C

22
Learning Progression
23
General Form
  • Functions compartmentalise a repetitive task.
  • General Form is
  • returnType functionName (parameter list)
  • Example
  • float bowel(int i, char c)

Functions can return any type of data except an
array. This one returns a float.
body
name of the function
parameters
24
Example An Addition Function
  • include
  • int foo(int a, int b)
  • int r
  • rab
  • return (r)
  • int main ()
  • int z
  • z foo(5,3)
  • cout

Our function foo, that sums numbers
statement that calls the function and puts it
into z.
25
Formal Parameters
  • If a function takes in arguments as in the above
    example you must declare variables for them to go
    in.
  • int foo(int a, int b)
  • z foo( 5, 3)
  • Even if you declare these the same name as those
    used in your main program, they are not the same
    variables.

26
Sending Parameters
  • You can pass variables into a function by two
    methods - value or by reference.
  • When you pass a variable by value into a
    function, the variable passed in is only changed
    locally within the function. Essentially it is
    copied across.
  • Passing by reference makes global changes to a
    variable passed in. To pass by reference we use
    the address operator when we receive the
    argument.

27
Passing by Value
  • void cube(int x)
  • x xxx
  • cout
  • // MAIN PROGRAM
  • int main()
  • int number 3
  • cube(number)
  • cout
  • OUTPUT The answer is 27 and the number is 3

28
Passing by Reference
  • void cube(int x)
  • x xxx
  • cout
  • // MAIN PROGRAM
  • int main()
  • int number 3
  • cube(number)
  • cout
  • OUTPUT The answer is 27 and the number is
    27

29
Scoping
  • As you know scope rules govern whether a piece of
    code knows about or has access to another piece
    of code or data.
  • Each function is a discrete piece of code
    everything inside it is essentially hidden from
    the rest of the program.
  • So Variables defined within the function are
    local to it.
  • The function can only see its own data apart
    from any global variables that you use. Strive
    against global variables however.

30
Having Arrays as Parameters
  • We discussed arrays last lecture and I mentioned
    that sending arrays to functions was not
    straightforward.
  • Passing arrays is an exception to the normal
    send-by-value parameter passing.
  • There are several ways of passing arrays to
    functions but in each case we only pass the
    arrays address. This is very similar what we just
    considered when we were passing variables by
    reference.
  • Because of this we are not sending a copy - any
    changes in the function will affect our original
    array!

31
3 methods for passing Arrays
  • void foo1 (int x10) //sized array
  • void foo2 (int x) //unsized array
  • void foo3 (int x) //pointer

Here we take in an address and use x to remember
it as an array with 10 elements
but the length of the array doesnt matter as
far as C is concerned
final method uses a pointer.
32
Passing Multidimensional Arrays
  • Be careful when sending multi-dimensional arrays
    to functions

void mal (int x45) int
main() int hipHip333 mal(hipHip)

For a multi-dimension array we must declare all
but the first of the dimensions
33
The main function
  • A C program must have a main function of some
    form, to act as an entry point.
  • N.B. This is a function and not a method.
  • In Java everything is a class not so in C.
  • main is a function like any other function, and
    acts in exactly the same way

34
Arguments to main()
  • Just as other functions can take arguments, so
    can your main function.
  • Generally you pass information into the main via
    command line arguments, that follow the programs
    name when you are executing it.
  • There are two special built in arguments argv
    and argc, that are used to receive information
    from the command line.
  • argc holds the number of arguments entered
  • argv is an array of these arguments themselves

35
Example of command line info
  • int main (int argc, char argv)
  • if (argc!2)
  • cout
  • cout

check on the number of arguments
statement that ouputs the info to the screen.
example of use if we had compiled the code as
myProgram.
36
Return Statement
  • The return statement can be used to leave a
    function at any point
  • It is essentially a jump statement (like break
    and continue) because it jumps back to the point
    in your program where the function was called.
  • A return statement may or may not have a value
    associated with it.
  • However if your definition indicated that it
    would send back a value, any return statement
    must send back a value of that type.

37
multiple returns
  • a function may contain several return statements.
    For example, here is some code for a function
    that checks the sign of any integer passed into
    it

int completeDys(int number) if (numberreturn 1 if (number0) return 1 return 0
If true returns to the main program before
reaching the next statement
38
So what does main() return?
  • You dont have to use a return statement the
    block of code will return itself when it hits its
    final curly bracket.
  • When you use the command in the main function it
    returns an integer to the calling process, which
    is generally the operating system.
  • If you dont send a return from main() what
    happens is technically undefined. Better safe
    than sorry and always put it in.
  • The Exit(0) statement is very similar to return.

39
Function Prototypes
  • Until now, we have defined the functions before
    the first appearance of a call to it, leaving the
    function main for the end.
  • If you try to repeat some of the examples of
    functions described until now but placing the
    function main before any other function that is
    called from within it, you will most likely
    obtain an error.
  • The reason is that to be able to call to a
    function it must have been declared previously -
    it must be known.

40
Prototyping functions
  • We can avoid this by prototyping functions.
  • This consists of making a previous shorter
    declaration of the complete definition, so that
    the compiler can know the arguments and the
    return type needed.
  • returnType functionName (parameter types)

ends with a semicolon
It is enough to list the parameter types alone if
you wish
Almost identical to a function header, except it
has no code body and
41
Example of Prototyping
  • include
  • void odd (int a)
  • void even (int a)
  • int main ()
  • int i
  • cout
  • cin i
  • odd (i)
  • void odd (int a)
  • if ((a2)!0) cout
  • else even (a)

prototypes
42
Recursion
  • Functions can, and often do, call other
    functions.
  • Recursivity is the property that functions have
    to be called by themselves.
  • Recursion is the process of defining something in
    terms of itself, sometimes called circular
    definition.
  • Recursion is useful for all sorts of tasks
    examples are certain sorting methods or to
    calculate the factorial of a number.

43
Example Factorial Calculator
  • include
  • long factorial (long a)
  • if (a 1) return (a factorial (a-1))
  • else return (1)
  • int main ()
  • long l
  • cout
  • cin l
  • cout
  • return 0

A Recursive function, calling itself, but
stopping when a reaches 1
44
Being recursive
  • Most recursive routines dont significantly
    reduce code size or improve memory utilisation.
  • Recursive routines may also run slower because of
    the repeated function calls, or could eventually
    cause the stack to potentially overrun.
  • However recursive solutions can be very elegant
    and they lend themselves to certain problems
    especially well (in AI for example).
  • They also tend to make you feel pretty damn
    clever.

45
Exercise of the day
  • Rewrite the step in your 3N1 program using the ?
    operator.
  • Incorporate the 3N1 algorithm into a function
    T(t,n,s), accepting a table t, a dimension n and
    a seed s as parameters. The function should fill
    t with the first n numbers in the 3N1 row
    starting from s and return the number of steps
    until a loop is detected.
  • Put the table t and the dimension n into a
    structure and use it as a parameter for the
    function. Should it be passed by value or by
    reference? Experiment with both.

46
C Extras
  • There are quite a few difference in what a
    function in C is capable of in comparison to
    functions in C.
  • Function Overloading
  • Default Parameters
  • Class Member Functions
  • Inline Functions
  • Well look at these next lecture
Write a Comment
User Comments (0)
About PowerShow.com