题目一:
题目分析:
1.循环
2.选择判断
3.注意加换行,以及换行位置
观察图形特点,可以设变量i表示行号,变量 j 表示列号,假设输入的值为num
(i 与 j 的初始值都为0)
当 i=0或 i=num-1时,j在0~num-1范围内全输出 *
否则,只有当j=0或num-1时,才输出 * 其他位置输出“ ”
1.一段按部就班列逻辑的代码
#include<stdio.h>
int main()
{
int input = 0;
int i = 0;
int j = 0;
while (scanf("%d", &input) != -1)
{
i = 0;
j = 0;
while (i < input)
{
if (i == 0)
{
for (j = 0; j < input; j++)
{
printf("*");
}
printf("\n");
}
else if (i > 0 && i < input - 1)
{
for (j = 0; j < input; j++)
{
if (j == 0 || j == input - 1)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
else if (i == input - 1)
{
for (j = 0; j < input; j++)
{
printf("*");
}
printf("\n");
}
i++;
}
}
}
易错点:(很重要!)
这里循环完一次以后,一定要让进入下一次循环时的i和j重新变为 0
假如第一次输入值是6,那么当 跳出循环时,i的值为6,j的值为 6,要是此时不加这两个语句,下一次输入比六小的数就不会输出,输入比六大的数也会破型
因为i和j的值会累积变大
2.捋逻辑,优化
只要满足 i=0或者i=num-1或者j=0或者j=num-1中任意一个条件,就能输出 *
否则输出“ ”
#include<stdio.h>
void Print(int num)
{
int i = 0;
int j = 0;
for (i = 0;i < num;i++)
{
for (j = 0;j < num;j++)
{
if (i == 0 || i == num - 1 || j == 0 || j == num - 1)
{
printf("*");
}
else
printf(" ");
}
printf("\n");
}
}
int main()
{
int num = 0;
while (scanf("%d", &num) != EOF)
{
Print(num);
}
}
2.X图形输出
观察图形特点:
. * 在两条对角线上
依然设变量i表示行号,变量 j 表示列号,假设输入的值为num
(i 与 j 的初始值都为0)
/ 上i=j
\ 上i+j是定值为num-1
#include<stdio.h>
void Print(int num)
{
int i = 0;
int j = 0;
for (i = 0;i < num;i++)
{
for (j = 0;j < num;j++)
{
if (i == j || i + j == num - 1)
printf("*");
else
printf(" ");
}
printf("\n");
}
}
int main()
{
int num = 0;
while (scanf("%d", &num) != EOF)
{
Print(num);
}
}
换行一定要放在某一行打印完成的时候,这样在进下一行的循环的时候换行
加在j循环的大括号里面,i循环的大括号里面