C语言实现几何图形绘制

C语言实现几何图形绘制

六月 21, 2019

前言

学习C语言最好自己动手敲代码,下面虽然我会把源代码贴在下面,但请读者不要复制(虽然我以前也是这样干的),自己敲一遍会有更多的感受,更多的理解,复制代码去揣测代码是不好的习惯,不然就像我一样,在学C语言遇到烧脑的逻辑代码就放弃,现在又来补救,要学会遇到问题时,就要有打破沙锅问到底的精神,这也是学习的精神,在这个信息化时代,计算机系的你们,要学会利用网络这个大环境,学习一些优秀的东西,大多数大学课本上的东西都太陈旧了,太多已经不适应现代的需求,在网络上学习是不错的选择。

三角形


直角三角形

for-while



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include"stdio.h"
int main()
{
for (size_t i = 0; i <11; i++)//控制打印行数(一行为一个循环)
{
size_t j=0;
while (j<=i) //控制打印列数
{
printf("😉");
j++;
}
printf("\n"); //每一次列循环后另起行
}

}

for-for


1
2
3
4
5
6
7
8
9
10
11
12
#include "stdio.h"
int main()
{
for (size_t i = 0; i < 10; i++) //控制打印行数(一行为一个循环)
{
for (size_t j = 0; j <= i; j++) //控制打印列数
{
printf("😋");
}
printf("\n"); //每一次列循环后另起行
}
}

输出图形如下图:

直角三角形

旋转90°for-while


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include"stdio.h"
int main()
{
for (size_t i = 0; i <10; i++)//控制打印行数(一行为一个循环)
{
size_t j=10;
while (j>i) //控制打印列数
{
printf("😉");
j--;
}
printf("\n"); //每一次列循环后另起行
}

}

旋转90°for-for


1
2
3
4
5
6
7
8
9
10
11
12
#include "stdio.h"
int main()
{
for (size_t i = 0; i < 10; i++) //控制打印行数(一行为一个循环)
{
for (size_t j = 10; j > i; j--) //控制打印列数
{
printf("😋");
}
printf("\n"); //每一次列循环后另起行
}
}

输出图形如下图:

旋转90°后三角形

for—for-while旋转180°


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include"stdio.h"
int main()
{
for (size_t i = 0; i <11; i++)//控制打印行数(一行为一个循环)
{
size_t j=1;
while (j<=i) //控制打印列数
{
printf(" ");//两个空格时是直角三角形,一个空格是等腰三角形
j++;
}
size_t k=10;
while (k>i) //控制打印列数
{
printf("😉");
k--;
}
printf("\n"); //每一次列循环后另起行
}

}

for-for-for旋转180°


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdio.h"
int main()
{
for (size_t i = 0; i < 10; i++) //控制打印行数(一行为一个循环)
{
for (size_t j = 1; j <= i; j++) //控制打印列数
{
printf(" ");//两个空格时是直角三角形,一个空格是等腰三角形
}
for (size_t k = 10; k>i; k--) //控制打印列数
{
printf("😋");
}
printf("\n"); //每一次列循环后另起行
}
}

输出图形如下图:

旋转180°后三角形

for—for-while旋转270°


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include"stdio.h"
int main()
{
for (size_t i = 0; i <11; i++)//控制打印行数(一行为一个循环)
{
size_t j=10;
while (j>i) //控制打印列数
{
printf(" ");//两个空格时是直角三角形,一个空格是等腰三角形
j--;
}
size_t k=0;
while (k<=i) //控制打印列数
{
printf("😉");
k++;
}
printf("\n"); //每一次列循环后另起行
}

}

for-for-for旋转270°


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdio.h"
int main()
{
for (size_t i = 0; i < 10; i++) //控制打印行数(一行为一个循环)
{
for (size_t j = 10; j > i; j--) //控制打印列数
{
printf(" ");//两个空格时是直角三角形,一个空格是等腰三角形
}
for (size_t k = 0; k<=i; k++) //控制打印列数
{
printf("😋");
}
printf("\n"); //每一次列循环后另起行
}
}

输出图形如下图:

旋转270°后三角形

等边三角形


等边三角形代码和直角三角形旋转270°一样,只是两个空格变成一个空格。

for—for-while


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include"stdio.h"
int main()
{
for (size_t i = 0; i <11; i++)//控制打印行数(一行为一个循环)
{
size_t j=10;
while (j>i) //控制打印列数
{
printf(" ");//两个空格时是直角三角形,一个空格是等腰三角形
j--;
}
size_t k=0;
while (k<=i) //控制打印列数
{
printf("😉");
k++;
}
printf("\n"); //每一次列循环后另起行
}

}

for-for-for


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdio.h"
int main()
{
for (size_t i = 0; i < 10; i++) //控制打印行数(一行为一个循环)
{
for (size_t j = 10; j > i; j--) //控制打印列数
{
printf(" ");//两个空格时是直角三角形,一个空格是等腰三角形
}
for (size_t k = 0; k<=i; k++) //控制打印列数
{
printf("😋");
}
printf("\n"); //每一次列循环后另起行
}
}

