Es202 Lecture Notes
Es202 Lecture Notes
Es202 Lecture Notes
Text Book:
Forouzan, Behrouz A. and Gilberg, Richard F. Computer Science, A Structured Programming Approach Using C Thomson Course Technology, USA. Latest Edition
References: Any books in C/C++ or websites. See the syllabus for more details
Revised October 2012
C Language Elements
Function Main Every C program has a main function. This is where program execution begins. Body- the remaining line of the program in the body. Braces {} enclose the body of the function. - indicates the beginning and end of the function main.
C Language Elements
Two parts of the function body: 1. Declarations the part of the program that tells the compiler the names of memory cells in a program needed in the function, commonly data requirements identified during problem analysis. 2. Executable statements derived statements from the algorithm into machine language and later executed.
C Language Elements
Your First Program
C Language Elements
Reserved Words In C, a reserved word is defined as the word that has special meaning in C and cannot be used for other purposes. Examples: int, void, double, return
C Language Elements
Punctuation Marks /* */ -(slash asterisk) used to enclose a single line remarks. -(double quotation) used to display series of characters, and initializing string constant. ; -(semicolon) statement separator , -(comma) used to separate one variable to another = -(equal sign) used as assignment operator -(single quotation) used for initializing character expression & -(ampersand) used as address operator {} -(open/close braces) denotes the beginning and end of the program.
2-3 Identifiers
One feature present in all computer languages is the identifier. Identifiers allow us to name data and other objects in the program. Each identified object in the computer is stored at a unique address. If we didnt have identifiers that we could use to symbolically represent data locations, we would have to know and use objects addresses. Instead, we simply give data identifiers and let the compiler keep track of where they are physically located.
C Language Elements
Reserved Words In C, a reserved word is defined as the word that has special meaning in C and cannot be used for other purposes. Examples: int, void, double, return
Note
An identifier must start with a letter or underscore: it may not have a space or a hyphen.
Note
C is a case-sensitive language.
Note
When a variable is defined, it is not initialized. We must initialize any variable requiring prescribed data when the function starts.
Table 2-3
8 8 32 64 96
NAME
Alert Backspace
MEANING
Sound a beep Backs up one character
\f
\n \r \t
Form feed
New line Carriage Return Horizontal tab
\v
\\ \ \? \
Vertical tab
Backslash Single quote Question mark Double quote
Operators
Assignment Operator Equal sign (=) - the most basic assignment operator where the value on the right of the equal sign is assigned to the variable on the left. Example: c = c + 1; radius = 2 * diameter; stat = getch();
Operators
Binary Operators - take two operands and return a result.
Operator Use Result + op1 + op2 adds op1 to op2 op1 - op2 subtracts op2 from op1 * op1 * op2 multiplies op1 by op2 / op1 / op2divides op1 by op2 % op1 % op2 computes the remainder from dividing op1 by op2
Operators
Unary Operators - changes the sign of a value or variable. - Unary minus (-) and unary plus (+) Examples: 2 +-3 ((-x) + (+y))
Operators
Increment (++) and Decrement (--) Operators
++ increment adds one to a value of the variable -decrement subtracts one from a value of the variable
Note: The value of the expression in which ++ or -- operator is used depends on the position of the operator.
Postfix x y
5 5
Example
main(){ int a=3, b; clrscr(); b=a++; printf(b is %d, and a is %d\n, b, a); b=++a; printf(Now b is %d, and a is %d\n, b, a); b=5%--a; printf(Now b is %d, and a is %d\n, b, a); printf(Now b is %d, and a is %d\n, ++b, a-); printf(Now b is %d, and a is %d\n, b, a); }
Output
is is is is
5 4 4 3
Operators
Prefix increment/decrement - when the ++ or -- is placed immediately in front of its operand. Meaning the value of the expression is the variables value after incrementing or decrementing. Postfix increment/decrement when the ++ or -- comes immediately after the operand. The value of the expression is the value of the variable before it is incremented or decremented.
abs(x) integer x.
returns the absolute value of x=abs(-5); x=5 returns the absolute valued of type double. x=fabs(-5.2); x=5.2 rounds up or returns the smallest whole number that is not less than x. x=ceil(5.2); x=6 rounds down or returns the largest whole number that is not greater
fabs(x)
ceil(x) floor(x) than x.
x=floor(5.2);
x=5
sqrt(x)
pow(x)
sin(x) cos(x) tan(x) log(x) log10(x)
returns the non-negative square of x. x=sqrt(25); x=5 returns x to the power of y. x=pow(4,2); x=16 returns the sine of angle x. returns the cosine of angle x. returns the tangent of angle x. returns the natural logarithm of x. returns the base 10 logarithm of x.
Conversion Specifications
Date Types
long double double float unsigned long int long int unsigned int int short
printf conversion
specification
scanf conversion
specifications
char String - %s
%c
%c
I/O Functions
Numeric Input Command scanf() one of the Turbo C object stream object that is used to accept data from the standard input, usually the keyboard. syntax: scanf(format, &var_name); Example: printf(Input side of the square:); scanf(%d, &s);
Note
A terminal keyboard and monitor can be associated only with a text stream. A keyboard is a source for a text stream; a monitor is a destination for a text stream.
Note
scanf requires variable addresses in the address list.
I/O Functions
Character/String Input Command getch() allows the user to input a character and wait for the enter key. Inputted char will not be echoed but could be stored if location is specified. Syntax: getch(); var_name = getch(); Example: ans = getch();
I/O Functions
Character/String Input Command getche() allows the user to input a character and there is no need for the enter key. Inputted char will be echoed but could be stored if location is specified. Syntax: getche(); var_name = getche();
Example: ans = getche();
I/O Functions
Character/String Input Command gets() allows the user to input a sequence of characters (string). syntax: gets(variable_name_of_char_type); Example: gets(name);
I/O Functions
Output Command
printf writes formatted output to the standard output device such as the monitor. syntax: printf(format code,var_name); Example: printf(%d,x); puts writes the string to the standard output device such as the monitor and positions the cursor to the next line. syntax: puts(string expression); Example: puts(CIT);
I/O Functions
Output Command
putchar writes the single character to the screen. syntax: putchar(var_name); Example: putchar(a);
Introduction to C Programming
Control Flow
Control Structures - specify the sequence of execution of a group of statements. 3 Types: 1. Sequential 2. Conditional 3. Iterative Sequential - organized such that statements are executed in sequence, i.e., one after the other in the order of their appearance in the source code.
Sample Problem 6
Make a flowchart that will input an integer. If the integer is negative determine the square of that integer and print, otherwise just print the inputted integer.
Sample Problem
7. Make a flowchart that will compute for the area of a triangle whose base = 5 and height = 12. Output the computed area. 8. Make a flowchart that will input a degree in centigrade and will output degree in fahrenheight. 9.Make a flowchart that will input 2 integers. Determine the sum, if the sum is greater than or equal to 20 then output the second integer, otherwise, output the first integer.
Problem 10
At the University of Palompon, every unit is worth P475 in enrollment fees. An additional 15% of the TUITION FEE is paid as miscellaneous fee. Make a flowchart that will input the number of UNITS a student is enrolled and output the TOTAL TUTION FEE to be paid.
Problem 11
Any customer whose total PURCHASE is at least P1000 will be given a 10% discount. Make a flowchart that would input the customers PURCHASE and output his net BILL.
Problem 12
Make a flowchart that will input the monthly salary of Pedro and will output his annual salary and tax due. Compute his tax to be paid based on the ff: rules: if the annual salary is greater than or equal to P60,000 the tax due is 15% of the annual salary otherwise the tax due is 5% of the annual salary.
Problem 13
A taxi charges P10.50 for the first 300 meters and P5.50 for every 200 meters thereafter. Any distance covering the next 200 meter zone is still charged P5.50. Make a program that would input the DISTANCE a trip took and output the FEE.
Problem 14
Every leap year is divisible by 4. However, if a year is divisible by 100, it must also be divisible by 400 for it to be a leap year. Hence, 2000 is a leap year, but 1900 is not. Make a flowchart that will input a value for YEAR (integer) and output whether it is a LEAP YEAR or NOT A LEAP YEAR.
Make a c program to input 2 integers and perform the ff: 1> ADD 2> SUBTRACT 3> MULTIPLY 4> DIVIDE If the input is not within the choices then it will display WRONG INPUT.
Begin
No
Yes
No
Yes
No
Yes
End
main() { int year; printf("Enter a year(ex: 2005):"); scanf("%d", &year); if(year%4==0) { if(year%100==0) { if(year%400==0) printf("The year %d is a LEAP YEAR", year); else printf("The year %d is NOT A LEAP YEAR", year); } else printf("The year %d is a LEAP YEAR", year); } else printf("The year %d is NOT A LEAP YEAR", year); getch();
Problem 14
Make a flowchart that will input 10 integers. Output the sum of the inputted integers. Lots of input and not good to see. What if we have hundreds, thousands or even millions of inputs? How to solve this problem?
Control Flow
Conditional Control Structure - organized in such a way that there is always a condition that has to be evaluated first. The condition will either evaluate to a true or false. 2 Types: 1. if statement (including if-else and nested if) 2. switch case statement
Operators
Conditional Operators - expressions that evaluates to true or false.
Operator > >= < <= == != Use Result op1 > op2 true if op1 is greater than op2 op1 >= op2 true if op1 is greater or equal to op2 op1 < op2 true if op1 is less than op2 op1 <= op2 true if op1 is less or equal to than op2 op1 == op2 true if op1 is equal to op2 op1 != op2 true if op1 is not equal to op2
Operators
Logical Operators - used in boolean expressions and consists of logical and", or" and not". 0-> false and 1-> true or nonzero digit
Operator Use Result && op1 && op2 true if op1 and op2 are both true || op1 || op2 true if either op1 or op2 is true ! !op1 op1 is false if its original value is true and vice versa
Control Flow
if Selection Structure - performs an indicated action only
when the condition is true, otherwise the action is skipped. Syntax: if (<expression>) <statement>
Condition T Statement
Example: Write a program that will allow the user to input an integer value. If the value is greater than or equal to zero, print the word POSITIVE.
Begin
num
if num>=0
POSITIVE
End
Control Flow
Other Problems: 1. Write a program that will allow the user to input a number. Print the word NEGATIVE if the number is a negative value. 2. Write a program to input two integers. Thereafter, the program should determine if these two numbers are equivalent. If they are equivalent, print the word EQUIVALENT. 3. Write a program that will input an integer and determine if it is an even number.
Control Flow
if-else Selection Structure - allows the programmer to specify that different actions are to be performed when the condition is true than when the condition is false. - If condition evaluates to true, then statementT is executed and statementF is skipped; otherwise, statementT is skipped and statementF is executed.
Control Flow
Syntax: if (condition) statementT; else statementF;
Conditio n
Statement
F Statement
Control Flow
Problems: 1. Write a program that will allow the user to input a number. Print the word NEGATIVE if the number is a negative value otherwise print POSITIVE if the number is positive. 2. Write a program to input two integers. Thereafter, the program should determine if these two numbers are equivalent. If they are equivalent, print the word EQUIVALENT otherwise print the word NOT EQUIVALENT. 3. Write a program that will input an integer and determine if it is an even or odd number.
Control Flow
if-else (multiple alternatives) - The conditions in a multiple-alternative decision are evaluated in sequence until a true condition is reached. If a condition is true, the statement following it is executed, and the rest of the multiplealternative decision is skipped. If a condition is false, the statement following it is skipped, and the condition next is tested. If all conditions are false, then the statement following the final else is executed.
Control Flow
Syntax: if (condition) statement; else if (condition) statement; else if (condition) statement; else statement;
Conditio n T Statement
F
Conditio n F Conditio n F T Statement T Statement
Statement
Control Flow
Example:
Make a C program that will accept a score and display based on the following conditions: Score Display 86 100 (inclusive) Very Good 75 85 (inclusive) Fair Below 75 Failed
Control Flow
Nested-if Statement Syntax: if (condition) { if (condition) statement; else statement; }
Always putting the braces in an if...else statement (or any control statement) helps prevent their accidental omission, especially when adding statements to an if or else clause at a later time. To avoid omitting one or both of the braces, some programmers prefer to type the beginning and ending braces of blocks even before typing the individual statements within the braces.
Forgetting one or both of the braces that delimit a block can lead to syntax errors or logic errors in a program.
Placing a semicolon after the condition in an if statement leads to a logic error in single-selection if statements and a syntax error in double-selection if...else statements (when the if part contains an actual body statement).
Make a C program to input an integer. Output the integer if it is a positive even integer.
Control Flow
Leap years occur in years exactly divisible by four, except that years ending in 00 are leap years only if they are divisible by 400. Hence, 2000 is a leap year, but 1900 is not. Make a flowchart that will input a value for YEAR (integer) and output whether it is a LEAP YEAR or NOT A LEAP YEAR.
Is a selection statement provided by C. It has a built in multiple branch and work similar to if else ladder generally.
Control Flow
Switch Statement - the controlling expression, an expression with a value of type int or type char, is evaluated and compared to each of the case labels in the case constant until a match is found. A case constant is made of one or more labels of the form case followed by a constant value and a colon.
Control Flow
When a match between the value of the controlling expression and a case label value is found, the statement following the case label are executed until a break statement is encountered. Then the rest of the switch statement is skipped. A default case is allowed which will be executed if no other statement match is found.
Control Flow It is defined by C that a complier must support a minimum of 257 case statements in C89 and 1023 case statements in C99 though you may want to keep this to minimum in consideration of efficiency.
Control Flow
Switch Statement Syntax: switch (controlling expression) { case constant: statement; break; case constant: statement; break; . . . default: statement; }
- exits from the lowest-level loop in which it occurs. - used for early exit from the loop, or for exiting a forever loop
BREAK and CONTINUE You can exit out of a loop at any time using the break statement. This is useful when you want a loop to stop running because a condition has been met other than the loop end condition.
#include<stdio.h>
int main() { int i; while (i < 10) { i++; if (i == 5) break; } return 0; }
Control Flow
Example
Make a C program that prompts the user to input 2 integers and will perform the following operations: Choice Operation 1 ADDITION 2 SUBTRACTION 3 MULTIPLICATION
Solution
#include<stdio.h> #include<conio.h>
main() { int num1, num2, sum, diff, prod, choice; printf("Enter the first number:"); scanf("%d", &num1); printf("Enter the second number:"); scanf("%d", &num2); printf("Enter your choice (1-> ADD, 2-> SUBTRACT, 3->MULTIPLY:"); scanf("%d", &choice); switch(choice) { case 1: { sum=num1+num2; printf("The sum of 2 numbers is %d", sum); break; } case 2: { diff=num1-num2; printf("The difference between 2 numbers is %d", diff); break; } case 3: { prod=num1*num2; printf("The product of 2 numbers is %d", prod); break; } default: printf("Wrong Choice!!!"); } getch();
Problem 14
Make a flowchart that will input 10 integers. Output the sum of the inputted integers. Lots of input and not good to see. What if we have hundreds, thousands or even millions of inputs? How to solve this problem?
Execution of Loops
Typically this is done inside a loop statement of some sort using a variable as a counter to keep track of which character is to be checked. The counter variable may be incremented by one, each time through, so that the first element is examined the first time through the loop, the second element the second time, and so forth.
Execution of Loops
Being able to repeatedly execute a statement or compound statement is an essential feature of programming.
Introduction to Loops
What is the difference between a while and a do / while loop? What is a sentinel value? How do you pick a good sentinel value? Would you ever intentionally want an infinite loop? Why shouldnt you generally use floats or doubles as control variables in loops?
Loops
There are several loop types. Depending on situation, sometimes it is better to use one kind of loop than another, but every loop can be transformed into one another.
Loops
This is not so important for beginners, you just need to know that there is good and better use of particular loop.
Control Flow
A loop has the following components:
value of zero before the loop statement is reached. 2.Condition/testing (that would evaluate to either true or false) the condition to check is usually made on the current value of the variable initialized in (1) for it controls the loop repetition. 3.Body statements that are repeated in the loop. 4.Updating a statement inside the body of the loop that updates the value of the variable that is initialized during each repetition.
Control Flow
Control Flow
do-while statement
- This loop executes a block of codes as long as the specified condition is true. - It is a post checked loop because it checks the controlling condition after the code is executed.
Control Flow
Syntax: do { statement/s; } while (loop repetition condition); Example: c=1; do { printf(Hello World\n); c++; } while (c<=5);
Control Flow
while statement
- Like do-while, this will execute a
block of codes while the given condition is true. - It is a pre-checked loop because it checks the controlling condition first before the code is executed.
Control Flow
Syntax: while (loop repetition condition) { statement/s; } Example: c=1; while (c<=5) { printf(Hello World\n); c++; }
Control Flow
for statement
- a kind of loop command wherein the execution of the statement does not depend on another instruction. Syntax:
for (initialization expression; loop repetition condition; update expression) { statement/s; }
Control Flow
Example
Definite Loop:
You know exactly how many times you want the loop to execute. not at compile time necessarily
116
Infinite Loop
You can still end up with an infinite loop when using for loops
117
Types of Loop
TRUE
FALSE
120
While Loop
While loop is usually used when we do not know exactly how many times we need to execute repeating block of code
while (*) { /* repeating block of code */ } * Is a condition which is true or false. Ex. Value> 5 Condition is checked at every iteration start. If condition is true, execution will continue, if it is false execution will break.
Do While
Do-while loop is usually used when we do not know exactly how many times we need to execute repeating block of code, but we know that we need to execute it at least once.
Example
1. Make a flowchart that will input 10 integers. Output the sum of the inputted integers. 2. Make a C rogram that will input 20 scores of students. Output the average of the scores.
3. Make a C program to input 20 integers. Output the average of all positive odd integers.
Additional Examples
4. Make a C program that will input integers, positive and negative. The flowchart/program will terminate if a negative number is inputted. Output the average of all positive integers inputted.
6. Make a C program that will prompts the user to input an integer. Output if the inputted integer is PRIME or COMPOSITE
Additional Examples
6. Make a C program to input N number of integers. Output the average of all positive odd integers. Modify your program so that every time you run, it will prompt the user to continue or not. If you press Y it will run again, otherwise if you press any key it terminates.
Additional Examples
1. Make a C program to input 5 names of student. Each student has 3 exam scores. Determine the average exam score of each student. 2. Make a C program to input 10 names of student. Each student has 3 exam scores. Determine the average exam score of each student. Output the highest average exam score.
NESTED LOOPS
The for loop and all other repetition constructs can also be nested to any degree. In a simple word, nesting means loop in loop.
NESTED LOOPS
The OUTER loop is executed until the condition become FALSE. For every row value (OUTER LOOP), the INNER loop will be executed until the condition become FALSE. In simple word, the external loop will be for the row and the internal for loop will be the column.
NESTED LOOPS
NESTED LOOPS
Array
The C language provides a capability that enables the user to define a set of ordered data items known as an array. Suppose we had a set of grades that we wished to read into the computer and suppose we wished to perform some operations on these grades, we will quickly realize that we cannot perform such an operation until each and every grade has been entered since it would be quite a tedious task to declare each and every student grade as a variable especially since there may be a very large number.
Array In C we can define variable called grades, which represents not a single value of grade but a entire set of grades. Each element of the set can then be referenced by means of a number called as index number or subscript.
Arrays
Array is a collection of same type elements under the same variable identifier referenced by index number.
Arrays are widely used within programming for different purposes such as sorting, searching and etc.
Arrays
Syntax of Array Declaration: Data_type array_name[size]; Where: data_type valid data type array_name any user-defined identifier size number of elements in the array Example: int num[5];
ARRAY
a data structure which hold multiple variables of the same data type.
IN SHORT, ARRAY IS Structures of related data items Static entity same size throughout program
To refer to an element, specify Array name Position number
Format:
arrayname[ position number ]
First element at position 0 (must always be put in mind) Example: n element array named c: c[ 0 ], c[ 1 ]...c[ n 1 ]
Arrays
num[0] num[1] num[2] num[3] num[4] -45 2 4 72 1
Subscript the position number contained within square brackets. - must be an integer or an integer expression.
Arrays
Initialization of Array
We can initialize the elements in the array in the same way as the ordinary variables when they are declared.
The general form of initialization of arrays type array_name[size]={list of values};
The values in the list care separated by commas, for example the statement
Initialization of Array
int number[3]={0,0,0};
Will declare the array size as an array of size 3 and will assign zero to each element. If the number of values in the list is less than the number of elements, then only that many elements are initialized. The remaining elements will be set to zero automatically.
Initialization of Array
In the declaration of an array the size may be omitted, in such cases the compiler allocates enough space for all initialized elements. For example the statement,
int counter[]={1,1,1,1};
Will declare the array to contain four elements with initial values 1. this approach works fine as long as we initialize every element in the array.
Initialization of Array
Initializing an array Using the for loop: int n [ 10 ] , i ; for (i = 0; i < 10; i ++) n[i]=0; The initialization above is the same as: int n [ 10 ] = { 0 } ;
Initialization of Array
Storing String in Character Arrays Ex: char string1[] = first; or char string1[] = { f , i , r , s , t , \0 }; or scanf(%s, string1); printf(%s, string1);
Initialization of Array
Multi dimensional Arrays Often there is a need to store and manipulate two dimensional data structure such as matrices & tables. Here the array has two subscripts. One subscript denotes the row & the other the column. data_type array_name[row_size][column_size]; int m[10][20] Here m is declared as a matrix having 10 rows( numbered from 0 to 9) and 20 columns(numbered 0 through 19). The first element of the matrix is m[0][0] and the last row last column is m[9][19]
Initialization of Array
Elements of multi dimension arrays: A 2 dimensional array marks [2][2] is shown. The first element is given by marks [0][0] contains 90 & second element is marks [0][1] and contains 75 and so on.
marks [0][0] marks [0][1]
90
marks [1][0]
75
marks [1][1]
85
67
Initialization of Array
Like the one dimension arrays, 2 dimension arrays may be initialized by following their declaration with a list of initial values enclosed in braces Example: int table[2][3]={0,0,0,1,1,1};
Initializes the elements of first row to zero and second row to 1. The initialization is done row by row. The above statement can be equivalently written as
int table[2][3]={{0,0,0},{1,1,1}}
Array elements are like normal variables c[ 0 ] = 3; printf( "%d", c[ 0 ] ); Perform operations in subscript. If x equals 3 c[ 5 - 2 ] == c[ 3 ] == c[ x ]
Points to Ponder
int n[ 5 ] = { 1, 2, 3, 4, 5 }; If not enough initializers, rightmost elements become 0 int n[ 5 ] = { 0 } All elements 0 If too many a syntax error is produced syntax error C arrays have no bounds checking If size omitted, initializers determine it int n[ ] = { 1, 2, 3, 4, 5 }; 5 initializers, therefore 5 element array
Example
Solution
#include <stdio.h> main() { int x, num[5]; for(x=0; x<=5; x++) { printf("Enter a number%d:",x); scanf("%d", &num[x]); } for(x=0; x<=5; x++) { printf("The content of num[%d] is %d\n",x, num[x]); } getch(); }
Example
#include <stdio.h> #include <conio.h>
main() { char word[20]; word[0]='H'; word[1]='e'; word[2]='l'; word[3]='l'; word[4]='o'; word[5]=\0; //slash zero
printf("The contents of word[] is --> %s\n", word);
getch(); }
Example
#include <stdio.h> main() { int x, num[5]; num[0]=1; num[1]=2; num[2]=3; num[3]=4; num[4]=5; num[5]=0; for(x=0; x<=5; x++) { printf("The contents of num[%d] is --> %d\n",x, num[x]); } getch(); }
Problem
Solution
#include<stdio.h> #include<conio.h> #include<string.h> main() { int x; char name[5][15]; fflush(stdin); for(x=0; x<5; x++) { fflush(stdin); printf("Enter name%d:", x); gets(name[x]); } fflush(stdin); for(x=0; x<5; x++) { fflush(stdin); printf("Name is %s", name[x]); printf("\n"); } getch(); }
main() { int n[ SIZE ] = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 }; /* Initialize array*/ int i, j;
printf( "%s%13s%17s\n", "Element", "Value", "Histogram" ); for ( i = 0; i <= SIZE - 1; i++ ) { /* Loop*/ printf( "%7d%13d ", i, n[ i ]) ; /* print one bar */ /*Print*/
for ( j = 1; j <= n[ i ]; j++ ) printf( "%c", '*' ); printf( "\n" ); } /* End of for loop i */ getch(); } /* END Main Program */
Program Output: Element 0 1 2 3 4 5 6 7 8 9 Value 19 3 15 7 11 9 13 5 17 1 Histogram ******************* *** *************** ******* *********** ********* ************* ***** ***************** *
Arrays
Searching Arrays
Searching the process of finding a particular element of an array. Linear search compares each element of the array with the search key. Binary search locates the middle element and compares it to the search key. If they are equal, the search key is found and the array subscript is returned. Otherwise, it eliminates one half of the elements in a sorted array after each comparison.
Searching Arrays
Examples: 1. Create an array of N integers. Determine if 13 is within the array. 2. Create an array of N integers. Input an integer to be searched in the array. Output whether the integer to be searched exist or not.
MULTI DIMENSIONAL ARRAYS The arrays we have been using so far are called 1dimensional arrays because they only have what can be thought of a 1 column of elements. 2-dimensional arrays have rows and columns. Here is a picture which explains it better: 1-dimensional array 0 1 1 2 2 3
2-dimensional array
0 1 2
0 1 2 3 1 4 5 6
2 7 8 9
You do get 3-dimensional arrays and more but they are not used as often. Here is an example of how you declare a 2-dimensional array and how to use it. This example uses 2 loops because it has to go through both rows and columns. int a[3][3],i,j; for (i = 0;i < 3;i++) for (j = 0;j < 3;j++) a[i][j] = 0;
A magic square is an arrangement of the numbers from 1 to n^2 (n-squared) in an nxn matrix, with each number occurring exactly once, and such that the sum of the entries of any row, any column, or any main diagonal is the same. It is not hard to show that this sum must be n(n^2+1)/2.
Starting from the central column of the first row with the number 1, the fundamental movement for filling the squares is diagonally up and right, one step at a time. If a filled square is encountered, one moves vertically down one square instead, then continuing as before. When a move would leave the square, it is wrapped around to the last row or first column, respectively.
Complete steps
Starting from other squares rather than the central column of the first row is possible, but then only the row and column sums will be identical and result in a magic sum, whereas the diagonal sums will differ. The result will thus be a semi magic square and not a true magic square. Moving in directions other than north east can also result in magic squares. You can start from any number rather than 1 and continue the same method to derive various patterns of magic squares.
1.Tic Tac Toe Game 2.Number Puzzle Game 3.Can you think of other applications?
Functions
The basic philosophy of function is divide and conquer by which a complicated tasks are successively divided into simpler and more manageable tasks which can be easily handled. A program can be divided into smaller subprograms that can be developed and tested successfully.
Functions
A function is a complete and independent program which is used (or invoked) by the main program or other subprograms. A subprogram receives values called arguments from a calling program, performs calculations and returns the result to the calling program.
FUNCTION
Most of the time, however, unless the function is supposed to do an actual input, we try NOT to put scanf inside. Instead, whatever the function needs as input, we pass it as parameter. The output of the function on the other hand is returned to the user through the return statement. This way, function is a stand-alone function.
Usually, we call or invoke this program (function) from our main program: main( ) Since functions take input through parameters, it is important that we need to clearly understand parameter and parameter transmission.
Advantages of using functions 1. It facilitates top down modular programming. 2. the length of the source program can be reduced by using functions at appropriate places. 3. It is easy to locate and isolate a faulty function for further investigation.
Cont Advantages 4. A function may be used by many other programs this means that a c programmer can build on what others have already done, instead of starting over from scratch. 5. A program can be used to avoid rewriting the same sequence of code at two or more locations in a program.
Cont Advantages
6. Programming teams does a large percentage of programming. If the program is divided into subprograms, each subprogram can be written by one or two team members of the team rather than having the whole team to work on the complex program
Cont Why 3. Programs with using functions are compact & easy to understand.
4. Testing and correcting errors is easy because errors are localized and corrected. 5. We can understand the flow of program, and its code easily since the readability is enhanced while using the functions. 6. A single function written in a program can also be used in other programs also.
Input
Output
Input
Output
scanf()
printf()
parameters
return
Parameters serve as a way to communicate information to a function. One use of parameters as stated earlier is to be able to supply input to the function. You need to declare variables inside the parameter brackets to store the values of the parameters that are passed to the function.
2 types of Parameter
#include <stdio.h> int main (void); int calculate_bill (int, int, int); int main() { int bill; int fred = 25; int frank = 32; int franny = 27; bill = calculate_bill (fred, frank, franny); printf("The total bill comes to $%d.00.\n", bill); exit (0); } int calculate_bill (int diner1, int diner2, int diner3) { int total; total = diner1 + diner2 + diner3; return total; }
In the function main in the example above, fred, frank, and franny are all actual parameters when used to call calculate_bill. On the other hand, the corresponding variables in calculate_bill (namely diner1, diner2 and diner3, respectively) are all formal parameters because they appear in a function definition. Although formal parameters are always variables (which does not mean that they are always variable parameters), actual parameters do not have to be variables. You can use numbers, expressions, or even function calls as actual parameters.
The number of formal arguments and actual arguments must be matched to each other. Suppose if actual arguments are more than the formal arguments, the extra actual arguments are discarded. If the number of actual arguments are less than the formal arguments then the unmatched formal arguments are initialized to some garbage values. In both cases no error message will be generated.
Here is an Add function which adds the 2 parameters together and then returns the result.
#include<stdio.h> int Add(int a,int b) { return a + b; }
Types of functions: A function may belong to any one of the following categories:
1. Functions with no arguments and return values. 1. Functions with no arguments but with return values.
3. Functions with arguments and no return values. 4. Functions with arguments and return values.
Syntax:
returndata_type functionName (parameter list)
{ <local variable declaration> statements; return expression; } Note: No function can have the same name as the one of TCs reserved words.
where:
returndata_type= specifies the type of data returned
by the function
1. It can be used to cause an immediate exit from the function it is in. That is, the return will cause program execution to return to the calling as soon as it is encountered. 2. It can also be used to return a value. Note: The return statement can also be used without any value associated with it.
When we want a function to simply perform a task, without returning a value, then we can explicitly specify the data type as void before a function name.
By convention Cs parameter passing is call-by-value and call-by-reference For now, all the examples that we will study here are called-by-value
Functions
Example: int func(int one, int two) { int sum; sum=one + two; return sum; }
Functions
Function Definition (Without return type and parameters) Syntax: void fname(void) { local declarations executable statements } Example: void hello(void){ printf(Hello); }
Functions
Function Definition (Without return type and with parameters) Syntax: void fname(parameters list){ local declarations executable statements } Example: void add(int one, int two){ int sum; sum=one + two; printf(Sum=%d, sum); }
Starline( );
getch(); return 0; }
THINK OF AN EXAMPLE?
THINK OF AN EXAMPLE!!!
THINK OF AN EXAMPLE!!!
A C function returns a value of type int as the default data type when no other type is specified explicitly.
Parameter Passing
Two types:
1. Pass by reference - the variable argument is renamed, not copied. Only the address of the argument is passed to the function.
2. Pass by value - a copy of the data is passed to the subroutine, so that no matter what happens to the copy the original is unaffected.
TRANSMISSION BY VALUE
This means that the value of the actual parameter is transmitted to the formal parameter when the function is called.
Example
int feetToInches(int feet) { feet int inches; inches = feet * 12; return inches; inches }
5 0
TRANSMISSION BY VALUE
Transmission by value therefore means, that the formal parameter is evaluated at the point of call, then the value of the actual parameter is transmitted to the formal parameter.
Example 2
void changeMe(int x) { x = x * 10; } main() { int x; changeMe(x); printf(%d, x); }
Solution
void changeMe(int x) { x x = x * 10; }
main() { int x=5; changeMe(x); printf(%d, x); }
50
Function Prototype
The Function prototype serves the following purposes :
1) 2)
3)
4)
It tells the return type of the data that the function will return. It tells the number of arguments passed to the function. It tells the data types of the each of the passed arguments. Also it tells the order in which the arguments are passed to the function.
Example
#include <stdio.h>
int sum (int, int); // This is a function prototype int main (void) { int total; total = sum (2, 3);
Function Prototype
Question:
What will happen if you did not declare a function prototype?
Answer:
Function definition should be made before the main.
Example
#include<stdio.h> #include<conio.h> int add(int a, int b) { return a+b; } main() { int answer; answer=add(5,7); printf("The sum is: %d", answer); getch(); return 0; }
Function Prototype
You can write the definition of your function any anywhere if you declare the function prototype since the compiler knows before hand looking at the prototype that it is going to encounter the function at some point of time
Additional Problems
A function called Grader that takes a numeric score and returns a letter grade. Grader has one argument of type integer and returns a value of type char. Use the rule that 90 to 100 is an A, 80 to 90 is a B, 70 to 79 is a C, and less than 70 is an F.
Make a function that will compute the average of numbers from 1 to n. The prototype of this function is int average (int n); Make a function that will return 1 if b is a factor of N, otherwise it will return 0. The function prototype is int isFactor(int N, int b) ;
The Least Common Multiple (LCM) of two numbers is the smallest number (not zero) that is a multiple of both . For example, the least common multiple of 3 and 4 is 12. Write a function declaration for a function with two integer arguments that returns their least common multiple. Write a function that shall accepts an array of integers of size 10. Return the sum of the 10 integers.
ARRAY
a data structure which hold multiple variables of the same data type. To refer to an element, specify Array name (is a variable that contains the address of its first element) Position number
Question: Is array uses pass by value or reference?
ARRAY
When an array is passed as parameter, it is always the address that automatically gets transmitted.
Sample Program
#include<stdio.h> #include<conio.h>
IN A NUTSHELL When an expression is passed as an argument to a function, a copy of the value of the expression is made, and it is this copy that is passed to the function. This mechanism is known as
call-by-value
and is strictly adhered to in C programming language.
In other programming languages, however, such a function call can change the value of variable v in the calling environment. The mechanism that accomplishes this is known as call-by-reference. To get the effect of call-by-reference in C, we must use pointers in the parameter list in the function definition, and pass addresses of variables as arguments in the function call.
Additional Problem
1. Construct a function that will print out the contents of the array of 10 numbers. 2. Construct a function that will compute the sum of the contents of the array of 10 numbers and return its result back to the calling function
RECURSION
What is Recursion?
The joke goes that in order to understand recursion, you must understand recursion. The humor in this seems to lie in 2 places. First, a recursive function is a function that calls it self, thus understanding recursion to understand recursion seems like a call to itself. Second, that recursion is tough to understand, and so it seems like some people get it and others dont.
Recursion
To understand recursion, you must understand that the basic unit of recursion is the function call. In fact, if you avoid using loops and use only recursion, you will find that your function code will generally be much shorter.
Example
Problem
Solution
#include<stdio.h> #include<conio.h> int factorial(int); int main() { int num, fact; printf("Enter a Number: "); scanf("%d",&num); fact=factorial(num); printf("The factorial of %d is %d",num, fact); getch(); return 0; } int factorial(int x) { if(x==1) return 1; else return factorial(x-1)*x; }
int factorial( int num ) /* Function definition */ { . . . if ( num > 0 ) return( num * factorial( num - 1 ) ); }
More Examples
Another example, consider the problem of summing values of an array. What's the difference between summing an array of 100 elements versus summing an array of 50 elements?
ITERATION OR RECURSION?
It's a matter of debate whether, for a particular function, a recursive definition is clearer than an iterative one. Usually, an iterative definition will include more local variable declarations.
ITERATION OR RECURSION?
In other words, temporary memory allocation is made explicit in the iterative versions of the functions by declaring variables, whereas it is implicit in the recursive definitions
ITERATION OR RECURSION?
Because of extra stack manipulation, recursive versions of functions often run slower and use more memory than their iterative counterparts. But this is not always the case, and recursion can sometimes make code easier to understand.
ITERATION OR RECURSION?
ES202
THE END