reach test review

70
CECS 121 Final Test

Upload: jalen

Post on 09-Feb-2016

31 views

Category:

Documents


0 download

DESCRIPTION

CECS 121 Final Test. REACH TEST REVIEW. Function Prototypes & Definitions. Function Prototype Syntax return-type function_name ( arg_type arg1, ..., arg_type argN ); - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: REACH TEST REVIEW

CECS 121 Final Test

Page 2: REACH TEST REVIEW

Function Prototype Syntax

return-type function_name ( arg_type arg1, ..., arg_type argN);

Function Prototypes tell you the data type returned by the function, the data type of parameters, how many parameters, and the order of parameters

Function definitions implement the function prototype

Where are function prototypes located in the program?

Where do you find function definitions?

Page 3: REACH TEST REVIEW

Function Prototypes are placed after preprocessor directives and before the main(){} function.

Function Definitions are self contained outside of the main(){} function

Page 4: REACH TEST REVIEW

#include <stdio.h> int mult ( int, int );

main() { int x,y; printf( "Please input two numbers to be multiplied: " );

scanf( "%d", &x ); scanf( "%d", &y ); printf( "The product of your two numbers is %d\n", mult( x,

y ) ); getchar(); // To pause the screen, same like system(“pause”)

}

int mult (int x, int y) // Make sure not to end this with a semicolon { return(x * y); }

Page 5: REACH TEST REVIEW

#include <stdio.h>void print_char( char *, int);

main() { char name[20]=“REACH CRC”;

print_char(name, 3); // The name of the array is a pointer to that array

getchar(); }

void print_char (char *nameStringArray, int x) { printf(“The character specified is: %c”, nameStringArray[x-1]); }

Page 6: REACH TEST REVIEW

#include <stdio.h> void printReportHeader();

main(){

printReportHeader;}

void printReportHeader(){

printf(“\n Column1\tColumn2\tColumn3\tColumn4 \n”);}

Page 7: REACH TEST REVIEW

#include <stdio.h> void printReportHeader();

main(){

printReportHeader; // Should be corrected to printReportHeader()}

void printReportHeader(){

printf(“\n Column1\tColumn2\tColumn3\tColumn4 \n”);}

Page 8: REACH TEST REVIEW

Variable scope defines the life time of a variable

Local Scope: defined within functions and loses scope after function is finished. Can reuse in other functions (ex. p.123)

Global Scope: defined outside of functions and can be accessed by multiple functions

Page 9: REACH TEST REVIEW

#include <stdio.h> void printNumbers();int iNumber; // This is a global variable reachable from any place in code main() { int x;

for(x=0, x<10,x++){printf(“\n Enter a number:”);scanf(“%d”, &iNumber);printNumbers();

}} void printNumbers(){

printf(“\n Your number is: %d \n”, iNumber);}

Page 10: REACH TEST REVIEW

Can you declare a one-dimensional array made up of 10 integers? data_type name[size_of_array] Answer: int iArray[10];

How to declare an Array int iArray[10]; // Array of 10 integers float fAverages[30]; // Array of 10 floats char cName[19];// 18 characters and 1 null

character

Page 11: REACH TEST REVIEW

Why do we initialize? Because memory spaces may not be cleared from previous values when arrays are created

Can initialize an array directly Example int iArray[5]={0,1,2,3,4};

Can initialize an array with a loop such as for()

Page 12: REACH TEST REVIEW

#include <stdio.h>

main(){ int x; int iArray[5];

for( x=0; x < 5 ; x++) { iArray[x] = 0;}

}

Page 13: REACH TEST REVIEW

Can you add code that will print out the value of each element of iArray?#include <stdio.h>

main(){

int x;int iArray[5];

for( x=0; x < 5 ; x++) {

iArray[x] = 0;}

}

Page 14: REACH TEST REVIEW

#include <stdio.h> main(){

int x;int iArray[5];

for( x=0; x < 5 ; x++) { iArray[x] = 0;}for(x=0 ; x<5; x++){ printf(“\n The value of iArray index %d is %d \n”, x, iArray[x]);}

}

Page 15: REACH TEST REVIEW

How do you search through an array?

Page 16: REACH TEST REVIEW

#include <stdio.h> main(){

int x;int iValue;int iFound = -1;int iArray[5];for( x=0; x < 5 ; x++) iArray[x] = (x+x);printf(“\n Enter value to search for:”);scanf(“%d”, &iValue);for(x=0 ; x<5; x++){ if( iArray[x] ==iValue){ iFound =x;

break; )}if(iFound >-1) printf(“\n I found your search value in element %d \n”, iFound);else printf(“\n Sorry, your search value was not found \n”);

}

Page 17: REACH TEST REVIEW

Declaring: data_type name[size_dim_1][size_dim_2]

