论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

关于输入环状图形的三种方法

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:36:25

输出如下图形:

A A A A A A A A A A A A A
A B B B B B B B B B B B A
A B C C C C C C C C C B A
A B C D D D D D D D C B A
A B C D E E E E E D C B A
A B C D E F F F E D C B A
A B C D E F G F E D C B A
A B C D E F F F E D C B A
A B C D E E E E E D C B A
A B C D D D D D D D C B A
A B C C C C C C C C C B A
A B B B B B B B B B B B A
A A A A A A A A A A A A A
我找到了两种不同形式的思路,一种是以输出行数为标准,一种是以圈数为标准,各有优点,而且对编辑类似图形有启发.

第一种,以输出行数为标准,用户输入想输出的行数,利用该位置是否已被占和是否为边界位置进行双重判定,满足条件则将该位置存入数组,最后输出数组.源代码如下:

#include<stdio.h>
#include<stdlib.h>

int main (void)
{
   FILE *fp;
 int i, sum, total, row, line;/*sum表示总的圈数*/
 char ch;
   char count[80][80];
  
   puts("Enter the total of row: ");
   scanf("%d",&total);
   for(row=1; row<=total; row++)
    for(line=1; line<=total; line++)
       count[row][line]=0 ;

   if(total%2 == 0)/*根据输入数据的奇偶性,确定圈数*/
    sum=total/2;
   else
    sum=total/2+1;
 
  for(ch=65,i=1; i<=sum; i++,ch++)/*sum表示总的圈数*/
     for(row=1; row<=total; row++)
         for(line=1; line<=total; line++)
           if (0 == count[row][line])/*该位置是否已被占*/
              if( row == i || row ==(total-i+1) || line == i || line == (total-i+1) )/*是否为边界位置*/
            count[row][line]=ch;
     
   if ( (fp=fopen("sdas.txt","w")) == NULL)
    {
        fprintf(stderr,"\nError opening file \n");
    exit(1);
    } 
  
   for(row=1; row<=total; row++)/*输出数组(即图案)*/
   {
   for(line=1; line<=total; line++)
       {
           fprintf(fp, "%c ", count[row][line]);
           fprintf(stdout, "%c ", count[row][line]);
         }  
   fprintf(fp, "\n");
  fprintf(stdout, "\n");
   }   
    
   system("pause");
   return 0;
}     
 

第二种,以输出圈数为标准,用户输入想输出的圈数,利用循环语句分别输出上下左右四条边,注重每个圈往里缩一个位置.源代码如下:(注:头文件和输出语句相同)

int main (void)
{
   FILE *fp;
 int i, total, row, line;
 char ch;
   char count[80][80];
  
   puts("Enter the total of rings: ");
   scanf("%d",&total);
   ch=65;
  
   for( i=1; i<=total; i++)/*利用循环语句分别输出上下左右四条边,注重每个圈往里缩一个位置*/
   {
      for(row=i, line=i; line<=2*total-i; line++)
       count[row][line]=ch;
      for(row=2*total-i, line=i; line<=2*total-i; line++)
       count[row][line]=ch;
      for(row=i, line=i; row<=2*total-i; row++)
       count[row][line]=ch;
      for(line=2*total-i, row=i; row<=2*total-i; row++)
       count[row][line]=ch;
      ch++;
   }

第三种,综合前两种的优点,综合利用循环语句和判定语句输出上下左右四条边,注重每个圈往里缩一个位置.

源代码如下:(注:多数和第二种相同,只输出改编部分) 

 for( i=1; i<=total; i++)/*利用判定语句输出上下左右四条边,注重每个圈往里缩一个位置*/ 
   {
    for(row=i; row<=2*total-i; row++)
     for(line=i; line<=2*total-i; line++)
        if(row == i || row == 2*total-i || line == i || line == 2*total-i)
             count[row][line]=ch;
    ch++;
   }

呵呵,一点心得,和各位网友分享,假如你能从中得到一点启发,将是我莫大的骄傲!

视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058