BC7 牛牛的字符矩形
题目:输入 1 个字符,输出3 行,每行 3 个这个字符 样例输入#
###
###
###
我的写法(硬写 printf)
#include <stdio.h>
int main()
{
char c;
scanf("%c",&c);
printf("%c%c%c\n%c%c%c\n%c%c%c\n",c,c,c,c,c,c,c,c,c);
return 0;
}
✅这个写法可以 AC,能直接提交 。 直接写死 9 个c,三行,适合 3*3 很小的矩阵。缺点:如果改成 5 行 5 列,就要复制一大堆。
标准写法:双重 while/for 循环(推荐刷题掌握)
外层循环控制行数(跑 3 次,代表 3 行) 内层循环控制每行打印几个字符(跑 3 次,打印 3 个 c) 每行内层结束之后打印\n换行。
#include <stdio.h>
int main()
{
char c;
scanf("%c", &c);
// 外层:3行
for(int i = 0; i < 3; i++)
{
// 内层:每行输出3个字符
for(int j = 0; j < 3; j++)
{
printf("%c", c);
}
printf("\n"); // 一行结束,换行
}
return 0;
}
#include <stdio.h>
int main()
{
char c;
scanf("%c", &c);
int i = 0;
// 外层:3行
while(i < 3)
{
int j = 0;
// 内层:一行输出3个字符
while(j < 3)
{
printf("%c", c);
j++; // j自增
}
printf("\n"); // 本行结束,换行
i++; // 行数+1
}
return 0;
}
运行逻辑
i=0(第 1 行):j 循环打印 3 个 c → 换行 i=1(第 2 行):j 循环打印 3 个 c → 换行 i=2(第 3 行):j 循环打印 3 个 c → 换行
输出效果:
###
###
###
两个方案对比
- 硬编码 printf(你的方式) 优点:简单,不用学循环,本题能过 缺点:矩阵变大就非常麻烦,比如 10 行 10 列,不能这么写。
- 双重 for 循环(考试、OJ 通用) 优点:改数字就能随便变几行几列,后面做图形题全靠双重循环,必须学会。
小坑提醒:
scanf("%c", &c),如果前面有别的输入,会读回车;这道题前面没有输入,直接写%c没问题。