▪ size_dim_1 is known as “ROW” count.▪ size_dim_2 is known as “COLUMN” count.

int double_array[20][10] Accessing:

printf(“Element 2,5 is: %d”, double_array[2][5]);

Page 18: REACH TEST REVIEW

Initializing: Use a second, nested FOR() loop#include <stdio.h>

main(){

int x, y, double_array[10][20];for( x=0; x < 10 ; x++) // Outer loop goes with ROW count{ for(y=0 ; y<20; y++) // Inner loop goes with Column count { double_array[x][y] = 0; }}

}

Page 19: REACH TEST REVIEW

Passing to a function:#include <stdio.h>#include<stdlib.h>void custom_func(int [ ][2]); // Multi dimensional arrays must have a bound main(){

int double_array[2][2]={{1,2},{3,4}};custom_func (double_array);system(“pause”);

}void custom_func (int temp[ ][2]){ printf(“Test: %d, %d, %d”, temp[0][0],temp[0][1],temp[1][1]);}OUTPUT: Test: 1, 2, 4

Page 20: REACH TEST REVIEW

Lect 14 P. 20

Pointers are variables that contain memory addresses as their values.

A variable name directly references a value. A pointer indirectly references a value.

Referencing a value through a pointer is called indirection.

A pointer variable must be declared before it can be used.

ALL Arrays are Pointers!

Page 21: REACH TEST REVIEW

Lect 14 P. 21

Examples of pointer declarations:FILE *fptr; //fptr is a pointer to a fileint *a; //a is a pointer to a filefloat *b; //b is a pointer to a filechar *c; //c is a pointer to a file

The asterisk, when used as above in the declaration, tells the compiler that the variable is to be a pointer, and the type of data that the pointer points to, but NOT the name of the variable pointed to.

Page 22: REACH TEST REVIEW

Lect 14 P. 22 Winter Quarter

Consider the statements:#include <stdio.h>int main ( ){FILE *fptr1 , *fptr2 ; /* Declare two file pointers */int *aptr ; /* Declare a pointer to an int */float *bptr ; /* Declare a pointer to a float */int a ; /* Declare an int variable */float b ; /* Declare a float variable */return 0;}

Page 23: REACH TEST REVIEW

Lect 14 P. 23 Winter Quarter

When is & used?

When is * used?

& -- "address operator" which gives or produces the memory address of a data variable

* -- "dereferencing operator" which provides the contents in the memory location specified by a pointer

Page 24: REACH TEST REVIEW

Lect 14 P. 24 Winter Quarter

If instead of passing the values of the variables to the called function, we pass their addresses, so that the called function can change the values stored in the calling routine. This is known as "call by reference" since we are referencing the variables.

The following shows a swap function modified from a "call by value" to a "call by reference". Note that the values are now actually swapped when the control is returned to main function.

Page 25: REACH TEST REVIEW

Unary operator (&) – “Address of”int x=10;int *xptr;xptr = &x; //xptr now points to x

Indirection operator (*)int x, y = 10;int *xptr;xptr = &y;x = *xptr //copies contents of y into x

Page 26: REACH TEST REVIEW

Lect 14 P. 26

#include <stdio.h>void swap ( int *, int *) ;int main ( ){ int a = 5, b = 6; printf("a=%d b=%d\n",a,b) ; swap (&a, &b) ; printf("a=%d b=%d\n",a,b) ; return 0 ;}

void swap( int *a, int *b ){ int temp; temp= *a; *a= *b; *b = temp ; printf ("a=%d b=%d\n", *a, *b);}Output:a=5 b=6 //printed from maina=6 b=5 //printed from inside

swapa=6 b=5 // printed from main

after calling swap function

Page 27: REACH TEST REVIEW

To avoid accidently changing the value the pointer points to: Use const

void custom(const int *);main(){}void custom(const int *){

}

Page 28: REACH TEST REVIEW

Strings are character arrays that have a special set of functions for handling their data as complete sentences or “strings” of characters.

Since a string is an array it is also a pointer. Character literals are expressed with a

single quote: char example=‘a’; String literals are expressed with double

quote:char example[10]=“REACH”;

Page 29: REACH TEST REVIEW

When determining the maximum length your string variable needs to be it is important to consider a NULL Character: “\0”

char example[10]=“REACH”;example[0] -> Rexample[1] -> Eexample[2] -> Aexample[3] -> Cexample[4] -> Hexample[5] -> \0

Page 30: REACH TEST REVIEW
Page 31: REACH TEST REVIEW

#include <stdio.h>#include<stdlib.h>#include <string.h>

int main (){ char szInput[256]; printf ("Enter a sentence: "); gets (szInput); printf ("The sentence entered is %u characters long.\n",(unsigned)strlen(szInput));System(“pause”); return 0;}

Output:Enter sentence: just testingThe sentence entered is 12 characters long.

