向標準輸出上列印一些用ASCII字元組成的圖形(彙總)(迴圈巢狀)(關鍵是找要輸出物與行數n之間的關係,找規律)
阿新 • • 發佈:2018-12-16
1
#include <stdio.h>
int main()
{
int i,j,n;
scanf("%d",&n);//有n行
for(i=1;i<=n;i++)
{for(j=1;j<=2*i-1;j++)//控制列
printf("*");
printf("\n");}//別忘加換行
}
或者是這樣,用putchar(), c語言用putchar是用來輸出單個字元的, 拓展: 若用來輸出字串,可以先取得字串,然後獲取每位的字元,最後輸出。
比如一個字串為a[20],已經確定有了15位。
那麼如果想要輸出的話,可以用:
for(int i = 0 ; i < 15; i++) putchar(a[i]);
putchar,c語言函式之一,作用是向終端輸出一個字元。其格式為putchar©,其中c可以是被單引號(英文狀態下)引起來的一個字元,可以是介於0~127之間的一個十進位制整型數(包含0和127),也可以是事先用char定義好的一個字元型變數。
#include <stdio.h> int main() { int i,j,n; scanf("%d",&n);//有n行 for(i=1;i<=n;i++) {for(j=1;j<=2*i-1;j++)//控制列 putchar('*'); printf("\n");}//別忘加換行 }
2、金字塔形
#include <stdio.h>
int main()
{
int n,i,j,k;
scanf("%d",&n);//n代表有幾行
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i;j++)//此處需注意,
{
printf(" ");}
for(k=1;k<=2*i-1;k++)
printf("*");
printf("\n");
}
}
3、用字母搭出金字塔
#include <stdio.h> int main() { int n,i,j,k; char s='a'; scanf("%d",&n);//n代表有幾行 for(i=1;i<=n;i++) { for(j=1;j<=n-i;j++) { printf(" "); } for(k=1;k<=2*i-1;k++) putchar(s); s++; printf("\n"); } }
4、用字母搭出金字塔(同行不同字母)
#include <stdio.h>
int main()
{
int n,i,j,k;
char s='a';
scanf("%d",&n);//n代表有幾行
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i;j++)
{
printf(" ");
}
for(k=1;k<=2*i-1;k++)//也可以是for(k=1;k<-2*i-1;k++;s++) putchar(s);
//也可以是for(k=1;k<-2*i-1;k++) putchar(s++);
{putchar(s);
s++;}
printf("\n");
}
}
這個方法有缺陷,當行數多了時,會出現這種情況 這是因為字母只有26個,(下一個會講述這個問題的解決方法) 對比兩個金字塔,唯一的區別就在於 此處有沒有花括號,沒有花括號的時候,s++與for迴圈是並列關係,i++一次,s++一次,因此行中是相同的字母; 有花括號的時候,s++是在for迴圈裡面的,因此,第三個for迴圈每迴圈一次,s++,所以同一行的字母不相同。 5、解決多行後輸出錯誤的問題 (讓其從a-z一圈圈迴圈)
#include <stdio.h>
int main()
{
int n,i,j,k;
char s='a';
scanf("%d",&n);//n代表有幾行
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i;j++)
{
printf(" ");
}
for(k=1;k<=2*i-1;k++)
{putchar(s);
s++;
if(s=='z'+1)//此處有關鍵點
s='a';//
}
printf("\n");
}
}
6、
#include <stdio.h>
int main()
{
int n,i,j,k,m;
char s='a';
scanf("%d",&n);//n代表有幾行
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i;j++)
{
printf(" ");
}
for(k=1;k<=i;k++)
putchar(s++);
for(m=1;m<=i-1;m++)
{
s=97-m+i;//注意此處,此處是輸出右半部分的關鍵
printf("%c",s);
}
printf("\n");
}
}
方法二利用對稱與絕對值
#include <stdio.h>
#include<math.h>
int main()
{
int n,i,j,c;
char s='a';
scanf("%d",&n);//n代表有幾行
for(i=0;i<=n;i++)
{
for(j=1;j<=n-i;j++)
{
printf(" ");
}
for(j=-i;j<=i;j++)//從-i到i是每行要輸出的字元的個數
{
c=97+i-abs(j);//理解此處
printf("%c",c);
}
printf("\n");
}
}
6、輸出倒三角(平面圖形問題用兩層)
#include <stdio.h>
int main()
{
int n,i,j,k;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=0;j<=i-1;j++)
printf(" ");
for(k=2*(n-i)-1;k>0;k--)//理解此處,
printf("*");
printf("\n");
}
}