利用for循环打印实心棱形和空心棱形

一.要求:

提示用户输入棱形的行数,比如输入5时,打印如下实心棱形和空心棱形(由于排版问题,可能显示会有变形):

*

***

*****

***

*

*

* *

*   *

* *

*

二.分析:

A.图形是上下对称的

B.每行先打印空格,再打印星号,后面的空格不用打印

C.中间行不打印空格,其余行根据与中间的行距,依次增加打印空格的数量

D.每行打印的星号数量为最大列宽减去此行打印空格数量的两倍

三.实现:

import java.util.Scanner;

public class loopDemo{

public static void main(String [] args){

Scanner sc = new Scanner(System.in);

System.out.print("请输入需要打印的棱形行数:");//提示输入

int num = sc.nextInt();    //读取输入

int mid = num/2+1;  //计算中间行

System.out.printf("%d行实心棱形如下:\n",num);

for(int i=1;i<=num;i++){

int x = 0;                //用于记录每行开始打印的空格数,每行都需要先将打印的空格数x置零,所以不能放到循环外面

/*

if(i <= mid){

for(int j=1;j<=mid-i;j++) {

System.out.printf(" ");

x=j;//记录行首打印的空格数,最后一次赋值不会执行,所以x=j,而不是x=j-1

}

for(int j=1;j<=num-2*x;j++) {

System.out.printf("*");

}

}

if(i > mid) {

for(int j=1;j<=i-mid;j++){

System.out.printf(" ")

;x=j;

}

for(int j=1;j<=num-2*x;j++) {

System.out.printf("*");

}

}

//上面的逻辑其实相同,可以采用下面的绝对值来进行简化

*/

for(int j=1;j<=Math.abs(mid-i);j++) {

System.out.printf(" ");//每行先打印空格

x=j;//并记录每行行首打印的空格数

}

for(int j=1;j<=num-2*x;j++) {//每行*号数量为总的数量减去两端的空格数量

System.out.printf("*");//每行打印* 号

}

System.out.println();//每行行尾才打印换行符

}

System.out.printf("%d行空心棱形如下:\n",num);

for(int i=1;i<=num;i++){

int x=0;

for(int j=1;j<=Math.abs(mid-i);j++) {

System.out.printf(" ");//每行先打印空格

x=j;//并记录每行行首打印的空格数

}

for(int j=1;j<=num-2*x;j++) {//每行*号数量为总的数量减去两端的空格数量

if(j == 1 || j == num-2*x) System.out.printf("*");//每行打印* 号

else System.out.printf(" ");

}

System.out.println();//每行行尾才打印换行符

}

}

}

时间: 2024-08-09 06:35:35

利用for循环打印实心棱形和空心棱形的相关文章

使用C语言,利用for循环打印菱形(每个相邻菱形都要带空格)

之前看到网上的一些文章介绍如何打印菱形,但是和我当时题目要求的却不一样,网上的代码输出出来时每个相邻菱形并没有带空格. 我现在所介绍的是每个相邻菱形间都带有空格的代码. 习题及代码如下: 用*输出边长为n的实心菱形. * * * * * * * * * printf("请输入一个整数:"); int n = 0; scanf("%d",&n); //打印行数,注意必须是奇数行所以是2n-1 for (int i = 1; i <= 2*n - 1; i

利用for循环打印三角形,菱形,字母等

三角形: # 打印等腰三角形 # 控制行 for i in range(1,6): #更改打印起始位置 for k in range(1,6-i): print(end=" ") #控制列,规则是第一行一列,第二行二列 for j in range(6-i,6): print("*",end = " ") print() print("="*20) # 空心 # 控制行 for i in range(1,6): #更改打印起始

C#利用for循环打印图形练习题

(1) namespace ConsoleApp2 { class Program { static void Main(string[] args) { for(int i = 0; i < 5; i++)//外层循环控制的是行数 { for(int j = 0; j <= i; j++)//内层循环控制的是列数,控制是每行打印的内容及个数 { Console.Write("*"); } Console.WriteLine(); } Console.ReadLine();

5、利用for循环打印 9*9 乘法表。

public class Test {// 定义类      public static void main(String[] args) {// 主函数,程序的入口             for(int i=1;i<=9;i++){                   for(int j=1;j<i+1;j++){                           System.out.print(j+"*"+i+"="+j*i+" &q

python 利用 for 循环 打印数字图案

示例1: print(' ', end='') for i in range(1, 10): print(str(i).rjust(3), end='') print() for i in range(1, 10): print(i, end='') for j in range(1, 10): if i != j: print(' '*3, end='') else: print(str(i*j).rjust(3), end='') print() 示例2: print(' ', end=''

使用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(&

Java多线程循环打印ABC的5种实现方法

题目:3个线程循环打印ABC,其中A打印3次,B打印2次,C打印1次,循环打印2轮一.Synchronized同步法思路:使用synchronized.wait.notifyAll的方法利用线程标记变量控制三个线程的执行顺序. /** * @author XDarker * 2018-5-17 */public class Main { public static void main(String[] args) throws InterruptedException { int num = 1

c语言循环打印问题之A-F及VC6++断点开发工具的使用

1. 利用for循环输出 ABCDEF 6个 1->6BCDEF 5个 2->6CDEF 4个 3->6DEF 3个 4->6EF 2个 5->6F 1个 6 行 row 1->6列 col 'A'+row #include <stdio.h> int main() { int rows = 6; char ch = 'A'; //可以先把问题简单化 //输出6行A-F for(rows = 0; rows < 6; rows++) { for(ch

用循环打印出多种三角形

打印一排*,很简单,打印下图 也很简单,代码如下: 1 public class Work10_3 { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 // TODO Auto-generated method stub 8 int a=0; 9 while(a<4){ 10 int i=0; 11 while(i<10){ 12 System.out.print("*");