NewC编译器的测试用源代码
作者:nnhy  来源:  发布时间:2006-11-6 23:16:06  共有618位读者阅读过此文

 

    这是NewC编译器的测试用源代码,注意中间的函数的函数以及递归,和后面的中文编程。

以下是代码片段:

    /*测试定义*/
    int c1;
    int c2;
    /*测试赋值*/
    c2=(2006/-2);
    int endl()
    {
     cout(10,2);cout(13,2);
    }
    endl();
    cout(c2,1);
    c1    =    3+2006-((2006/-2)*-4)/2;
    endl();
    cout(c1,1);
    /*测试输入*/
    endl();
    cout('c',2);cout('1',2);cout(':',2);
    cin(c1,1);
    endl();
    cout('c',2);cout('2',2);cout(':',2);
    cin(c2,1);
    endl();
    cout(c1,1);
    endl();
    cout(c2,1);

    char f(int a1, int a2)
    {
        /*endl();cout('f',2);*/
        /*下面测试所有比较运算符并测试输出,还测试了if语句*/
        if(a1==a2){endl();cout(a1,1);cout('=',2);cout('=',2);cout(a2,1);}
        if(a1!=a2){endl();cout(a1,1);cout('!',2);cout('=',2);cout(a2,1);}
        if(a1>=a2){endl();cout(a1,1);cout('>',2);cout('=',2);cout(a2,1);}
        if(a1<=a2){endl();cout(a1,1);cout('<',2);cout('=',2);cout(a2,1);}
        if(a1>a2){endl();cout(a1,1);cout('>',2);cout(a2,1);}
        if(a1<a2){endl();cout(a1,1);cout('<',2);cout(a2,1);}

  /*定义一个jk函数,该函数使用while语句来计算输入参数的阶乘*/
        int jk(int a)
        {
         /*endl();cout('j',2);*/
         int b;
         b=1;
         /*C语言的变量定义必须在所有语句之前出现,而我们可以在任意位置*/
         int cc;
         cc=a;
         while(a>0)
         {
          /*一个个乘上小于等于参数a的正整数*/
             b=b*a;
             a=a-1;
         }

         /*
         再定义一个函数,表明在一个函数内部还可以定义函数
         实际上,可以无限层定义函数
         这里,还测试了多行注释
         最重要的是,这里的函数,使用了递归
         成功的区分变量作用域并实现无限函数以及无限函数递归,是我们的编译器的最大特色
         */
         int jkk(int y)
         {
          /*endl();cout('k',2);cout('y',2);cout(y,1);*/
             if(y<2)return 1;
             return jkk(y-1)*y;
         }
         if(jkk(cc)==b)
         /*测试两种方法得到的阶乘结果是否一样*/
         /*测试多个注释符一起出现*/
         /*测试函数应用于复杂表达式中构造算术表达式,并一起参加复杂的混合运算*/
         /*同时,这里也测试了返回语句后面可以是任何算术表达式*/
          return jkk(cc)+2006-((2006/-2)*-4)/2;
         else
          return -1;
        }
        endl();
        cout('!',2);cout(a1,1);cout('=',2);cout(jk(a1),1);
        endl();
        cout('!',2);cout(a2,1);cout('=',2);cout(jk(a2),1);
       
        /*
        再试试函数调用作为独立的语句
        */
        jk(a1);
       
        /*一个特殊的函数,求d1的d2次乘方*/
        int expf(int d1,int d2)
        {
/*         endl();cout('e',2);*/
         int i;
         i=1;
         while(d2>0)
         {
          i=i*d1;
          d2=d2-1;
         }
         return i;
        }
       
        /*
        顶顶大名的<<汉诺塔>>问题
        我们的编译器不仅支持递归,还支持中文编程
       
        <<汉诺塔>>问题
        有一定个数的盘,每个盘大小均不一样,任意小盘必须任何时候都放在大盘上面
        现在所有盘都放在 源盘 这里,请你借助一个 中间盘,把所有源盘移动到 目的盘上面去
        记住:任何时候,任意小盘都必须放在大盘上面
        解决思想:递归
        从 源盘 移动N个盘到目的盘,可以先移动最上面的N-1个到 中间盘
        然后移动 源盘 中最下面也是最大的那个盘到 目的盘
        再把刚才移动到 中间盘 的那N-1个盘移动到目的盘
        这是,移动N-1个盘,又构成了一个N-1的汉诺塔问题
        非常经典的递归
        */
        整型 移动(整型 个数,字符型 源盘,字符型 目的盘,字符型 中间盘)
  {
      如果(个数 小于 2)
      {
       输出(10,2);输出(13,2);
       输出('M',2);输出('o',2);输出('v',2);输出('e',2);输出(':',2);输出(32,2);
       输出(源盘,2);
       输出('-',2);输出('>',2);
       输出(目的盘,2);
       }
      否则
      {
       移动(个数 减 1,源盘,中间盘,目的盘);
       移动(1,源盘,目的盘,中间盘);
       移动(个数 减 1,中间盘,目的盘,源盘);
      }
      /*很遗憾,我们不支持void这个无类型*/
      返回 0;
  }
       
        endl();
        cout(a1,1);cout('!',2);cout(a2,1);cout('=',2);cout(expf(a1,a2),1);
        endl();
        cout(a2,1);cout('!',2);cout(a1,1);cout('=',2);cout(expf(a2,a1),1);
  /*我们的NewC语言,不管你什么时候换行,当然,就算都不换行,也同样可以识别
  这个行号对编译器没有任何意义,仅仅用于错误的提示而已*/
        if
        (expf(a1,a2)>=expf(a2,a1))
        {
         if(expf(a1,a2)>expf(a2,a1))
         return '>';/*返回expf(a1,a2)=expf(a2,a1)*/
         else
         return '=';
        }
        else return '<';
    }
    char ch1;
    endl();
    /*c1的c2次乘方,和 c2的c1次乘方 比较*/
    ch1=f(c1,c2);
    endl();
    cout(ch1,2);
    endl();
    cin(c1,2);  
    /*
    再试试函数调用作为独立的语句*/
 移动(c2,'A','B','C');
    endl();
    cout('E',2);cout('N',2);cout('D',2);
    ch1='#';
    cin(c1,2);


 

新生命 XCMS1.0 Build0206 版权所有 All Copyrights @2009 桂ICP备06011573号
站长:大石头 信箱:gxuhy@21cn.com QQ:99363590
本站带宽由酷睿数据提供