总结下新手学编程容易犯的错误,就是不够细心,并且还学不会怎么看错误提示。编程其实是容不得你丢三落四的,每一行的代码缺少一个分号是运行不通过的。并且温馨提示后面看到文章的人,你一定要从第一篇看起,否则根本不懂。如果从第一篇看,还是可能看懂的,文章都在公号里,接下来继续。
中华文化上下五千年,浩瀚精深。曾经搞SEO的某位同行告诉我,其实国外人对中国还是感兴趣,我问他国外人感兴趣中国的什么?他说国外人对中国的算命、占卜这些最感兴趣,在google上搜索最多。哈!真是神奇!
其实算命、占卜、中医、乔迁嫁人、内功、修道等等,中国的文化的根来自这两张图--河图和洛书。上古时代人皇大神伏羲从河图中参悟并且取星象画卦出先天八卦图,后由周文王推演洛书出后天八卦,我们俗话说的地理(堪舆)就跟后天八卦有莫大关系,因为后天八卦和五行也有关系。我们中华文化深受八卦的影响,《易经》里就是八卦进一步推演出的六十四卦,天下之事尽在其中。此后出现的各种学派什么道家、儒家、兵家、农家、墨家等等,都跟易经有千丝万缕的联系。而一切由来自最古老的先天八卦,来自河图洛书!
有时候我们这些身在科技时代的人怀疑,那些看风水的人说的准不准?有什么依据没有?为什么有的祖坟葬得好冒青烟,而你们家却世世代代一贫如洗?什么是科学,什么是迷信?我们中华文化的基石稳固吗?来看看洛书:
上图就是河图洛书了,至于伏羲怎么从河图里面推演出先天八卦又观天取象,弄出乾一、兑二、离三、震四、巽五、坎六、艮七、坤八,尔后后天八卦又怎么演出五行,感兴趣的可以百度看看。他们隐藏着天地的运转,人生的生老病死。
我们这里简单说编程咯。
我们来看看洛书,这个相对简单些,一个点代表1,所以洛书的数排列如下:
4 9 2
3 5 7
8 1 6
横行三个数和纵列三个数加起来都是15,并且中间的斜线三个数加起来也是15。我们怎么在C代码中打印出上面的数,并且用他们来计算下横行竖列斜线的和?
首先,我们需要输入数字,然后打印出上面的图案,因为数字比较多,所以我们用数组存储的方式。
比如我们要存1,2,3这样的一行,我们就用一维数组int myArray[3],这样就可以了。但是上面的是3行3列,一维数组就不好存了,我们可以申请二维数组:int myArray[3][3],这样就可以存洛书的数了。数组都是有下标的,比如一维数组int myArray[3]={1,2,3};如果你要从这个一维数组中取出第一个数1,怎么取出来?这样就可以了:myArray[0],这个就能取出1了,数组的下标从0开始,就是中括号[]里面的数从0开始,如果一个一维数组有3个数,它的最大下标是2。至于二维数组,那么下标可以用x,y表示了,int myArray[3][3]这样的,说明这个数组有3*3=9个数。下标分别是myArray[0,0],myArray[0,1],myArray[0,2],myArray[1,0],myArray[1][1],myArray[1][2],myArray[2][0],myArray[2][1],myArray[2][2],从左上角往右再往下再往右再往下再往右。如果是洛书存入这个数组,其实对应关系如下:
myArray[0,0]=4;
myArray[0,1]=9;
myArray[0,2]=2;
myArray[1,0]=3;
myArray[1][1]=5;
myArray[1][2]=7;
myArray[2][0]=8;
myArray[2][1]=1;
myArray[2][2]=6;
我们可以用代码实现把上面的数放入数组中,代码片段可以如下:
int Max = 3;
int luoshu[3][3];
for (int i = 0; i < Max; i++)
{
for (int j = 0; j < Max; j++)
{
printf("(%d,%d)=", i, j);
scanf("%d", &luoshu[i][j]);
printf("\n");
}
}
上面有一个函数scanf函数,这个可以从屏幕中获取你输入的内容,scanf("%d",&luoshu[i][j])就表示请输入一个整型的数,并且把这个值存放到luoshu[i][j]的地址中,注意有&,表示地址。因为是两层循环,所以大家需要注意看下标是怎么排的。
然后!我们输出洛书的数图,如下:
// 输出洛书
printf("=====输出洛书=====\n");
for (int i = 0; i < Max; i++)
{
for (int j = 0; j < Max; j++)
{
printf("%d ", luoshu[i][j]);
}
printf(" \n");
}
上面代码就是简单的循环,两个循环把所有的元素都打印出来,然后每一行最后打一个换行符。下面代码演示一下横行三个数相加的结果:
// 横行三个数相加的结果
printf("\n=====洛书横行相加的结果===\n");
for (int i = 0; i < Max; i++)
{
int sum = 0;
for (int j = 0; j < Max; j++)
{
printf("%d", luoshu[i][j]);
printPlus(j, Max);
sum += luoshu[i][j];
}
printf("=%d\n", sum);
}
大家发现没,这里我们调用了一个函数,printPlus,这个是我自己定义的一个函数,具体代码如下:
void printPlus(int in, int Max)
{
if (in != (Max - 1))
{
printf("+");
}
}
好了,我已经帮大家把横行相加的代码写出来了,如果你感兴趣,看可以写出竖列以及斜边的结果。输出的结果大概如下:
完整代码如下,
#include
void printPlus(int in, int Max)
{
if (in != (Max - 1))
{
printf("+");
}
}
int main()
{
int Max = 3;
int luoshu[3][3];
for (int i = 0; i < Max; i++)
{
for (int j = 0; j < Max; j++)
{
printf("(%d,%d)=", i, j);
scanf("%d", &luoshu[i][j]);
printf("\n");
}
}
// 输出洛书
printf("=====输出洛书=====\n");
for (int i = 0; i < Max; i++)
{
int sum = 0;
for (int j = 0; j < Max; j++)
{
printf("%d ", luoshu[i][j]);
sum += luoshu[i][j];
}
printf(" \n", sum);
}
// 横行三个数相加的结果
printf("\n=====洛书横行相加的结果===\n");
for (int i = 0; i < Max; i++)
{
int sum = 0;
for (int j = 0; j < Max; j++)
{
printf("%d", luoshu[i][j]);
printPlus(j, Max);
sum += luoshu[i][j];
}
printf("=%d\n", sum);
}
// 列行三个数相加的结果
printf("\n=====洛书纵列相加的结果===\n");
for (int i = 0; i < Max; i++)
{
int sum = 0;
for (int j = 0; j < Max; j++)
{
printf("%d", luoshu[j][i]);
printPlus(j, Max);
sum += luoshu[j][i];
}
printf("=%d\n", sum);
}
// 斜方向的三个数相加的结果
printf("\n=====洛书左斜方向相加的结果===\n");
int sum_zuo_xie = 0;
for (int i = 0; i < Max; i++)
{
for (int j = 0; j < Max; j++)
{
if (i == j)// 往左斜方向
{
printf("%d", luoshu[i][j]);
printPlus(j, 3);
sum_zuo_xie += luoshu[i][j];
}
}
}
printf("=%d\n", sum_zuo_xie);
// 斜方向的三个数相加的结果
printf("\n=====洛书右斜方向相加的结果===\n");
int sum_you_xie = 0;
for (int i = 0; i < Max; i++)
{
for (int j = 0; j < Max; j++)
{
if (i + j == 2)// 往右斜方向
{
printf("%d", luoshu[i][j]);
printPlus(j, 1);
sum_you_xie += luoshu[i][j];
}
}
}
printf("=%d\n", sum_you_xie);
return 0;
}
为什么洛书横行竖列斜边相加是15?这个数到底在宇宙中意味什么,它到底隐藏什么样的奥秘? 就需要同学你去探寻了。如代码运行有问题,可以下面的公号。
浩然天地,正气长存。
作者:谋哥,微信公号vjiazhi。略懂技术,产品,运营,每一篇都是原创!绝无仅有。