Chinaunix首页 | 论坛 | 博客
  • 博客访问: 101909078
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: C/C++

2008-04-20 17:23:47

作者:    

    三、用全程变量实现参数互传
    以上两种办法可以在调用函数和被调用函数间传递参数, 但使用不太方便。如
果将所要传递的参数定义为全程变量, 可使变量在整个程序中对所有函数都可见。
这样相当于在调用函数和被调用函数之间实现了参数的传递和返回。这也是实际中
经常使用的方法, 但定义全程变量势必长久地占用了内存。因此, 全程变量的数目
受到限制, 特别对于较大的数组更是如此。当然对于绝大多数程序内存都是够用的。
    例6:
     #incluide
     void disp(void);
     int m[10];          /*定义全程变量*/
     int main()
     {
          int i;
          printf("In main before calling\n");
          for(i=0; i<10; i++){
            m[i]=i;
            printf("%3d", m[i]);   /*输出调用子函数前数组的值*/
          }
          disp();                  /*调用子函数*/
          printf("\nIn main after calling\n");
          for(i=0; i<10; i++)
            printf("%3d", m[i]);   /*输出调用子函数后数组的值*/
          getch();
          return 0;
     }
     void disp(void)
     {
          int j;
          printf("In subfunc after calling\n");/*子函数中输出数组的值*/
          for (j=0; i<10; j++){
               m[j]=m[j]*10;
               printf("%3d", m[i]);
          }
     }

 2.3 函数的递归调用
    Turbo C2.0允许函数自己调用自己, 即函数的递归调用, 递归调用可以使程序
简洁、代码紧凑, 但要牺牲内存空间作处理时的堆栈。
    如要求一个n!(n的阶乘)的值可用下面递归调用:
    例8:
      #include
      unsigned ling mul(int n);
      int main()
     {
          int m;
          puts("Calculate n! n=?\n");
          scanf("%d", &m);         /*键盘输入数据*/
          printf("%d!=%ld\n", m, mul(m));/*调用子程序计算并输出*/
          getch();
          retun 0;
      }
     unsigned long mul(int n)
     {
          unsigned long p;
          if(n>1)
               p=n*mul(n-1);       /*递归调用计算n!*/
          else
               p=1L;
          return(p);               /*返回结果*/
     }
运行结果:
          calculate n!  n=?
输入5时结果为:
          5!=120

阅读(370) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~