C语言二维数组打印三角形问题

#include "stdio.h"
void main()
{
int a[3][3]; int i,j;
for(i=0;i<=2;i++)
for(j=0;j<=2;j++)
scanf("%d",&a[i][j]);
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
printf("%d",a[i][j]);
printf("\n");
}
getch();
}
输入123456789
会打印
123
456
789.
现在想打印出如下效果:请问怎么修改?
3
56
789;

1
45
789;

123
56
9;
本人刚学C语言,请不要见笑。

第1个回答  2013-02-20
  #include <stdio.h>
  int main()  {
   int a[3][3] = {1,2,3,4,5,6,7,8,9};
   int i,j;
   for( i=0 ; i < 3; i++ )
   {
   for( j=0 ; j < 3 ; j++ )
   {
   if( i+j > 1 )
   {
   printf("%d",a[i][j]);
   }
   else
   {
   putchar(' ');
   }
   }
   putchar('\n');
  }
  putchar('\n');
  for( i=0 ; i < 3; i++ )
  {
   for( j=0 ; j < 3 ; j++ )
   {
   if( i >= j )
   {
   printf("%d",a[i][j]);
   }
   else
   {
   putchar(' ');
   }
   }
   putchar('\n');
  }
  putchar('\n');
  for( i=0 ; i < 3; i++ )
  {
   for( j=0 ; j < 3 ; j++ )
   {
   if( j >= i )
   {
   printf("%d",a[i][j]);
   }
   else
   {
   putchar(' ');
   }
   }
   putchar('\n');
  }
  return 0;
}
我这里的 是一个容易理解的加长版,3种格式3种循环,关键的地方就在那几个判断语句的地方。也就是上面的同学写的三种case情况。
上面同学引入k变量的原因是用来对3种输出进行选择,选到哪个哪个就输出。可以知道k从0~2所以三种输出轮流输出,就能达到效果了。
我写的就是把他那些给铺开来了。容易理解,但代码重复,变长了。
以上就是这样。~
本回答被提问者采纳
第2个回答  2013-02-19
#include "stdio.h"
void main()
{
int a[3][3]; int i,j,k;
for(i=0;i<=2;i++)
for(j=0;j<=2;j++)
scanf("%d",&a[i][j]);
for(k=0;k<3;k++)
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
switch(k)
{
case 0:if(j<2-i){putchar('\040');continue;}break;
case 1:if(j>i) {putchar('\040');continue;}break;
case 2:if(j<i) {putchar('\040');continue;}break;
}
printf("%d",a[i][j]);
}
printf("\n");
}
getch();
}追问

嗯,有几处不是很懂,还请大虾告知。
case 0:if(ji) {putchar('\040');continue;}break;
case 2:if(j<i) {putchar('\040');continue;}break;
这几行代码的含义。
尤其是if语句的判断条件和putchar('\040')。
变量k的引入,有什么含义呢?
我单独书写只成功完成了
123
45
7
这三个效果单独书写的if判断是怎么样的?需要引入另外一个变量吗?

相似回答