面向过程版
#include<iostream>
#include<conio.h>
using namespace std;
struct Node;
#define N 11
typedef Node* 节点针;
struct Node{
wchar_t data;
节点针 nextPos;
};
Node 拉丁表[N + 1];
const Node*尾哨兵 = &拉丁表[N-1];
wchar_t*大写阿拉伯数字 = L"零壹贰叁肆伍陆柒捌玖拾";//----11个
void 循环表(){
for (int i = 0; i < N; i++){
拉丁表[i].nextPos = &拉丁表[i + 1];
拉丁表[i].data = 大写阿拉伯数字[i];
}
拉丁表[N - 1].nextPos = &拉丁表[0];
拉丁表[N - 1].data = 大写阿拉伯数字[N - 1];
}
void 测试(){
节点针 p = 拉丁表;
for (int i = 0; i < 15; i++, p = p->nextPos){
wcout << p->data;
}
wcout <<endl<< p->data;
}
void 打印拉丁表(){
节点针 p = 拉丁表;
cout <<endl<<"拉丁方阵表生成如下:"<<endl<<endl;
for (int i = 0; i != N; i++)
{
wcout << endl;
p = p->nextPos;
p = p->nextPos;
p = p->nextPos;
for (int j = 0; j != N; j++){
wcout << p->data;
p = p->nextPos;
}
}
}
int main(){
setlocale(LC_ALL, "chs");
循环表();
打印拉丁表();
return _getch();
}
面向对象
#include<iostream>
#include<conio.h>
using namespace std;
#define N 11
struct Node;
typedef Node* 节点针;
struct Node{
wchar_t data;
节点针 nextPos;
};
class 拉丁方阵类{
Node *拉丁表;
节点针 尾哨兵;
wchar_t*大写阿拉伯数字;//----11个
int 拉丁表边长,
横向位移调节杆
;
void
循环表(),
测试(),
打印拉丁表()
;
public:
拉丁方阵类(int , int );
};
拉丁方阵类::拉丁方阵类(int 拉丁边长 = N, int 调节杆 = 3){
拉丁表边长 = 拉丁边长;
横向位移调节杆 = 调节杆;
拉丁表 = new Node[拉丁边长];
尾哨兵 = 拉丁表+拉丁边长 - 1;
大写阿拉伯数字 = L"零壹贰叁肆伍陆柒捌玖拾";
if (!拉丁表){
cout << "new错误!";
exit(1);
}
循环表();
//测试();
打印拉丁表();
}
void 拉丁方阵类::循环表(){
int i = 0;
while (拉丁表 != 尾哨兵){
拉丁表[0].nextPos = 拉丁表 + 1;
拉丁表[0].data = 大写阿拉伯数字[i++];
拉丁表++;
}
拉丁表->nextPos = &拉丁表[-拉丁表边长 + 1];
拉丁表->data = 大写阿拉伯数字[拉丁表边长 - 1];
}
void 拉丁方阵类::测试(){
节点针 p = 拉丁表;
for (int i = 0; i < 15; i++, p = p->nextPos){
wcout << p->data;
}
wcout << endl << p->data;
}
void 拉丁方阵类::打印拉丁表(){
节点针 p = 拉丁表;
//cout << "\n" << "拉丁方阵表生成如下:";
for (int i = 0; i != 拉丁表边长; i++)
{
wcout << endl;
for (int i = 0; i != 横向位移调节杆;i++)
p = p->nextPos;
for (int j = 0; j != 拉丁表边长; j++){
wcout << p->data;
p = p->nextPos;
}
}
cout << endl;
}
int main(){
setlocale(LC_ALL, "chs");
拉丁方阵类
A,
B(8, 5),
C(5,2)
;
return _getch();
}