Page 32: REACH TEST REVIEW

#include <stdio.h>#include <ctype.h>int main (){ int i=0; char str[]="Test String.\n"; char c; while (str[i]) { c=str[i]; putchar (tolower(c)); i++; } return 0;}

Output:

test string.

For toupper() will be same case, just replace tolower() by toupper()

Page 33: REACH TEST REVIEW

#include <stdio.h>#include <string.h>

int main (){ char str1[]="Sample string"; char str2[40]; char str3[40]; strcpy (str2,str1); strcpy (str3,"copy successful"); printf ("str1: %s\nstr2: %s\nstr3: %s\n",str1,str2,str3); return 0;}

Output:

str1: Sample stringstr2: Sample stringstr3: copy successful

Page 34: REACH TEST REVIEW

#include <stdio.h>#include <string.h>

int main (){ char str[80]; strcpy (str,"these "); strcat (str,"strings "); strcat (str,"are "); strcat (str,"concatenated."); puts (str); return 0;}

Output:these strings are concatenated.

Page 35: REACH TEST REVIEW

#include <stdio.h>#include <string.h>

int main (){ char szKey[] = "apple"; char szInput[80]; do { printf ("Guess my favourite fruit? "); gets (szInput); } while (strcmp (szKey,szInput) != 0); puts ("Correct answer!"); return 0;}

Output:Guess my favourite fruit? orange Guess my favourite fruit? AppleCorrect answer!

Page 36: REACH TEST REVIEW

/*This example searches for the "simple" substring in str and replaces that word for "sample".*/#include <stdio.h>#include <string.h>

