C语言---打印空心菱形

首先找出上尖三角形的空格和*之间的规律,利用for循环的嵌套来输出上尖三角形,if是用来判断是否输出到最后一个*号,如果是就换行。

    int n = 4;

    for(int i = 1 ; i <= n ; i++){
        for(int j = n - i ; j > 0 ; j-- ){  // n - 1 为每一行需要输出的空格数量
            printf(" ");
        }
        for(int x = 1 ; x <= 1+(2*(i-1)) ; x++) //1+(2*(i-1)) 为每一行需要输出的*数量
        {
            printf("*");
            if(x == 1+(2*(i-1)))   //判断是否输出到最后一个 *  如果是就换行
            {
                printf("\n");
            }
        }
    }

然后再补齐下半部分三角,需要注意的是上面的三角形是n = 4 行,但是下部分只需要三行

    for(int x = 1 ; x < n ; x++){
        for(int j = 1 ; j <= x ; j++){
            printf(" ");
        }
        for(int y = 1+(n - x -1)*2 ; y > 0; y--){

            printf("*");
            if(y-1 == 0)
            {
                printf("\n");
            }

        }
    }

到这里为止,我们已经打印好了实心的菱形,行数为n*2 -1 行。接下来只需要把实心挖空就可以输出空心菱形。

int n = 4;

    for(int i = 1 ; i <= n ; i++){
        for(int j = n - i ; j > 0 ; j-- ){
            printf(" ");
        }
        for(int x = 1 ; x <= 1+(2*(i-1)) ; x++)
        {
            if(1 == x || x == 1+(2*(i-1))) {
                printf("*");
            }else{
                printf(" ");
            }

            if(x == 1+(2*(i-1)))
            {
                printf("\n");
            }
        }
    }

    for(int x = 1 ; x < n ; x++){
        for(int j = 1 ; j <= x ; j++){
            printf(" ");
        }
        for(int y = 1+(n - x -1)*2 ; y > 0; y--){

            if(y == 1+(n - x -1)*2 || y-1 == 0) {
                printf("*");
            }else{
                printf(" ");
            }
            if(y-1 == 0)
            {
                printf("\n");
            }

        }
    }

这段代码和上面的区别就在于 输出*的for循环中加入了一个来if判断 ,if输出第一个*和最后一个*的时候按照 *来输出,如果是其他位置不输出*而是输出空格“ ”,这样就达到了挖空的目的

时间: 2024-10-03 22:24:49

C语言---打印空心菱形的相关文章

c语言打印空心菱形

***算法:把菱形的中心看成坐标的原点(0,0),由此可以知道,如果|x| + |y| <= n;则打印输出"*"号,否则打印输出" " int mai(){ int n; printf("请输入来那个菱形边长:"); scanf("%d",&n); //打印实心菱形 for (int x = -(n-1); x <= n-1; x++){ for (int y = -(n-1); y <= n-1;

(四)、利用命令行参数输入一个整数,打印空心菱形

1 /*利用命令行参数输入一个整数,并判断该数字是否为奇数,如果是奇数,则用其作行数打印空心菱形 2 –PS:将字符串转换为数字的方法 3 •int num=Integer.parseInt(String number);*/ 4 5 package com.gen; 6 public class ArgumentKongLing { 7 public static void main(String args[]) 8 { 9 for (int m= 0; m < args.length;m++

for循环打印空心菱形的新方法

相信大家在学习流程控制的循环结构时,一定都用for循环绘制过菱形和空心菱形吧,我记得我当时写的很麻烦,把一个菱形分为上下两部分,上面2重for循环,下面2重for循环,相信有很多的小伙伴都是这样做的吧,但是这样也造成了很多的代码冗余,今天无意间看到另外一种简便的方法,具体思路和实现过程如下图所示: 思路:   1.先画一个正方形,边长为奇数. 2.定义每一行的初始位置和结束位置,初始值为:边长/2+1. 3. 在每一行的输出位置和结束位置打印*,即为最中间的一条竖线. 4.改变初始位置和结束位置

打印空心菱形

// 空心棱形function Rect(){ var rows=10; var cols=20; for(var i=0;i<cols;i++){ for(var j=0;j<(cols-i);j++){ document.write(" "); } for(var k=0;k<(2*i-1);k++){ if(k>0 && k<2*i-2){ document.write(" ") } else{ document.

PHP练习--用for循环打印空心菱形

思路:1,写出代码打印实心的金字塔 2.修改代码,把金字塔抛空 3.修改代码,把金字塔倒转 4.修改倒转后的代码,把金字塔抛空 5.修改代码,把具体的数进行参数化 1.写出代码打印实心金字的金字塔: <?php //$n=5; for($i=1;$i<=5;$i++){ //打印空格 for($j=1;$j<=5-$i;$j++){ echo " "; } //打印*号 for($k=1;$k<=2*$i-1;$k++){ echo "*";

java 打印空心菱形

public class Demo { public static void main(String[] args) { //首先.把菱形看成上下两部分,上五下四,所以,第一个for循环有5次,第二个for循环有4次 for( int i = 1; i <= 5; i++){ //将空格和*分开看,看" "的变化i=1时,它是4,2的时候是3,找规律 for( int j = 1; j <= 5-i ; j++){ System.out.print(" "

使用for循环打印矩形和三角形、菱形、空心菱形

打印矩形 **************************************************************************************************** public class Demo3_712 { public static void main(String args[]){ for(int i=1;i<=10;i++){ //控制行 for(int j=1;j<=10;j++){ //控制列 System.out.print(&

案例&gt;&gt;&gt;用绝对值的方法打印出菱形

import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入菱形的层高(层高为奇数):"); int num = sc.nextInt(); // 控制输入层高为奇数 while (num % 2 == 0) { System.out.println(&q

C语言 空心菱形打印

/* 打印出空心菱形. * * * * * * * * * * * * * * * * */ #include <stdio.h> void main() { int i,j; for(i = 0; i < 5; i++) { for(j = 0; j < 4 - i; j++) { printf(" "); } printf("*"); for(j = 0; j < 2 * i - 1; j++) { printf(" &q