C语言 实验六 函数

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;
}
  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值