读书人

C++中怎么循环输出*字符

发布时间: 2012-02-12 17:16:33 作者: rapoo

C++中如何循环输出*字符
在C++中如何输出以下字符啊?鄙人初学还望高手赐教!
*******
*****
***
*
***
*****
*******

[解决办法]

C/C++ code
 

#include "stdlib.h"
#include <iostream.h>
#include <memory.h>

voidff(int width/*宽度*/)
{
if(!(width%2)) ++width; //如果输入的不是单数自动加1;

int hf = width/2;
int high = 2*hf+1;


char *p = (char*)malloc(width*high);
memset(p,'*',width*high);

int temp = width-2;
for(int row=1,col=1;row <=high-2;row++)
{
if(row>hf)
{
col--;
temp +=2;
for(int k=0;k <col;k++)
{
*(p+row*width+k) = ' '; //替换为空白
*(p+row*width+col+temp+k) = ' '; //替换为空白
}
}
else
{
for(int j=0;j <col;j++)
{
*(p+row*width+j) = ' '; //替换为空白
*(p+row*width+col+temp+j) = ' '; //替换为空白
}

if(row <hf)
{
temp -=2;
col++;
}
}
}

for(int n=0;n <high;n++)
{

for(int m=0;m <width;m++)
{
cout < <*(p+n*width+m);
}
cout < <endl;
}


}


void main()
{
int n;
cout < <"请输入一个单数,该数指示打印宽度 nWidth=";
cin>>n;
if(n>1)
ff(n);
}



[解决办法]
#include "stdafx.h"
#include "stdlib.h"
#include <iostream>
#include <memory.h>
using namespace std;

void ff(int width)
{
int i,j;
//第一步打印上半部分
for(i=0;i<width;i+=2)
{
//打印空格
for(j=0;j<i;j++)
printf(" ");
//打印*
for(j=0;j<width - i;j++)
printf("*");
//换行
printf("\n");
}

//打印下部分,注意要少一行。
for(i=2;i<width;i+=2)
{
for(j=0;j<width - i - 1;j++)
printf(" ");
for(j=0;j<i+1;j++)
printf("*");
printf("\n");
}
}


void main()
{
int n;
cout<<"请输入一个单数,该数指示打印宽度 nWidth=";
cin>>n;
if(n>1)
ff(n);
}
[解决办法]
不用楼上 那么麻烦!!!!

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

#include<iostream>
using namespace std;
void main()
{
int i,j,n=4;
for(i=1;i<=n;i++) //输出前4行图案
{
for(j=1;j<i;j++) //输出空格
cout<<' ';
for(j=7;j>=2*i-1;j--) //输出*
cout<<'*';
cout<<endl;
}
for(i=1;i<=n-1;i++) //输出后3行图案
{
for(j=2;j>=i;j--) //输出空格
cout<<' ';
for(j=1;j<=2*i+1;j++) //输出*
cout<<'*';
cout<<endl;
}
}

*******************************
全用循环解决
[解决办法]
出这个题目就是要你用递归的:
#include <iostream>
using namespace std;

void printStars(int num)
{
int gapNum = (7 - num) / 2;
int i;
for(i = 0; i != gapNum; ++i)
cout << " ";
for(i = 0; i != num; ++i)
cout << "*";
cout << endl;

if(gapNum != 3)
printStars(num - 2);



else//只需要打印一个星号,且只打印一行
return;

for(i = 0; i != gapNum; ++i)
cout << " ";
for(i = 0; i != num; ++i)
cout << "*";
cout << endl;
}

int main(int argc, char *argv[])
{
printStars(7);

return 0;
}
[解决办法]

C/C++ code
#include <iostream>#include <string>#include <cmath>using namespace std;int main(){    int n=9;    for ( int i = 0; i < n; ++i )    {        cout << string(n / 2 - abs( n / 2 - i ), ' ')<<string(2 *abs( n / 2 - i ) +1, '*')<<endl;    }    return 0;} 

读书人网 >C++

热点推荐