输出图形如下图:

等边三角形

等边三角形(旋转90°)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "stdio.h"
int main()
{
for (size_t i = 0; i < 5; i++) //控制打印行数(一行为一个循环)
{
size_t j = 0;
while (j <= i) //控制打印列数
{
printf("😉");
j++;
}
printf("\n"); //每一次列循环后另起行
}
for (size_t i = 0; i < 4; i++) //控制打印行数(一行为一个循环)
{
size_t j = 4;
while (j > i) //控制打印列数
{
printf("😉");
j--;
}
printf("\n"); //每一次列循环后另起行
}
}

输出图形如下图:

等边三角形旋转90°

等边三角形(旋转180°)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdio.h"
int main()
{
for (size_t i = 0; i < 10; i++) //控制打印行数(一行为一个循环)
{
for (size_t j = 1; j <= i; j++) //控制打印列数
{
printf(" ");//两个空格时是直角三角形,一个空格是等腰三角形
}
for (size_t k = 10; k>i; k--) //控制打印列数
{
printf("😋");
}
printf("\n"); //每一次列循环后另起行
}
}

输出图形如下图:

等边三角形旋转90°

等边三角形(旋转270°)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include "stdio.h"
int main()
{
for (size_t i = 0; i < 5; i++) //控制打印行数(一行为一个循环)
{
for (size_t k = 5; k > i; k--)
{
printf(" ");
}

size_t j = 0;
while (j <= i) //控制打印列数
{
printf("😉");
j++;
}
printf("\n"); //每一次列循环后另起行
}
for (size_t i = 0; i < 4; i++) //控制打印行数(一行为一个循环)
{
for (size_t k = 0; k <= i+1; k++)
{
printf(" ");
}
size_t j = 4;
while (j > i) //控制打印列数
{
printf("😉");
j--;
}
printf("\n"); //每一次列循环后另起行
}
}

输出图形如下图:

等边三角形旋转270°

圆形


心形


有时候程序员也必须懂点浪漫,对心怡的女孩子,你不会说,但你要有行动表示你对她的在意。所用方程

桃心方程

若点 (x,y) 让方程左边等于0,则这个点在这个心形曲线上;若让方程左边小于0,则这个点在这个心形线内;若让方程左边大于0,则这个点在这个心形线外。我们要做的就是写一个双重循环,遍历x和y的值,将心形线以内的地方,涂上某一个字符,比如‘❤️’。

分析上图可知:

y的上界大概是1.3;下界大概是-1.1;所以,我们可以从1.3逐渐减少到-1.1,初始我们可以选取步长为0.1。同理,对于x,可以看出他的左右边界大概为-1.2和+1.2,我们就从-1.2遍历到1.2,步长选择0.05。逐行输出,从上到下。

代码实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdio.h"
#include "math.h"
int main()
{
for ( float y = 1.3 ; y >= -1.1 ; y -= 0.1 ) //遍历y的值,从上到下,步长为0.05
{
for (float x = -1.2 ; x <= 1.2 ; x += 0.05)//遍历x的值,从左到右,步长为0.05
{
if (pow((x*x+y*y-1),3)-x*x*y*y*y <= 0.0)//利用方程进行填充
{
printf("❤️");
}
else
{
printf(" ");
}
}
printf("\n");
}
}

输出结果如下:

内填充心形

外填充心形

另外一个方程:

桃心方程

分析上图可知:

y的上界大概是1.3;下界大概是-0.8;所以,我们可以从1.3逐渐减少到-0.8,初始我们可以选取步长为0.1。同理,对于x,可以看出他的左右边界大概为-1.1和+1.1,我们就从-1.1遍历到1.1,步长选择0.05。逐行输出,从上到下。

代码实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdio.h"
#include "math.h"
int main()
{
for (float y = 1.3; y >= -0.8; y -= 0.1) //遍历y的值,从上到下,步长为0.05
{
for (float x = -1.1; x <= 1.1; x += 0.05) //遍历x的值,从左到右,步长为0.05
{
if (pow((5 * y / 4 - sqrt(abs(x))), 2) + x * x <= 1.0) //利用方程进行填充
{
printf("❤️");
}
else
{
printf(" ");
}
}
printf("\n");
}
}

内填充心形

外填充心形

菱形

菱形就是两个等腰三角形组成


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "stdio.h"
int main()
{
for (size_t i = 0; i < 10; i++)
{
for (size_t j = 10; j > i; j--)
{
printf(" ");
}
for (size_t j = 0; j <= i; j++)
{
printf("😂");
}
printf("\n");
}
for (size_t i = 0; i < 9; i++)
{
for (size_t j = 0; j <= i+1; j++)
{
printf(" ");
}
for (size_t j = 9; j > i; j--)
{
printf("😂");
}
printf("\n");
}
}

输出图形如下图:

菱形

曲线


有趣的图形