实验报告-函数

  • 格式:doc
  • 大小:178.00 KB
  • 文档页数:13

深圳大学实验报告课程名称:程序设计基础实验项目名称:函数应用学院:计算机与软件学院专业:指导教师:朱映映报告人:文成学号:2011150259 班级: 5 实验时间:2011-12-12实验报告提交时间:2011-12-25教务处制一、实验目的与要求:实验目的:1.掌握自定义函数的一般结构及定义函数的方法。

2.掌握形参、实参、函数原型等重要概念。

3.掌握函数声明、函数调用的一般方法。

4.掌握递归函数的设计方法。

实验要求:1.输入数据、输出数据应加以说明(交互性);2.程序应注意使用注释语句(可读性);3.对各种可能的输入情况都要考虑处理方案(健壮性);4.养成好的编程风格;5.在Webcc上提交C++源程序或执行文件、输出界面拷屏实验报告。

6.按报告内容要求完成实验报告。

二、实验环境:地点:D506硬件环境:奔四机器编号:软件环境:操作系统WINDOS XPC++语言环境VC 6.0project类型:WIN32 Console Application三、实验内容:1.设计1个递归函数求斐波那契数列的前n项。

斐波那契数列的第1项和第2项的值都为1,以后各项的值为其前两项值之和。

2.设计求完全平方数的函数,其功能是:在3位整数(100—999)中寻找既是完全平方数(某个数的平方),又有两位数字相同的整数,例如144,676等,并依次从小到大存入数组b中,满足该条件的整数个数通过所设计的函数返回。

3.5个学生,4门课,要求主函数分别调用各函数实现:(1)找出成绩最高的学生序号和课程。

(2)找出不及格课程的学生序号及其各门课的全部成绩。

(3)求全部学生各门课程的平均分数,并输出。

4.设计菜单程序,可将所做的习题和上述实验集中在一个程序中。

例如,运行后首先在屏幕显示如下菜单,当输入数值1后,调用素数判断的函数程序;输入数值2后,调用完全平方数的函数程序;输入数值3后,调用求最大公约数的函数程序;输入数值4后,调用Fibonacci数列的递归函数程序;输入数值5后结束程序。

*********************************** Menu section ** 1. 素数判断** 2. 完全平方数** 3. 求最大公约数** 4. 斐波那契数列** 5. Exit ***********************************四、实验步骤与过程:(给出程序分析和算法描述(流程图或文字)、程序核心代码。

) 算法描述写在代码的注释之中(1).#include<iostream.h>long fib(int);//返回斐波那契数列的第n项的值void main(){int n;cout<<"求斐波那契数列的前n项"<<endl<<"请输入数:";//请输入数ncin>>n;for(int i=1;i<=n;i++)//输出斐波那契数列的前n项的值cout<<fib(i)<<" ";cout<<endl;}long fib(int n)//返回斐波那契数列的第n项的值{if(n>2)return fib(n-1)+fib(n-2);elsereturn 1;}(2).#include<iostream.h>int func(int array[])//求完全平方数的函数,并依次赋值给括号中的函数{int a,b,c,j=0,n=0;for(int i=10;i<32;i++){c=(i*i)%10;a=(i*i)/100;b=(i*i)/10-10*a;if(a==b || b==c || a==c)//判断是否有2位数字是一样的{array[j]=i*i;j++;n++;}elsecontinue;}array[j]='\0';return j;//返回值是满足该条件的整数的个数}void main(){int b[30];func(b);//调用求完全平方数的函数for(int i=0;b[i]!='\0';i++)//输出该数组cout<<b[i]<<" ";cout<<endl;cout<<"满足该条件的整数个数是:"<<func(b)<<endl;}(3).#include<iostream.h>int T3_1(int array[]);//找出成绩最高的学生序号void T3_2(int a[],int b[],int c[],int d[]);//找出不及格课程的学生序号及其各门课的全部成绩。

double T3_3(int array[]);//求平均分数void main(){int a[5],b[5],c[5],d[5],i;cout<<"请依次输入这五名学生的科目1成绩"<<endl;//输入科目成绩for(i=0;i<5;i++)cin>>a[i];cout<<"请依次输入这五名学生的科目2成绩"<<endl;for(i=0;i<5;i++)cin>>b[i];cout<<"请依次输入这五名学生的科目3成绩"<<endl;for(i=0;i<5;i++)cin>>c[i];cout<<"请依次输入这五名学生的科目4成绩"<<endl;for(i=0;i<5;i++)cin>>d[i];cout<<"科目1成绩最高的学生是:第"<<T3_1(a)<<"名"<<endl;//(1)找出成绩最高的学生序号和课程。

cout<<"科目1成绩最高的学生是:第"<<T3_1(a)<<"名"<<endl;cout<<"科目1成绩最高的学生是:第"<<T3_1(a)<<"名"<<endl;cout<<"科目1成绩最高的学生是:第"<<T3_1(a)<<"名"<<endl;T3_2(a,b,c,d);//(2)找出不及格课程的学生序号及其各门课的全部成绩。

cout<<"科目1的平均分数为:"<<T3_3(a)<<endl;//(3)求全部学生各门课程的平均分数,并输出。

cout<<"科目2的平均分数为:"<<T3_3(b)<<endl;cout<<"科目3的平均分数为:"<<T3_3(c)<<endl;cout<<"科目4的平均分数为:"<<T3_3(d)<<endl;}int T3_1(int array[])//找出成绩最高的学生序号{for(int i=1,j=1,max=array[0];i<5;i++)if(array[i]>max){max=array[i];j++;}return j;}void T3_2(int a[],int b[],int c[],int d[])//找出不及格课程的学生序号及其各门课的全部成绩。

{for(int i=0;i<4;i++)if (a[i]<60 || b[i]<60 || c[i]<60 || d[i]<60)cout<<"第"<<i+1<<"名学生有不合格的科目,他的成绩依次为:"<<a[i]<<" "<<b[i]<<" "<<c[i]<<" "<<d[i]<<endl;}double T3_3(int array[])//求平均分数{double sum,average;sum=array[0]+array[1]+array[2]+array[3];average=sum/4;return average;}(4).#include<iostream.h>#include<stdlib.h>int prime(int x);//素数判断int func(int array[]);//求完全平方数的函数,并依次赋值给括号中的函数int MaxCommonFactor(int,int);int T3_1(int array[]);//找出成绩最高的学生序号void T3_2(int a[],int b[],int c[],int d[]);//找出不及格课程的学生序号及其各门课的全部成绩。

double T3_3(int array[]);//求平均分数long fib(int);//返回斐波那契数列的第n项的值void main(){cout<<"***********************************"<<endl<<"* Menu section *"<<endl<<"* 1. 素数判断*"<<endl<<"* 2. 完全平方数*"<<endl<<"* 3. 求最大公约数*"<<endl<<"* 4. 斐波那契数列*"<<endl<<"* 5. Exit *"<<endl<<"***********************************"<<endl;//输出菜单供用户选择cout<<"请选择:";int select;cin>>select;switch(select){case 1://素数判断{int x;cout<<"please input a number:";cin>>x;//输入一个数if(prime(x)==1)//判断该数是不是素数cout<<"是素数"<<endl;elsecout<<"不是素数"<<endl;break;}case 2://完全平方数{int b[30];func(b);//调用求完全平方数的函数for(int i=0;b[i]!='\0';i++)//输出该数组cout<<b[i]<<" ";cout<<endl;cout<<"满足该条件的整数个数是:"<<func(b)<<endl;break;}case 3://求最大公约数{int num1,num2;cout<<"请输入2个正整数"<<endl;cin>>num1>>num2;cout<<"它们的最大公约数是:"<<MaxCommonFactor(num1,num2)<<endl;break;}case 4://斐波那契数列{int n;cout<<"求斐波那契数列的前n项"<<endl<<"请输入数:";//请输入数ncin>>n;for(int i=1;i<=n;i++)//输出斐波那契数列的前n项的值cout<<fib(i)<<" ";cout<<endl;}case 5:exit(1);default:cout<<"操作错误"<<endl;//操作错误,自动退出}}int prime(int x)//素数判断{int i;for(i=2;i<x;i++)if(x%i==0)return 0;return 1;}int func(int array[])//求完全平方数的函数,并依次赋值给括号中的函数{int a,b,c,j=0,n=0;for(int i=10;i<32;i++){c=(i*i)%10;a=(i*i)/100;b=(i*i)/10-10*a;if(a==b || b==c || a==c)//判断是否有2位数字是一样的{array[j]=i*i;j++;n++;}elsecontinue;}array[j]='\0';return j;//返回值是满足该条件的整数的个数}int MaxCommonFactor(int a,int b){if(a%b==0)return b;return MaxCommonFactor(b,a%b);}long fib(int n)//返回斐波那契数列的第n项的值{if(n>2)return fib(n-1)+fib(n-2);elsereturn 1;}五、实验结果与数据分析:(有运行结果的界面截图,实验结果与实验结果分析,说明实验结果是否达到要求?并提出对程序的改进想法)。