菱形,就是如下所示的圖形,總行數(shù)與總列數(shù)相等:
寫一個(gè)程序,根據(jù)用戶輸入的總行數(shù),打印出菱形。
這個(gè)題目主要是找出規(guī)律,考察讀者的邏輯思維。
你可以從第一行開始,遍歷所有的列,也可以從第一列開始,遍歷所有的行。
下面的程序從第一行開始,遍歷所有的列。
設(shè)菱形的總行數(shù)為line,總列數(shù)為column,當(dāng)前行為i,當(dāng)前列為j。上半部分與下半部分的規(guī)律不一樣,應(yīng)該分開討論。
我們著眼于星號(hào)(*),思考什么條件下輸出星號(hào),總結(jié)出如下的規(guī)律。
1) 對(duì)于上半部分(包括中間一行),當(dāng)前行與當(dāng)前列滿足如下關(guān)系輸出星號(hào):
j>=(column+1)/2-(i-1) (column+1)/2-(i-1)為第i行最左邊的星號(hào)
j<=(column+1)/2+(i-1) (column+1)/2+(i-1)為第i行最右邊的星號(hào)
2) 對(duì)于下半部分,當(dāng)前行與當(dāng)前列滿足如下關(guān)系輸出星號(hào):
j>=(column+1)/2-(line-i) (column+1)/2-(line-i)為第i行最左邊的星號(hào)
j<=(column+1)/2+(line-i) (column+1)/2+(line-i)為第i行最右邊的星號(hào)
不滿足上述條件,則輸出空格。
于是寫出如下的代碼:
#include <stdio.h>
#include <stdlib.h>
int main(){
int line; // 菱形總行數(shù)
int column; // 菱形總列數(shù)
int i; // 當(dāng)前行
int j; // 當(dāng)前列
printf("請(qǐng)輸入菱形的行數(shù)(奇數(shù)):");
scanf("%d", &line);
if(line%2==0){ // 判斷是否是奇數(shù)
printf("必須輸入奇數(shù)!\n");
exit(1);
}
column = line; // 總行數(shù)和總列數(shù)相同
for(i=1; i<=line; i++){ // 遍歷所有行
if(i<(line+1)/2+1){ // 上半部分(包括中間一行)
for(j=1; j<=column; j++){ // 遍歷上半部分的所有列
if( (column+1)/2-(i-1)<=j && j<=(column+1)/2+(i-1) ){
printf("*");
}else{
printf(" ");
}
}
}else{ // 下半部分
for(j=1; j<=column; j++){ // 遍歷下半部分的所有列
if( (column+1)/2-(line-i)<=j && j<=(column+1)/2+(line-i) ){
printf("*");
}else{
printf(" ");
}
}
}
printf("\n");
}
return 0;
運(yùn)行結(jié)果:
請(qǐng)輸入菱形的行數(shù)(奇數(shù)):11
*
***
*****
*******
*********
***********
*********
*******
*****
***
*