第五章 函数学习要求和实验
- 学习要求:
理解函数定义的意义。
掌握函数定义格式。
了解函数调用方式:值调用和引用调用。
掌握函数嵌套调用方法。
掌握数组作为函数的参数的使用。
理解全局变量、局部变量,动态变量、静态变量的概念,掌握不同变量的作用域与生命周期。
进一步积累程序调试经验。- 实验作业
1.调试分析课本每一个例题,有可能的话更改成2-3个方法的新程序;
2.编程实现课本每一个编程习题。
3. 编程实现输入两个4X5矩阵和5X3矩阵,定义函数并在主函数中调用计算它们的积。
4.编程计算S[n]=1!+21+3!+...n!。要求定义两个函数,一个计算n!,一个计算s[n],在后一个函数中调用前一个函数。然后在主程序中输入数n的值,然后调用定义函数输出结果。
5.编写一个函数,输入一个十六进制数,输出相应的十进制数。
例题1:
#include<iostream>
using namespace std;
double p(double);
int main()
{
double s = p(5.0);
cout<<"面积为"<<s<<endl;
return 0;
}
double p(double r)
{
double pi =3.14;
double s =pi *r*r;
return s; }
4
#include<iostream>
using namespace std;
int sum(int x,int y)
{
int t;t=x+y;
return t;}
int main()
{
int a,b,c;
a=15,b=20;
c=sum(a,b);
cout<<a<<"+"<<b<<"="<<c<<endl;
return 0;
}
例题2:
#include<iostream>
using namespace std;
int f(int);
int main()
{
int i,k;
cout<<"输入一个非负整数:";
cin>>k;
for(i=1;i<=k;i++)
cout<<i<<"!="<<f(i)<<endl;
return 0;}
int f(int n)
{
static int f=1;f=f*n;
return f;
}
例题3:
#include<iostream>
using namespace std;
int p(int x)
{ x=x*x;
return x;}
int main()
{int t=10;int s=p(t);
cout<<"t="<<t<<'\t'<<"p("<<t<<")="<<s<<endl;
return 0;
}
例题4:
#include<iostream>
using namespace std;
void sort(int);
void echoa();
nt a[5] ={6,3,9,8,2};
int main()
{
echoa();
sort(5);
echoa();
return 0;
}
void echoa()
{
for(int i =0;i<5;i++)
cout<<a[i]<<'\t';
cout<<endl;
}
void sort(int n)
{
int i,j,min,temp;
for(i =0;i<n-1;i++)
{
min =i;
for(j=i+1;j<n;j++)
if(a[j]<a[min])
min = j;
temp = a[i];a[i]=a[min];a[min]=temp;
} }
例题5:
#include<iostream>
using namespace std;
float F(int n);
int main()
{
int a;
float p;
cout<<"input an integer number:";
cin>>a;
p =F(a);
cout<<a<<"! ="<<p<<endl;
return 0;
}
float F(int n)
{
float fact;
if(n == 0)
fact = 1;
else
fact = n * F(n-1);
return fact;
}
例题6:
#include<iostream>
using namespace std;
long f2(int);
long f1(int p)
{
int k;
long r;
k=p*p;
r= f2(k);
return r;
}
long f2(int q)
{
long fact = 1;
for(int i =1;i<=q;i++)
fact *= i;
return fact;
}
int main()
{
int i;
long sum =0;
for(i =2; i<=3;i++)
sum += f1(i);
cout<<"sum = "<<sum<<endl;
return 0;
}
第三题:
#include "stdafx.h"
#include<iostream>
#include<iomanip>
using namespace std;
void juz(float A[4][5],float B[5][3])
{
int i,j,k;
float c[4][3]={0},t=0;
for(i=0;i<4;i++)
for(j=0;j<3;j++)
for(k=0;k<5;k++)
{
t=A[i][k]*B[k][j];
c[i][j]+=t;
}
cout<<"这两个矩阵的乘积为:"<<endl;
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
cout<<setw(8)<<setprecision(5)<<c[i][j];
cout<<endl;
}
}
int main()
{
float A[4][5],B[5][3];
int i,k;
cout<<"请输入第一个矩阵的元素"<<endl;
for(i=0;i<4;i++)
for(k=0;k<5;k++)
cin>>A[i][k];
cout<<"请输入第二个矩阵的元素"<<endl;
for(i=0;i<5;i++)
for(k=0;k<3;k++)
cin>>B[i][k];
juz(A,B);
return 0;
}
第四题:
// unit5_2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
int jiec(int a)
{
int b=1;
while(a>=1)
{b*=a;a--;}
return b;
}
int SN(int a)
{
int b,S=0;
for(b=1;b<=a;b++)
S+=jiec(b);
return S;
}
int _tmain(int argc, _TCHAR* argv[])
{
int n,Sn;
cout<<"请输入一个正整数"<<endl;
cin>>n;
Sn=SN(n);
cout<<"该数列的前"<<n<<"项和为:"<<Sn<<endl;
return 0;
}
第五题:
#include "stdafx.h"
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
void zhuan10(int a)
{
int b=0,c=0,t;
while(a>0)
{
t=pow(16,c);
b+=(a%16)*t;
a/=16;
c++;
}
cout<<"该十六进制数转化的十进制数为:"<<b<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
int a;
cout<<"请输入一个十六进制数"<<endl;
cin>>hex>>a;
zhuan10(a);
return 0;
}