实验报告工学院土木工程专业09级2011至2012学年度第1学期学号:xxxxxxxxxx姓名:xxxxxxx2011年11月17日第3~4节综合楼325教室进入实验室时间同组者离开实验室时间实验项目名称09:50无11:30实验七函数(一)实验目的:1、熟悉定义函数的方法;2、熟悉声明函数的方法;3、熟悉调用函数时实参与形参的对应关系,以及“值传递”的方式;4、学习对多文件的程序的编译和运行。实验内容编程序并上机调试运行之。(1)写一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息。本程序应当准备一下测试数据:17,34,2,1,0.分别运行检查结果是否正确。要求所编写的程序,主函数的位置在其他函数之前,在主函数中对其所调用的函数作声明。进行以下工作:①输入自己编写的程序,编译和运行程序,分析结果。输入程序如下:#includestdio.hintmain(){intprime(int);intn;printf(Inputaninterger:);scanf(%d,&n);if(prime(n))printf(%disaprime.\n,n);elseprintf(%disnotaprime.\n,n);return0;}intprime(intn){intflag=1,i;for(i=2;in/2&&flag==1;i++)if(n%i==0)flag=0;return(flag);}运行结果如下:②将主函数的函数声明删掉,再进行编译,分析编译结果。删掉后编译过程发现错误,指示主函数中的判别素数的处理函数无法识别。因为C语言规定,在程序中用到的所有函数,必须“先定义,后使用”。③把主函数的位置改为在其他函数之后,在主函数中不含函数声明。运行结果如①。④保留判别素数的函数,修改主函数,要求输出100~200之间的素数。输入程序如下:#includestdio.hintmain(){intprime(int);intn;printf(Thereareprimes:\n,n);for(n=100;n=200;n++)if(prime(n))printf(%d,,n);printf(\n);return0;}intprime(intn){intflag=1,i;for(i=2;in/2&&flag==1;i++)if(n%i==0)flag=0;return(flag);}运行结果如下:(2)写一个函数,将一个字符串中得元音字母复制到另一个字符,然后输出。①输入程序,编译和运行程序,分析结果。输入程序如下:#includestdio.hintmain(){voidcpy(char[],char[]);charstr[80],c[80];printf(Inputstring:);gets(str);cpy(str,c);printf(Thevowellettersare:%s\n,c);return0;}voidcpy(chars[],charc[]){inti,j;for(i=0,j=0;s[i]!='\0';i++)if(s[i]=='a'||s[i]=='A'||s[i]=='e'||s[i]=='E'||s[i]=='i'||s[i]=='I'||s[i]=='o'||s[i]=='O'||s[i]=='u'||s[i]=='U'){c[j]=s[i];j++;}c[j]='\0';}运行结果如下:②分析函数声明中参数的写法。先后用以下两种形式。(a)函数声明中参数的写法与定义函数时的形式完全相同,如:voidcpy(chars[],charc[]);(b)函数声明中参数的写法与定义函数时的形式基本相同,但省略写数组名。如:voidcpy(char[],char[]);分别编译和运行,分析结果。(a)运行结果如下:(b)运行结果如下:两者结果相同。说明函数声明中参数的写法需与定义函数时的写法相同,但可省略数组名。思考型参数组为什么可以不指定数组大小?答:实参向形参的数据传递是单向“值传递”,只能由实参传给形参,而不能由形参传回来给实参。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。③如果随便指定数组大小行不行,如:voidcpy(chars[40],charc[40]);答:可以。因为实参向形参的数据传递是单向“值传递”,只能由实参传给形参,而不能由形参传回来给实参。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。所以形参的存储空间没有实际意义。(3)输入10个学生5门课的成绩,分别用函数实现下列功能:①计算每个学生平均分;②计算每门课的平均分;③找出所有50个分数中最高的分数所对应的学生和课程。输入程序如下:#includestdio.h#defineN10#defineM5floatscore[N][M];floata_stu[N],a_cour[M];intr,c;intmain(){inti,j;floath;floathighest();voidinput_stu(void);voidaver_stu(void);voidaver_cour(void);input_stu();aver_stu();aver_cour();printf(\nNO.cour1cour2cour3cour4cour5aver\n);for(i=0;iN;i++){printf(\nNO%2d,i+1);for(j=0;jM;j++)printf(%8.2f,score[i][j]);printf(%8.2f\n,a_stu[i]);}printf(\naverage:);for(j=0;jM;j++)printf(%8.2f,a_cour[j]);printf(\n);h=highest();printf(highest:%7.2fNO.%2dcoure%2d\n,h,r,c);return0;}voidinput_stu(void){inti,j;for(i=0;iN;i++){printf(\ninputscoreofstudent%2d:\n,i+1);for(j=0;jM;j++)scanf(%f,&score[i][j]);}}voidaver_stu(void){inti,j;floats;for(i=0;iN;i++){for(j=0,s=0;jM;j++)s+=score[i][j];a_stu[i]=s/5.0;}}voidaver_cour(void){inti,j;floats;for(j=0;jM;j++){s=0;for(i=0;iN;i++)s+=score[i][j];a_cour[j]=s/(float)N;}}floathighest(){floathigh;inti,j;high=score[0][0];for(i=0;iN;i++)for(j=0;jM;j++)if(score[i][j]high){high=score[i][j];r=i+1;c=j+1;}return(high);}运行结果如下:(4)用一个函数来实现将一行字符中最长的单词输出。此行字符串从主函数传递给该函数。①把两个函数放在同一个程序文件中,作为一个文件进行编译和运行。②把两个函数分别放在两个程序文件中,作为两个文件进行编译、连接和运行。输入程序如下:#includestdio.h#includestring.hintmain(){intalphabetic(char);intlongest(char[]);inti;charline[100];printf(inputoneline:\n);gets(line);printf(Thelongestwordis:);for(i=longest(line);alphabetic(line[i]);i++)printf(%c,line[i]);printf(\n);return0;}intalphabetic(charc){if((c='a'&&c='z')||(c='A'&&c='z'))return(1);elsereturn(0);}intlongest(charstring[]){intlen=0,i,length=0,flag=1,place=0,point;for(i=0;i=strlen(string);i++)if(alphabetic(string[i]))if(flag){point=i;flag=0;}elselen++;else{flag=1;if(len=length){length=len;place=point;len=0;}}return(place);}若把两个函数分别放在两个程序文件中,则#includestdio.h#includestring.hintmain(){intalphabetic(char);intlongest(char[]);inti;charline[100];printf(inputoneline:\n);gets(line);printf(Thelongestwordis:);for(i=longest(line);alphabetic(line[i]);i++)printf(%c,line[i]);printf(\n);return0;}存入file1;intalphabetic(charc){if((c='a'&&c='z')||(c='A'&&c='z'))return(1);elsereturn(0);}存入file2;intlongest(charstring[]){intlen=0,i,length=0,flag=1,place=0,point;for(i=0;i=strlen(string);i++)if(alphabetic(string[i]))if(flag){point=i;flag=0;}elselen++;else{flag=1;if(len=length){length=len;place=point;len=0;}}return(place);}存入file3.建立一个project文件,然后将file1,file2,file3添加进去。编译、连接和运行的结果和①一致,如下:实验总结:老师批语: