热转印www.yxheatpress.com

公司网站模板http://qiyemoban.software8.co/

常用链接

统计

友情链接

最新评论

两个for循环打印菱形【C语言】

 输入数字,打印菱形。

这是一道编程题,更是一道数学题。平常会以for循环打印输出,仔细想想,用两个for完全可以实现(2011-09-26)。

 

以数字5为例:

 

 

方法一(以循环为主打印)

  1. #include <stdio.h> 
  2. void print(int n) 
  3. { 
  4.     int i,j; 
  5.     for(i=1; i<=n; i++) 
  6.     { 
  7.         for(j=1; j<=n-i; j++) 
  8.         { 
  9.             printf(" "); 
  10.         } 
  11.         for(j=n-i+1; j<n+i; j++) 
  12.         { 
  13.             printf("*"); 
  14.         } 
  15.         printf("\n"); 
  16.     } 
  17.      
  18.     for(i=n-1; i>=1; i--) 
  19.     { 
  20.         for(j=1; j<=(n-i); j++) 
  21.         { 
  22.             printf(" "); 
  23.         } 
  24.         for(j=n-i+1; j<n+i; j++) 
  25.         { 
  26.             printf("*"); 
  27.         } 
  28.         printf("\n"); 
  29.     } 
  30. } 
  31.  
  32. void main() 
  33. { 
  34.     int n; 
  35.     printf("---------开始打印符号---------\n"); 
  36.     printf("请输入数字:"); 
  37.     scanf("%d",&n); 
  38.     print(n); 
  39.     printf("---------结束打印符号---------\n");     
  40. } 

 

方法二:(两个for,根据条件判断实现)

  1. #include <stdio.h> 
  2. //输出格式 
  3. void print(char ch) { 
  4.     putchar(ch); 
  5. } 
  6. //星号 
  7. void printstar(int n) 
  8. { 
  9.     int i,j;    //行,列 
  10.     for(i=0; i<2*n-1; i++) 
  11.     { 
  12.         for(j=0; j<2*n-1; j++) 
  13.         { 
  14.             if(i<n) 
  15.             { 
  16.                 if(j>=n-i-1&&j<n+i) 
  17.                 { 
  18.                     print('*'); 
  19.                 } 
  20.                 else 
  21.                 { 
  22.                     print(' '); 
  23.                 } 
  24.             } 
  25.             else 
  26.             { 
  27.                 if(j>=i-n+1&&j<3*n-i-2) 
  28.                 { 
  29.                     print('*'); 
  30.                 } 
  31.                 else  
  32.                 { 
  33.                     print(' '); 
  34.                 } 
  35.             } 
  36.  
  37.         } 
  38.         print('\n'); 
  39.     } 
  40. } 
  41.  
  42. void main() 
  43. { 
  44.     int n; 
  45.     printf("---------开始打印符号---------\n"); 
  46.     printf("请输入数字:"); 
  47.     scanf("%d",&n); 
  48.     printstar(n); 
  49.     printf("---------结束打印符号---------\n");     
  50. } 

 

说明:(2n-1)—(n-i-1)= n+i

      (2n-1)— (-(n-i-1))= 3n-i-2

 

以18为例

 

posted on 2013-05-07 14:17 不听话的 阅读(5712) 评论(5)  编辑 收藏 引用

评论

# re: 两个for循环打印菱形【C语言】 2013-05-07 16:35 溪流

“平常会以for循环打印输出,仔细想想,用两个for完全可以实现”看不明白,平常会用几个for循环的意思?  回复  更多评论   

# re: 两个for循环打印菱形【C语言】 2013-05-07 22:48 Jcilz

呵呵,上学时刚学C语言做过,老师给的作业。
几个循环我不记得了,
我记得当时刚学编程,入门级别,经过硬着头皮分析最后得出的是两个直线方程,然后用代码跑这两个方程输出东西,接着就对编程有了一些新的感悟。  回复  更多评论   

# re: 两个for循环打印菱形【C语言】 2013-05-07 23:38 Jcilz

// 输入打印高度
void printStar(int h)
{
int halfH = h/2;

for (int line = 0; line < h; ++line)
{
int spaceCount = -1 * line + halfH;
if (line > halfH)
spaceCount = 1 * line - halfH;
for (int i = 0; i < spaceCount; ++i)
{
printf(" ");
}

int starCount = 2 * line - 1;
if (line > halfH)
starCount = -2 * line + h*2 - 1;
for (int i = 0; i < starCount; i++)
{
printf("*");
}
printf("\n");
}
}

哈哈,怀旧一下,当时的做法。  回复  更多评论   

# re: 两个for循环打印菱形【C语言】 2013-05-07 23:46 nbuxrr

单个while循环似乎也可以搞定。  回复  更多评论   

# re: 两个for循环打印菱形【C语言】 2013-05-08 01:59 bbq

一个for 循环也可以搞定:
void printStar(int h) {
for (int i = 0; i<( h*2-1)^2; i++) {
int col=i%(h*2-1)
int row=i/(h*2-1)
if 判断条件 then print *
else print ' '
}  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航:   博客园   博客园最新博文   博问   管理