網頁

2008年5月4日 星期日

【教學】C語言,作業七 - 簡單指標練習。(2008.05.05原始檔OK)

作業基本要求如下:

這些黃白相間的玫瑰花每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 時,則程式停止。
3. 程式的輸出為兩個整數,分別為紅色與黃色玫瑰的數量,各佔六格。
4. 主程式呼叫calcRose函數,在求出玫瑰數量後,依格式輸出結果。
開發過程:參考課本CH10指標*/
#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;//宣告redyell指標函數 
        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; //ij為迴圈用之變數
    /*將輸入的坐標標準化成花與花的間距都為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問我,如果有錯誤的地方,可以直接在底下回覆糾正我的錯誤。

2 則留言:

  1. 如果用 struct 的話就可以減少 過多的變數帶入程式中
    只要傳入一個 struct 就可以了= =

    回覆刪除
  2. 呵呵~~~~多看就會了解了~~~~~~~

    回覆刪除