2018年10月29日 星期一

memset()、memcpy()用法實例

memset()用法實例

#include <stdio.h>
#include <stdlib.h>

char a[100] ;

int main()
{
    memset(a,'\0',sizeof(a));
    printf("%s\n",a);
    return 0;
}
執行結果:

#include <stdio.h>
#include <stdlib.h>

char a[100] ;

int main()
{
    memset(a,"\0",sizeof(a));
    printf("%s\n",a);
    return 0;
}
執行結果:

memcpy()用法實例

#include <stdio.h>
#include <stdlib.h>

char a[100] ;
#define position 5
int main()
{
    memset(a,'1',sizeof(a));
    printf("%s\n",a);
    char b[100] = "https://jason-cl.blogspot.com/";
    memcpy(a+position,b,4);
    printf("%s\n",a);
    return 0;
}
執行結果:


#include <stdio.h>
#include <stdlib.h>

char a[100] ;
#define position 5
int main()
{
    memset(a,'1',sizeof(a));
    printf("%s\n",a);
    char b[100] = "https://jason-cl.blogspot.com/";
    memcpy(position+a,b,5);
    printf("%s\n",a);
    return 0;
}
執行結果:

2017年12月23日 星期六

定義函數別名

base_example:
#include <stdio.h>
#include <stdlib.h>
int add(int a,int b){
    return (a+b);
}
int main()
{
    int n=add(7,2);
    printf("%d\n", n);
    system("pause");
}

相信上面這個例子,不需要我多做解釋,一看就明白,就是普通的"自訂函數",
如果,今天我兩個自訂函數,在main中定義一個函數別名func,為一個傳回值為integer且需要兩個integer parameters的函數,有以下作法可以使用:
example1:
#include <stdio.h>
#include <stdlib.h>
int add(int a,int b){
    return (a+b);
}
int division(int a,int b){
    return (a/b);
}
int main()
{
    typedef int (*func)(int a, int b);
    static volatile func f = add;  //宣告一個函數型態為func的函數別名f,並且套用add函數給f,也可以寫成"static volatile func f = (func)add;"

    int n=f(7,2);
    printf("add = %d\n", n);

    f=division;
    n=f(8,4);
    printf("division = %d\n", n);
    system("pause");
}


example2:
#include <stdio.h>
#include <stdlib.h>
int add(int a,int b){
    return (a+b);
}
int division(int a,int b){
    return(a/b);
}
int main()
{
    typedef int func(int a, int b);
    func *f = add;
    int n=f(7,2);
    printf("add = %d\n", n);

    f = division;
    n=f(8,4);
    printf("division = %d\n", n);
    system("pause");
}


example3:
#include <stdio.h>
#include <stdlib.h>
int func1(int a){
    a+=1;
    return (a);
}
int func2(int a){
    a+=3;
    return (a);
}
int main()
{
    typedef int (*func)(int a);
    static volatile func f = NULL;
    f=func1; //套用函數func1到f上,也可以寫成"f=(func)func1;"
    int x = f(1);
    printf("func1 = %d\n",x);

    f=func2;  //套用函數func2到f上,也可以寫成"f=(func)func2;"
    x = f(1);
    printf("func2 = %d\n",x);
    system("pause");
}

2017年12月13日 星期三

define的兩種用法:定義常數、定義運算式(巨集)

example:
#include <stdio.h>
#define pi 3.14159  //定義一個常數
#define test(r) pi*r*r  //定義一個巨集(運算式)
int main()
{
    int s = 0xA7;
    double t=0;
    printf("%d\n",s);
    s = s>>1;
    printf("%d\n",s);
    t=test(7);
    printf("%f\n",t);
    system("pause");
}
outcome:

2017年7月2日 星期日

與網路的第一次邂逅——網路的應用

舉例:

瀏覽器(The browser):chrome, firefox, IE, etc. 、

線上遊戲(Online game)、

電子郵件(Email):gmail, hotmail, etc. 、

線上社群網路(Online Social Network):facebook, twitter,  etc. 、

串流音頻視頻(Streaming Audio Video):youtube, kkbox, etc. 、

雲端硬碟(File Sharing):google drive, dropbox, webstorage, etc. 、

即時通軟體(Instant Messaging):Line, Skype, etc.


