2009年11月30日 星期一

期中考解答


第1~4題:

#include <stdio.h>
#include <stdlib.h>
float cm2feet(float cm);
int age(int myage);

int main()
{
    int myage;
    float kg,n,cm,feet;
    printf("張龜雅\n輸入公斤重:");
    scanf("%f",&kg);
    n=kg*9.81;
    printf("我的體重%f牛頓\n",n);

    printf("輸入公分:");
    scanf("%f",&cm);
    feet=cm2feet(cm);
    printf("我的身高%f英呎\n",feet);

    printf("輸入年齡:");
    scanf("%d",&myage);
    age(myage);

    return 0;
}

float cm2feet(float cm)
{
    float feet;
    feet=cm*0.0328;
    return feet;
}

int age(int myage)
{
    int i,sum;
    sum=myage;
    for(i=1;i<=10;i++)
    {
        sum+=1;
        printf("%d年後我%d歲\n",i,sum);
    }
    return 0;
}

第5題:

#include <stdio.h>
#include <stdlib.h>
void one(int x);
void two(int x);

int main()
{
    int x,y,i;
    printf("請輸入x:");
    scanf("%d",&x);
    printf("請輸入y:");
    scanf("%d",&y);
    one(x);
    for(i=3;i<=y;i++)
    {
        two(x);
    }
    one(x);
return 0;
}

void one(int x)
{
    int i;
    for(i=1;i<=x;i++)
    {
        printf("囧");
    }
    printf("\n");
}

void two(int x)
{
    int i;
    for(i=1;i<=x/2;i++)
    {
        printf(" ");
    }
    printf("囧\n");
}

第6題:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,j,allday,day;
    allday=31;
    j=1;
    day=1;
    printf(" 日 一 二 三 四 五 六\n");
    for(i=1;i<=allday+2;i++)
    {
        if(i<3)
        {
            printf("   ");
            j++;
        }
        else
        {
            if(j<7)
            {
                printf("%3d",day);
                j++;
            }
            else
            {
                printf("%3d\n",day);
                j=1;
            }
            day++;
        }
    }
return 0;
}

第7~8題:
#include <stdio.h>
#include <stdlib.h>
#include <gd/gd.h>
#include <gd/gdfontg.h>
#include <gd/gdfontt.h>
#include <gd/gdfonts.h>
#include <gd/gdfontmb.h>
#include <gd/gdfontl.h>
#include <math.h>

void star(int x,int y, int radius);

int red,orange,yellow,green,blue,cyan,purple,black,white;
float degree = 3.14159/180.;
gdImagePtr im;
FILE *in;

int main(int argc, char *argv[])
{
int j,i;
float x,y;
//----------------------------------
    char file[40];
char end[40] = ".htm";
//----------------------------------
im = im = gdImageCreate(500, 500);

green=gdImageColorAllocate(im,128,255,0);

red=gdImageColorAllocate(im,255,0,0);
white = gdImageColorAllocate(im, 255, 255, 255);
orange=gdImageColorAllocate(im,255,128,0);
yellow=gdImageColorAllocate(im,255,255,0);

blue=gdImageColorAllocate(im,0,0,255);
cyan=gdImageColorAllocate(im,0,255,255);
purple=gdImageColorAllocate(im,255,0,255);
black = gdImageColorAllocate(im, 0, 0, 0);

//----------------------------------------------------------
FILE *outfile;
printf ( "Please input a file name: " );
scanf ( "%s" , file );
strcat ( file , end );
outfile = fopen ( file , "wb" );
fprintf(outfile, "<img src=gdimage.png><br>\n");
    for(i=1;i<=20;i++)
    {
        x=250+100*sin(i*18*degree);
        y=250+100*cos(i*18*degree);
        fprintf(outfile, "Coordinates %d (%f,%f)<br>\n",i,x,y);
        star(x,y,30);
    }
fclose(outfile);
//----------------------------------------------------------
in = fopen("gdimage.png", "wb");
if (!in) {
printf("cannot open < gdimage.png for writing\n");
return 1;
}
gdImagePng(im, in);
fclose(in);
gdImageDestroy(im);
return 0;
}

