在 C 中打印三角形
Printing triangle in C
我是 C 的新手,我有这个程序,我试图根据三角形的高度打印一个三角形:
/\
/__\
所以如果高度是2,那么'/'、'\'和'_'就有2个。
所以我写了这些代码块:
#include <stdio.h>
int main(void)
{
int noOfRows;
printf("Enter height: ");
scanf("%d", &noOfRows);
int counter, rowNumber;
for (rowNumber = 0 ; rowNumber < noOfRows; rowNumber++)
{
// For each row, insert numberOfRows - N spaces before printing
for (counter = 0 ; counter < noOfRows- rowNumber ; counter++)
printf(" ");
// For each row, print N times the character
printf("/");
for (counter = 0; counter < noOfRows; counter++)
printf("\");
printf(" ");
printf("\n");
}
return 0;
}
然而,当我输入 3 作为高度时,它会给我这样的输出。
/\\
/\\
/\\
我想在每个新行出现时获得更多 space 的 '\',但我不确定应如何修改 for 循环以正确形成三角形。请让我知道是否应该再添加问题以使其更清楚。
我对代码进行了更改,目前有:
#include <stdio.h>
int main(void)
{
int noOfRows;
printf("Enter height: ");
scanf("%d", &noOfRows);
int counter, rowNumber;
for (rowNumber = 0 ; rowNumber < noOfRows; rowNumber++)
{
// For each row, insert numberOfRows - N spaces before printing
for (counter = 0 ; counter < noOfRows- rowNumber ; counter++)
printf(" ");
// For each row, print N times the character
printf("/");
for (counter = 0 ; counter < rowNumber ; counter++)
if(rowNumber >= 1)
for(int j=0; j<counter +1; j++)
printf(" ");
if(rowNumber != 0)
printf(" ");
printf("\");
printf("\n");
}
return 0;
}
现在我的当前输出是这样的:
Height: 3
/\
/ \
/ \
Height: 5
/\
/ \
/ \
/ \
/ \
我在代码中做错了什么导致一些“\”走得更远?
您不需要两个嵌套循环来打印 /
和 \
之间的 space。它应该只打印 rowNumber*2
spaces.
for (counter = 0; counter < rowNumber*2; counter++) {
printf(" ");
}
您不需要测试 if (rowNumber >= 1)
,因为当它是 0
时,循环会立即结束。
但是,您确实需要检查最后一行,因为您应该打印 _
而不是 space。所以应该是:
for (counter = 0; counter < rowNumber*2; counter++) {
if (rowNumber == noOfRows-1) {
printf("_");
} else {
printf(" ");
}
}
@Barmar 的想法是正确的,你不再需要
if(rowNumber != 0)
printf(" ");
完整代码:
#include <stdio.h>
int main(void)
{
int noOfRows;
printf("Enter height: ");
scanf("%d", &noOfRows);
int counter, rowNumber;
for (rowNumber = 0 ; rowNumber < noOfRows; rowNumber++) {
for (counter = 0 ; counter < noOfRows- rowNumber ; counter++)
printf(" ");
printf("/");
for (counter = 0 ; counter < rowNumber ; counter++)
if(rowNumber >= 1)
for (counter = 0; counter < rowNumber*2; counter++) {
if (rowNumber == noOfRows-1) {
printf("_");
} else {
printf(" ");
}
}
printf("\");
printf("\n");
}
}
如果使用 else,您只能使用两个循环来打印此模式。在 if else 中,您可以对 space、反斜杠、正斜杠和下划线使用多个条件。
1 #include<stdio.h>
2
3 int main()
4 {
5 int n;
6 int i,j,k;
7 printf("Enter hight of trangle\n");
8 scanf("%d",&n);
9 for(i=0;i<n;i++,printf("\n"))
10 {
11 for(j=-n;j<=n;j++)
12 {
13 if(j<0) k=-j;
14 else k=j;
15
16 if(j==0);
17 else if((j<0)&&(k==(i+1)))
18 printf("/");
19 else if((j>0)&&(k==(i+1)))
20 printf("\");
21 else if((i+1)==n)
22 printf("_");
23 else
24 printf(" ");
25 }
26 }
27 }
或者,您可以将字符的重复打印抽象为:
// print_char(n,c) prints c n-times.
void print_char(int n, char c) {
for (int i = 0; i < n; ++i) {
printf("%c", c);
}
}
这样在构建三角形时您只需跟踪一个 for 循环:
void print_triangle(int height) {
for (int i = 1; i <= height; ++i) {
print_char(height-i, ' '); // print leading empty spaces
printf("/"); // print forward slash
if (i == height) { // print middle dashes/spaces
print_char((height-1)*2, '_'); // <--| |
} else { // |
print_char((i-1)*2, ' '); // <---------|
}
printf("\\n"); // print backslash
}
}
例如,
int main(void) {
int height;
printf("Enter height: ");
if (scanf("%d", &height) != 1) {
// handle error if scanf fails
}
print_triangle(height);
return 0;
}
然后,
$ Enter height: 1
/\
$ Enter height: 5
/\
/ \
/ \
/ \
/________\
我是 C 的新手,我有这个程序,我试图根据三角形的高度打印一个三角形:
/\
/__\
所以如果高度是2,那么'/'、'\'和'_'就有2个。
所以我写了这些代码块:
#include <stdio.h>
int main(void)
{
int noOfRows;
printf("Enter height: ");
scanf("%d", &noOfRows);
int counter, rowNumber;
for (rowNumber = 0 ; rowNumber < noOfRows; rowNumber++)
{
// For each row, insert numberOfRows - N spaces before printing
for (counter = 0 ; counter < noOfRows- rowNumber ; counter++)
printf(" ");
// For each row, print N times the character
printf("/");
for (counter = 0; counter < noOfRows; counter++)
printf("\");
printf(" ");
printf("\n");
}
return 0;
}
然而,当我输入 3 作为高度时,它会给我这样的输出。
/\\
/\\
/\\
我想在每个新行出现时获得更多 space 的 '\',但我不确定应如何修改 for 循环以正确形成三角形。请让我知道是否应该再添加问题以使其更清楚。
我对代码进行了更改,目前有:
#include <stdio.h>
int main(void)
{
int noOfRows;
printf("Enter height: ");
scanf("%d", &noOfRows);
int counter, rowNumber;
for (rowNumber = 0 ; rowNumber < noOfRows; rowNumber++)
{
// For each row, insert numberOfRows - N spaces before printing
for (counter = 0 ; counter < noOfRows- rowNumber ; counter++)
printf(" ");
// For each row, print N times the character
printf("/");
for (counter = 0 ; counter < rowNumber ; counter++)
if(rowNumber >= 1)
for(int j=0; j<counter +1; j++)
printf(" ");
if(rowNumber != 0)
printf(" ");
printf("\");
printf("\n");
}
return 0;
}
现在我的当前输出是这样的:
Height: 3
/\
/ \
/ \
Height: 5
/\
/ \
/ \
/ \
/ \
我在代码中做错了什么导致一些“\”走得更远?
您不需要两个嵌套循环来打印 /
和 \
之间的 space。它应该只打印 rowNumber*2
spaces.
for (counter = 0; counter < rowNumber*2; counter++) {
printf(" ");
}
您不需要测试 if (rowNumber >= 1)
,因为当它是 0
时,循环会立即结束。
但是,您确实需要检查最后一行,因为您应该打印 _
而不是 space。所以应该是:
for (counter = 0; counter < rowNumber*2; counter++) {
if (rowNumber == noOfRows-1) {
printf("_");
} else {
printf(" ");
}
}
@Barmar 的想法是正确的,你不再需要
if(rowNumber != 0)
printf(" ");
完整代码:
#include <stdio.h>
int main(void)
{
int noOfRows;
printf("Enter height: ");
scanf("%d", &noOfRows);
int counter, rowNumber;
for (rowNumber = 0 ; rowNumber < noOfRows; rowNumber++) {
for (counter = 0 ; counter < noOfRows- rowNumber ; counter++)
printf(" ");
printf("/");
for (counter = 0 ; counter < rowNumber ; counter++)
if(rowNumber >= 1)
for (counter = 0; counter < rowNumber*2; counter++) {
if (rowNumber == noOfRows-1) {
printf("_");
} else {
printf(" ");
}
}
printf("\");
printf("\n");
}
}
如果使用 else,您只能使用两个循环来打印此模式。在 if else 中,您可以对 space、反斜杠、正斜杠和下划线使用多个条件。
1 #include<stdio.h>
2
3 int main()
4 {
5 int n;
6 int i,j,k;
7 printf("Enter hight of trangle\n");
8 scanf("%d",&n);
9 for(i=0;i<n;i++,printf("\n"))
10 {
11 for(j=-n;j<=n;j++)
12 {
13 if(j<0) k=-j;
14 else k=j;
15
16 if(j==0);
17 else if((j<0)&&(k==(i+1)))
18 printf("/");
19 else if((j>0)&&(k==(i+1)))
20 printf("\");
21 else if((i+1)==n)
22 printf("_");
23 else
24 printf(" ");
25 }
26 }
27 }
或者,您可以将字符的重复打印抽象为:
// print_char(n,c) prints c n-times.
void print_char(int n, char c) {
for (int i = 0; i < n; ++i) {
printf("%c", c);
}
}
这样在构建三角形时您只需跟踪一个 for 循环:
void print_triangle(int height) {
for (int i = 1; i <= height; ++i) {
print_char(height-i, ' '); // print leading empty spaces
printf("/"); // print forward slash
if (i == height) { // print middle dashes/spaces
print_char((height-1)*2, '_'); // <--| |
} else { // |
print_char((i-1)*2, ' '); // <---------|
}
printf("\\n"); // print backslash
}
}
例如,
int main(void) {
int height;
printf("Enter height: ");
if (scanf("%d", &height) != 1) {
// handle error if scanf fails
}
print_triangle(height);
return 0;
}
然后,
$ Enter height: 1
/\
$ Enter height: 5
/\
/ \
/ \
/ \
/________\