這些黃白相間的玫瑰花每10公分的距離種一棵,小甜甜心理在想,隨便一個方塊中,會有多少棵玫瑰呢?
這次的作業,你要計算的是玫瑰的數量,在一個已知位置的矩形中,算出紅黃玫瑰各有多少棵。以下圖為例:
矩形左下角座標為(35, 35),右上角座標為(95, 75),算出的紅玫瑰有12棵,黃玫瑰也有12棵。1. 完成函數void calcRose( int, int, int, int, int *, int *),輸入參數有六個,前四個整數為矩形座標,分別為x1, y1, x2, y2,而(x1, y1)為左下角,(x2, y2)為右上角座標。最後兩個參數為整數指摽,分別代表紅色與黃色玫瑰的數量。
2. 程式的輸入為四個整數,以空白格開,範圍在0~4000(含)之間,當四個值都是 0 時,則程式停止。
3. 程式的輸出為兩個整數,分別為紅色與黃色玫瑰的數量,各佔六格。
4. 主程式呼叫calcRose函數,在求出玫瑰數量後,依格式輸出結果。
流程圖:
執行範例:
原始碼:
/*作業七
1. 完成函數void calcRose( int, int, int, int, int *, int *)。2. 程式的輸入為四個整數,以空白格開,範圍在0~4000(含)之間,當四個值都是 0 時,則程式停止。
#include
#include
void calcRose(int,int,int,int,int *,int *);
int main(void)
{
while(1)
{//x1 y1為範圍左下角的坐標、 x2 y2為範圍右上角的坐標、sum_r=紅花總數、sum_y=黃花總數int x1,y1,x2,y2,sum_r=0,sum_y=0;
int *red=&sum_r,*yell=&sum_y;//宣告red、yell指標函數
printf("請輸入左下座標、右上座標:");
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
if(x1==0&&y1==0&&x2==0&&y2==0)
break;
calcRose(x1,y1,x2,y2,red,yell);
printf("在此區塊內共有紅花%6d朵、黃花%6d朵。\n",*red,*yell);
}
system("pause");
return 0;
}
void calcRose(int x1,int y1,int x2,int y2,int *red,int *yell)
{
int i,j; //i、j為迴圈用之變數
/*將輸入的坐標標準化成花與花的間距都為1的坐標系統*/
if(x1%10>0)
x1=x1/10+1;
else
x1/=10;
if(y1%10>0)
y1=y1/10+1;
else
y1/=10;
x2/=10;
y2/=10;
/*判斷紅、黃花數量*/
for(i=x1;i<=x2;i++)
{
for(j=y1;j<=y2;j++)
{
if((i%2==1 && j%2==1)&&(i!=0&&j!=0))
*yell=*yell+1;
else if((i%2==1 && j%2==0)&&(i!=0&&j!=0))
*red=*red+1;
else if((i%2==0 && j%2==1)&&(i!=0&&j!=0))
*red=*red+1;
else if((i%2==0 && j%2==0)&&(i!=0&&j!=0))
*yell=*yell+1;
}
}
}
※有哪裡不懂得可以MSN問我,如果有錯誤的地方,可以直接在底下回覆糾正我的錯誤。
如果用 struct 的話就可以減少 過多的變數帶入程式中
回覆刪除只要傳入一個 struct 就可以了= =
呵呵~~~~多看就會了解了~~~~~~~
回覆刪除