常用術語(terminology):

  • Uniform Resource Locator, URL:統一資源定位器/定位位址 ,俗稱網頁地址網址),如同在網路上的門牌,是網際網路上標準的資源的位址(Address)。
          建立在網路協議的基礎之上,例如:HTTP。

  • Domain Name :網域名稱,簡稱域名網域,為便於人類使用的名字。
          EX. sites.google.com/view/jason-note/

  • Internet Protocol, IP:網際網路協定,是用於封包交換網路的一種關於資料的協定。IP是在TCP/IP協定中網路層的主要協定,任務是僅僅根據源主機和目的主機的位址傳送資料。為此目的,IP定義了尋址方法和資料報的封裝結構。第一個架構的主要版本,現在稱為IPv4,仍然是最主要的網際網路協定,儘管世界各地正在積極部署IPv6。


  • Domain Name System(or Service), DNS:網域名稱系統,將域名和IP位址相互對映的一個分散式資料庫,能夠使人更方便地存取網際網路。DNS使用TCP和UDP。DNS就像是一個自動的電話號碼簿,我們可以直接撥打wikipedia的名字來代替電話號碼(IP位址)。我們直接呼叫網站的名字以後,DNS就會將便於人類使用的名字(如www.wikipedia.org)轉化成便於機器識別的IP位址(如208.80.152.2)。 

  • HyperText Transfer Protocol, HTTP:超文字傳輸協定,是網際網路上應用最為廣泛的一種網路協議。先建立連線後,透過TCP來傳送資料(封包),過程中,可能會有封包遺失的問題,這個時候,TCP會要求資料發送端再次傳送資料,使其正確接收。

  • Hypertext Transfer Protocol Secure, HTTPS:超文字傳輸安全協定,是一種網路安全傳輸協議。在計算機網路上,HTTPS經由超文字傳輸協定進行通訊,但利用SSL/TLS來加密封包。HTTPS開發的主要目的,是提供對網路伺服器的身分認證,保護交換資料的隱私與完整性。這個協議由網景公司(Netscape)在1994年首次提出,隨後擴展到網際網路上。

  • Transmission Control Protocol, TCP:傳輸控制協定,是一種連接導向的、可靠的、基於位元組流的傳輸層通訊協定,由IETF的RFC 793定義。在簡化的電腦網路OSI模型中,它完成第四層傳輸層所指定的功能,用戶資料報協定(UDP)是同一層內另一個重要的傳輸協定。

  • User Datagram Protocol, UDP:用戶資料報協定(又稱:用戶封包協定使用者資料包協定 )

2017年6月22日 星期四

以遞迴函數(recursive function)方式寫for迴圈(for loop)

for loop寫法
int main()
{
    int i;
    for(i=0;i<7;i++)
    {
        //程式內容
    }
    return 0;
}
recursive function寫法
void forloop(int i,int n)   
{
    //程式內容
    if(i<n-1)
        forloop(note,i+1,n);  //Recursive
}

int main()
{
    forloop(0,7);
    return 0;
}

2017年6月9日 星期五

選擇排序法(selection sort)

student.dat
101 John   80
102 Bo 98
103 Mary 76
104 Bruce 87
105      Mark   32
106      Kevin  96
/*the filename: main
 *the filename extension: .c
 */
#include <stdio.h>
#include <stdlib.h>
#define SIZE 6
typedef struct data
{
    int num;
    char name[10];
    int score;
} d;

void print_data(d x[])
{
    int i;
    for(i=0; i<SIZE; i++)
        printf("%10d %10s %10d\n",x[i].num,x[i].name,x[i].score);
}

int main()
{
    FILE *f = fopen("student.dat","r");
    d data[SIZE];
    d temp;  //temporary storage space
    int i=0;
    while(fscanf(f,"%d %s %d",&data[i].num,data[i].name,&data[i].score)!=EOF)
        i++;
    fclose(f);
    print_data(data);
    int j;
    for(i=0; i<SIZE-1; i++)
    {
        for(j=i+1; j<SIZE; j++)
        {
            if(data[i].score>data[j].score)
            {
                temp = data[i];
                data[i] = data[j];
                data[j] = temp;
            }
        }
    }
    printf("*******************************************\n");
    print_data(data);
    return 0;
}


2017年6月6日 星期二

氣泡排序法(bubble sort)

student.dat
101 John   80
102 Bo 98
103 Mary 76
104 Bruce 87
105      Mark   32
106      Kevin  96
/*the filename: main
 *the filename extension: .c
 */
#include <stdio.h>
#include <stdlib.h>
#define SIZE 6
typedef struct data
{
    int num;
    char name[10];
    int score;
} d;

void print_data(d x[])
{
    int i;
    for(i=0; i<SIZE; i++)
        printf("%10d %10s %10d\n",x[i].num,x[i].name,x[i].score);
}

int main()
{
    FILE *f = fopen("student.dat","r");
    d data[SIZE];
    d temp;  //temporary storage space
    int i=0;
    while(fscanf(f,"%d %s %d",&data[i].num,data[i].name,&data[i].score)!=EOF)
        i++;
    fclose(f);
    print_data(data);
    int j;
    for (i = 0; i < SIZE-1; i++)
    {
        for (j = 0; j < (SIZE-1)-i; j++)
        {
            if (data[j].score > data[j+1].score)
            {
                //Adjacent two places for data exchange
                temp = data[j];
                data[j] = data[j+1];
                data[j+1] = temp;
            }
        }
    }
    printf("*******************************************\n");
    print_data(data);
    return 0;
}