C_Programming Part 5 ENG. KEROLES SHENOUDA 1
Functions 2
3 The call a = calcm(5,6) works as follows: 1. Copies the values 5 and 6 to the variables x and y 2. Performs the internal calculations to calculate m 3. When executing the line (return m), the computer copies the value inside m and return it to the line (a = calcm(5,6)) 4. Copies the return value to (a) variable
Function Definition 4 Function Name: like variable, must have no spaces and no special characters and must starts with letters Input Parameters: supplied parameters types and names. You can define any number of inputs; also you can define zero number of inputs. Return Type: the data type of the function output, if the function has no output use (void) keyword. Function Body: performs specific function operation. Return Statement: this statement tells the computer that the function execution is completed and the required function output is ready for the caller. The computer takes the returned value and supplies it to the caller.
5 Prototype
6
C functions aspects syntax function definition Return_type function_name (arguments list) { Body of function; } function call function_name (arguments list); function declaration return_type function_name (argument list); 7
8 The compiler gives an error at the line printWelcome(); in the main function, the error state that “the function printWelcome is undefined”. Which means that the compiler cannot locate the function before the main, even if it is located after the main?
9
Calculate the Factorial  Write a program uses a function to calculate the factorial of any positive number 10
11
Lab:Calculate the Minimum Value of any Given Array int calcMin(int values[], int n) ; 12 Important: calcMin function takes two parameters an array and (int) value containing the array size. Know that function could not expect the given array size, you must supply it by yourself.
13
Finding a Name in a Set of Names int findName(char names[][14], int n, char name[]); 14 void main() { char name[14]; char names[5][14] = {"Alaa", "Osama", "Mamdouh", "Samy", "Hossain"}; puts("Enter your first name:"); gets(name); if(findName(names, 5, name)==1) puts("Welcome"); else puts("Goodby"); }
Difference between Passing Single Values and Arrays 15 This method copies the actual value of an argument into the formal parameter of the function. In this case, changes made to the parameter inside the function have no effect on the argument. This method copies the address of an argument into the formal parameter. Inside the function, the address is used to access the actual argument used in the call. This means that changes made to the parameter affect the argument.
16
17
18
19
20
21
22
Write a program that produces the following output: 23
What is memory layout of C-program ?  when you run any C-program, its executable image is loaded into RAM  This memory layout is organized in following fashion:  Text segment  Data segment  Heap segment  Stack segment  Unmapped or reserved 24
Text segment  Text segment contain executable instructions of your C program, its also called code segment. This is the machine language representation of the program steps to be carried out, including all functions making up the program, both user defined and system 25
Data segment  There are two sub section of this segment called initialized & uninitialized data segment  Initialized data:- It contains both static and global data that are initialized with non-zero values.  This segment can be further classified into read-only area and read-write area.  For example : The global string defined by char string[ ] = “hello world” and a statement like int count=1 outside the main (i.e. global) would be stored in initialized read-write area. And a global statement like const int A=3 makes the variable ‘A’ read-only and to be stored in initialized read-only area.  Uninitialized data (bss segment):- Uninitialized data segment is also called BSS segment. BSS stands for ‘Block Started by Symbol’ named after an ancient assembler operator. Uninitialized data segment contains all global and static variables that are initialized to zero or do not have explicit initialization in source code.  For example : The global variable declared as int A would be stored in uninitialized data segment. A statement like static int X=0 will also stored in this segment cause it initialized with zero. 26
Heap segment  The heap segment is area where dynamically allocated memory (allocated by malloc(), calloc(), realloc() and new for C++) resides.  When we allocate memory through dynamic allocation techniques(in simple word, run time memory allocation), program acquire space from system and process address space grows that’s why we saw upward arrow indication in figure for Heap. 27
Stack segment  The stack segment is area where local variables are stored. By saying local variable means that all those variables which are declared in every function including main( ) in your C program.  When we call any function, stack frame is created and when function returns, stack frame is destroyed including all local variables of that particular function.  Stack frame contain some data like return address, arguments passed to it, local variables, and any other information needed by the invoked function.  A “stack pointer (SP)” keeps track of stack by each push & pop operation onto it, by adjusted stack pointer to next or previous address. 28
Local Variables 29 Above program have three functions each with different scopes; each scope holds different local variables. The variable a, b and c of main function are inaccessible through myAdd or myMull functions. The variables x, y and z of myMull function are inaccessible through myAdd or main functions, even if myAdd function has the same variables names
Global Variables  In the following program the variable name is defined as a global variable, all program function can access this variable. 30
Static Variables  Static variables are defined by the modifier static. Static variables are initialized once in the program life. For example if the variable (x) is defined inside a function, the variable is initialized only at first function call, further function calls do not perform the initialization step, this means that if the variable is modified by any call the modification result remains for the next call. Following example illustrate this idea 31
Static Variables 32
Calling Mechanism 33
Recursion  Recursion is a situation happens when a function calls itself directly or indirectly. 34
Recursion  Is recursion useful? Recursion is an alternative way to repeat the function execution with the same or variant parameters values. In another way recursion is an indirect way to make a loop; simply you can convert any recursion to a normal loop 35 Infinite Printing Loop
Recursion  Is recursion useful? Recursion is an alternative way to repeat the function execution with the same or variant parameters values. In another way recursion is an indirect way to make a loop; simply you can convert any recursion to a normal loop 36 Finite Printing Loop
Follow Chapter 4/5: Controlling Program Flow C PROGRAMMING FOR ENGINEERS, DR. MOHAMED SOBH 37The next Part we will talk about Variables Scope
References 38  The Case for Learning C as Your First Programming Language  A Tutorial on Data Representation  std::printf, std::fprintf, std::sprintf, std::snprintf…..  C Programming for Engineers, Dr. Mohamed Sobh  C programming expert.  fresh2refresh.com/c-programming  Memory Layout of C Program

