c语言刷题——输出图案

发布于:2024-05-05 ⋅ 阅读:(33) ⋅ 点赞:(0)

1.输出用“*”组成的X形图案

题目:请打印用“*”组成的X形图案

描述:

多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。

输出描述:

针对每行输入,输出用“*”组成的X形图案。

示例1

输入:

5

输出:

*   *
 * * 
  *  
 * * 
*   *

 示例2

输入:

6

输出:

*    *
 *  * 
  **  
  ** 
 *  * 
*    *

1.题目分析 

在该题中需要输出用“*”构成的x型图案,我们先在表格*图案上画在表格上以便于分析其中的规律

例如以下是当n为8时在表格里的图案

在以上表格中我们可以看出在紫色线所包围的*横坐标都等于纵坐标 

而在在以上表格中我们可以看出在绿色线所包围的*横坐标+纵坐标=n-1

通过以上分析我们就找出了这个图案的规律,接下来就是代码的实现

2. 代码实现

要输出一个多行多列的项目时我们可以想到使用for循环里面再嵌套一个for循环的方式来实现
1.第一个for循环实现输出行,第二个for循环来实现输出列
2.使用if语句来实现当位置满足以上输出*时在屏幕上打印*
3.使用else语句来实现当不满足输出*时在屏幕上打印空格

以下便是完整的代码

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int n = 0;
	while(scanf("%d", &n)!=EOF)
	{
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < n; j++)
			{
				if (i == j)
				{
					printf("*");
				}
				else if (i + j == n - 1)
				{
					printf("*");
				}
				else
				{
					printf(" ");
				}
			}
			printf("\n");
		}
	}

	return 0;
}

我们来输入几个不同的n值来程序测试

2.输出用“*”组成的空心正方形图案 

输入描述:

多组输入,一个整数(3~20),表示输出的行数,也表示组成正方形边的“*”的数量。

输出描述:

针对每行输入,输出用“*”组成的“空心”正方形,每个“*”后面有一个空格。

示例1

输入:

4

输出:

* * * * 
*     * 
*     * 
* * * * 

示例2

输入:

5

输出:

* * * * * 
*       * 
*       * 
*       * 
* * * * * 

1.题目分析 

在该题中需要输出用“*”构成的正方形型图案,我们先在表格*图案上画在表格上以便于分析其中的规律

以下是当n等于5时的表格

从以上n=5时的图案可以看出在第一行,第四行,第一列,第四列都有*

所以可以得出该题的规律:当输入n时,在第1行,第n-1行,第1列,第n-列都打印*
其余位置打印空格

2.代码实现

要输出一个多行多列的项目时我们可以想到使用for循环里面再嵌套一个for循环的方式来实现

1.当第1行或者第n-1行或者第1列或者第n-列都打印*
2.其余其他位置打印空格
 

以下是完整的代码

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int n = 0;
	while(scanf("%d", &n)!=EOF)
	{
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < n; j++)
			{
				if (i == 0 || i == n - 1 || j == 0 || j == n - 1)
				{
					printf("* ");
				}
				else
				{
					printf("  ");
				}
			}
			printf("\n");
		}
	}

	return 0;
}

我们来输入几个不同的n值来测试程序

3.输出用“*”组成的菱形图案

 

1.题目分析 

要求输入一个数n(要求n为奇数),输出菱形图案,例如当输入n为13时可以看出这个菱形有13行,13列将这个图形可以将其分成上下两个部分来实现 

1.上部分图案 

 将上半部分放入表格中便于观察,透过以上表格可以发现上半部分图形有7行,若令行为i,列为j,每行前部分空格为7-i,每行*数为2i-1

通过以上分析可以得出上半部分的图案代码

 

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);//输入图案总行数
    int s = (n / 2)+1;
	for (int i = 1; i <= s; i++)
	{
		int j = 0;
		for(j=1;j<=s-i;j++)
		{
			printf(" ");
		}
		for (j = 1; j <= 2 * i - 1; j++)
		{
			printf("*");
		}
		printf("\n");
	}

	return 0;
}

1.下部分图案  

 将上半部分放入表格中便于观察,透过以上表格可以发现下半部分图形有6行,若令行为i,列为j,每行前部分空格为i,每行*数为13-2i

以下是输出下半部分图案代码

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
 int n = 0;
 scanf("%d", &n);//输入图案总行数
 int s = (n / 2)+1;
 for (int i = 1; i <= s - 1; i++)
 {
	int j = 0;
	for (j = 1; j <= i; j++)
	{
		printf(" ");
	}
	for (j = 1; j <= n - 2 * i; j++)
	{
		printf("*");
	}
	printf("\n");
 }
	return 0;
}

2.完整代码实现

题目中要求输入数为奇数,这时我们要用到一个if...else语句,当输入n不为奇数时提示请输入奇数
还需实现多组输入就使用一个while循环,当有输入值时候即scanf返回值不为EOF时进入循环

以下是该程序完整的代码 

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{   int n = 0;
	while(scanf("%d", &n)!=EOF)//输入图案总行数
	{
        int s = (n / 2)+1;
		if (n % 2 == 1)
		{
			for (int i = 1; i <= s; i++)
			{
				int j = 0;
				for (j = 1; j <= s - i; j++)
				{
					printf(" ");
				}
				for (j = 1; j <= 2 * i - 1; j++)
				{
					printf("*");
				}
				printf("\n");
			}
			for (int i = 1; i <= s - 1; i++)
			{
				int j = 0;
				for (j = 1; j <= i; j++)
				{
					printf(" ");
				}
				for (j = 1; j <= n - 2 * i; j++)
				{
					printf("*");
				}
				printf("\n");
			}
		}
		else
		{
			printf("请输入奇数\n");

		}
	}

	return 0;
}

输入几个值来测试一下程序是否能正常运行


网站公告

今日签到

点亮在社区的每一天
去签到