目录
一、程序概述
本段C代码实现了一个功能,即读取用户输入的一个整数x
,并基于这个数值打印出一个在2D数组表示下呈“X”形状的字符矩阵。程序通过标准输入(scanf
)接收数据,并在控制台输出相应的图形。
二、图解
主对角线的位置:第0行第0列;第1行第1列;第2行第2列;
反对角线位置:第0行第9列;第1行第8列;(0,9)(9+0 == 10-1)
由这个逻辑,我们代码就可以这样写
#include <stdio.h>
int main() {
int x;
while (scanf("%d",&x) != EOF) { // 注意 while 处理多个 case
for (int i = 0; i < x; i++)
{
for (int j = 0; j < x;j++) {
if ((i == j)||(i+j == x - 1) )
{
printf("* ");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
三、核心逻辑详解
- 读取输入:
while (scanf("%d",&x) != EOF)
表示程序会持续读取用户的输入,每次读取一个整数x
,直到文件结束。 - 打印“X”形图案: 在循环内部,使用嵌套的两层
for
循环遍历一个大小为x
×x
的区域:
for (int i = 0; i < x; i++) {
for (int j = 0; j < x; j++) {
// 判断条件并打印对应字符
}
printf("\n"); // 每完成一行打印后换行
}
- 条件判断与字符输出: 内部的条件语句决定是否打印星号
*
(代表“X”形状)或空格:
if ((i == j) || (i + j == x - 1)) {
printf("* "); // 当满足特定条件时打印星号
} else {
printf(" "); // 否则打印两个空格
}
这里的条件 (i == j)
和 (i + j == x - 1)
分别决定了两种情况:
- 第一种情况:当行索引
i
等于列索引j
时,在对角线上打印星号。 - 第二种情况:当行索引
i
和列索引j
之和等于x - 1
时,在另一条对角线上打印星号。