C語言輸出任意邊長的菱形
經過一段時間的學習後,想必大傢都已經開始摩拳擦掌,迫不及待地想用C語言寫一些程序瞭。
那麼今天,我們就來學習C語言中常見的例子——輸出任意邊長的菱形
適用范圍:學習並掌握瞭C語言循環以及之前的內容
上面圖片中用黃色a標示出來的便是菱形的邊長,圖片中為3,當然,也可以理解為(星號的行數+1)/2
那麼,廢話不多說,上教程
1.簡單理解星號輸出原理,將輸出星號代碼分為上方和下方兩部分
首先,我們可以觀察到如果邊長為a的話,那麼最長的一行的長度就為2*a-1,同時,每列星號都是對齊的,這說明我們如果想要輸出星號,是有規律可循的,沒星號的地方我們可以用空格來代替,這樣一想,發現,我們好像可以使用x軸區間來控制空格和星號的輸出
例如,第三行,如果我們設第一個星號的x坐標為1的話,並在此基礎上輸出5個星號,那我們隻需要寫一串代碼去控制在x屬於[1,5]的區間上輸出星號就行瞭
同樣,對於圖片中第一行來說,我們隻需要寫一串代碼來控制在x屬於(2,4)的區間上輸出一個星號就行瞭,如下
for(int j=1;j<2*3-1;j++) //3為圖片中菱形的邊長 { if(j>2&&j<4) printf("*"); else printf(" "); }
現在,由於行數不同,每行輸出的星號數也就不同,那麼,我們就可以找出輸出星號數和行數的的關系
但是,我們又可以看出,最長的一行星號上面的星號輸出方式為由少到多,而最長一行下面的星號輸出方式為由多到少,那麼,對於上面和下面,我們要找的星號數與行數的關系也是不同的
2.上方輸出星號代碼
那麼,接下來,我們先討論最長一行星號的上方(包括最長一行星號),輸出星號數與行數的關系
首先,我們要遍歷最長一行上方的所有行(包括最長一行),這時,就要用到for循環,這裡的a表示最長的一行的行數,同時也是菱形的邊長
for(int i=1;i<=a;i++)
接下來,我們要找到行數與輸出星號數的關系
經過觀察,我們發現,如果a為邊長,i表示行數,那麼則在(a-i,2*a-(a-i))區間上要輸出星號
看到這裡的友友們可以停下來思考一下,思考通瞭在接著看
好的,那麼接下來,我們要遍歷列,單單遍歷行是不夠的,不能控制星號以及空格的輸出,所以,我們就需要遍歷列
如下,我們用到瞭輸出星號的區間,如果列數在區間(a-i,2*a-(a-i))內,就輸出星號,不在區間內,就輸出空格,這樣,就可以控制輸出星號以及行數的關系瞭。
當然,也別忘瞭,每輸出一行星號就要換行,所以要寫printf(“\n”),但要寫在遍歷列for循環的外面,遍歷行for循環的裡面
這就是上方輸出星號的全部瞭,看到這兒,是不是想嘗試自己編寫下方星號的輸出瞭呢,如果想的話,那就大膽的去嘗試一下(* ̄︶ ̄)
for (int i = 1; i <= a; i++) //遍歷菱形最長一行上方(包括最長的一行)所有行 { printf(" "); //每行前面加空格,整齊好看 for (int j = 1; j<=2*a-1; j++) //遍歷菱形最長一行上方(包括最長的一行)每行的所有列 { if (j > a - i&& j <2 * a - (a - i)) printf("*"); else printf(" "); } printf("\n"); }
3.下方輸出星號代碼
好的,那麼下面,我們討論最長一行星號的下方(不包括最長一行星號),輸出星號數與行數的關系
先寫下方的遍歷行,我們是從最長的一行的下一行開始輸出,最長的一行的行數為a,那麼,我們要定義行的初始值為a+1,行的最大值為2*a-1
就像上方輸出星號一樣,接著要找輸出星號的區間,經過觀察,可以發現,列數在區間(i-a,2*a-(i-a))內,就輸出星號,不在區間內,就輸出空格,這樣,就可以控制輸出星號以及行數的關系瞭。
接下來,要遍歷列,代碼如下
for(int i=a+1;i<=2*a-1;i++)
當然,也別忘瞭,每輸出一行星號就要換行,所以要寫printf(“\n”),但要寫在遍歷列for循環的外面,遍歷行for循環的裡面
這就是下方輸出星號的全部瞭(* ̄︶ ̄)
for (int i = a + 1; i <= 2*a-1 ; i++) //遍歷菱形最長一行上方(包括最長的一行)所有行 { printf(" "); //每行前面加空格,整齊好看 for (int j = 1; j <= 2 * a - 1; j++) //遍歷菱形最長一行下方(不包括最長的一行)每行的所有列 { if (j > i - a && j < 2*a - (i - a)) printf("*"); else printf(" "); } printf("\n"); }
全部代碼如下
#include <stdio.h> #include <stdlib.h> int main(void) { int a; //菱形的邊長 //註意,由於屏幕的大小限制,過大的邊長(比如100)會導致無法輸出正常的菱形,望理解 printf("輸入菱形的邊長:\n"); scanf_s("%d", &a); for (int i = 1; i <= a; i++) //遍歷菱形最長一行上方(包括最長的一行)所有行 { printf(" "); //每行前面加空格,整齊好看 for (int j = 1; j<=2*a-1; j++) //遍歷菱形最長一行上方(包括最長的一行)每行的所有列 { if (j > a - i&& j <2 * a - (a - i)) printf("*"); else printf(" "); } printf("\n"); } for (int i = a + 1; i < 2*a + 1; i++) //遍歷菱形最長一行上方(包括最長的一行)所有行 { printf(" "); //每行前面加空格,不和邊框擁擠,可去掉 for (int j = 1; j <= 2 * a - 1; j++) //遍歷菱形最長一行下方(不包括最長的一行)每行的所有列 { if (j > i - a && j < 2*a - (i - a)) printf("*"); else printf(" "); } printf("\n"); } system("pause"); return 0; }
到此這篇關於C語言輸出任意邊長的菱形的文章就介紹到這瞭,更多相關C語言菱形內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!