C programming session5

  • 1.
  • 2.
  • 3.
    3 The call a= calcm(5,6) works as follows: 1. Copies the values 5 and 6 to the variables x and y 2. Performs the internal calculations to calculate m 3. When executing the line (return m), the computer copies the value inside m and return it to the line (a = calcm(5,6)) 4. Copies the return value to (a) variable
  • 4.
    Function Definition 4 FunctionName: like variable, must have no spaces and no special characters and must starts with letters Input Parameters: supplied parameters types and names. You can define any number of inputs; also you can define zero number of inputs. Return Type: the data type of the function output, if the function has no output use (void) keyword. Function Body: performs specific function operation. Return Statement: this statement tells the computer that the function execution is completed and the required function output is ready for the caller. The computer takes the returned value and supplies it to the caller.
  • 5.
  • 6.
  • 7.
    C functions aspectssyntax function definition Return_type function_name (arguments list) { Body of function; } function call function_name (arguments list); function declaration return_type function_name (argument list); 7
  • 8.
    8 The compiler givesan error at the line printWelcome(); in the main function, the error state that “the function printWelcome is undefined”. Which means that the compiler cannot locate the function before the main, even if it is located after the main?
  • 9.
  • 10.
    Calculate the Factorial Write a program uses a function to calculate the factorial of any positive number 10
  • 11.
  • 12.
    Lab:Calculate the MinimumValue of any Given Array int calcMin(int values[], int n) ; 12 Important: calcMin function takes two parameters an array and (int) value containing the array size. Know that function could not expect the given array size, you must supply it by yourself.
  • 13.
  • 14.
    Finding a Namein a Set of Names int findName(char names[][14], int n, char name[]); 14 void main() { char name[14]; char names[5][14] = {"Alaa", "Osama", "Mamdouh", "Samy", "Hossain"}; puts("Enter your first name:"); gets(name); if(findName(names, 5, name)==1) puts("Welcome"); else puts("Goodby"); }
  • 15.
    Difference between PassingSingle Values and Arrays 15 This method copies the actual value of an argument into the formal parameter of the function. In this case, changes made to the parameter inside the function have no effect on the argument. This method copies the address of an argument into the formal parameter. Inside the function, the address is used to access the actual argument used in the call. This means that changes made to the parameter affect the argument.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
    Write a programthat produces the following output: 23
  • 24.
    What is memorylayout of C-program ?  when you run any C-program, its executable image is loaded into RAM  This memory layout is organized in following fashion:  Text segment  Data segment  Heap segment  Stack segment  Unmapped or reserved 24
  • 25.
    Text segment  Textsegment contain executable instructions of your C program, its also called code segment. This is the machine language representation of the program steps to be carried out, including all functions making up the program, both user defined and system 25
  • 26.
    Data segment  Thereare two sub section of this segment called initialized & uninitialized data segment  Initialized data:- It contains both static and global data that are initialized with non-zero values.  This segment can be further classified into read-only area and read-write area.  For example : The global string defined by char string[ ] = “hello world” and a statement like int count=1 outside the main (i.e. global) would be stored in initialized read-write area. And a global statement like const int A=3 makes the variable ‘A’ read-only and to be stored in initialized read-only area.  Uninitialized data (bss segment):- Uninitialized data segment is also called BSS segment. BSS stands for ‘Block Started by Symbol’ named after an ancient assembler operator. Uninitialized data segment contains all global and static variables that are initialized to zero or do not have explicit initialization in source code.  For example : The global variable declared as int A would be stored in uninitialized data segment. A statement like static int X=0 will also stored in this segment cause it initialized with zero. 26
  • 27.
    Heap segment  Theheap segment is area where dynamically allocated memory (allocated by malloc(), calloc(), realloc() and new for C++) resides.  When we allocate memory through dynamic allocation techniques(in simple word, run time memory allocation), program acquire space from system and process address space grows that’s why we saw upward arrow indication in figure for Heap. 27
  • 28.
    Stack segment  Thestack segment is area where local variables are stored. By saying local variable means that all those variables which are declared in every function including main( ) in your C program.  When we call any function, stack frame is created and when function returns, stack frame is destroyed including all local variables of that particular function.  Stack frame contain some data like return address, arguments passed to it, local variables, and any other information needed by the invoked function.  A “stack pointer (SP)” keeps track of stack by each push & pop operation onto it, by adjusted stack pointer to next or previous address. 28
  • 29.
    Local Variables 29 Aboveprogram have three functions each with different scopes; each scope holds different local variables. The variable a, b and c of main function are inaccessible through myAdd or myMull functions. The variables x, y and z of myMull function are inaccessible through myAdd or main functions, even if myAdd function has the same variables names
  • 30.
    Global Variables  Inthe following program the variable name is defined as a global variable, all program function can access this variable. 30
  • 31.
    Static Variables  Staticvariables are defined by the modifier static. Static variables are initialized once in the program life. For example if the variable (x) is defined inside a function, the variable is initialized only at first function call, further function calls do not perform the initialization step, this means that if the variable is modified by any call the modification result remains for the next call. Following example illustrate this idea 31
  • 32.
  • 33.
  • 34.
    Recursion  Recursion isa situation happens when a function calls itself directly or indirectly. 34
  • 35.
    Recursion  Is recursionuseful? Recursion is an alternative way to repeat the function execution with the same or variant parameters values. In another way recursion is an indirect way to make a loop; simply you can convert any recursion to a normal loop 35 Infinite Printing Loop
  • 36.
    Recursion  Is recursionuseful? Recursion is an alternative way to repeat the function execution with the same or variant parameters values. In another way recursion is an indirect way to make a loop; simply you can convert any recursion to a normal loop 36 Finite Printing Loop
  • 37.
    Follow Chapter 4/5: ControllingProgram Flow C PROGRAMMING FOR ENGINEERS, DR. MOHAMED SOBH 37The next Part we will talk about Variables Scope
  • 38.
    References 38  TheCase for Learning C as Your First Programming Language  A Tutorial on Data Representation  std::printf, std::fprintf, std::sprintf, std::snprintf…..  C Programming for Engineers, Dr. Mohamed Sobh  C programming expert.  fresh2refresh.com/c-programming  Memory Layout of C Program