标题:C PRIMER PLUS 练习中的不解
只看楼主
寻乐的狼
Rank: 1
等 级:新手上路
帖 子:118
专家分:0
注 册:2007-2-16
结帖率:100%
 问题点数:0 回复次数:9 
C PRIMER PLUS 练习中的不解
要求输出如下
    A
   ABA
  ABCBA
 ABCDCBA
ABCDEDCBA
我的代码错在哪了呢
#include <stdio.h>
#include <stdlib.h>
#define  ROWS 5
int main()
{
   int x,y;
   int i=0;
   char A='A';
   for(y=4;y>=0;y--)
   {
                      for(x=0;x<2*ROWS-1;x++)
                      {
                                             if(y<=x||y<2*ROWS-x-1)//处理两边的空格
                                             printf(" ");
                                             else if(y<ROWS)
                                                  {
                                                  printf("%c",A+i);
                                                  i++;
                                                  }
                                                  else
                                                  {
                                                       printf("%c",A+i);
                                                       i--;
                                                  }
                                             printf("\n");
                      }
   }
   system("pause");
   return 0;
}

[[it] 本帖最后由 寻乐的狼 于 2008-2-8 13:31 编辑 [/it]]
搜索更多相关主题的帖子: PRIMER PLUS 练习 int include 
2008-02-08 13:08
iFreeBSD
Rank: 4
等 级:业余侠客
威 望:4
帖 子:474
专家分:236
注 册:2007-11-5
得分:0 
#include <stdio.h>
#define  ROW   5
void CtrlSpace(int) ;
void PrintChar(char , int) ;
int main(void){
         int i ;
         for(i = 0 ; i < ROW ; i++){
             CtrlSpace(ROW - i) ;
             PrintChar('a' , 2 * i + 1) ;
             printf("\n") ;
         }
 return 0 ;
}
void CtrlSpace(int i){
               while(i >= 0){
                     printf(" ") ;
                     i-- ;
                }
  return ;
}
void PrintChar(char  a , int  n){
               int i , k = 0 ;
               for(i = 0 ; i < n ; i++){
                   printf("%c" , a + k ) ;
                   if(i >= n / 2)
                      k-- ;
                   else
                       k++ ;
                }
  return ;
}

没编译,我写这个应该没问题。

without further ado, let’s get started
2008-02-08 16:06
阿牧
Rank: 1
等 级:新手上路
威 望:1
帖 子:138
专家分:0
注 册:2007-11-5
得分:0 
这个问题我前些天刚有问到。
https://bbs.bccn.net/thread-194771-1-1.html
2008-02-09 17:03
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
得分:0 
if(y<=x||y<2*ROWS-x-1)//处理两边的空格

我认为问题出在这句话```

开始的时候``Y<=X`不成立``但是y<2*ROWS-x-1成立,到X=4的
时候``Y<=X`又成立了``以后``Y<=X`都成立``

所以就回一直都是空格```

第2次``也是y<2*ROWS-x-1成立``但是X=3``的时候`Y<=X`又成立了``以后``Y<=X`都成立`然后又是一直都是空格``

我认为LZ的循环输出的全部是空格`不知道是不是这样的啊``

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2008-02-09 18:29
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
得分:0 
经过调试``发现输出了36了空格和回车`

为什么呢? 2*ROWS-1 = 9 加 for(y=4;y>=0;y--)
所以就是36``

if(y<=x||y<2*ROWS-x-1)//处理两边的空格
printf(" ");
后就是printf("\n");
所以结果就是36个空格加回车``

LZ错误已经找出来``你在想想怎么修改吧``

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2008-02-09 18:41
寻乐的狼
Rank: 1
等 级:新手上路
帖 子:118
专家分:0
注 册:2007-2-16
得分:0 
[bo]以下是引用 [un]死了都要C[/un] 在 2008-2-9 18:41 的发言:[/bo]

经过调试``发现输出了36了空格和回车`

为什么呢? 2*ROWS-1 = 9 加 for(y=4;y>=0;y--)
所以就是36``

if(y

谢谢你的回复,很实际。确实是这样的。我改成了if(y>x||y<2*ROWS-x-1),可还是不对。从输出看是printf("\n");的问题,可是我看代码觉得没问题。它应该不是在IF判断语句中。不知为什么

用C打破禁锢的世界
2008-02-09 21:04
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
得分:0 
不要说什么应该不应该,程序里没有什么应该不应该
2008-02-09 21:18
nobush
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2008-1-10
得分:0 
問題多著呢——
printf("\n")控制行尾,應該在第一重循環
你這一句 else if(y<ROWS) 請看一看取値範圍,此判斷永遠為真!
因為列號由x控制,所以第二重循環都是由x來進行比較斷
x 與 y
x 與 2*ROWS-y-1
x 與 ROWS
……
2008-02-10 16:33
寻乐的狼
Rank: 1
等 级:新手上路
帖 子:118
专家分:0
注 册:2007-2-16
得分:0 
[bo]以下是引用 [un]nobush[/un] 在 2008-2-10 16:33 的发言:[/bo]

問題多著呢——
printf("\n")控制行尾,應該在第一重循環
你這一句 else if(y

晕,是的。应改为Y〈X

用C打破禁锢的世界
2008-02-12 14:12
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
得分:0 
这个可以
#include <stdio.h>
#include <stdlib.h>
#define  ROWS 5
int main()
{
    int i=1,x,y,z;
    char A='A',e;
    for(x=1;x<=ROWS;x++)
    {
        for(z=x;z<=ROWS;z++)
            printf(" ");  /*处理两边的空格*/
        for(y=1;y<=x*2-1;y++)
        {
            if(y<=x)
            {
                e=A+y-i;
                printf("%c",e);
            }
            else
            {
                e=e-i;
                printf("%c",e);
            }
        }     
       printf("\n");
    }                                       
    return 0;
}
2008-02-12 15:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-199619-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.810465 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved