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;
}
输入几个值来测试一下程序是否能正常运行