先看题
(((((()
#include<stdio.h>
int main(void)
{
int t,n,i,j,k,m;
scanf("%d%d",&t,&n);
int a[n][n];
//先规定第一列的起始数;
a[0][0]=1;
for(i=1;i<n;i++)
{a[i][0]=a[i-1][0]+i;
printf("%d ",a[i][0]);
} printf("\n"); //接着根据每行的开头第一个数,以及相邻两个数之间的差,算出每行的每个数
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)//j<n-i,实现了每一行比前一行少一个数;
{ //printf("a[%d][%d]是%d",i,j,a[i][j]);
a[i][j+1]=a[i][j]+(j+1)+(i+1);//原来是j+1再加1,但只符合第一行,第二行刚开始的两个数差的又比之前大了1;
printf("%d ",a[i][j]);
}
printf("\n");
}//*/
}
大佬试着运行一下,结果是这样的
离谱的地方就在这里:明明刚开始赋值第一列的时候,问题没有,但是到下面循环,对每一行各个元素赋值,时候,第1行(前面是第0行)就出现了问题,数值从2变成了21!
而且,我对a[1][0]重新赋值,这一行的结果还是不变,也就是a[1][0]的值根本不变,
而对其他除了a[1][0]的的第一行列数,a[0[0,a[2[0,a[3[0,a[4[0,结果都会正常改变,这是为什么??
下面是一个输出蛇形数组的 C 语言代码示例:
#include <stdio.h>
int main()
{
// 输入蛇形数组的行数和列数
int rows, cols;
printf("请输入行数和列数:");
scanf("%d%d", &rows, &cols);
// 定义并初始化蛇形数组
int arr[rows][cols];
int val = 1;
for (int i = 0; i < rows; i++)
{
// 如果行数为奇数,则需要从小到大填数
if (rows % 2 == 1)
{
for (int j = 0; j < cols; j++)
{
arr[i][j] = val++;
}
}
// 如果行数为偶数,则需要从大到小填数
else
{
for (int j = cols - 1; j >= 0; j--)
{
arr[i][j] = val++;
}
}
}
// 输出蛇形数组
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
编译并运行上面的代码,输入 1 5,输出如下:
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
c语言吗
那你这里犯了2个错误
1.c语言要求在每个块内部,所有的定义必须在其他代码的前面,你scanf跑到数组定义的前面了,这语法就错误
2.除非C99,否则不支持用变量作为数组长度
我把a[n][n]改成a[10][10]放到scanf前面,运行的很好
另,变量t是干什么的,后面也没用上啊