太极语言解释运行程序设计(序)
快速入门:
把下面的例子程序保存成tj1.u,tj2.u……文件,
输入
taiji tj1.u
taiji tj2.u
……
就可以运行了。
1.
show("太极");//显示“太极”
2.
int a;//定义整数变量 a,(其实是分配内存单元)
a=9+2; //给 a 赋值 ;
show(a);//显示a;
3.
// 从//到行末是注释,会被编译程序直接略过,不用输入,/*与*/之间的也是注释
int a;//定义整数变量 a,(其实是分配内存单元)
a=9; //给 a 赋值 ;
int b;
b=10; //定义b,赋值10;
b=a+2; //现在b变成11了。
a=a+b;
//a原来的值+b的值,把结果赋给a;a现在是21;
a=a+1;//现在a是几?
a=a*b-a-b; //现在呢,
//*为乘,/为除,%为除法取余数。
4.
int a;
a=2;
biaohao :;//标号名,任意取
a=a+1;
show(a);
goto biaohao;//goto 会控制程序流程跳转到指定处。
这个程序会无限循环下去的,按ctrl+c可以终止。
改动一下:
int a;
a=2;
biaohao :;//标号名,任意取
a=a+1;
show(a);
goto(a<10) biaohao;//符合条件才跳转
----------------------------------------------------
变量名取名规则:首字母是汉字或英文名或下划线_,后面可以是汉字或英文名或下划线_或数字。
如果首字母是数字,则被认为是数字而不是变量名。
以后的函数名,类名……也是按这个规则。
-----------------------------------------------------
5.
int i;
i=0;
/*注释:当(i<10)时循环做{}中的。直到i>=10为止。
每循环一次后都看一下是否符合条件。*/
while(i<10)
{
show(i);
i=i+1;
};
格式:while(条件)
{
....
}
想一下:如何 用goto实现相同的功能?
6.
//求0+1+2+3+……+10;
int i;
i=0;
int j;j=0;//定义j,保存结果。
while(i<=10) //循环到10;
{
j=j+i;//j 依次加上递增1的i。
show(j);
i=i+1;
};
想一想:
(1)求:1+2+3+.................+100
2+4+6+.............+100
1*1+2*2+3*3+...........+100*100
(2)用goto 实现此程序
7.指针
/*
电脑内存单元一个个的排好,
每个单元所排的顺序数叫这个单元的地址,
单元存储的内容叫单元的值。
单元存储什么数字都可以,
那么当然可以存其他单元的地址了(也是数)
这就叫指针,因为其值指向另一个单元。
*/
数据定义的方式是
类型 变量名;
于是
int a;a=8;
int * pa;// 定义int 型的指针 pa;把int * 整体看成类型。
pa=&a;//pa 指向a ,pa单元的值为a的地址。
// 比如可能是24000010;这与系统有关。
//定义一个变量时要给这个变量分配一定的内存单元。
*pa=9;//取pa所指向的内存单元,其值赋为9;
int * * ppa;//把int * * 整体看成类型。
ppa=&pa;//ppa是指向指针pa的指针
**ppa=7;
show(a);
show(*pa);
show(**ppa);
8.函数
int leijiahe(int n)// 返回值类型 函数名(参数)
{//求0+1+……+n;
int i=0;
int j=0;
while(i<=n)
{
j=j+i;
i=i+1;
}
return j;//返回j的值;
}
leijiahe(20);//函数调用。20传递给leijiahe的参数n;调用函数。
int k;
k=leijiahe(100);//返回值赋给k;
用函数提高了代码的可重用性。
格式:
返回值类型 函数名(参数)
{
.....
}
int swap(int *p1;int *p2)
{//交换p1指向的和p2指向的内存单元的值。
int i;
i=*p1;// i赋p1所指向的值。保存之。
*p1=*p2;//p1所指赋p2所指
*p2=i;
}
int a;
a=2;
int b;
b=3;
swap(&a;&b);
show(a);
show(b);
下面是一个不能完成交换功能的函数。
swap(int a,int b)
{
int i;
i=a;
a=b;
b=i;
}
int x;x=2;int y;y=3;
swap(x,y);
每个变量都对应一个内存单元,包括函数的参数;每个独立区域中的变量互不牵扯,重名也不要紧,不相干。
比如上面的swap(x,y);x的值传给swap函数母体中的参数a,y传给b;那么怎么交换a,b都不干x,y的事呀。
后面的那个,即使同名也还是不行。
执行进入函数体后,才为此函数体中的变量分配内存单元。
函数返回后,其变量全被释放。
取得键盘输入字符:
char a;
a=getkey();//按一键后返回键值。
show(a);
9.判断
char a;
a=getkey();
if(a=='y')
{ show("yes"); }
elseif(a=='n')
{ show("no"); }
elseif(a=='?')
{ show("why");}
else
{
if(a=='k')
{show("aaaaaaaaaaa");}
else
{ show("bu zhi dao"); }
}
show(a);
试验一下就懂了。
这很象人说的话呀。就是话的意思。
字符用单引号引起来,字符串用双引号。
char a;
a=getkey();
switch(a)
{
case ('y')
{ show("yes");}
case ('n')
{ show("no");}
default
{ show("???");}
}
若按了除y,n以外的其他键,则执行default(缺省)
10.循环控制:
int a;
a=2;
while(a<10)
{
show(a);
if(a==8)
{ continue;}
a=a+1;
}
continue是跳到循环开始。
int a;
a=2;
while(a<10)
{
show(a);
if(a==8)
{ break;}
a=a+1;
}
break是跳出循环
11.数组
int [10]a;//定义数组a,含10个int型变量
a[0]=1;//a的第0个变量赋值为1.
int i;i=0;
a[i]=i*i;
show(a[i]);
while(i<10)
{
i=i+1;
a[i]=i*i;//给第i个变量赋值
show(a[i]);
}
12.递归
int leijiahe(int n)
{
if(n==1)
{return 1;}
int r;
r=leijiahe(n-1)+n;
return r;
}
int k;
k=leijiahe(5);
show(k);
13.字符串
int strlen(char * str)
{
int i;
i=0;
show(str[i]);
while(str[i]!=0)
{
show(str[i]);
i=i+1;
}
return i;
}
char * str;
str="aaaaaaaaaaa";
int k;
k=strlen(str);
show(k);
14.类
type student
{
char * name; //定义成员变量
int age;
int heigh;
};
student chenwei;定义类实例
chenwei.name="chen wei";给成员变量赋值
chenwei.age=25;
student * pcw;//指针
pcw=&chen;
pcw->heigh=170;//通过指针访问成员变量
show(chenwei.name);
show(chenwei.heigh)
type chain
{
int a;
chain * p;
};
chain c1;
chain c2;
c1.p=&c2;
c2.p=&c1;
c1.a=9;
c2.a=8;
show(c1.a);
show(c1.p->p->p->a);
------------------------------
解释器系统特性:
1.
int a;
int b;
int c;
runcode(a=1;b=2;c=3);//运行()中的代码
c=c+a;
show(c);
2.
int a;
int b;
int c;
char * str="a=1;b=2;c=3";
runstr(str);//运行()中字符指针变量指向的代码
c=c+a;
show(a);
show(c);
str[2]=str[2]+1;//动态更改代码。
show(a);
------------------------
在这篇序中我简单的说了一下,我想应该是很容易入门的。你学习C/C++的知识与代码积累都可以用在太极语言上。
我的 csdn blog:
http://blog.csdn.net/universee
目前太极语言解释器还未经过严格测试,如果你发现了问题,可以去我的blog上回复告诉我。
2006.4.22夜