void star(int x,int y, int radius)
{
gdImageFilledEllipse(im, x, y, radius, radius, red);
}

設一甲期中考題目

預備動作


1.開啟你(妳)的CodeBlacks
2.在D槽建立好『以您的學號為名稱』之Project
如圖:



3.打開『main.c』,準備開始寫程式。
如圖:



4.上傳教學
馬上會需要上傳檔案交卷,上傳方法如下圖:

題目1 - 連鎖題


請撰寫一程式能『印出』自己學號名字如『19873106張龜雅』並換行,不限方法。
(送分題,限時3分鐘)
結果如:

  19873106張龜雅

寫完請存檔,並將『整個Project』壓縮成Zip檔案傳上來。
如圖:

題目2 - 連鎖題


請接續程式,加入能夠『輸入』自己體重(公斤重)並轉換算成(牛頓)後印出的程式。
『1kg = 9.81N,體重可以亂掰』(限時5分鐘,10分)
結果如:

  19873106張龜雅
  輸入公斤重:50
  我的體重490.500000牛頓

寫完請存檔,並將『整個Project』壓縮成Zip檔案傳上來。
如圖:

題目3 - 連鎖題


請接續程式,加入一『副程式』能夠輸入自己身高(公分)並轉換成(英呎)後印出的副程式。
『1cm = 0.0328feet,身高可以亂掰』(限時10分鐘,10分)
結果如:

  19873106張龜雅
  輸入公斤重:50
  我的體重490.500000牛頓
  輸入公分:150
  我的身高4.920000英呎

寫完請存檔,並將『整個Project』壓縮成Zip檔案傳上來。
如圖:

題目4 - 連鎖題


請接續程式,並使用『for迴圈』,加入一『能夠輸入自己年齡』並印出『1~10年後我幾歲』的程式。
『年齡可以亂掰』(限時15分鐘,10分)

結果如:

  19873106張龜雅
  輸入公斤重:50
  我的體重490.500000牛頓
  輸入公分:150
  我的身高4.920000英呎
  輸入年齡:18
  1年後我19歲
  2年後我20歲
  3年後我21歲
  4年後我22歲
  5年後我23歲
  6年後我24歲
  7年後我25歲
  8年後我26歲
  9年後我27歲
  10年後我28歲

寫完請存檔,並將『整個Project』壓縮成Zip檔案傳上來。
如圖:





後面程式沒有限時囉可以慢慢寫,
5~6題非連鎖題不需要接續程式撰寫,
7~8題為連鎖題請互相參考範例程式。

題目5


請使用『副程式』加上『for迴圈』,讓使用者能『輸入X跟Y方向的個數』印出『工字型』。
(不限用什麼字排成圖形,不限時,20分)
結果如:

  請輸入x:7
  請輸入y:6
  囧囧囧囧囧囧囧
     囧
     囧
     囧
     囧
  囧囧囧囧囧囧囧

5~8題交卷只需要交上C程式檔案,檔名以學號命名一槓題號,
如:『19873106-5.c』、『19873106-6.c』、『19873106-7.c』、『19873106-8.c』

題目6


使用for迴圈,印出2009年12月份的月曆,日一二三四五六直接印出。
(不限時,20分)
結果如圖:




5~8題交卷只需要交上C程式檔案,檔名以學號命名一槓題號,
如:『19873106-5.c』、『19873106-6.c』、『19873106-7.c』、『19873106-8.c』

題目7 - 連鎖題


修改下面的範例程式,
輸出一張由『小黑點』環繞的『圓形』,並且將小黑點『換成別的顏色』,
環繞大小不拘,環繞的點數量『至少20點以上』,不限方法。

繪圖需要的檔案:bgd檔案

(不限時,20分)

//----------------範例程式開始----------------
#include <stdio.h>
#include <stdlib.h>
#include <gd/gd.h>
#include <gd/gdfontg.h>
#include <gd/gdfontt.h>
#include <gd/gdfonts.h>
#include <gd/gdfontmb.h>
#include <gd/gdfontl.h>
#include <math.h>

