一、题目:
描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“”组成的X形图案。
输入描述:
多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。
输出描述:
针对每行输入,输出用“”组成的X形图案。
二、分析问题
首先,可以从这里看KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的X形图案。 通过分析知道要想打印x形图案就会用到循环。这是主要的思路。然后,就是想**怎么实现这个循环?**接下来,开始分析。如下:
分析流程图
上述只是一个大的分析怎么编写程序的框架,同时,提供了信息的获取。
三、代码的编写
#include<stdio.h> //头文件
int main() //主函数,用来编写循环体
{
//涉及的一些变量
int j = 0;//此处用j等于0是初始化,以免在运行时,产生其他的值
int i = 0;
int c = 0;
char b[20] = { '*' };//这个是数组的初始化
while (scanf("%d", &c) != EOF)//此处循环是题目描述的多组输入,及可以同时多个输入数据。
{
if (c >= 2 && c <= 20)//一个判断输入数据的范围,若超过输入数据的范围则会跳出循环。
{
for (j = 0;j < c;j++)//产生星号的行数
{
for (i = 0;i < c;i++)//代表一行有多少个星号
{
if (j == i || (j + i == (c - 1)))//通过判断,来选择保留所要的星号
{
b[i] = '*';
printf("%c", b[i]);
}
else//与第二个if相关联
{
b[i] = ' ';
printf("%c", b[i]);
}
}
printf("\n");//用来实现断行
}
}
else//与第一个if关联,不满足if条件则会跳出循环
{
break;
}
}
return 0;
}
第四、出现问题及解决问题
上面主要问题在于多组输入的理解,循环的用法,以及怎么通过不一样的手段去处理。
解决方法:1.在while循环中的条件里面加个scanf(“%d”,&b[i])!=EOF,可以实现多组输入。其中,EOF指EOF是end of file的缩写,表示”文字流”(stream)的结尾。这里的”文字流”,可以是文件(file),也可以是标准输入(stdin)。
EOF不是特殊字符,而是一个定义在头文件stdio.h的常量,一般等于-1。#define EOF (-1)
除了表示文件结尾,EOF还可以表示标准输入的结尾。但是,标准输入与文件不一样,无法事先知道输入的长度,必须手动输入一个字符,表示到达EOF。
2.当行数进行循环时他只会在一行,不会进行换行。这时可以在这个for循环下加入printf(“\n”)。如下图所示:
3.怎么将自己想要的留下,不要的用空格代替。其实在用for循环的嵌套就像是一个二维数组。有行和列。通过他们之间的关系结合if的条件就可以打印自己想要的。
五、自我感受
通过编写程序最大的想法就是思维和逻辑,要想编好一个程序就需要去锻炼自己的逻辑,调动大脑,一开始的编写可以从最简单开始。毕竟,许多程序都是一点点编出来的。可以换句话,就是说,一个大模块也是由一个小模块来分析。当然,得把基础知识学会,比如if,for,while,这些基本语句。在编写之前要学会分析问题,通过分析问题一步步解决和编写程序,得到自己想要的。