初学C语言,几种利用嵌套循环的字母打印格式
- 1、最简单的换行嵌套,一个 for 循环控制行数,一个 for 循环控制每行输出量。
#include <stdio.h>
/*输出类似于
$
$$
$$$
$$$$
$$$$$
*/
int main(void)
{
int m,n;
for(m=1;m<=5;m++)
for(n=1;n<=m;n++)
{
printf("$");
if(n==m)
printf("\n");
}
}
- 2、相比于第一例,多了一个字符倒序输出,利用数组下标中加上变量 n 实现。
#include <stdio.h>
/*输出形如
F
FE
FED
FEDC
FEDCB
FEDCBA
*/
int main(void)
{
char lett[27]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int m,n;
for(m=1;m<=6;m++)
for(n=1;n<=m;n++)
{
printf("%c",lett[6-n]);
if(n==m)
printf("\n");
}
}
- 3、这个的难点在于一开始不理解 ch++ 的正确使用方法,直接使用数组的方式两个循环嵌套去做,(错误)代码如下:
#include <stdio.h>
int main(void)
{
char lett[27]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int m,n;
for(m=0;m<=6;m++)
for(n=0;n<=m;n++)
{
printf("%c",lett[m+n]);
if(n==m)
printf("\n");
}
}
先看这个的输出结果:
前两行没有问题,后面出现问题,那是为什么呢,可以发现,第一个循环每次加一过后,第二个循环都会初始化为 0,也就是说,A 可以理解为 0+0,B=1+0,C=1+1,然后第一个循环变成 2,第二个循环为 0,也就是第三行又出现了一个 C。
正确代码如下:
#include <stdio.h>
/*输出形如
A
BC
DEF
GHIJ
KLMNO
PQRSTU
*/
int main(void)
{
char ch='A';
int i,j;
for(i=1;i<7;i++) //控制行数
{
for(j=0;j<i;j++) //控制每行字母个数
printf("%c",ch++); //ch每次操作递增
printf("\n");
}
return 0;
}
- 4、该例根据用户不同的输入值进行不同的输出,前三例稍加修改也可以的,有种复杂的写法用了四个循环,一个循环控制行数,内部三个循环一个循环打印空格,一个循环打印升序字母,一个循环打印降序字母。该例用了一个 for 循环加上 if…else 语句直接完成升序和降序字母的输出。
#include <stdio.h>
/*输出形如
***A
**ABA
*ABCBA
的图形,其中“*”代表空格,行数由用户定义
*/
int main(void)
{
int i,j,k;
char input;
printf("please input a capital letters:"); //输入大写字母以定义行数
scanf("%c",&input);
for(i=0;i<(int)(input-'A'+1);i++) //控制行数
{
for(j=1;j<=(int)(input-'A'+1-i);j++) //打印空格
printf(" ");
for(k=0;k<=2*i;k++) //打印字母
if(k<=i)
putchar('A'+k);
else
putchar('A'+2*i-k);
printf("\n");
}
}