C语言 实验六 函数
一、实验目的
1.掌握函数定义与调用的方法。
2.掌握实参和形参的对应关系以及函数调用时的数据传递方式。
3.了解函数的嵌套调用和递归调用。
4.掌握局部变量、全局变量、自动变量和静态局部变量的使用方法。
二、实验学时
4 学时
三、实验内容
1.编一函数 void print(int x),功能是输出下列图形
行数由形参 x 来确定
在主函数中输入 x 的值,调用函数 print 来输出图形。
2. 编写一函数计算
y=(a-b)/(a+b)
的值。在主函数中输入 a 和 b 的值、输出 y 的值。
3. 编写两个函数分别求两个正整数的最大公约数和最小公倍数。在主函数中输
入两个正整数 m 和 n 的值、输出 m 和 n 的最大公约数和最小公倍数。
4.编写函数 int fac ( int x )计算 x!的值。在主函数中输入 n 和 m 的值,通
过调用函数 fac 计算
Cnm
的值(要求分别用递归和非递归的方法编写函数 fac)。
5.编写一个判别素数的函数 int ftss(int x),在主函数输入一个整数,调用 int
ftss(int x)输出是否素数信息。本程序应当准备以下测试数据:17、34、2、1、0。
分别输入数据,运行程序并检查结果是否正确。
6.用递归法将一个整数 n 转换成字符串。例如,输入 483,应输出字符串“483”,
N 的位数不确定,可以是任意的整数。
程序代码如下:
1.
①正三角
#include<stdio.h>
void print(int x)
{
int i,m,n;
for(i=1;i<=x;i++)
{
for(n=1;n<=x-i;n++)
{
printf(" ");
}
for(m=1;m<=2*i-1;m++)
{
printf("*");
}
printf("\n");
}
}
int main(void)
{
int x;
printf("请输入行数x:");
scanf("%d",&x);
print(x);
}
②倒三角
#include<stdio.h>
void print(int x)
{
int i,m,n;
for(i=1;i<=x;i++)
{
for(m=1;m<=i;m++)
{
printf(" ");
}
for(n=1;n<=2*x+1-2*i;n++)
{
printf("*");
}
printf("\n");
}
}
int main(void)
{
int x;printf("请输入行数x:");
scanf("%d",&x);
print(x);
}
#include<stdio.h>
#define zero 1e-8
double yyds(double a,double b)
{
double y;
if(a+b<=zero)
printf("输入无效");
else
{
y=(a-b)/(a+b);
printf("y=%lf",y);
}
}
main(void)
{
double a,b;
int c;
printf("请输入a,b:");
c=scanf("%lf,%lf",&a,&b);
while(c!=2)
{
while(getchar()!='\n');
printf("输入无效,请重新输入:");
c=scanf("%lf,%lf",&a,&b);
}
yyds(a,b);
}
①普通调用
#include<stdio.h>
int Nrin(int m,int n)
{
int s;
for(s=1;s%m!=0||s%n!=0;s++);
printf("m和n的最小公倍数=%d\n",s);
}
int Zer(int m,int n)
{
int s;
for(s=m;m%s!=0||n%s!=0;s--);
printf("m和n的最大公约数=%d\n",s);
}
main(void)
{
int m,n;
printf("请输入两个正整数m,n:");
scanf("%d,%d",&m,&n);
Nrin(m,n);
Zer(m,n);
}
②多级调用( xy=最小公倍数最大公约数)
#include<stdio.h>
int Nrin(int m,int n)
{
int s;
for(s=1;s%m!=0||s%n!=0;s++);
return s;
}
int Zer(int m,int n)
{
int x;
x=m*n/Nrin(m,n);
return x;
}
main(void)
{
int m,n;
printf("请输入两个正整数m,n:");
scanf("%d,%d",&m,&n);
printf("m和n的最小公倍数=%d\nm和n的最大公约数=%d\n",Nrin(m,n),Zer(m,n));
}
①非递归:
#include<stdio.h>
int fac(int x)
{
int i;
long j=1;
for(i=1;i<=x;i++)
j*=i;
return j;
}
int main(void)
{
int n,m;
long p;
do
{
printf("输入n,m (n>=m>0):");
scanf("%d,%d",&n,&m);
} while(n<m||n<=0||m<0);
p=fac(n)/(fac(m)*fac(n-m));
printf("%ld\n",p);
return 0;
}
②递归
#include<stdio.h>
int fac(int x)
{
if(x==0||x==1)
return 1;
else
return (x*fac(x-1));
}
int main(void)
{
int n,m;
long p;
do
{
printf("输入n,m (n>=m>0):");
scanf("%d,%d",&n,&m);
} while(n<m||n<=0||m<0);
p=fac(n)/(fac(m)*fac(n-m));
printf("%ld\n",p);
return 0;
}
#include<stdio.h>
int ftss(int x)
{
int i,flag=0;
for(i=2;i<x;i++)
if(x%i==0)
flag=1;
if(flag==1||x==0||x==1)
printf("%d不是一个素数",x);
else
printf("%d是一个素数",x);
}
int main(void)
{
int x;
printf("请输入整数x:");
scanf("%d",&x);
ftss(x);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
long zer(long n)
{
int m;
if ((m=n/10)!=0)
zer(m);
putchar(n%10+'0');
}
int main()
{
long num;
printf("请输入整数number: ");
scanf("%d", &num);
zer(num);
return 0;
}