/
1ModulesCS 217The C Programming Language 1ModulesCS 217The C Programming Language

1ModulesCS 217The C Programming Language - PDF document

alexa-scheidler
alexa-scheidler . @alexa-scheidler
Follow
397 views
Uploaded On 2016-01-19

1ModulesCS 217The C Programming Language - PPT Presentation

2Example Program 1include stdiohinclude stringhintmainchar strings128char string256char p1 p2int nstringsintfoundinti jnstrings 0while fgetsstring 256stdin for i 0 ID: 222395

2Example Program 1#include stdio.h#include string.hintmain(){char

Share:

Link:

Embed:

Download Presentation from below link

Download Pdf The PPT/PDF document "1ModulesCS 217The C Programming Language" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

1ModulesCS 217The C Programming Language•Systems programming languageoriginally used to write Unix and Unix toolsdata types and control structures close to most machinesnow also a popular application programming language•Notable featuresall functions are call-by-valuepointer (address) arithmeticsimple scope structureI/O and memory mgmt facilities provided by libraries•HistoryBCPL àB àC àK&R C àANSI C1960 1970 1972 1978 1988LISP àSmalltalk àC++ àJava 2Example Program 1#include stdio.h�#include string.h�intmain(){char *strings[128];char string[256];char *p1, *p2;int nstrings;intfound;inti, j;nstrings= 0;while (fgets(string, 256,stdin)) {for (i = 0; i nstrings; i++) {found = 1;for (p1 = string, p2 = strings[i]; *p1 && *p2; p1++, p2++){if (*p1 � *p2) {found = 0;break;}}f (found) break;}or (j =nstrings; j � i; j--)strings[j] = strings[j-1];strings[i] =strdup(string);nstrings++;if (nstrings�= 128) break;}or (i = 0; i nstrings; i++)fprintf(stdout, "%s", strings[i]);return 0;}What does this program do?What does this program do?Example Program 2#include stdio.h�#include string.h�#define MAX_STRINGS 128#define MAX_STRING_LENGTH 256voidReadStrings(char **strings,int*nstrings, int maxstrings, FILE *fp){char string[MAX_STRING_LENGTH];*nstrings= 0;while (fgets(string, MAX_STRING_LENGTH, fp)) {strings[(*nstrings)++] =strdup(string);if (*nstrings�=maxstrings) break;}}oidWriteStrings(char **strings,int nstrings, FILE *fp){inti;for (i = 0; i nstrings; i++)fprintf(fp, "%s", strings[i]);}nt CompareStrings(char *string1, char *string2){char *p1 = string1;char *p2 = string2;while (*p1 && *p2) {if (*p1 *p2) return -1;else if (*p1 � *p2) return 1;p1++; p2++;}eturn 0;}What does this program do?What does this program do?voidSortStrings(char **strings,int nstrings){inti, j;for (i = 0; i nstrings; i++) {for (j = i+1; j nstrings; j++) {if (CompareStrings(strings[i], strings[j]) � 0) {char *swap = strings[i];strings[i] = strings[j];strings[j] = swap;}}}}ntmain(){char *strings[MAX_STRINGS];int nstrings;ReadStrings(strings, &nstrings, MAX_STRINGS, stdin);SortStrings(strings,nstrings);WriteStrings(strings, nstrings, stdout);return 0;} 3Modularity•Decompose execution into modulesRead stringsSort strings Write strings•Interfaces hide detailsLocalize effect of changes•Why is this better?Easier to understandEasier to test and debugEasier to reuse codeEasier to make changesintmain(){char *strings[MAX_STRINGS];int nstrings;ReadStrings(strings, &nstrings, MAX_STRINGS, stdin);SortStrings(strings,nstrings);WriteStrings(strings, nstrings, stdout);return 0;}Modularity•Decompose execution into modulesRead stringsSort strings Write strings•Interfaces hide detailsLocalize effect of changes •Why is this better?Easier to understandEasier to test and debugEasier to reuse codeEasier to make changesintmain(){char *strings[MAX_STRINGS];int nstrings;ReadStrings(strings, &nstrings, MAX_STRINGS, stdout);WriteStrings(strings, nstrings, stdout);SortStrings(strings,nstrings);WriteStrings(strings, nstrings, stdout);return 0;} 4Modularity•Decompose execution into modulesRead stringsSort strings Write strings•Interfaces hide detailsLocalize effect of changes •Why is this better?Easier to understandEasier to test and debugEasier to reuse codeEasier to make changesMergeFiles(FILE *fp1, FILE *fp2){char *strings[MAX_STRINGS];intnstrings;ReadStrings(strings, &nstrings, MAX_STRINGS, fp1);WriteStrings(strings, nstrings, stdout);ReadStrings(strings, &nstrings, MAX_STRINGS, fp2);WriteStrings(strings, nstrings, stdout);}Modularity•Decompose execution into modulesRead stringsSort strings Write strings•Interfaces hide detailsLocalize effect of changes •Why is this better?Easier to understandEasier to test and debugEasier to reuse codeEasier to make changesint CompareStrings(char *string1, char *string2){char *p1 = string1;char *p2 = string2;while (*p1 && *p2) {if (*p1 *p2) return -1;else if (*p1 � *p2) return 1;p1++; p2++;}eturn 0;}CS2170string1ISFUNCS2170string2ROCKS 5Modularity•Decompose execution into modulesRead stringsSort strings Write strings•Interfaces hide detailsLocalize effect of changes •Why is this better?Easier to understandEasier to test and debugEasier to reuse codeEasier to make changesint StringLength(char *string){char *p = string;while (*p) p++;return p -string;}nt CompareStrings(char *string1, char *string2){return StringLength(string1) -StringLength(string2);}CS2170string1ISFUNCS2170string2ROCKSSeparate Compilation•Move string array into separate fileDeclare interface instringarray.hProvide implementation instringarray.cAllows re-use by other programsextern void ReadStrings(char **strings,int*nstrings, int maxstrings, FILE *fp);extern void WriteStrings(char **strings,int nstrings, FILE *fp);extern void SortStrings(char **strings,int nstrings);externint CompareStrings(char *string1, char *string2);stringarray.h 6Separate Compilation (2)stringarray.c#include stdio.h�#include string.h�#define MAX_STRING_LENGTH 256voidReadStrings(FILE *fp, char **strings, int*nstrings,int maxstrings){char string[MAX_STRING_LENGTH];*nstrings= 0;while (fgets(string, MAX_STRING_LENGTH,fp)) {strings[(*nstrings)++] =strdup(string);if (*nstrings�=maxstrings) break;}}oidWriteStrings(FILE *fp, char **strings,int nstrings){inti;for (i = 0; i nstrings; i++)fprintf(fp, "%s", strings[i]);}int CompareStrings(char *string1, char *string2){char *p1, *p2;for (p1 = string1, p2 = string2; *p1 && *p2; p1++, p2++) {if (*p1 *p2) return -1;else if (*p1 � *p2) return 1;}eturn 0;}oid SortStrings(char **strings,int nstrings){inti, j;for (i = 0; i nstrings; i++) {for (j = i+1; j nstrings; j++) {if (CompareStrings(strings[i], strings[j]) � 0) {char *swap = strings[i];strings[i] = strings[j];strings[j] = swap;}}}}Separate Compilation (3)#include “stringarray.h”#define MAX_STRINGS 128intmain(){char *strings[MAX_STRINGS];int nstrings;ReadStrings(strings, &nstrings, MAX_STRINGS, stdin);SortStrings(strings,nstrings);WriteStrings(strings, nstrings, stdout);return 0;}sort.c 7Separate Compilation (4)sort: sort.o stringarray.acc -o sort sort.o stringarray.asort.o: sort.c stringarray.hcc -c sort.cstringarray.a:stringarray.ccc -c stringarray.car ur stringarray.astringarray.o clean:rmsort sort.osortarray.a sortarray.oMakefileStructures#include stdio.h�#include “stringarray.h”intmain(){struct StringArray*stringarray= malloc(sizeof(struct StringArray) );stringarray-�nstrings = 0;ReadStrings(stringarray, stdin);SortStrings(stringarray);WriteStrings(stringarray, stdout);free(stringarray);return 0;}#define MAX_STRINGS 128struct StringArray {char *strings[MAX_STRINGS];int nstrings;};extern void ReadStrings(structStringArray*stringarray, FILE *fp);extern void WriteStrings(struct StringArray*stringarray, FILE *fp);extern voidSortStrings(struct StringArray*stringarray);sort.cstringarray.h 8Typedef#include stdio.h�#include “stringarray.h”intmain(){StringArray_Tstringarray= malloc(sizeof(struct StringArray) );stringarray-�nstrings = 0;ReadStrings(stringarray, stdin);SortStrings(stringarray);WriteStrings(stringarray, stdout);free(stringarray);return 0;}#define MAX_STRINGS 128typedefstruct StringArray {char *strings[MAX_STRINGS];int nstrings;} *StringArray_T;extern void ReadStrings(StringArray_Tstringarray, FILE *fp);extern void WriteStrings(StringArray_Tstringarray, FILE *fp);extern voidSortStrings(StringArray_Tstringarray);sort.cstringarray.hOpaque Pointers#include stdio.h�#include “stringarray.h”intmain(){StringArray_Tstringarray= NewStrings();ReadStrings(stringarray,stdin);SortStrings(stringarray);WriteStrings(stringarray, stdout);FreeStrings(stringarray);return 0;}typedef struct StringArray*StringArray_T;externStringArray_TNewStrings(void);extern void FreeStrings(StringArray_T stringarray);extern voidReadStrings(StringArray_Tstringarray, FILE *fp);extern void WriteStrings(StringArray_Tstringarray, FILE *fp);extern voidSortStrings(StringArray_Tstringarray);sort.cstringarray.h 9Abstract Data Types•Module supporting operations on single data structureInterface declares operations, not data structureImplementation is hidden from client (encapsulation)Use features of programming language to ensure encapsulation•Common practiceAllocation and deallocationof data structure handled by moduleNames of functions and variables begin with modulename�_Provide as much generality/flexibility in interface as possibleUse void pointers to allow polymorphismExample ADT -Interface#ifndefARRAY_H#define ARRAY_Htypedef struct Array *Array_T;extern Array_T Array_new(void);extern void Array_free(Array_T array);extern void Array_insert(Array_T array, void *datap);extern void Array_remove(Array_T array, void *datap);extern intArray_getLength(Array_T array);extern void *Array_getKth(Array_T array, intk);#endifarray.h 10Example ADT -Client 1#include “array.h”#include stdio.h�intmain(){Array_T array;inti;array = Array_new();Array_insert(array, (void *) “CS217”);Array_insert(array, (void *) “IS”);Array_insert(array, (void *) “FUN”);for (i = 0; i Array_getLength(array); i++) {char *str = (char *) Array_getKth(array, i);printf(str);}rray_free(array);return 0;}string_client.cExample ADT -Client 2#include “array.h”#include stdio.h�intmain(){Array_T array;intone=1, two=2, three=3, i;array = Array_new();Array_insert(array, (void *) &one);Array_insert(array, (void *) &two);Array_insert(array, (void *) &three);for (i = 0; i Array_getLength(array); i++) {int*datap= (int*) Array_getKth(array, i);printf(“%d “, *datap);}rray_free(array);return 0;}int_client.c 11Example ADT -Implementation#include “array.h”#define MAX_ELEMENTS 128struct Array {void *elements[MAX_ELEMENTS];int num_elements;};Array_T Array_new(void){Array_T array =malloc(sizeof(struct Array));array-�num_elements = 0;return array;}oid Array_free(Array_T array){free(array);}array.c (1 of 3)Example ADT -Implementationvoid Array_insert(Array_T array, void *datap){intindex = array-�num_elements;array-�elements[index] = datap;array-�num_elements++;}ntArray_getLength(Array_T array){return array-�num_elements;}oid *Array_getKth(Array_T array, int k){return array-�elements[k];}array.c (2 of 3) 12Example ADT -Implementationvoid Array_remove(Array_T array, void *datap){intindex, i;for (index = 0; index array-�num_elements; index++) if (array-�elements[index] ==datap) break;if (index array-�num_elements) {for (i = index+1; i array-�num_elements; i++) array-�elements[i-1] = array-�elements[i];array-�num_elements--;}}array.c (3 of 3)Summary•Modularity is key to good softwareDecompose program into modulesProvide clear and flexible interfaces•Abstract Data TypesModules supporting operations on data structureWell-designed interfaces hide implementations, but provide flexibility•AdvantagesSeparate compilationEasier to understandEasier to test and debugEasier to reuse codeEasier to make changes