【题】
输出字母围起的正方形
输入N*N图形正方形的边长N,图形左上角的字母,输出由字母围成的空心正方形。输出的字母是顺时针连续的,且是循环的,即输出字母'Z'后输出字母"A"。注意在两个字母之间有一个空格。
例如输入:
6 M
输出如下图形:
M N O P Q R
F S
E T
D U
C V
B A Z Y X W
(1)在正方形 的边上打印固定字符。代码如下:
#include "stdio.h"
int main(int argc, char **argv)
{
int n;
char che;
scanf("%d %c", &n, &ch);
getchar();
int i, j;
for (i = 1; i <=n; i++)
{
for (j = 1; j <= n; j++)
{
if (i == 1 && j == 1) //左上角第一个字符
printf("%c", ch);
else if(j == 1)
printf("%c", ch); //正方形左侧的边
else if(i == 1 && j != n)
printf(" %c", ch); //正方形上侧的边
else if(j == n)
printf(" %c", ch); //正方形右侧的边
else if(i == n && j != n) //正方形下侧的边
printf(" %c", ch);
else //正方形的中间
printf(" ");
}
printf("\n");
}
return 0;
}
【运行截图】
(2)字符递增,但不考虑字符越界的情况。
#include "stdio.h"
int main(int argc, char **argv)
{
int n;
char ch;
scanf("%d %c", &n, &ch);
getchar();
int i, j;
for (i = 1; i <=n; i++)
{
for (j = 1; j <= n; j++)
{
if (i == 1 && j == 1) //左上角第一个字符
printf("%c", ch);
else if(j == 1) //正方形左侧的边
printf("%c", ch + n - 1 + n - 1 + n - 1 + n - i);
else if(i == 1 && j != n) //正方形上侧的边
printf(" %c", ch + j -1);
else if(j == n) //正方形右侧的边
printf(" %c", ch + n - 1 + i - 1);
else if(i == n && j != n) //正方形下侧的边
printf(" %c", ch + n - 1 + n - 1 + n - j);
else //正方形的中间
printf(" ");
}
printf("\n");
}
return 0;
}
【运行截图】
(3)终结版,考虑字母越界。
#include "stdio.h"
int main(int argc, char **argv)
{
int n;
char ch, base;
scanf("%d %c", &n, &ch);
getchar();
int i, j;
if (ch >= 'a')
base = 'a';
else
base = 'A';
for (i = 1; i <=n; i++)
{
for (j = 1; j <= n; j++)
{
if (i == 1 && j == 1)
printf("%c", ch);
else if(j == 1)
printf("%c", ((ch + n - 1 + n - 1 + n - 1 + n - i) - base)%26 + base);
else if(i == 1 && j != n)
printf(" %c", ((ch + j -1) - base)%26 + base);
else if(j == n)
printf(" %c", ((ch + n - 1 + i - 1) - base)%26 + base);
else if(i == n && j != n)
printf(" %c", ((ch + n - 1 + n - 1 + n - j) - base)%26 + base);
else
printf(" ");
}
printf("\n");
}
return 0;
}
【运行截图】