void star(int x,int y, int radius);

int red,orange,yellow,green,blue,cyan,purple,black,white;
float degree = 3.14159/180.;
gdImagePtr im;
FILE *in;

int main(int argc, char *argv[])
{
int j;
im = im = gdImageCreate(500, 500);

green=gdImageColorAllocate(im,128,255,0);

red=gdImageColorAllocate(im,255,0,0);
white = gdImageColorAllocate(im, 255, 255, 255);
orange=gdImageColorAllocate(im,255,128,0);
yellow=gdImageColorAllocate(im,255,255,0);

blue=gdImageColorAllocate(im,0,0,255);
cyan=gdImageColorAllocate(im,0,255,255);
purple=gdImageColorAllocate(im,255,0,255);
black = gdImageColorAllocate(im, 0, 0, 0);

star(100,100,30);

in = fopen("gdimage.png", "wb");
if (!in) {
printf("cannot open < gdimage.png for writing\n");
return 1;
}
gdImagePng(im, in);
fclose(in);
gdImageDestroy(im);
return 0;
}

void star(int x,int y, int radius)
{
gdImageFilledEllipse(im, x, y, radius, radius, black);
}

//----------------範例程式結束----------------

5~8題交卷只需要交上C程式檔案,檔名以學號命名一槓題號,
如:『19873106-5.c』、『19873106-6.c』、『19873106-7.c』、『19873106-8.c』

題目8 - 連鎖題


修改題目7的程式,並參考下面的程式,
將題目7中的圖片顯示在網頁上(*.htm),
並將小黑點的座標也輸出到網頁(*.htm)檔案,
請輸出至少20個點以上。
(不限時,20分)

說明:
『<br>』是Html語言的換行語法
『<img src=gdimage.png>』是Html語言的顯示圖片語法

//----------------範例程式開始----------------
#include<stdio.h>
#include<string.h>

int main()
{
char file[40];
char end[40] = ".htm";
FILE *outfile;
printf ( "Please input a file name: " );
scanf ( "%s" , file );
strcat ( file , end );

outfile = fopen ( file , "wb" );
fprintf(outfile, "Welcome to Facebook!!<br>\n");
fprintf(outfile, "There are restaurant city<br>\n");
fclose(outfile);
return 0;
}
//----------------範例程式結束----------------



Htm網頁檔案的範例內容如(範例為18個點,但請你輸出至少20個點以上):

  <img src=gdimage.png><br>
  Coordinates 1 (284.201996,343.969269)<br>
  Coordinates 2 (314.278717,326.604492)<br>
  Coordinates 3 (336.602509,300.000092)<br>
  Coordinates 4 (348.480743,267.364929)<br>
  Coordinates 5 (348.480804,232.635330)<br>
  Coordinates 6 (336.602631,200.000153)<br>
  Coordinates 7 (314.278931,173.395691)<br>
  Coordinates 8 (284.202240,156.030823)<br>
  Coordinates 9 (250.000275,150.000000)<br>
  Coordinates 10 (215.798264,156.030640)<br>
  Coordinates 11 (185.721497,173.395340)<br>
  Coordinates 12 (163.397644,199.999695)<br>
  Coordinates 13 (151.519287,232.634796)<br>
  Coordinates 14 (151.519150,267.364410)<br>
  Coordinates 15 (163.397232,299.999603)<br>
  Coordinates 16 (185.720871,326.604126)<br>
  Coordinates 17 (215.797501,343.969086)<br>
  Coordinates 18 (249.999466,350.000000)<br>

範例圖片:



5~8題交卷只需要交上C程式檔案,檔名以學號命名一槓題號,
如:『19873106-5.c』、『19873106-6.c』、『19873106-7.c』、『19873106-8.c』

設一甲期中考試

考8題。

2009年11月16日 星期一

Code::Blocks環境下設定 GD library

Code::Blocks環境下設定 GD library:

