在C语言中通过循环对进行各种图形的打印有助于提升逻辑和分析能力
一.线段图案
用一个循环即可实现线段图案的打印
#include <stdio.h>
int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
for(int i=0;i<n;i++)
{
printf("*");
}
printf("\n");
}
return 0;
}
输入:7
输出:*******
二.正方形图案
在线段图案的基础上,进行一个嵌套循环以打印多个线段即可实现正方形的打印
#include <stdio.h>
int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
输入:4
输出:
三.直角三角形图案
观察可知,每行的 * 的个数都与行数相等,进行一个嵌套循环即可
#include <stdio.h>
int main()
{
int n;
while(scanf("%d",&n) !=EOF)
{
for(int i=0;i<n;i++)//控制行数
{
for(int j=0;j<=i;j++)//控制列数
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
输入:5
输出:
此外可以通过观察可以得知,每行的行序数和列序数是从0开始进行周期变化的,可以在这个基础上对代码进行一下调整,将 * 图案换成 i 和 j ,以打印出一个9*9乘法口诀表
#include<stdio.h>
int main()
{
for (int i = 1; i <= 9; i++)//控制行数,注意初始值是1
{
for (int j = 1; j <= i; j++)
{
printf("%d*%d=%-2d ", i, j, i * j);
}
printf("\n");
}
return 0;
}
输出:
四.翻转直角三角形图案
翻转直角三角形的打印与直角三角形类似,注意初始值的调整
#include <stdio.h>
int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
for(int i=n;i>0;i--)//控制行
{
for(int j=i;j>0;j--)//控制每行打印的个数,注意从i开始
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
输入:5
输出:
五.带空格的直角三角形图案
带空格的直角三角形图案的打印与直角三角形类似,可以理解为用空格把直角三角形的 * 顶到后面。在打印每一行时,先打印空格,再打印 *
#include <stdio.h>
int main()
{
int n;
while(scanf("%d",&n) !=EOF)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n-i-1;j++)//打印空格
{
printf(" ");//注意有2个空格
}
for(int k=0;k<=i;k++)//打印 *
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
输入:5
输出:
六.金字塔图案
金字塔图案与带空格的三角形图案类似,只需要在打印空格的时候将2个空格换成1个空格
#include <stdio.h>
int main()
{
int n;
while(scanf("%d",&n) !=EOF)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n-i-1;j++)
{
printf(" ");//注意空格个数
}
for(int k=0;k<=i;k++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
输入:4
输出:
七.翻转金字塔图案
与把直角三角形翻转成倒三角形类似,注意i和j的初始值
#include <stdio.h>
int main() {
int n;
while (scanf("%d", &n) != EOF) {
for (int i = n; i > 0; i--) {
//打印空格
for (int j = 0; j < n - i; j++) {
printf(" ");
}
//打印*
for (int k = 0; k < i; k++) {
printf("* ");
}
printf("\n");
}
}
return 0;
}
输入:5
输出:
附:图形的组合
了解以上简单的图形打印后,可以将数个不同的图形进行组合,以输出其他更丰富的图形
例:打印菱形
通过观察可以发现一个菱形可以由三部分组成
- 打印金字塔
- 打印线段
- 打印倒金字塔
#include <stdio.h>
int main() {
//1.打印n*n上金字塔
//2.打印一行n+1个*
//3.打印n*n下金字塔
int n;
while (scanf("%d", &n) != EOF) {
for (int i = 0; i < n; i++) { //打印上金字塔
for (int j = 0; j < n - i; j++) {
printf(" ");
}
for (int k = 0; k <= i; k++) {
printf("* ");
}
printf("\n");
}
for (int m = 0; m < n + 1; m++) { //打印一行
printf("* ");
}
printf("\n");
for (int i = n; i > 0; i--) { //打印下金字塔
//打印空格
for (int j = 0; j <= n - i; j++) {
printf(" ");
}
//打印*
for (int k = 0; k < i; k++) {
printf("* ");
}
printf("\n");
}
}
return 0;
}
输入:3
输出:
例:打印箭形
打印箭形也可分为三个步骤
- 打印变式带空格的直角三角形
- 打印线段
- 打印带空格的翻转直角三角形
注意*之间没有空格
#include<stdio.h>
int main()
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)//打印变式的带空格的直角三角形
{
for (int m = 0; m < n-i; m++)
{
printf(" ");
}
for (int n = 0; n <= i; n++)
{
printf("*");//注意*后没有空格
}
printf("\n");
}
for (int i = 0; i < n+1; i++)//打印线段
{
printf("*");
}
printf("\n");
for (int i = n; i > 0; i--)//打印带空格的翻转直角三角形
{
for (int m = n-i; m >= 0 ; m--)
{
printf(" ");
}
for (int n = i; n >0; n--)
{
printf("*");
}
printf("\n");
}
return 0;
}
输入:3
输出:
此外还可以变通为其他图形,例如K形团、斜形图案和反斜形图案等,掌握其基本原理便可以得心应手输出自己想要的图案。