打印空的星号三角形c
我查了一下,只发现了普通三角形的问题。 这个有点棘手 给定一个N,你的程序应该创建一个N边大小的星号未填充三角形 这是我的尝试,我只能低效地创建一个填充三角形打印空的星号三角形c,c,loops,printing,draw,C,Loops,Printing,Draw,我查了一下,只发现了普通三角形的问题。 这个有点棘手 给定一个N,你的程序应该创建一个N边大小的星号未填充三角形 这是我的尝试,我只能低效地创建一个填充三角形 void q39(){ int n,i,b; printf("Inform N: "); scanf ("%i",&n); for ( i = 0; i < n; ++i) { printf("*"); for ( b = 1; b < n; ++b) {
void q39(){
int n,i,b;
printf("Inform N: ");
scanf ("%i",&n);
for ( i = 0; i < n; ++i)
{
printf("*");
for ( b = 1; b < n; ++b)
{
if (i==0)
{
printf("*");
}
else if (i==1 && b>1)
{
printf("*");
}
else if (i==2 && b>2)
{
printf("*");
}
else if(i==3 && b>3){
printf("*");
}
else if(i==4 && b>4){
printf("*");
}
else if(i==5 && b>5){
printf("*");
}
else if(i==6 && b>6){
printf("*");
}
else if(i==7 && b>7){
printf("*");
}
else if (i==8 && b>8){
printf("*");
}
}
printf("\n");
}
}
void q39(){
int n,i,b;
printf(“通知N:”);
scanf(“%i”和“&n”);
对于(i=0;i1)
{
printf(“*”);
}
else如果(i==2&&b>2)
{
printf(“*”);
}
else如果(i==3&&b>3){
printf(“*”);
}
else如果(i==4&&b>4){
printf(“*”);
}
else如果(i==5&&b>5){
printf(“*”);
}
else如果(i==6&&b>6){
printf(“*”);
}
else如果(i==7&&b>7){
printf(“*”);
}
else如果(i==8&&b>8){
printf(“*”);
}
}
printf(“\n”);
}
}
我只是给你一个逻辑,你可以处理它。
你可以绕三圈。一行表示i,第二行表示*(星号)表示j,第三行表示空格(空三角形)表示k。现在,我希望你们知道如何用I,j来做一个三角形。
k的逻辑可能是,它的执行时间应比行的循环(即第j个循环)少1,并应打印一个空格(“”)
你可以像这样把你的问题分成几个模块
print_asterisk(n);
print_hollow_asterisk();
print_asterisk(1);
您需要考虑打印三角形的算法。您(可能)需要绘制三种不同类型的线:
第2步-确定何时打印上述行,这是一个可以大量优化的问题的较长版本
void print_start_and_end_asterix( int n )
{
int i = 0;
for ( ; i < n ; i ++ )
{
if( i == 0 || i == n-1 )
printf("*");
else
printf(" ");
}
printf("\n");
}
void print_full_row( int n )
{
int i = 0;
for ( ; i < n ; i ++ )
printf("*");
printf("\n");
}
int main (){
int n;
scanf("%d", &n);
int row = 0 , col = n;
for ( row = 0 ; row < n ; row ++ , col--) {
if( row == 0 )
print_full_row(col);
else
print_start_and_end_asterix(col);
}
return 0;
}
void print\u start\u和\u end\u asterix(int n)
{
int i=0;
对于(;i
正在绘制的三角形是二维图形,因此可以使用两个嵌套的for
循环来绘制。外部循环跟踪正在绘制的行。内部循环跟踪列。对于行
和列
的每个组合,必须做出一个非常简单的决定,我们是输出一个星号,还是输出一个空格
从外环开始。外部循环从N倒计时到1是有意义的,因为一行中的字符数从N开始,一直减少到1。所以外环是
for ( row = N; row >= 1; row-- )
接下来是内部循环。内部循环需要计算每行的字符数。我们已经安排好了,使得外部循环中的行
变量等于字符数。因此,内部循环非常简单
for ( col = 0; col < row; col++ )
最后,内部循环完成后,我们需要输出换行符以开始下一行
putchar( '\n' );
这就是它的全部内容。您只需要认为第一行应该用
*
第二件事是每行的第一个字符应该是
*
最后一个字符也应该是
*
。在这两者之间,你需要填充空格
int main()
{
int n=6;
for(int i=n-1;i>=0;i--) // using n-1, bcz loop is running upto 0
{
for(int j=0;j<=i;j++)
{
if(i==n-1 || j==0 ||i==j)
printf("*");
else
printf(" ");
}
printf("\n");
}
return 0;
}
请尝试做你自己的工作。Stackoverflow不是代码编写服务。如果你对你的代码有任何特别的困难,那么请发布它(作为一个),解释问题并问一个特别的问题。我已经做了一个尝试“发布代码并问一个特别的问题”部分如何?对不起,只是我认为我的代码太糟糕了,无法向你们展示,但我还是会发布它。。。如果这不是你的本意,我向你道歉。但是你需要从读者的角度来看待它。您转储的作业问题没有尝试的代码,也没有特定的问题。你希望人们得出什么结论?即使现在你仍然没有问一个问题。你是说代码太长了,或者运行时间太长了,或者只是一般来说,如何才能更好地编写代码,或者。。。?我猜是后者…但我只是想解释清楚问题是你的职责,而不是我们的职责。谢谢,我想也许我可以制作一个函数,它可以打印一行,每行有两个星号,每边有一个指定的大小,比如:1**,2将打印**,3**你知道吗?一个接受整数的函数,该整数是2之间的空格数asterisks@LeonardoDias是的,有很多方法可以解决这个问题。如果复杂性不重要,你可以选择你最喜欢的方法。
putchar( '\n' );
int main()
{
int n=6;
for(int i=n-1;i>=0;i--) // using n-1, bcz loop is running upto 0
{
for(int j=0;j<=i;j++)
{
if(i==n-1 || j==0 ||i==j)
printf("*");
else
printf(" ");
}
printf("\n");
}
return 0;
}
******
* *
* *
* *
**
*