BC60 带空格直角三角形图案
描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的带空格直角三角形图案。
输入描述:
多组输入,一个整数(2~20),表示直角三角形直角边的长度,即“*”的数量,也表示输出行数。
输出描述:
针对每行输入,输出用“*”组成的对应长度的直角三角形,每个“*”后面有一个空格。
示例1
输入:
5输出:
* * * * * * * * * * * * * * *
由于题目比较简单,我们就直接上代码:
//代码1-常规写法
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d", &n) != EOF)
{
int i = 0;
//行数控制
for(i=0; i<n; i++)
{
//空格
int j = 0;
for(j=0; j<n-1-i; j++)
{
printf(" ");
}
//*
for(j=0; j<=i; j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
题目本身是比较简单的,所以本篇博客,主要是想说明有关多组输入的问题(划重点)
多组输入!!!
根据while循环自身的特点以及EOF所代表的含义,一般采用下面两种方式进行多组输入:
第一种方式:
int i;
while((scanf("%d",&i))!=EOF)
{
xxxxxxxxxxxxxxx;
xxxxxxxxxxxxxxx;
}
原理:通过资料易得,scanf进行输入时,若输入不为EOF,则while循环为真,进行循环,然后通过题设再进行后续操作。
第二种方式:
int i;
while(~(scanf("%d",&i)))
{
xxxxxxxxxxxxxxx;
xxxxxxxxxxxxxxx;
}
原理:第二种方法是在第一种的基础上进行改造,易得EOF 即为end of file,EOF对应的数为-1,通过原、反 、补码相关知识,负数的原码除符号位之外全部取反,得到反码,在反码的基础上加1,得到补码。