1ModulesCS217TheCProgrammingLanguage• SystemsprogramminglanguageoriginallyusedtowriteUnixandUnixtoolsdatatypesandcontrolstructuresclosetomostmachinesnowalsoapopularapplicationprogramminglanguage• Notablefeaturesallfunctionsarecall-by-valuepointer(address)arithmeticsimplescopestructureI/Oandmemorymgmtfacilitiesprovidedbylibraries• HistoryBCPL B C K&RC ANSIC19601970197219781988LISP Smalltalk C++ Java2ExampleProgram1#include<stdio.h>#include<string.h>int main(){char*strings[128];charstring[256];char*p1,*p2;intnstrings;int found;int i,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;}}if(found)break;}for(j= nstrings;j>i;j--)strings[j]=strings[j-1];strings[i]= strdup(string);nstrings++;if(nstrings >=128)break;}for(i=0;i< nstrings;i++)fprintf(stdout,"%s",strings[i]);return0;}Whatdoesthisprogramdo?Whatdoesthisprogramdo?ExampleProgram2#include<stdio.h>#include<string.h>#defineMAX_STRINGS128#defineMAX_STRING_LENGTH256void ReadStrings(char**strings, int *nstrings,intmaxstrings,FILE*fp){charstring[MAX_STRING_LENGTH];*nstrings =0;while(fgets(string,MAX_STRING_LENGTH,fp)){strings[(*nstrings)++]= strdup(string);if(*nstrings >= maxstrings)break;}}void WriteStrings(char**strings, intnstrings,FILE*fp){int i;for(i=0;i< nstrings;i++)fprintf(fp,"%s",strings[i]);}intCompareStrings(char*string1,char*string2){char*p1=string1;char*p2=string2;while(*p1&&*p2){if(*p1<*p2)return-1;elseif(*p1>*p2)return1;p1++;p2++;}return0;}Whatdoesthisprogramdo?Whatdoesthisprogramdo?void SortStrings(char**strings, intnstrings){int i,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;}}}}int main(){char*strings[MAX_STRINGS];intnstrings;ReadStrings(strings,&nstrings,MAX_STRINGS,stdin);SortStrings(strings, nstrings);WriteStrings(strings,nstrings,stdout);return0;}3Modularity• DecomposeexecutionintomodulesReadstringsSortstringsWritestrings• InterfaceshidedetailsLocalizeeffectofchanges• Whyisthisbetter?EasiertounderstandEasiertotestanddebugEasiertoreusecodeEasiertomakechangesint main(){char*strings[MAX_STRINGS];intnstrings;ReadStrings(strings,&nstrings,MAX_STRINGS,stdin);SortStrings(strings, nstrings);WriteStrings(strings,nstrings,stdout);return0;}Modularity• DecomposeexecutionintomodulesReadstringsSortstringsWritestrings• InterfaceshidedetailsLocalizeeffectofchanges• Whyisthisbetter?EasiertounderstandEasiertotestanddebugEasiertoreusecodeEasiertomakechangesint main(){char*strings[MAX_STRINGS];intnstrings;ReadStrings(strings,&nstrings,MAX_STRINGS,stdout);WriteStrings(strings,nstrings,stdout);SortStrings(strings, nstrings);WriteStrings(strings,nstrings,stdout);return0;}4Modularity• DecomposeexecutionintomodulesReadstringsSortstringsWritestrings• InterfaceshidedetailsLocalizeeffectofchanges• Whyisthisbetter?EasiertounderstandEasiertotestanddebugEasiertoreusecodeEasiertomakechangesMergeFiles(FILE*fp1,FILE*fp2){char*strings[MAX_STRINGS];int nstrings;ReadStrings(strings,&nstrings,MAX_STRINGS,fp1);WriteStrings(strings,nstrings,stdout);ReadStrings(strings,&nstrings,MAX_STRINGS,fp2);WriteStrings(strings,nstrings,stdout);}Modularity• DecomposeexecutionintomodulesReadstringsSortstringsWritestrings• InterfaceshidedetailsLocalizeeffectofchanges• Whyisthisbetter?EasiertounderstandEasiertotestanddebugEasiertoreusecodeEasiertomakechangesintCompareStrings(char*string1,char*string2){char*p1=string1;char*p2=string2;while(*p1&&*p2){if(*p1<*p2)return-1;elseif(*p1>*p2)return1;p1++;p2++;}return0;}C S 2 1 7 0string1I S F U NC S 2 1 7 0string2R O C K S5Modularity• DecomposeexecutionintomodulesReadstringsSortstringsWritestrings• InterfaceshidedetailsLocalizeeffectofchanges• Whyisthisbetter?EasiertounderstandEasiertotestanddebugEasiertoreusecodeEasiertomakechangesintStringLength(char*string){char*p=string;while(*p)p++;returnp- string;}intCompareStrings(char*string1,char*string2){returnStringLength(string1)-StringLength(string2);}C S 2 1 7 0string1I S F U NC S 2 1 7 0string2R O C K SSeparateCompilation• MovestringarrayintoseparatefileDeclareinterfacein stringarray.hProvideimplementationin stringarray.cAllowsre-usebyotherprogramsexternvoidReadStrings(char**strings, int *nstrings,intmaxstrings,FILE*fp);externvoidWriteStrings(char**strings, intnstrings,FILE*fp);externvoidSortStrings(char**strings, intnstrings);extern intCompareStrings(char*string1,char*string2);stringarray.h6SeparateCompilation(2)stringarray.c#include<stdio.h>#include<string.h>#defineMAX_STRING_LENGTH256voidReadStrings(FILE*fp,char**strings,int *nstrings,
View Full Document