c语言高手请进,急啊啊,急啊啊,求助啊,不胜感激!!!如果全对,加分100!!!

编写一程序P777.C实现以下功能方阵的主对角线之上称为“上三角”,设计一个用于填充n(n从键盘读入,约定其取值范围为3~20)阶方阵的上三角区域的程序。填充的规则是:使... 编写一程序P777.C实现以下功能
  方阵的主对角线之上称为“上三角”,设计一个用于填充n(n从键盘读入,约定其取值范围为3~20)阶方阵的上三角区域的程序。填充的规则是:使用1,2,3……的自然数列,从左上角开始,按照顺时针方向螺旋填充。输出时要求每个数据宽度为4、右对齐。
  编程可用素材:printf("Please input n: ")、printf("\nResult is:\n")、printf("%4d"...、printf("\n")。
  程序的运行效果应类似地如图1所示,图1中的第1个6是从键盘输入的内容。
展开
 我来答
昌珈蓝歆0L
2012-06-07 · TA获得超过879个赞
知道小有建树答主
回答量:422
采纳率:0%
帮助的人:409万
展开全部
#include <stdio.h>
void main()
{
int abtra[22][22]={0};
int n,t,j,i,k=1,nn=0;
printf("Please input n: ");
scanf("%d",&n);
t=n;
for( i=1; i<=n; ++i){
for( j=1; j<=t; ++j)
abtra[i][j]=-1;
--t;
}

for( i=1;i<=n;++i)
nn+=i;

i=1,j=1;
for( t=1;t<=nn;++t){
if(k==1){
if(abtra[i][j]==-1)
abtra[i][j++]=t;
else{
k=2;++i;j-=2;
}
}
if(k==2){
if(abtra[i][j]==-1)
abtra[i++][j--]=t;
else{
k=3;i-=2;++j;
}
}
if(k==3){
if(abtra[i][j]==-1)
abtra[i--][j]=t;
else{
k=1;++i;++j;--t;
}
}
}
printf("\nResult is:\n");
for( i=1; i <= n; ++i){
for(
j=1; j <= n;++j){
if(abtra[i][j]==0)
break;
printf("%4d",abtra[i][j]);
}
printf("\n");
}
}
追问
同志,谢谢你的回答,不过,我没有看懂里面的K是怎么运行的,能解释一下么?谢谢,还有j -= 2这些语句能改一下么,看不太懂,请你简单的描述一下,这个赋值过程吧,一定给你加分,谢谢了
追答
j -= 2就是j=j-2;
整个填充的过程可以看成一个循环
这个循环包含三个步骤:先从左往右填,再沿对角线方向填,再从下往上填。
一直循环这三步就能填充完这个三角。
k=1,2,3就是这三个步骤。
如下面那位朋友所说,我的三角位置错了,我修改了一下:
#include
void main()
{
int abtra[22][22]={0};
int n,t,j,i,k=1,nn=0;
printf("Please input n: ");
scanf("%d",&n);
t=n;
for( i=1; i<=n; ++i){ //先把上三角全置-1
for( j=i; j<=n; ++j)
abtra[i][j]=-1;

}
for( i=1; i <= n; ++i){
for( j=1; j <= n;++j){
if(abtra[i][j]==0)
printf(" ");
else
printf("%4d",abtra[i][j]);
}
printf("\n");
}

for( i=1;i<=n;++i) //上三角总元素数
nn+=i;

i=1,j=1;
for( t=1;t<=nn;++t){
if(k==1){ //从左往右填
if(abtra[i][j]==-1)
abtra[i][j++]=t;
else{
k=2;++i;--j;
}
}
if(k==2){ //从上往下填
if(abtra[i][j]==-1)
abtra[i++][j]=t;
else{
k=3;i-=2;--j;
}
}
if(k==3){ //从右下往左上填
if(abtra[i][j]==-1)
abtra[i--][j--]=t;
else{
k=1;++i;j+=2;--t;
}
}
}
printf("\nResult is:\n");
for( i=1; i <= n; ++i){
for( j=1; j <= n;++j){
if(abtra[i][j]==0)
printf(" ");
else
printf("%4d",abtra[i][j]);
}
printf("\n");
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式