1.先下載套件:http://www.libgd.org/releases/gd-latest-win32.zip
2.include內之檔案,放入MinGW/include目錄下的gd 子目錄.
3.lib內之檔案,放入MinGW/lib目錄下.
4.在 CodeBlocks->Project->Build options->Linker settings->在Link libraries中加入bgd(使其連結bgd.lib)

5.將bin目錄下的bgd.dll放於system32或直接與.c同一目錄

6.將sample.jpg置於.c同一目錄後,測試上述程式.



二十五顆小星星↓





ㄟ( ̄血 ̄ㄟ)))...

2009年11月10日 星期二

switch case default

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i;
    printf("KMOL勵志小語第幾條:");
    scanf("%d",&i);
    switch(i)
    {
        case 1:
        printf("為人設想\n");
        break;
        case 2:
        printf("相互尊重\n");
        break;
        case 3:
        printf("領導不過是服務配合\n");
        break;
        case 4:
        printf("充分準備\n");
        break;
        case 5:
        printf("全力以赴\n");
        break;
        case 6:
        printf("冷靜理性、忍住當下\n");
        break;
        case 7:
        printf("能說、會做、敢承諾\n");
        break;
        case 8:
        printf("創意無限、出奇不意\n");
        break;
        case 9:
        printf("不怕挑戰、危機\n");
        break;
        default:
        printf("永不放棄\n");
        break;
    }
    //system語法要include這個標頭檔案stdlib.h
    system("pause");
    return 0;
}

2009年11月9日 星期一

隨身碟的CodeBlocks無法開啟Project

可以試試這個方法,
應該能夠解決。

1.進入Settings > Compiler and debugger

2.點選Reset Defaults

試試看吧!!

迴圈While,Do While,Do While Break

#include <stdio.h>

int main()
{
    printf("\n----------While----------\n");
  
  
    int i=0;
    while(i<5)
    {
        printf("%d",i);
        i++;
    }
  
    printf("\n----------Do While----------\n");
  
    i=0;
    do
    {
        printf("%d",i);
        i++;
    }while(i<5);
  
    printf("\n----------Do While Break----------\n");
  
    i=0;
    do
    {
        printf("%d",i);
      
        if(i>=4)
            break;
      
        i++;
    }while(1);
  
    printf("\n");
}

以 C 建立 DXF 圖檔

以 C 建立 DXF 圖檔:

#include <stdio.h>
#include <stdlib.h>
void dxf_begin(void);
void dxf_end(void);
void dxf_circle(float x,float y,float r);
//outfile 為全域變數
FILE *outfile;

int main()
{
outfile = fopen("c:\\temp\\out.dxf","w");
dxf_begin();
dxf_circle(10.0,10.0,10.0);
dxf_end();
printf("successful\n");
fclose(outfile);
return 0;
}

void dxf_begin(void)
{
fprintf(outfile,"0\nSECTION\n2\nENTITIES\n");
}


void dxf_end(void)
{
fprintf(outfile,"0\nENDSEC\n0\nEOF");
}


void dxf_circle(float x,float y,float r)
{
fprintf(outfile,"0\nCIRCLE\n8\n0\n10\n%f\n20\n%f\n30\n0.0\n40\n%f\n",x,y,r);
}



C程式產生出來的dxf文件內容如下:

0
SECTION
2
ENTITIES
0
CIRCLE
8
0
10
10.000000
20
10.000000
30
0.0
40
10.000000
0
ENDSEC
0
EOF


各行說明:

0 後面接SECTION
SECTION 這是個開始
2 後面接ENTITIES
ENTITIES 實體段
0 開始
CIRCLE 化緣的指令...POLYLINE是畫線的指令...等

8 表明以下是一個新的實體
0 後面接畫圓的參數

10 後面接圓心的x座標
10.000000
20 後面接圓心的y座標

10.000000
30 後面接圓心的z座標

0.0
40 後面接圓的半徑
10.000000
0
ENDSEC 結束指令
0
EOF 關閉文件



PS:A.I.P.繪圖指令 - 20092010