《函数(一)实验报告.doc》由会员分享,可在线阅读,更多相关《函数(一)实验报告.doc(9页珍藏版)》请在三一办公上搜索。
1、嘉应学院 计算机学院实 验 报 告课程名称程序设计基础实验名称实验地点指导老师实验时间提交时间班 级姓 名座 号一、实验目的和要求1、熟悉定义函数的方法。2、熟悉声明函数的方法。3、熟悉调用函数时实参与形参的对应关系,以及“值传递”的关系。4、学习对多文件的程序编译和运行。二、实验环境和方法实验方法:(一)综合运用课本所学的知识,用不同的算法实现在不同的程序功能。(二)结合指导老师的指导,解决程序中的问题,正确解决实际中存在的异常情况,逐步改善功能。(三)根据实验内容,编译程序。实验环境:Windows xp Visual C+6.0三、实验内容及过程描述实验内容:编译以下题目的程序并调试运行
2、。1、写一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息。本程序应当准备以下实验数据:17,34,2,1,0。分别运行并检查结果是否正确。要求所写的程序,主函数的位置在其它函数之前,在主函数中对其所调用的函数作声明。进行以下工作:输入自己编写的程序,编译和运行程序,分析结果。将主函数的函数声明删掉,再进行编译,分析编译结果。把主函数的位置改在其它函数之后,在主函数中不含函数声明。保留判别素数的函数,修改主函数,要求实现输出100200之间的素数。2、写一个函数,将一个字符串中的元音字母复制到另一字符串,然后输出。输入程序,编译和运行程序,分析结果。分析函数声明中参数的写法。先后用以
3、下两种形式:(a)函数声明中参数的写法与定义函数时的形式完全相同,如:void cpy(char s ,char c );(b)函数声明中参数写法与定义函数时基本相同,但省略写数组名。如:void cpy(char ,char );如果随便指定数组大小行不行,如:void cpy(char s40 ,char40);3、输入10个学生5门课的成绩,分别用函数实现下列功能:计算每个学生平均分;计算每门课的平均分;找出所有50个分数中最高的分数所对应的学生和课程。4、用一个函数来实现将一行字符串中最长的单词输出。此行字符串从主函数传递给该函数。把两个函数放在同一个程序文件中,作为一个文件进行编译和
4、运行。把两个函数分别放在两个程序文件中,作为两个文件进行编译、链接和运行。实验步骤: 进入Visual C+ 6.0集成环境。 输入自己编好的程序。 检查一遍已输入的程序是否有错(包括输入时输错的和编程中的错误),如发现有错,及时改正。 进行编译和连接。如果在编译和连接过程中发现错误,频幕上会出现“报错信息”,根据提示找到出错位置和原因,加以改正。再进行编译,如此反复直到不出错为止。 运行程序并分析运行结果是否合理。在运行是要注意当输入不同的数据时所得结果是否正确,应运行多次,分别检查在不同情况下结果是否正确。以下是各题源代码:#includeint main()int prime(int);
5、int n;printf(请输入一个整数:);scanf(%d,&n);if(prime(n)printf(%d是一个素数。n,n);elseprintf(%d不是一个素数。n,n);return 0;int prime(int n)int flag=1,i;for (i=2;in/2&flag=1;i+)if(n%i=0)flag=0;return(flag);1、写一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息。#includeint main()int prime(int);int n;printf(“100200之间的素数为:”);for(n=100;n=200;n+)i
6、f(prime(n)printf(%d。n,n);return 0;int prime(int n)int flag=1,i;for (i=2;in/2&flag=1;i+)if(n%i=0)flag=0;return(flag);保留判别素数的函数,修改主函数,要求实现输出100200之间的素数。2、写一个函数,将一个字符串中的元音字母复制到另一字符串,然后输出。#includeint main()void cpy(char ,char );char str80,c80;printf(输入字符串:);gets(str);cpy(str,c);printf(元音字母为:%sn,c);retur
7、n 0;void cpy(char s,char c)int i,j;for(i=0,j=0;si!=0;i+)if(si=a|si=A|si=e|si=E|si=i|si=I|si=o|si=O|si=u|si=U)cj=si;j+;cj=0;3、输入10个学生5门课的成绩,分别用函数实现下列功能:计算每个学生平均分;计算每门课的平均分;找出所有50个分数中最高的分数所对应的学生和课程。#include #define N 10#define M 5float scoreNM;float a_stuN,a_courM;int r,c;int main() int i,j; float h;
8、float s_var(void); float highest(); void input_stu(void); void aver_stu(void); void aver_cour(void); input_stu(); aver_stu(); aver_cour(); printf(n NO. cour1 cour2 cour3 cour4 cour5 avern); for(i=0;iN;i+) printf(n NO %2d ,i+1); for(j=0;jM;j+) printf(%8.2f,scoreij); printf(%8.2fn,a_stui); printf(n平均分
9、:); for (j=0;jM;j+) printf(%8.2f,a_courj); printf(n); h=highest(); printf(最高分:%7.2f NO. %2d course %2dn,h,r,c); printf(方差: %8.2fn,s_var(); return 0;void input_stu(void) int i,j; for (i=0;iN;i+) printf(n请输入学生%2d的成绩:n,i+1); for (j=0;jM;j+) scanf(%f,&scoreij); void aver_stu(void) int i,j; float s; for
10、(i=0;iN;i+) for (j=0,s=0;jM;j+) s+=scoreij; a_stui=s/5.0; void aver_cour(void) int i,j; float s; for (j=0;jM;j+) s=0; for (i=0;iN;i+) s+=scoreij; a_courj=s/(float)N; float highest() float high; int i,j; high=score00; for (i=0;iN;i+) for (j=0;jhigh)high=scoreij; r=i+1; c=j+1; return(high); float s_va
11、r(void) int i; float sumx,sumxn; sumx=0.0; sumxn=0.0; for (i=0;iN;i+) sumx+=a_stui*a_stui; sumxn+=a_stui; return(sumx/N-(sumxn/N)*(sumxn/N); printf(n NO %2d ,i+1); for(j=0;jM;j+) printf(%8.2f,scoreij); printf(%8.2fn,a_stui); printf(n平均分:); for (j=0;jM;j+) printf(%8.2f,a_courj); printf(n); h=highest(
12、); printf(最高分:%7.2f NO. %2d course %2dn,h,r,c); printf(方差: %8.2fn,s_var(); return 0;void input_stu(void) int i,j; for (i=0;iN;i+) printf(n请输入学生%2d的成绩:n,i+1); for (j=0;jM;j+) scanf(%f,&scoreij); void aver_stu(void) int i,j; float s; for (i=0;iN;i+) for (j=0,s=0;jM;j+) s+=scoreij; a_stui=s/5.0; void a
13、ver_cour(void) int i,j; float s; for (j=0;jM;j+) s=0; for (i=0;iN;i+) s+=scoreij; a_courj=s/(float)N; float highest() float high; int i,j; high=score00; for (i=0;iN;i+) for (j=0;jhigh)high=scoreij; r=i+1; c=j+1; return(high); float s_var(void) int i; float sumx,sumxn; sumx=0.0; sumxn=0.0; for (i=0;i
14、N;i+) sumx+=a_stui*a_stui; sumxn+=a_stui; return(sumx/N-(sumxn/N)*(sumxn/N); float highest() float high; int i,j; high=score00; for (i=0;iN;i+) for (j=0;jhigh)high=scoreij; r=i+1; c=j+1; return(high); float s_var(void) int i; float sumx,sumxn; sumx=0.0; sumxn=0.0; for (i=0;iN;i+) sumx+=a_stui*a_stui
15、; sumxn+=a_stui; return(sumx/N-(sumxn/N)*(sumxn/N); #include #include int main()int alphabetic(char); int longest(char ); int i; char line100; printf(请输入一行英文:n); gets(line); printf(最长的单词是 :); for (i=longest(line);alphabetic(linei);i+) printf(%c,linei); printf(n); return 0;int alphabetic(char c)if (c
16、=a & c=A&c=z) return(1); else return(0);int longest(char string)int len=0,i,length=0,flag=1,place=0,point; for (i=0;i=length)length=len; place=point; len=0; return(place);4、用一个函数来实现将一行字符串中最长的单词输出。此行字符串从主函数传递给该函数。int alphabetic(char c)if (c=a & c=A&c=z) return(1); else return(0);int longest(char stri
17、ng)int len=0,i,length=0,flag=1,place=0,point; for (i=0;i=length)length=len; place=point; len=0; return(place);四、实验结果:1、输入以下测试数据:17,34,2,1,0.的结果为:将主函数函数声明删掉,再进行编译:编译时出现错误, 所以,在调用函数前,必须先定义函数,并进行声明。把主函数的位置改在其它函数之后,在主函数中不含函数声明。编译时出现错误主函数必须在其它函数之前由系统调用,其它函数由主函数调用。保留判别素数的函数,修改主函数,要求实现输出100200之间的素数。2、运行结果:
18、分析函数声明中参数的写法。先后用以下两种形式:(a)函数声明中参数的写法与定义函数时的形式完全相同,如:void cpy(char s ,char c );(b)函数声明中参数写法与定义函数时基本相同,但省略写数组名。如:void cpy(char ,char );两种方法运行结果相同。在函数声明中的形参名可以省写,而致谢形参的类型。编译系统只关心和检查参数个数和参数类型,而不检查参数名,因为在调用函数时只要求保证实参类型与形参类型一致,而不必考虑形参名是什么。因此在将函数声明中,形参名可写可不写、形参民是什么都无所谓。如果随便指定数组大小行不行,如:void cpy(char s40 ,char40);形参数组中数组大小是不指定的,指定被调函数中形参数组的大小是不起任何作用的,因为C编译器对形参数组大小不做检查,只是将形参数组的首地址传给形参数组。形参数组也可以不指定大小,定义数组时在数组名后跟一个空的中括号,为了在被调函数中处理数组元素的需要,可以另设一个参数,传递数组元素的个数3、运行结果:以下是10个学生的5门课成绩:以下是输出结果:4、运行结果为: