1.遇到的问题和现象描述:
我习惯用局部变量来解决问题,所以起初我把bool型的数组定义在main函数中,然后在调用赋值函数(tu(k))时加上形参tu(int k, bool tu[][], int n, int n);然后出错了……
显示:declaration of 'a' as multidimensional array must have bounds for all dimensions except the first(声明'tu'为多维数组必须对除第一个维度外的所有维度有边界 )
然后我又删除了一个参数:
tu(int k, bool a[][],int n)还是不行。
显示:[Error] invalid types 'bool[int]' for array subscript(数组下标哦bool[int]无效)
(我用a代替tu数组)
2.我想问的问题是:(1)这道题必须将tu数组设为全局变量吗?如果不是该怎么去让他传入参数呢?
(2)数组a[2][2] = true !? 那第一部分第四个怎么变为'Y'(我的源代码在此情况下无法正确输出'Y')。我在这里将其分别设为 a[0][0] = a[0][1] = a[1][0] = true;
a[1][1] = false;
3.下面是我仿照作者你的代码写的代码
#include <stdio.h>
#include <iostream>
#include <math.h>
using namespace std;
#define MAXSIZE 10000
bool a[MAXSIZE][MAXSIZE];//初始化数组(10阶)
void InitArray(int k);
int main()
{
int t;//试验次数
int k;//logo阶数
//第一部分初始化赋值
a[0][0] = a[0][1] = a[1][0] = true;
a[1][1] = false;
InitArray(2);//数组赋值(10阶)
int i, j;
// cout<<"请输入你想要实验的次数:";
cin>>t;
while(t){
// cout<<"请输入logo的阶数:";
cin>>k;
//直接输出对应位值的元素
for (i=0; i<pow(2,k); i++){
for (j=0; j<pow(2,k); j++){
if (a[i][j]) cout<<'S';
else cout<<'Y';
}
cout<<"\n";
}
t--;
}
}
//数组赋值(<10阶全部赋值)
void InitArray(int k)//n为阶数 //思想:将其分为四个部分,根据i,j,k变化填充。
{
if (k==10) return ;
int n = pow(2,k);
int m = n/2;
int i, j;
//第二部分
for (i=0; i<m; i++){
for (j=m; j<n; j++){
a[i][j] = a[i][j-m];
}
}
//第三部分
for (i=m; i<n; i++){
for (j=0; j<m; j++){
a[i][j] = a[i-m][j];
}
}
//第四部分
for (i=m; i<n; i++){
for (j=m; j<n; j++){
a[i][j] = (!a[i][j-m]);//反转
}
}
InitArray(k+1);
}