int main (){ char str[] ="This is a simple string"; char * pch; pch = strstr (str,"simple") ; /* returns a pointer to first occurrence of “simple” in str*/ strncpy (pch,"sample",6); // copies 6 characters from source->pch puts (str); return 0;}

Output:This is a sample string

Page 37: REACH TEST REVIEW

Can you make a program to sort an array of 10 integers either ascending or descending order?Consider you have the array[10]={7,8,5,3,0,3,2,1,4,10}Write a code to do the sorting.

Page 38: REACH TEST REVIEW

#include<stdio.h>

int main(){int array[10]={7,8,5,3,0,3,2,1,4,10};int temp=0,i,j; for(i=0;i<10;i++) // print the array before sorting printf(“%d\n”,array[i]); for(i=0;i<10;i++) for(j=0;j<10;j++) { if(array[i]<array[j]) /* This will do Ascending order, if you need Descending order just

flip the < to > */ { temp=array[i]; // This will do the swapping array[i]=array[j]; array[j]=temp; } } for(i=0;i<10;i++) // print the array after sorting printf(“%5d “,array[i]); getchar(); return 0;}

Page 39: REACH TEST REVIEW

Can you modify the previous code to pass the array to a function that will sort the array and print the sorted array in main.

Page 40: REACH TEST REVIEW

#include<stdio.h>

void sortArray(int [ ],int size); int array[10]={7,8,5,3,0,3,2,1,4,10};int temp=0,i,j;

int main(){ for(i=0;i<10;i++) printf(“%d\n”,array[i]); sortArray(array,10); for(i=0;i<10;i++) printf(“%5d”,array[i]); getchar(); return 0;}

void sortArray(int passedArray[ ],int arraySize){ for(i=0;i<arraySize;i++) for(j=0;j<arraySize;j++) { if(passedArray[i]<passedArray[j]) { temp=passedArray[i]; passedArray[i]=passedArray[j]; passedArray[j]=temp; } } }

Calling the function sortArray(array,10) is equivalent to sortArray(&array[0],10)

Page 41: REACH TEST REVIEW

Classes are general models from which you can create objects

Classes have data members either data types or methods

Classes should contain a constructor method and a destructor method

See handout for example of a program that utilizes a class

Page 42: REACH TEST REVIEW

class ClassName{

memberList};

memberList can be either data member declarations or method declarations

Page 43: REACH TEST REVIEW

Class Bow{

//data member declarationsstring color;bool drawn;int numOfArrows;

Bow(string aColor); //constructor~Bow(); //destructor

//methodsvoid draw();int fire();

};

Page 44: REACH TEST REVIEW

Return_type ClassName::methodName(argumentList)

{methodImplementation

}

Page 45: REACH TEST REVIEW

//draws the bowVoid Bow::draw(){

drawn = true;cout<< “The “<<color<<“bow has been drawn.”<<endl;

}

Page 46: REACH TEST REVIEW
Page 47: REACH TEST REVIEW
Page 48: REACH TEST REVIEW
Page 49: REACH TEST REVIEW
Page 50: REACH TEST REVIEW
Page 51: REACH TEST REVIEW

Please enter how long your name is: 21Please enter your name:NawafHello Nawaf

Please enter how long your name is: -7Failed allocation memory

Page 52: REACH TEST REVIEW
Page 53: REACH TEST REVIEW

int *n;int * n1;n=( int * ) calloc(5, sizeof(int)); // Reserves a block of memory for 5 integers

//Decide you need to reallocate more memory later in the program

n1= (int *) realloc(n, 10 * sizeof(int));//allocate 10 integers instead of 5if (n1!=NULL){

n=n1; }else printf("Out of memory!");

realloc() returns null if unable to complete or a pointer to the newly reallocated memory.

Page 54: REACH TEST REVIEW

Function declaration Function definition Function call

Page 55: REACH TEST REVIEW

#include <iostream>using namespace std;

int add(int, int);

int main(void){

int number1, number2;cout << “Enter the first value to be summed:”;cin >> number1;cout << “\nEnter the second:”;

cin >> number2;cout << “\n The sum is: “ << add (number1, number2) <<endl;

}

int add(int a, int b){return a+b;}

Page 56: REACH TEST REVIEW

Write a function, called multiply that multiplies two numbers and returns the result

Page 57: REACH TEST REVIEW

Do you know the syntax for each of these, used to read and write to data files?

Pointers: think of it as the memory address of the file

fopen()

fclose()

fscanf()

fprintf()

Page 58: REACH TEST REVIEW

fopen() returns a FILE pointer back to the pRead variable#include <cstdio>

Main(){ FILE *pRead;

pRead = fopen(“c:\\folder1\\folder2\\file1.dat”, “r”);

if(pRead == NULL) printf(“\nFile cannot be opened\n”);else printf(“\nFile opened for reading\n”);fclose(pRead);

}

Page 59: REACH TEST REVIEW

int main (){ FILE * pFile; char c; pFile=fopen("alphabet.txt","wt"); for (c = 'A' ; c <= 'Z' ; c++) { putc (c , pFile);//works like fprintf } fclose (pFile); return 0;}

Page 60: REACH TEST REVIEW
Page 61: REACH TEST REVIEW

Pretty basic. Always close files when you use fopen.

Page 62: REACH TEST REVIEW

Reads a single field from a data file “%s” will read a series of characters until a white space is found can do

fscanf(pRead, “%s%s”, name, hobby);

Page 63: REACH TEST REVIEW

#include <stdio.h>Main(){ FILE *pRead;

char name[10]; pRead = fopen(“names.dat”, “r”);

if( pRead == NULL ) printf( “\nFile cannot be opened\n”); else printf(“\nContents of names.dat\n”); fscanf( pRead, “%s”, name );

while( !feof(pRead) ) { // While end of file not reached

printf( “%s\n”, name ); // output content of name

fscanf( pRead, “%s”, name ); // scan from file next string

} fclose(pRead);}

Page 64: REACH TEST REVIEW

Kelly 11/12/86 6 LouisvilleAllen 04/05/77 49 AtlantaChelsea 03/30/90 12Charleston

Can you write a program that prints out the contents of this information.dat file?

Page 65: REACH TEST REVIEW

#include <stdio.h>Main(){ FILE *pRead;

char name[10]; char birthdate[9]; float number; char hometown[20];

pRead = fopen(“information.dat”, “r”);

if( pRead == NULL ) printf( “\nFile cannot be opened\n”); else fscanf( pRead, “%s%s%f%s”, name, birthdate, &number,

hometown );

while( !feof(pRead) ) { printf( “%s \t %s \t %f \t %s\n”, name, birthdate, number,

hometown ); fscanf( pRead, “%s%s%f%s”, name, birthdate, &number,

hometown ); }

fclose(pRead);}

Page 66: REACH TEST REVIEW

The fprintf() function sends information (the arguments) according to the specified format to the file indicated by stream. fprintf() works just like printf() as far as the format goes.

Page 67: REACH TEST REVIEW

#include <stdio.h>

Main(){

FILE *pWrite;

char fName[20];char lName [20];float gpa;

pWrite = fopen(“students.dat”,”w”);

if( pWrite == NULL )printf(“\nFile not opened\n”);

elseprintf(“\nEnter first name, last name, and GPA ”);printf(“separated by spaces:”);

scanf(“%s%s%f”, fName, lName, &gpa);fprintf(pWrite, “%s \t %s \t % .2f \n”, fName, lName, gpa);fclose(pWrite);

}

Page 68: REACH TEST REVIEW

Can you write a program that asks the user for their Name Phone Number Bank account balanceAnd then prints this information to a data file called accounts.dat ?

Page 69: REACH TEST REVIEW

Good Luck from REACH in your Test.

Page 70: REACH TEST REVIEW

TEXTBOOK RESOURCE: C Programming for the Absolute Beginner 2nd Edition by Michael Vine

www.cprogramming.com