用C语言和Python打印各种三角形
本人的第一篇博客,写博客是一种好习惯,希望从这一篇开始我能够坚持写博客。PS.定下小目标:一周一篇。
最近复习C语言,刷题刷到了打印三角形,做不出来。于是百度了学了一些打印各种三角形方法,学习后想要通过写博客的形式,对自己所学进行输出。碰巧也在学习Python,就想着通过打印各种三角形,练练Python(当前使用版本是3.8.2)。
PS.本篇文章里是用迭代来打印三角形的,核心思想是通过控制行和列打印空格和符号,外层循环控制打印行数,内层嵌套两个循环,分别打印空格和符号。也可以通过数组利用下标进行输出,说到数组就容易联想到指针,如果以后不知道写什么就再补充一两篇用数组或用指针打印三角形吧。
闲话少说,进入正题。
图1:
C:
#include<stdio.h>
int main(void)
{
int i, j, n;
printf("请输入行数:");
scanf("%d", &n);
for(i = 0; i < n; i++)
{
for(j = 0; j < i + 1; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
Python:
PS.一开始没想到内层用for语句,从第五个代码再开始改吧…
n = int(input("请输入行数:"))
for i in range(n):
j = 0
while(j < i + 1):
print("*", end = '')
j += 1
print()
图2:
C:
#include<stdio.h>
int main(void)
{
int i, j, n;
printf("请输入行数:");
scanf("%d", &n);
for(i = 0; i < n; i++)
{
for(j = 0; j < n - i; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
Python:
n = int(input("请输入行数:"))
for i in range(n):
j = 0
while(j < n - i):
print("*", end = '')
j += 1
print()
接下来的三角形就需要用到空格了,在最外层循环内嵌套一层循环打印空格。
图3:
C:
#include<stdio.h>
int main(void)
{
int i, j, n;
printf("请输入行数:");
scanf("%d", &n);
for(i = 0; i < n; i++)
{
//仿照第二个三角形的代码,打印出空格
for(j = 0; j < n - i -1; j++)
{
printf(" ");
}
//在上一个for循环打印的空格后打印符号
for(j = n - i - 1; j < n; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
Python:
n = int(input("请输入行数:"))
for i in range(n):
j = 0
while(j < n - i - 1):
print(' ', end = '')
j += 1
j = n - i - 1
while(j < n):
print("*", end = '')
j += 1
print()
图4:
C:
#include<stdio.h>
int main(void)
{
int i, j, n;
printf("请输入行数:");
scanf("%d", &n);
for(i = 0; i < n; i++)
{
for(j = 0; j < i; j++)
{
printf(" ");
}
for(j = i; j < n; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
Python:
n = int(input("请输入行数:"))
for i in range(n):
j = 0
while(j < i):
print(' ', end = '')
j += 1
j = i
while(j < n):
print("*", end = '')
j += 1
print()
接下来两个是金字塔和倒金字塔。
图5:
C:
#include<stdio.h>
int main(void)
{
int i, j, n;
printf("请输入行数:");
scanf("%d", &n);
for(i = 0; i < n; i++)
{
for(j = 0; j < n - i - 1; j++)
{
printf(" ");
}
for(j = n - i - 1; j < n + i; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
Python:
PS.开始把while语句换成for语句,代码看起来更简短
n = int(input("请输入行数:"))
for i in range(n):
for j in range(0, n - i - 1):
print(' ', end = '')
for j in range(n - i - 1, n + i):
print("*", end = '')
print()
图6:
C:
#include<stdio.h>
int main(void)
{
int i, j, n;
printf("请输入行数:");
scanf("%d", &n);
for(i = 0; i < n; i++)
{
for(j = 0; j < i; j++)
{
printf(" ");
}
for(j = i; j < 2 * n - i - 1; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
Python:
n = int(input("请输入行数:"))
for i in range(n):
for j in range(0, i):
print(' ', end = '')
for j in range(i, 2 * n - i - 1):
print("*", end = '')
print()
接下来是空心三角形,只需在打印符号的循环内加入条件打印出边框和空心。
图7:
C:
#include<stdio.h>
int main(void)
{
int i, j, n;
printf("请输入行数:");
scanf("%d", &n);
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
if(i == j || i == n - 1 || j ==0)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
return 0;
}
Python:
n = int(input("请输入行数:"))
for i in range(n):
for j in range(n):
if(i == j or i == n - 1 or j ==0):
print("*", end = '')
else:
print(' ', end = '')
print()
图8:
C:
#include<stdio.h>
int main(void)
{
int i, j, n;
printf("请输入行数:");
scanf("%d", &n);
for(i = 0; i < n; i++)
{
for(j = 0; j < n - i; j++)
{
if(i + j == n - 1 || i == 0 || j == 0)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
return 0;
}
Python:
n = int(input("请输入行数:"))
for i in range(n):
for j in range(n - i):
if(i + j == n - 1 or i == 0 or j == 0):
print("*", end = '')
else:
print(' ', end = '')
print()
图9:
C:
#include<stdio.h>
int main(void)
{
int i, j, n;
printf("请输入行数:");
scanf("%d", &n);
for(i = 0; i < n; i++)
{
for(j = 0; j < n - i - 1; j++)
{
printf(" ");
}
for(j = n - i - 1; j < n; j++)
{
if(i == n - 1 || j == n - 1 || i + j == n - 1)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
return 0;
}
Python:
n = int(input("请输入行数:"))
for i in range(n):
for j in range(n - i - 1):
print(' ', end = '')
for j in range(n - i - 1, n):
if(i == n - 1 or j == n - 1 or i + j == n - 1):
print("*", end = '')
else:
print(' ', end = '')
print()
图10:
C:
#include<stdio.h>
int main(void)
{
int i, j, n;
printf("请输入行数:");
scanf("%d", &n);
for(i = 0; i < n; i++)
{
for(j = 0; j < i; j++)
{
printf(" ");
}
for(j = i; j < n; j++)
{
if(i == 0 || j == n - 1 || j == i)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
return 0;
}
Python:
n = int(input("请输入行数:"))
for i in range(n):
for j in range(i):
print(' ', end = '')
for j in range(i, n):
if(i == 0 or j == n - 1 or j == i):
print("*", end = '')
else:
print(' ', end = '')
print()
图11:
C:
#include<stdio.h>
int main(void)
{
int i, j, n;
printf("请输入行数:");
scanf("%d", &n);
for(i = 0; i < n; i++)
{
for(j = 0; j < n - i - 1; j++)
{
printf(" ");
}
for(j = n - i - 1; j < n + i; j++)
{
if(i == n - 1 || j == n - i - 1 || j == n + i -1)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
return 0;
}
Python:
n = int(input("请输入行数:"))
for i in range(n):
for j in range(n - i - 1):
print(' ', end = '')
for j in range(n - i - 1, n + i):
if(i == n - 1 or j == n - i - 1 or j == n + i - 1):
print("*", end = '')
else:
print(' ', end = '')
print()
图12:
C:
#include<stdio.h>
int main(void)
{
int i, j, n;
printf("请输入行数:");
scanf("%d", &n);
for(i = 0; i < n; i++)
{
for(j = 0; j < i; j++)
{
printf(" ");
}
for(j = i; j < 2 * n - i - 1; j++)
{
if(i == 0 || j == i || j == 2 * n - i -2)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
return 0;
}
Python:
n = int(input("请输入行数:"))
for i in range(n):
for j in range(i):
print(' ', end = '')
for j in range(i, 2 * n - i - 1):
if(i == 0 or j == i or j == 2 * n - i - 2):
print("*", end = '')
else:
print(' ', end = '')
print()
三角形就先写到这里吧,接下来是菱形,其实就是金字塔和倒金字塔这两类三角形的组合,理解后并不难,两个三角形分开打印即可。
图13:
C:
#include<stdio.h>
int main(void)
{
int i, j, n;
//使输入的值为奇数
do
{
printf("请输入行数(奇数):");
scanf("%d", &n);
} while (n % 2 == 0);
//下面打印金字塔
for(i = 0; i < n / 2 + 1; i++)
{
for(j = 0; j < n / 2 - i; j++)
{
printf(" ");
}
for(j = n / 2 - i; j < n / 2 + i + 1; j++)
{
printf("*");
}
printf("\n");
}
//下面打印倒金字塔
for(i = n / 2 + 1; i < n; i++)
{
for(j = 0; j < i - n / 2; j++)
{
printf(" ");
}
for(j = i; j < 2 * n - i - 1; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
Python:
n = int(input("请输入行数(奇数):"))
for i in range(n // 2 + 1):
for j in range(n // 2 - i):
print(' ', end = '')
for j in range(n // 2 - i, n // 2 + i + 1):
print("*", end = '')
print()
for i in range(n // 2 + 1, n):
for j in range(i - n // 2):
print(' ', end = '')
for j in range(i, 2 * n - i - 1):
print("*", end = '')
print()
图14:
C:
#include<stdio.h>
int main(void)
{
int i, j, n;
//使输入的值为奇数
do
{
printf("请输入行数(奇数):");
scanf("%d", &n);
} while (n % 2 == 0);
//下面打印金字塔
for(i = 0; i < n / 2 + 1; i++)
{
for(j = 0; j < n / 2 - i; j++)
{
printf(" ");
}
for(j = n / 2 - i; j < n / 2 + i + 1; j++)
{
if(j == n / 2 - i || j == n / 2 + i)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
//下面打印倒金字塔
for(i = n / 2 + 1; i < n; i++)
{
for(j = 0; j < i - n / 2; j++)
{
printf(" ");
}
for(j = i; j < 2 * n - i - 1; j++)
{
if(j == i || j == 2 * n - i - 2)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
return 0;
}
Python:
n = int(input("请输入行数(奇数):"))
for i in range(n // 2 + 1):
for j in range(n // 2 - i):
print(' ', end = '')
for j in range(n // 2 - i, n // 2 + i + 1):
if(j == n // 2 - i or j == n // 2 + i):
print("*", end = '')
else:
print(' ', end = '')
print()
for i in range(n // 2 + 1, n):
for j in range(i - n // 2):
print(' ', end = '')
for j in range(i, 2 * n - i - 1):
if(j == i or j == 2 * n - i - 2):
print("*", end = '')
else:
print(' ', end = '')
print()
码了一天,终于写完了,不得不说,写博客确实让我收获不少,希望能够坚持下去!