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

 

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

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

 

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

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

 

18为例

 

posted on 2013-05-07 14:17 不听话的 阅读(5392) 评论(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 ' '
}  回复  更多评论   


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理