C語言輸出任意邊長的菱形
? ? ? ? 經(jīng)過一段時間的學習后,想必大家都已經(jīng)開始摩拳擦掌,迫不及待地想用C語言寫一些程序了。
? ? ? ? 那么今天,我們就來學習C語言中常見的例子——輸出任意邊長的菱形
????????適用范圍:學習并掌握了C語言循環(huán)以及之前的內(nèi)容
? ? ? ??
? ? ? ? 上面圖片中用黃色a標示出來的便是菱形的邊長,圖片中為3,當然,也可以理解為(星號的行數(shù)+1)/2
????????那么,廢話不多說,上教程
? ? ?1.簡單理解星號輸出原理,將輸出星號代碼分為上方和下方兩部分
? ? ? ? 首先,我們可以觀察到如果邊長為a的話,那么最長的一行的長度就為2*a-1,同時,每列星號都是對齊的,這說明我們?nèi)绻胍敵鲂翘?,是有?guī)律可循的,沒星號的地方我們可以用空格來代替,這樣一想,發(fā)現(xiàn),我們好像可以使用x軸區(qū)間來控制空格和星號的輸出
? ? ? ? 例如,第三行,如果我們設第一個星號的x坐標為1的話,并在此基礎上輸出5個星號,那我們只需要寫一串代碼去控制在x屬于[1,5]的區(qū)間上輸出星號就行了
? ? ? ? 同樣,對于圖片中第一行來說,我們只需要寫一串代碼來控制在x屬于(2,4)的區(qū)間上輸出一個星號就行了,如下
for(int j=1;j<2*3-1;j++) //3為圖片中菱形的邊長
{
if(j>2&&j<4)
printf("*");
else
printf(" ");
}
? ? ? ? 現(xiàn)在,由于行數(shù)不同,每行輸出的星號數(shù)也就不同,那么,我們就可以找出輸出星號數(shù)和行數(shù)的的關系
? ? ? ? 但是,我們又可以看出,最長的一行星號上面的星號輸出方式為由少到多,而最長一行下面的星號輸出方式為由多到少,那么,對于上面和下面,我們要找的星號數(shù)與行數(shù)的關系也是不同的
? ? ?2.上方輸出星號代碼
? ? ? ? 那么,接下來,我們先討論最長一行星號的上方(包括最長一行星號),輸出星號數(shù)與行數(shù)的關系
? ? ? ? 首先,我們要遍歷最長一行上方的所有行(包括最長一行),這時,就要用到for循環(huán),這里的a表示最長的一行的行數(shù),同時也是菱形的邊長
for(int i=1;i<=a;i++)

? ? ? ? 接下來,我們要找到行數(shù)與輸出星號數(shù)的關系?
? ? ? ? 經(jīng)過觀察,我們發(fā)現(xiàn),如果a為邊長,i表示行數(shù),那么則在(a-i,2*a-(a-i))區(qū)間上要輸出星號
? ? ?看到這里的友友們可以停下來思考一下,思考通了在接著看?
? ? ? ? 好的,那么接下來,我們要遍歷列,單單遍歷行是不夠的,不能控制星號以及空格的輸出,所以,我們就需要遍歷列
? ? ? ? 如下,我們用到了輸出星號的區(qū)間,如果列數(shù)在區(qū)間(a-i,2*a-(a-i))內(nèi),就輸出星號,不在區(qū)間內(nèi),就輸出空格,這樣,就可以控制輸出星號以及行數(shù)的關系了。
? ? ? ? 當然,也別忘了,每輸出一行星號就要換行,所以要寫printf("\n"),但要寫在遍歷列for循環(huán)的外面,遍歷行for循環(huán)的里面
? ? ? ? 這就是上方輸出星號的全部了,看到這兒,是不是想嘗試自己編寫下方星號的輸出了呢,如果想的話,那就大膽的去嘗試一下(* ̄︶ ̄)
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.下方輸出星號代碼
????????好的,那么下面,我們討論最長一行星號的下方(不包括最長一行星號),輸出星號數(shù)與行數(shù)的關系
? ? ? ? 先寫下方的遍歷行,我們是從最長的一行的下一行開始輸出,最長的一行的行數(shù)為a,那么,我們要定義行的初始值為a+1,行的最大值為2*a-1
? ? ? ? 就像上方輸出星號一樣,接著要找輸出星號的區(qū)間,經(jīng)過觀察,可以發(fā)現(xiàn),列數(shù)在區(qū)間(i-a,2*a-(i-a))內(nèi),就輸出星號,不在區(qū)間內(nèi),就輸出空格,這樣,就可以控制輸出星號以及行數(shù)的關系了。
? ? ? ? 接下來,要遍歷列,代碼如下
for(int i=a+1;i<=2*a-1;i++)
????????當然,也別忘了,每輸出一行星號就要換行,所以要寫printf("\n"),但要寫在遍歷列for循環(huán)的外面,遍歷行for循環(huá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");
}
全部代碼如下
#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語言菱形內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C語言 如何求兩整數(shù)的最大公約數(shù)與最小公倍數(shù)
這篇文章主要介紹了C語言中如何求兩整數(shù)的最大公約數(shù)與最小公倍數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11
在Visual Studio中配置C++最新版netCDF庫的方法
本文介紹在Windows電腦的Visual Studio軟件中,配置C++ 語言最新版netCDF庫的方法,文中通過圖文結合的形式介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下2024-03-03
C/C++?實現(xiàn)動態(tài)資源文件釋放的方法
當我們開發(fā)Windows應用程序時,通常會涉及到使用資源(Resource)的情況。資源可以包括圖標、位圖、字符串等,它們以二進制形式嵌入到可執(zhí)行文件中,這篇文章主要介紹了C/C++?實現(xiàn)動態(tài)資源文件釋放,需要的朋友可以參考下2023-12-12

