桂 林 理 工 大 学
实 验 报 告
班级 计算机类2 学号320205 姓名 实验名称实验六 函数 日期 2020年 12月7日
一、实验目的:
- 掌握定义函数、声明函数的方法。
- 掌握调用函数时实际参数与形式参数的对应关系,它们之间的“值传递”方式。
- 掌握参数为数组类型的函数。
- 了解全局变量和局部变量的使用。
二、实验环境:
PC + Windows +Visual C++6.0
三、实验内容:
(主要内容的文字及贴图)
- 写一个函数求两个数的最大公约数。
第一种方法:
#include <stdio.h>
int add(int x,int y);
int main()
{
int x,y;
printf("输入任意两个整数:\n");
scanf("%d,%d",&x,&y);
printf("最大公约数=%d",add(x,y));
return 0;
}
int add(int x,int y)
{
int r;
if(x>y)
{
r=x;x=y;y=r;
}
do
{
r=x%y;
x=y;
y=r;
}
while(r!=0);
return(x);
}
第二种方法:
#include <stdio.h>
int add(int x,int y);
int main()
{
int x,y;
printf("输入任意两个整数:\n");
scanf("%d %d",&x,&y);
printf("最大公约数=%d",add(x,y));
return 0;
}
int add(int x,int y)
{
int i;
if(x<y)
{
i=x;x=y;y=i;
}
while(y)//y!=0
{
i=x%y;
x=y;
y=i;
}
return(x);
}
第三种方法:
#include <stdio.h>
int add(int x,int y);
int main()
{
int x,y;
printf("输入任意两个整数:\n");
scanf("%d %d",&x,&y);
printf("最大公约数=%d",add(x,y));
return 0;
}
int add(int x,int y)
{
int i;
if(x<y)
{
i=x;x=y;y=i;
}
for(i=y;i>=1;i--)
if(x%i==0&&y%i==0)break;
return(i);
}
- 1)下面函数实现的功能是求整数n的阶乘值,请将函数体补充完整。
float fac(int n)
{
……
}
1.编写主函数,调用上述函数,输出1—10的阶乘值,输出格式为:
1!=1
2!=2
3!=6
……
#include <stdio.h>
int main()
{
int fac(int n);
int a;
for(a=1;a<10;a++)
printf("%d!=%d\n",a,fac(a));
}
int fac(int n)
{
int s=1,i;
for(i=1;i<=n;i++)
s=s*i;
return s;
}
2.另写一个函数,调用求阶乘函数,求组合数值。,编写主函数,调用求组合数值函数,实现以下功能:输入一个正整数,依次输出该整数的各组合数值。如输入6,则输出为:
C(6,1)=6
C(6,2)=15
……
#include <stdio.h>
int main()
{
int fac(int n);
int c(int n,int m);
int a,n;
scanf("%d",&n);
for(a=1;a<n;a++)
printf("c(%d,%d)=%d\n",n,a,c(n,a));
}
int fac(int n)
{
int s=1,i;
for(i=1;i<=n;i++)
s=s*i;
return s;
}
int c(int n,int m)
{
int z;
z=fac(n)/(fac(n-m)*fac(m));
return z;
}
以下函数实现的功能是,判断整数n是否为质数,如果是,则函数值为1,否则函数值为0。
1)请将函数体补充完整。
int prime(int n)
{
……
}
#include <stdio.h>
int main()
{
int prime (int n);
int n,c;
scanf("%d",&n);
c=prime(n);
printf("%d",c);
return 0;
}
int prime(int n)
{
int i;
for(i=2;i<=n;i++)
{
if(n%i==0)break;
}
if(i<n)//判断是否为本身
{
n=0;
}
else n=1;
return n;
}
- 编写主函数,调用上述函数,输出300之内所有的质数,输出格式为每行输出10个,并统计质数的个数。
#include<stdio.h>
int main()
{
int prime(int n);
int i,k=0;
for(i=2;i<=300;i++)
if(prime(i)==1)
{
k++;
if(k%10==0)
printf("%6d\n",i);
else
printf("%6d",i);
}
return 0;
}
int prime(int n)
{
int i;
for(i=2;i<=n;i++)
{
if(n%i==0)break;
}
if(i<n)//判断是否为本身
{
n=0;//不是质数
}
else n=1;//质数
return n;
}
- 编写一个函数实现求n个数的最小值,主函数中有个n阶方阵,要求求出该方阵每一列最大值中的最小值。思路,先求出每一列的最大值放到一个一位数组中,然后调用函数求n个数的最小值
#include <stdio.h>
#define N 4
int main()
{
int i,j,a[N][N],b[N][N];
int min(int a[],int n);
for(i=0;j<N,i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&a[i][j]);
printf("%4d",a[i][j];
}
printf("\n");
}
for(j=0,j<N;j++)
{
b[j]=a[0][j];
for(i=1;i<N;i++)
if(b[j]<a[i][j])
b[j]=a[i][j];
}
printf("%d",min(b,N));
return 0;
}
int min(int a[],int n)
{
int m,i;
m=a[0];
for(i=1;i<n;i++)
if(a[i]<m)
m=a[i];
return m;
}
5.以下程序输出结果是:g=4,g=3,k=6
7.以下程序输出结果是a=5,b=3
8.下列输出结果是:2 3 5 7
四、心得体会(150字以上):
通过本次实验,熟悉掌握定义函数、声明函数的方法,掌握调用函数时实际参数与形式参数的对应关系,它们之间的“值传递”方式,掌握参数为数组类型的函数,了解全局变量和局部变量的使用。