c语言刷题——输出图案

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语句来实现当不满足输出*时在屏幕上打印空格

以下便是完整的代码

cpp 复制代码
#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.其余其他位置打印空格

以下是完整的代码

cpp 复制代码
#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

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

cpp 复制代码
#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

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

cpp 复制代码
#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时进入循环

以下是该程序完整的代码

cpp 复制代码
#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;
}

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

相关推荐
brhhh_sehe3 分钟前
重生之我在异世界学编程之C语言:深入文件操作篇(下)
android·c语言·网络
地球空间-技术小鱼6 分钟前
YUM(Yellowdog Updater, Modified)和DNF(Dandified YUM)简介
linux·运维·服务器·笔记·学习
Bucai_不才8 分钟前
【C++】初识C++之C语言加入光荣的进化(上)
c语言·c++·面向对象
木向10 分钟前
leetcode22:括号问题
开发语言·c++·leetcode
comli_cn11 分钟前
使用清华源安装python包
开发语言·python
筑基.17 分钟前
basic_ios及其衍生库(附 GCC libstdc++源代码)
开发语言·c++
小码的头发丝、31 分钟前
Java进阶学习笔记|面向对象
java·笔记·学习
雨颜纸伞(hzs)32 分钟前
C语言介绍
c语言·开发语言·软件工程
J总裁的小芒果34 分钟前
THREE.js 入门(六) 纹理、uv坐标
开发语言·javascript·uv
坊钰1 小时前
【Java 数据结构】移除链表元素
java·开发语言·数据结构·学习·链表