c语言输出空心菱形

目描述
向标准输出上打印一些用ASCII字符组成的图形。

输入
输入为多个奇数n,1<n<100,至文件尾结束。

输出
输出为多个n层的空心菱形,任意两个图形之间有一个空行分隔,格式见sample。

样例输入
3
7

样例输出
*
* *
*

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

1、首先,输入预处理指令#include <stdio.h>与函数原型void print(int n)。其中,n表示行数。

2、然后,对输入的n进行提前判断,若小于0或为偶数,则结束打印。

3、接着对上半个菱形进行输出(包括最长的行)。使用两层循环进行输出,分别控制行数与行内的位置。

4、接着对下半个菱形进行输出(包括最长的行)。也使用两层循环进行输出,分别控制行数与行内的位置。

5、对n=5与n=7进行输出测试。

6、得到最后结果。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-12-25
用最简单的方法,好理解,但是代码多了一点:
public static void main(String[] args) {
//空心菱形上部分
for (int hui = 0; hui < 7; hui++) {
for (int shou = 0; shou < 6 - hui; shou++) {
System.out.print(" ");//菱形外空部分(上面)
}
for (int tuo = 0; tuo < 1; tuo++) {
System.out.print("*");
}
if (hui != 0) {//等于0时不运行,比前面的“*”上少一个
for (int hu = 0; hu < hui * 2 - 1; hu++) {
System.out.print(" ");//菱形内空部分(上面)
}

for (int hu = 0; hu < 1; hu++) {
System.out.print("*");
}
}
System.out.println();
}

//空心菱形下部分
for (int soso = 0; soso < 7; soso++) {
for (int sos = 0; sos < soso; sos++) {
System.out.print(" ");//菱形外空部分(下面)
}
for (int so = 0; so < 1; so++) {
System.out.print("*");
}
if (soso != 6) {//等于6时不运行,减掉最后请多余的“*”
for (int so = 0; so < (7 - soso) * 2 - 3; so++) {
System.out.print(" ");//菱形内空部分(下面)
}
for (int so = 0; so < 1; so++) {
System.out.print("*");
}
}
System.out.println();
}
}
}
第2个回答  2013-12-12
void main()
{
//输入任意一个100以内奇数n,输出一个n层菱形
int i, j;
int row; //输入的奇数(菱形的行数)
int leftcol;//左边空格的列数;
int center;//奇数的平均值
//此例以21为例
row = 21;
center = row/2;
leftcol = center;
//菱形上半部分
for (i=0; i<center+1; i++)
{
for (j=0; j<center-i; j++)
{
printf(" ");
}
for (j=0; j<=2*i; j++)
{
printf("*");
}
printf("\n");
}
//菱形下半部分
for (i=center; i>0; i--)
{
for (j=center-i+1; j>0; j--)
{
printf(" ");
}
for (j=2*i-1; j>0; j--)
{
printf("*");
}
printf("\n");
}
return;
}
测试成功了,直接编译运行即可
第3个回答  2013-12-12
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
void main(void){
char i,ci,j,cj,n,x,a[20];
printf("Enter some odd(0<n<100,0 end)...\n");
i=0;
while(1){
scanf("%d",a+i);
if(a[i++]==0) break;
}
printf("\n\n");
for(n=0;a[n];n++){
for(x=a[n]/2+1,i=1,ci=0;i;++ci<x ? i++ : i--){
printf("%*.*s",48-i,1,"");
for(j=1,cj=i;j;--cj>0 ? j++ : j--)
printf("%c",j==1 ? '*' : ' ');
printf("\n");
}
printf("\n");
}
}
第4个回答  推荐于2017-09-01
#include<stdio.h>
int main()
{
int i,j,k,line,m;
printf("请输入行数:");
scanf("%d",&line);
m=(line+1)/2;
for(i=1;i<=m;i++)
{
for(k=0;k<m-i;k++)
{
printf(" ");
}
printf("*");
if(i==1){printf("\n");continue;}
for(j=0;j<2*i-3;j++)
{
printf(" ");
}
printf("*");
printf("\n");
}
for(i=m-1;i>0;i--)
{
for(k=0;k<m-i;k++)
{
printf(" ");
}
printf("*");
if(i==1){printf("\n");continue;}
for(j=0;j<2*i-3;j++)
{
printf(" ");
}
printf("*");
printf("\n");
}
return 0;
}

本回答被提问者采纳