资源描述:
《c语言高级教程第四章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、李堂秋厦门大学计算机科学编写C与C++程序设计第四章函数和程序结构前言使用函数,可以把大的计算任务分解,换句话说,可以使用许多函数的组合来完成复杂的任务。而且在C中,并非所有的函数都要自己定义,可以使用别人已做好的程序模块。在设计主函数的时候,可以将不必要的细节蕴藏起来,以便更容易把握主线和全局。如果程序太大,还可以将C语言写的程序分放多个文件,分别编译,最后再联接起来成为整体。4.1函数的基础看看我们如何编一个程序,首先要明确我们要做什么事请,比如要读一个文件,找出所有包含某一字符串的行并把它打印出来。思路:while(读入一个新行
2、)if(如果这个新行包含指定的字符串)打印这个新行读入一个新行打印这一行判断这一行是否指定的字符串函数的基础(续)<返回值的类型><函数名>(<变量定义表>){<定义与说明><可执行语句>}除了<函数名>和()、{}其他都可以省略,如:dummy(){};数据传入数据通过return<表达式>;传回给调用函数#include#defineMAXLINE1000intgetline(charline[],intmax);intstrindex(charsource[],charsearchfor[]);char
3、pattern[]=“ould”;/*patterntosearchfor*//*findalllinesmatchingpattern*/main(){charline[MAXLINE];intfound=0;while(getline(line,MAXLINE)>0)if(strindex(line,pattern)>=0){printf(“%s”,line);found++;}returnfound;}主函数/*getline:getlineintos,returnlength*/intgetline(char
4、s[],intlim){intc,i;i=0;while(--lim>0&&(c=getchar())!=EOF&&c!=‘’)s[i++]=c;if(c==‘’)s[i++]=c;s[i]=‘ ’;returni;}/*strindex:returnindexoftins,-1ifnone*/intstrindex(chars[],chart[]){inti,j,k;for(i=0;s[i]!=‘ ’;i++){for(j=i,k=0;t[k]!=‘ ’&&s[j]==t[k];j++,k++)
5、;if(k>0&&t[k]==‘ ’)returni;}return-1;}子函数4.2返回非整数的函数在使用返回值不是整数的函数时,正确地进行函数的定义和函数说明十分重要。函数定义时一定要说明返回值类型,否则缺省为整数。为了使调用函数知道被调用函数的类型,函数调用前一定要进行原形说明,否则,如果函数定义的类型与调用类型出现不一致:如果调用和被调用函数在同一个文件中定义,编译器会提出警告,这是实行原型说明的好处。如果不在一个文件中定义,编译器不会发现问题,即:在调用前没有原型说明的函数,被理解为返回整数,而对它的变元毫无假定
6、。函数原型说明中没有给出变量说明的,编译器对变元不做任何检查。子函数-把字符串转换成浮点数#include/*atof:convertstringstodouble*/doubleatof(chars[]){doubleval,power;inti,sign;for(i=0;isspace(s[i]);i++)/*skipleadingspaces*/;sign=(s[i]==‘-’)?-1:1;if(s[i]==‘+’
7、
8、s[i]==‘-’)i++;for(val=0.0;isdigit(s[i])
9、;i++)val=10*val+(s[i]-‘0’);if(s[i]=‘.’){i++;for(power=1.0;isdigit(s[i]);i++){val=10*val+(s[i]-‘0’);power*=10.0;}}returnsign*val/power;}主函数-读入数字并把它们累加起来#include#defineMAXLINE100/*arudimentarycalculator*/main(){doublesum,atof(char[]);charline[MAXLINE];
10、intgetline(charline[],intmax);sum=0;while(getline(line,MAXLINE)>0)printf(“t%g”,sum+=atof(line));re