习题4-9 打印菱形图案(15分)

本题要求编写程序,打印一个高度为n的、由 “*” 组成的正菱形图案。

输入格式:

输入在一行中给出一个正的奇数n。

输出格式:

 输出由n行星号 “*” 组成的菱形,如样例所示。每个星号后跟一个空格。

输入样例:

7

输出样例:

       * 
    * * * 
  * * * * * 
* * * * * * * 
  * * * * * 
    * * * 
      * 

#include <stdio.h>

int main()
{
    int i,j,n;
    scanf("%d",&n);
    int k=(n+1)/2;
    for(i=1;i<=k;i++){
        for(j=1;j<=n-2*i+1;j++){
            printf(" ");
        }
        for(j=1;j<=2*i-1;j++){
            printf("* ");
        }
        printf("\n");
    }
    for(i=n-k;i>=1;i--){
        for(j=1;j<=n-2*i+1;j++){
            printf(" ");
        }
        for(j=1;j<=2*i-1;j++){
            printf("* ");
        }
        printf("\n");
    }
    
    return 0;
}

运行结果:  

 题目解析:

  1. 看到此题目,要想到用循环的嵌套来解决此问题;
  2. 嵌套的循环可以构成一个平面图案,用 i 控制行, j 控制列;
  3. 用一个外循环来打印行,此题目需要我们打印一个菱形图案,可以将图案分为上下两个部分,并对上下两个部分的图行进行仔细分析,找出一行中空格和 * 号的数量规律。
  4. 以输出的样例为题目,总共由7行,先分析第一行到第四行的规律:第一行:6个空格,一个* ;6=7-(2*1-1) 。第二行:4个空格,3个* ;4=7-(2*2-1)  。第三行:2个空格,5个* ;2=7-(2*3-1) 。 第四行:0个空格,7个* ; 0=7-(2*4-1) 。因此,可以找出列号(j)和行号(i)、空格之间的关系:j<=n-2*i+1;  列号(j)和行号(i)、* 号之间的关系:j<=2*i-1。
     for(i=1;i<=k;i++){                  //打印行
            for(j=1;j<=n-2*i+1;j++){             //打印空格
                printf(" ");
            }
            for(j=1;j<=2*i-1;j++){        //打印*和空格
                printf("* ");
            }
            printf("\n");               //换行
        }
  5. 分析图形的下半部分,第5行到第六行,可以再用一个for循环来控制,外循环的i从     n-(n+1)/2开始,这里需要注意的地方是每一行图形的数量是依次减少的,空格的数量是依次增加的,同样找出图形的规律,用循环的嵌套将此图形实现。

二 、习题延申

上面打印的图形,每两个 * 号之间有一个空格,且写的代码用了两个循环的嵌套,针对此类题目做一个优化,接下来写的代码,和此题目类似,区别是用一个循环的嵌套来输出图形。此代码输出的图形每两个*号之间没有空格,只要找准(*)星号,空格,n之间的关系,解决此类题目的方法都一样。

#include <stdio.h>
#include<math.h>
int main()
{
    int n,i,j,k;
    scanf("%d",&n);
    k=(n+1)/2;
    for(i=1;i<=n;i++){    //打印行
        for(j=1;j<=abs((n+1)/2-i);j++){  
            printf(" ");       //打印空格
        }
        for(j=1;j<=n-abs((k-i))*2;j++){
            printf("*");      //打印*
            
        }
        printf("\n");       //换行
    }
    return 0;
}

1、abs()函数:绝对值函数;

2、以n=9为例,给出下列解题思路。

 

三、

打印空的菱形,空菱形的特点是只有第一个和最后一个位置上需要打印*,其余打印空格。

#include <stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
    int n,i,j,k;
    scanf("%d",&n);
    k=(n+1)/2;
    for(i=1;i<=n;i++){    //打印行
        for(j=1;j<=abs((n+1)/2-i);j++){  
            printf(" ");       //打印空格
        }
        for(j=1;j<=n-abs((k-i))*2;j++){
            if(j==1||j==n-abs((k-i))*2){
                printf("*");      //打印*
            }else{
                printf(" ");   //打印*号中间的空格
            }
        }
        printf("\n");       //换行
    }
    return 0;
}

  • 108
    点赞
  • 542
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论
### 回答1: 题目描述: 编写一个程序,打印出如下所示的菱形图案。 * *** ***** ******* ********* ******* ***** *** * 输入格式: 本题输入。 输出格式: 按照下列格式输出菱形图案: * *** ***** ******* ********* ******* ***** *** * 输出样例: * *** ***** ******* ********* ******* ***** *** * 提示: 1. 要打印菱形图案,需要使用嵌套循环。 2. 菱形的上半部和下半部是对称的,可以打印出来。 3. 菱形的每一行的空格数和星号数都是有规律的,可以根据行数来计算。 ### 回答2: 习题4-9是要求打印一个菱形图案。首先,我们需要了解菱形的特点:它由一串奇数个*组成,上半部是由空格和*组成的的等边三角形,下半部是对称的。根据这个特点,我们可以使用循环和条件语句来实现。 首先,我们定义一个变量n,表示菱形的行数。然后我们可以将菱形拆成两部打印:上半部和下半部。 上半部打印可以为两个步骤:打印空格和打印*号。首先,我们设定一个变量k,表示当前行的空格数。根据菱形的对称性,空格数逐行递减,从n-1开始,步长为-1,直到0。在每一行的开始,我们使用一个for循环打印k个空格。然后,我们设定一个变量m,表示当前行的*号数。*号数逐行递增,从1开始,步长为2,直到2*n-1为止。在每一行的结尾,我们使用一个for循环打印m个*号。 下半部打印与上半部类似,不同的是,空格数逐行递增,而*号数逐行递减。 下面是完整的代码实现: ```python n = int(input("请输入菱形的行数:")) # 打印上半部 for i in range(n): k = n - 1 - i for j in range(k): print(" ", end="") m = 2 * i + 1 for j in range(m): print("*", end="") print() # 打印下半部 for i in range(n-2, -1, -1): k = n - 1 - i for j in range(k): print(" ", end="") m = 2 * i + 1 for j in range(m): print("*", end="") print() ``` 通过以上代码,我们可以根据输入的行数打印出相应的菱形图案。 ### 回答3: 习题4-9 要求打印一个菱形图案,可以用以下程序实现: ```python rows = int(input("请输入菱形的行数:")) # 输入菱形的行数 for i in range(1, rows+1): # 打印上半部菱形 for j in range(1, rows-i+1): print(" ", end="") for j in range(1, 2*i): print("*", end="") print() for i in range(rows-1, 0, -1): # 打印下半部菱形 for j in range(1, rows-i+1): print(" ", end="") for j in range(1, 2*i): print("*", end="") print() ``` 程序首先读取用户输入的菱形行数,然后进行上半部和下半部的循环打印。上半部的每一行,先打印一定数量的空格,然后打印一定数量的星号字符。下半部的每一行,也是先打印一定数量的空格,然后打印一定数量的星号字符,不过星号数量递减。整体效果就是打印一个菱形图案。 比如,输入行数为5时,程序的输出如下: ``` * *** ***** ******* ********* ******* ***** *** * ``` 这样就完成了习题4-9的要求

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小言同学Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值