C语言学习中的问题.拜托大家能给予帮助谢谢拉

来源:百度知道 编辑:UC知道 时间:2024/06/03 00:12:45
#include <stdio.h>
f (int a [10] [4],int n)
{ int i,j,k;
j=n/2+1; a[1][ j ]=1;i=1;
for(k=2;k<=n*n;k++)
{i=i-1;j=j+1;
if((i<1)&&(j>n)) {i=i+2;j=j-1;}
else {if(i<1)i=n;
if(j>n)j=1;}
if(a[i] [ j ]==0)a[i][ j ]=k; 在执行这句时,我感觉不能判断a[5][4](第一次循环)是不是等于0。所以我感觉题目有问题。不知能不能请您帮忙分析一下句子呢?
else{i=i+2;j=j-1;a[i][ j ]=k;}
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)
printf(“%2d”,a[i] [ j ]);
printf(“\n”);
}
}
main()
{ static int a [10] [10];
f(a,5);
}

如果你学过编译器原理的话,这问题就不是问题。不管怎样先记住,如果数组至少有一个元素被赋值的话,编译器就会给那些没有给定值的元素默认初始值,这个初始值在C语言中为0,来看这道题,j = n/2+1,j=3,数组元素a[1][3]=1已经被赋值为1,那么其余数组元素都被自动赋为0,所以这题目没有问题,可以正确运行,你可以拷到C++ 6.0上试试,回答完毕请给分。