星期四, 6月 18, 2009

20090618 C語言進階 上課小記

*****************************20090618 陳惠堂*********************************************
*struct
  • 一般寫在前面或是Header 內
  • 與Class的差異: 沒有method 的Class

struct 定義字
{
成員 member
};

struct Date
{
int year;
int month;
int day;
};



可以利用 sizeof() 來判斷大小

Lab:struct 練習
// include 引入 .h (標頭檔)
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"


//struct 一般習慣寫在前面 或是 Header 裡面, 這樣才可以被大家利用
struct Date
{
int year;
int month;
int day;
};


//進入主程式
int main()
{


//定義 a 並填入值
Date a={1992,12,3};
//將其列印出來 利用 a.定義 方式列印出來
printf("Date: %d-%d-%d\n",a.year,a.month,a.day);


//執行系統內的 pause指令 暫停 宣告被寫在 stdlib.h 內

system("pause");

return 0;
}




Lab: Struct 練習2
// include 引入 .h (標頭檔)
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"


//定義一個 struct
struct Stud
{
char no[4],name[20];
int vb,vc,java,sum;
};

//進入主程式
int main()
{


//定義四個使用者 相關成績 填入的資料參考上面
Stud n[5]={
{"001","Jason",76,80,72},
{"002","Sampson",70,75,60},
{"003","ines",89,96,85},
{"004","sakana",80,78,82},
{"005","joe",70,60,80},
};
printf("size of n is %d\n",sizeof(n));
printf("size of stud is %d\n\n",sizeof(Stud));
Stud t;
//定義 s 算迴圈數量
int s=sizeof(n)/sizeof(Stud);
//將成績列印出來
for(int i=0; i<s ;i++)
{
n[i].sum = n[i].vb + n[i].vc + n[i].java;
//列出學號 姓名 VB成績
printf("%s\t%s\t%d\t",n[i].no,n[i].name,n[i].vb);
//列出 VC 成績 Java 成績 總合
printf("%d\t%d\t%d\n",n[i].vc,n[i].java,n[i].sum);
}
//使用泡沫排序法 排序
for(int i=0; i<s-1;i++)
{
for(int j=0; j<s-1;j++)
{
if(n[j].sum < n[j+1].sum)
{
t = n[j];
n[j] = n[j+1];
n[j+1] = t;
}
}
}
printf("\nAfter sort...\n\n");
//將其列印出來
for(int i=0; i<s ;i++)
{
//列出學號 姓名 VB成績
printf("%s\t%s\t%d\t",n[i].no,n[i].name,n[i].vb);
//列出 VC 成績 Java 成績 總合
printf("%d\t%d\t%d\n",n[i].vc,n[i].java,n[i].sum);
}



//執行系統內的 pause指令 暫停 宣告被寫在 stdlib.h 內

system("pause");

return 0;
}




fopen(檔案,開啟模式)
  • 開啟模式
    • r read
    • a append
    • w write



Lab:
// include 引入 .h (標頭檔)
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"


//定義一個 struct
struct Stud
{
char no[4],name[20];
int vb,vc,java,sum;
};

//進入主程式
int main()
{


//定義使用者 相關成績 填入的資料參考上面
Stud n={"001","Jason",76,80,72},*p;
p=&n;
//使用指標可以利用兩種方法
//這樣的寫法也可以 方法 1
// (*p).sum = (*p).vb + (*p).vc + (*p).java;
// 使用 箭頭 方法 2
p->sum=p->vb + p->vc + p->java;

printf("%s\t%s\t%d\t",n.no,n.name,n.vb);
printf("%d\t%d\t%d\n\n",n.vc,n.java,n.sum);


//執行系統內的 pause指令 暫停 宣告被寫在 stdlib.h 內

system("pause");

return 0;
}




Lab: filewrite
// include 引入 .h (標頭檔)
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"

#include "conio.h"

//進入主程式
int main()
{


FILE *fp;
fp = fopen("C:\\Data.txt","a\");
char ch;
while( (ch=getche() ) != 13)
{
//對象 大小 寫入筆數 寫入檔案
fwrite(&ch,sizeof(ch),1,fp);
}
fclose(fp);


//執行系統內的 pause指令 暫停 宣告被寫在 stdlib.h 內

system("pause");

return 0;
}





Lab: Fileread
// include 引入 .h (標頭檔)
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"

//進入主程式
int main()
{


FILE *fp;
fp = fopen("C:\\Data.txt","r");
char ch;
while(1)
{
fread(&ch,sizeof(ch),1,fp);
//當fp 檔案結束
if(feof(fp))
break;
else
printf("%c",ch);
}
fclose(fp);


//執行系統內的 pause指令 暫停 宣告被寫在 stdlib.h 內

system("pause");

return 0;
}

***********************************************************************************************

沒有留言: