星期日, 6月 28, 2009
星期五, 6月 26, 2009
openSUSE Weekly News 繁體中文翻譯小組啟動
活動訊息
openSUSE Weekly News 繁體中文翻譯小組啟動
要參加 openSUSE 每週新聞翻譯小組或閱讀最新一期的 openSUSE 每週新聞,請造訪
與 openSUSE 來個夏日約會 (06/27)
活動內容與報名網址:
星期六, 6月 20, 2009
wget 使用小記
好用的螢幕畫筆軟體 gromit
星期四, 6月 18, 2009
20090618 C語言進階 上課小記
- 一般寫在前面或是Header 內
- 與Class的差異: 沒有method 的Class
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
system("pause");
}
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
system("pause");
}
- 開啟模式
- r read
- a append
- w write
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
system("pause");
}
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
int main()
{
system("pause");
}
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
system("pause");
}
星期二, 6月 16, 2009
20090616 C語言進階上課小記
- 裡面擺放的是位址, 不是擺放值
- 通常對付 大傢伙
- int *p;
- Call By Value 傳值
- 只是換值(資料), 不是位址
- Call By Reference 傳參考
- 參考的是位址
- 放在接的地方,(例如 Function 內)
- Call By Address 傳址
- 直接給位址
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
system("pause");
}
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
system("pause");
}
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
system("pause");
}
- 本身就是記憶體的位址
- 第一個陣列的值
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
system("pause");
}
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
system("pause");
}
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
system("pause");
}
20090611 C語言進階 上課小記
- 為何採用多維陣列不採取一維陣列? 因為索引值比較多,處理上較彈性
- 多維陣列 就是陣列的陣列. 陣列內還有陣列.
- 多維陣列的陣列長度只能 第一維陣列長度 省略, 但是其他不行(Java 的處理方式剛好相反)
- 陣列是透過索引值存取資料
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
system("pause");
}
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
system("pause");
}
- 一般在處理陣列都是使用位址, 因為陣列都很大.
- 下面的例子 sort(n); n 是陣列的名稱, 所以傳的是位址,故函數處理完是更新位址
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
system("pause");
}
- 本身就是利用字元陣列做出來的
- 字串跟字元陣列的差別在於
- \0 代表字串結束符號, 如果使用 " " 代表字串
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
system("pause");
}
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
system("pause");
}
- 1 --> 字串1 > 字串2
- 0 --> 字串1 = 字串2
- -1 --> 字串1 < 字串2
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
system("pause");
}
20090609 C語言進階上課小記
- 同一個時間點輸入大量的資料
- 只有一種型別, 不可以混合
- array index 陣列索引值 n[0] 代表 n 的第一個元素, 第一個元素起始值為0
- 陣列長度 及 陣列索引值 必須是正值
- 如果會給初值, 一般來說 不會指定陣列長度
- 陣列名稱是位址, 也是常數. 不可以寫在 = 的左邊
- 當有相同類型的資料, 要同時大量輸入的時候, 使用陣列來處理
- 使用陣列的需求1 排序
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
int n,max,max_t,min,min_t;
for(int i=1;i<=10;i++)
{
printf("No.%d:",i);
scanf("%d",&n);
//先給第一次的初始值
if(i==1)
{
max = min = n;
//記錄是第幾次輸入進去的
max_t=min_t=1;
}
//更新最大值
if(n>max)
{
max=n;
//記錄是第幾次輸入進去的
max_t=i;
}
//更新最小值
if(n<min)
{
min=n;
min_t=i;
}
}
printf("max=%d\t Times=%d\n",max,max_t);
printf("min=%d\t Times=%d\n",min,min_t);
return 0;
}
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
//宣告陣列 n 長度為 10
int n[10]={1,2,3,4,5,6,7,8,9,10};
//利用 for 來列出 陣列的值
for(int i=0;i<10;i++)
printf("array n is %d\n",n[i]);
return 0;
}
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
int n[10];
//利用 for 迴圈 填入 陣列資料
for(int i=0;i<10;i++)
{
// i+1 不會影響 i 只是讓 user 看的
printf("NO.%d:",i+1);
//讓使用者輸入 陣列的值
scanf("%d",&n[i]);
}
//利用for 列印出來
for(int i=0;i<10;i++)
{
printf("array value is %d\n",n[i]);
}
return 0;
}
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
//亂數起始值
srand(time(0));
int n[10],temp;
for(int i=0;i<10;i++)
{
//將rand 值除以 50 取餘數 加上 150
n[i] = rand() %50 + 150;
printf("Height=%d\n",n[i]);
}
//再利用 for 來跑9次 做所有的排序
//稱為 Bobble Sort 泡沫排序
for(int y=0;y<9;y++)
{
//利用 for 來比大小 做置換 swap 將第1個抓到定點
for(int x=0;x<9;x++)
{
if(n[x] < n[x+1])
{
temp = n[x];
n[x] = n[x+1];
n[x+1] = temp;
}
}
}
for(int i=0;i<10;i++)
{
printf("after sort = %d\n",n[i]);
}
return 0;
}
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
//亂數起始值
srand(time(0));
int n[6];
for(int i=0;i<6;i++)
{
n[i] = rand() %49 + 1;
//利用 for 迴圈
for(int j=0;j<i;j++)
{
//如果號碼一樣, 處理方式
if(n[i] == n[j])
{
i--;
//如果相等, 中斷程式for(int j=0;j<i;j++)
//不會中斷 for(int i=0;i<49;i++)
break;
}
}
}
//利用 for 列印出來
for(int i=0;i<6;i++)
{
printf("lottery number is: %d\n",n[i]);
}
return 0;
}
20090604 C語言進階上課小記
- 定義一些資料
- 定義字喜歡用大寫, 但非必定
- 使用定義的方式 在編譯的時候就會產生效果, 而不是在執行的時候產生效果
- 方便日後修改程式的時候識別
- 用來修改常數很好用, 否則以後常數要修改會很麻煩
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
//定義 PI 為3.14 在編譯的時候就產生效果
#define PI 3.14
int main()
{
//所以 以下 的 PI 已經都變成 3.14 了
float r,a,l;
printf("Enter circle radius:");
scanf("%f",&r);
a = PI*r*r;
l = 2*PI*r;
printf("Area=%f\nlength=%f\n",a,l);
return 0;
}
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
//定義 PI 為3.14 在編譯的時候就產生效果
#define PI 3.14
//宣告 函式 area
float area(float);
int main()
{
//所以 以下 的 PI 已經都變成 3.14 了
float r,a,l;
printf("Enter circle radius:");
scanf("%f",&r);
a = area(r);
l = 2*PI*r;
printf("Area=%f\nlength=%f\n",a,l);
return 0;
}
float area( float r)
{
return PI * r *r;
}
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
//定義 PI 為3.14 在編譯的時候就產生效果
#define PI 3.14
#define area(r) PI*r*r
#define len(r) 2*PI*r
int main()
{
//所以 以下 的 PI 已經都變成 3.14 了
float r,a,l;
printf("Enter circle radius:");
scanf("%f",&r);
a = area(r);
l = len(r);
printf("Area=%f\nlength=%f\n",a,l);
return 0;
}
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
//定義 PI 為3.14 在編譯的時候就產生效果
#define PI 3.14
//define 函數括號內的 值是用代換的(change),
//所以下面雖然寫的是 radius, 所以帶進來 area的時候
//area(r) 就會變成 area(radius) PI*radius*radius
#define area(r) PI*r*r
#define len(r) 2*PI*r
int main()
{
//所以 以下 的 PI 已經都變成 3.14 了
float radius,a,l;
printf("Enter circle radius:");
scanf("%f",&radius);
a = area(radius);
l = len(radius);
printf("Area=%f\nlength=%f\n",a,l);
return 0;
}
- 當符合條件時 傳回 值1
- 當不符合條件時, 則傳回值2
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
int main()
{
int n1,n2,n;
n1=10;
n2=20;
n=(n1>n2?n1:n2);
printf("n=%d\n",n);
return 0;
}
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
//使用三元運算的定義
#define max(n1,n2) (n1>n2?n1:n2)
int main()
{
int n1,n2,n;
n1=10;
n2=20;
n= max(n1,n2);
printf("n=%d\n",n);
return 0;
}
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
#define sum(x,y) x+y
int main()
{
x=7;
y=6;
//因為在編譯的時候就會取代
//所以會變成 c = x+y*10
// c = 7 + 6 *10 先乘除後加減 c= 67
c = sum(x,y) *10;
printf("c=%d\n",c);
return 0;
}
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
//因為要使用 getch() 所以要#include "conio.h"
#include "conio.h"
int main()
{
char ch;
//除了按 ESC 以外都繼續執行 27 為 ESC
while((ch = getch()) != 27)
printf("%c\n",ch);
return 0;
}
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
//因為要使用 getch() 所以要#include "conio.h"
#include "conio.h"
int main()
{
char ch;
//除了按 ESC 以外都繼續執行 27 為 ESC
while((ch = getch()) != 27)
//使用 %d 列出整數 看鍵盤的內碼, 特殊按紐都是2個值
//例如 上下左右 遊標 控制鍵 第一碼都是 -32 F1 ~ F12 第一碼 都是 0
//所以可以利用這個原理判斷 使用者是不是輸入特殊按紐
printf("%d\n",ch);
return 0;
}
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
//因為要使用 getch() 所以要#include "conio.h"
#include "conio.h"
int main()
{
//多一個 ch2
char ch,ch2;
//除了按 ESC 以外都繼續執行 27 為 ESC
while((ch = getch()) != 27)
//使用 %d 列出整數 看鍵盤的內碼, 特殊按紐都是2個值
//例如 上下左右 遊標 控制鍵 第一碼都是 -32 F1 ~ F12 第一碼 都是 0
//所以可以利用這個原理判斷 使用者是不是輸入特殊按紐
{
//利用特殊鍵 都會小於等於 0 來判斷是否為特殊鍵
if (ch <= 0)
{
ch2 = getch();
printf("ch2=%d\t",ch2);
}
printf("%d\n",ch);
}
return 0;
}
- 使用等於的方式來比對
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
//因為要使用 getch() 所以要#include "conio.h"
#include "conio.h"
#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77
int main()
{
char key;
char ch;
//如果沒有按 ESC 就繼續
while ((key=getch()) != 27)
{
//利用特殊鍵 都會小於等於 0 來判斷是否為特殊鍵
if(key <= 0)
{
key=getch();
switch(key)
{
//判斷上下左右的內碼 並定義 ch
case UP :ch=24;
break;
case DOWN :ch=25;
break;
case LEFT :ch=27;
break;
case RIGHT :ch=26;
break;
default : ch = 1;
}
//將傳的的內碼 也就是按的特殊鍵 列印出來
printf("%c\n",ch);
}
}
return 0;
}