初學C語言,幾種利用巢狀迴圈的字母列印格式
阿新 • • 發佈:2019-02-14
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");
}
}