C语言循环语句求解详细过程,要求只用循环

img

img

过程看代码注释,但是没法太过详细,如果有不懂的欢迎提问,代码及运行效果如下

#include<iostream>
using namespace std;

char start=0x5B;    //0x5A是大写字母'Z' ,这里相当于'Z'+1 

//因为第二层中间的空格数量只有3个,往后都是每层增加4个空格,因此初始值设为-1
int spaceNum=-1; 

int main(){
    int in,i,j;
    char end;
     scanf("%d",&in);            //输入整数n 
     if(in<2 || in>7){            //如果输入的n不在规定范围内,退出 
         printf("输入的数值有误\n");
         return 0;
     }
     
     //处理上5层 
     for(i=0;i<in;++i){            //先做上5层的显示 
         j=0;
         start--;
         for(int n=0;n<(in-i)*2;n++){        //计算前面空格的数量 
             printf(" ");
         }
         printf("%c",start);
         while(i>0 && j<1){            
             start--;
             spaceNum+=4;            //中间的空格每一层都增加4个, 
             for(int x=0;x<spaceNum;x++){            //计算中间空格的数量 
                 printf(" ");
             }
             printf("%c",start);
             j++;
         }
         printf("\n");
     }
     
     //处理下4层 
     end=start;
     for(i=in-2;i>=0;--i){
         j=0;
         for(int n=0;n<(in-i)*2;n++){    //计算前面空格的数量 
             printf(" ");
         }
         printf("%c",end);
         end--;
         while(i>0 && j<1){
             spaceNum-=4;
             for(int x=0;x<spaceNum;x++){        //计算中间空格 
                 printf(" ");
             }
             printf("%c",end);
             end--;
             j++;
         }
         printf("\n");
     }
      return 0;
}

img

供参考:

#include<stdio.h>
int main()
{
    int i, j, n=5;
    char ch = 'Z';
    //scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        for (j = i; j < n; j++)
            printf("  ");
        for (j = 0; j < 2 * i + 1; j++)
            printf("%c ", (j == 0 || j == 2 * i) ? ch-- : ' ');
        printf("\n");
    }
    ch++;
    for (i = n - 2; i >= 0; i--)
    {
        for (j = i; j < n; j++)
            printf("  ");
        for (j = 0; j < 2 * i + 1; j++)
            printf("%c ", (j == 0 || j == 2 * i) ? ch-- : ' ');
        printf("\n");
    }
    return 0;
}

img


 
#include <stdio.h>
int main()
{
    int i,j,k;
    int n=5;
    int m=0;
    //scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        for(k=1;k<=n-i;k++)
            printf(" ");
        for(j=1;j<=i*2-1;j++)
        {
            if(j==1||j==i*2-1)
            {
                printf("%c",'Z'-m);
                m++;
            }
            else if(j!=1&&j!=i*2-1){
                printf(" ");
            }else {
                printf("%c",'Z'-m);
                m++;
            }
         } 
        printf("\n");
    }
    m=0;
        for(i=n-1;i>=1;i--)
    {
        for(k=1;k<=n-i;k++)
            printf(" ");
        for(j=1;j<=i*2-1;j++)
        {
            if(j==1||j==i*2-1)
            {
                printf("%c",'R'-m);
                m++;
            }
            else if(j!=1&&j!=i*2-1){
                printf(" ");
            }else {
                printf("%c",'R'-m);
                m++;
            }
         } 
        printf("\n");
    }
    return 0;
}
 
#include <stdio.h>

int main(){    
    int x,y,w,h,n = 0;
    char ch = 'Z';
    scanf("%d", &n);
    if(n < 2 || n > 7)return 1;
    w = n * 4 - 1;
    h = n * 2 - 1;
    for (y = 0; y < h; y ++){
        for (x = 0; x < w; x ++){
            printf("%c", ( (x+2*y==h) || (x+2*y==3*h-2) || (x-2*y==h) || (x-2*y==2-h) )?ch--:' ');
        }
        printf("\n");
    }
    return 0;
}
#include <stdio.h>


int main(int argc ,  char *argv[])
{
    int i = 0 ,j = 0;
    int n = 5;
    char ch = 'Z';

    scanf("%d",&n);
    
    for(i = 0; i < n; i++)//按行打印
    {
        if(i == 0)
            printf(" ");//第一行多打印一个空格使字母剧中
        for(j = i ; j < n; j++)//打印字母前面的空格,第一个 j=i=0; j<5,打印5空格
            printf(" ");       //第二行打印4个依次类推

        printf("%c",ch--);//打印完空格打印第一个字母Z ,ch--,为下一个字母打印准备的 

        for(j = 0 ;j < i*2+1 ; j++)//打印两个字母中间的空格
            printf(" ");           //中间空格的个数是行数的两倍,+1为了居中
            

        if(i != 0)//打印第二个字母,因为第一行只有一个字母,所以第一行不打印第二个字母
            printf("%c",ch--);
        printf("\n");//打印换行
    
    }

    ch++;//回退一个字母符合题意
    

    for(i = n-2; i >= 0; i--)//打印下面部分,是从第二行开始打印,所以n-2
    {
        if(i == 0)//以下同理
            printf(" ");
        
        for(j = i ; j < n; j++)
            printf(" ");

        printf("%c",ch--);

        for(j = 0 ;j < i*2+1 ; j++)
            printf(" ");
            

        if(i != 0)
            printf("%c",ch--);
        printf("\n");    
    
    }

}

在VC6的运行效果:

img


#include <stdlib.h>
 
int main()
{
    int i,j,k,n;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        for(k=1;k<=n-i;k++)
            printf(" ");
        for(j=1;j<=i*2-1;j++)
        {
            if(j==1||j==i*2-1)
            {
                printf("A");
            }
            else printf(" ");
         } 
        
        printf("\n");
        
    }
        for(i=n-1;i>=1;i--)
    {
        for(k=1;k<=n-i;k++)
            printf(" ");
        for(j=1;j<=i*2-1;j++)
        {
            if(j==1||j==i*2-1)
            {
                printf("B");
            }
            else printf(" ");
         } 
        printf("\n");
        
    }
    return 0;
}