2007年9月22日 星期六

[轉貼]C語言基礎入門

http://www.study-area.org/coobila/tutorial_409.html
[轉貼]C語言基礎入門
瘋鷲 發表
 
C語言基本架構介紹.以及基本觀念簡介.
 
/* My First C program */
#include
 
void main(void)
{
int i;
i = 1;
printf("Hi! C!\n");
printf("This is my %dst C program!",i);
}
 
上面是一個很基本的C語言範例..我們現在就以這個範例來說明C語言的架構..
 
/* ........ */
((C程式的註解))
凡是介於 /* 以及 */ 之間的文字..C語言的編譯器皆不會執行而略過..
這是讓程式的可閱讀性提高..不儘自己在看程式時不會忘記某些東西是做什麼的..
也讓其他人在閱讀你的程式時更容易閱讀(瞭解)..
 
#include
((C語言的包含檔))
一般的C語言程式中都會加上這一行..在部份的C語言編譯器如果你沒有加上這一行..
它並不會出任何錯誤..但較嚴謹的C語言編譯器則可能過不了關了..
事實上一個完整的C語言程式..應該要有這一行才對..
至於為什麼..就以後再替各為說明了....
 
void main(void)
{
........
}
((C語言的主體))
而main()是C語言程式的開頭..程式的內容是存於main()之後的{}中..
所有的C語言程式都是由main開始執行..是說即使將來C程式大到很複雜..
main()可能不是擺在程式的最開頭..但C語言編譯器仍會找到main()來開始執行..
由於C語言是自由格式..所以也可以寫成這樣 void main(void) { }
 
而void的意思本義是"無"或"沒有"的意思..所以在main之前..
是作為..沒有回傳值的意思..也就是當程式執行時..不會傳回訊息給DOS..
而main()之中的void則是表示不會由作業系統把命令參數傳入main()之中..
 
所以void main(void)是最簡單的C語言格式..表示main將不能由作業系統接收命令參數..
也不會將訊息傳回作業系統..如果將格式寫為 int main() ..則將會有回傳值給作業系統..
 
((敘述式))
我們在撰寫C語言程式就是要在此撰寫..我們稱這些為敘述..
比如 Printf("Hi! C!");
又比如 int i;
這些敘述是得寫在main()之後的{ }之內..
常見的敘述式有 : 宣告..算式..變數..設定..函式呼叫..迴圈..流程控制......
這些東西將會在後面一一介紹..而在寫完一行敘述式之後..
我們必需加上 ; 這個符號以作結尾..若不加上 ; 則編譯器則無法正確邊譯程式..
 
((變數))
在資料處理的過程中我們通常會需要一個空間來存放這個資料..
通常資料存放在記憶空間裡..為了方便存取資料..記憶空間每一個儲存單元都有編號碼..
我們稱這種號碼為記憶位址..不過記憶位址是一個一個單調的邊號..
並且數目往往非常龐大..不容易記憶..也不好稱呼..
所以我們使用了所謂的變數這種東西來代表記憶位址..變數是存放資料的地方..
也是電腦內部的一個記憶位址..只不過我們稱作變數..而非使用編號罷了..
 
((變數名))
C的變數名稱規定必需由英文字母..數字..或_購成..
第一個字元不可為數字..也不能與C語言内定的文字相同..比如 int..printf
而在使用變數前..需要先定義變數的型別(type)..否則將無法使用..
 
((定義))
又可稱宣告..宣告的基本類型有下列五種...
型別 記憶體 範圍
char (字元) 8 bit 0~255或-128~127
int (整數) 16 bit -32768~32767或0~65535
float (浮點數) 32 bit 3.4E-38~3.4E+38
double (倍精數) 64 bit 1.7E-308~1.7E+308
void (無回傳值) 0 bit 無
其他尚有許多種..將會在未來陸陸續續介紹..
最後更新日期: 4/24/2003 3:48:44 PM
 

[轉貼]c++語言程序設計超級簡單瞭解

[轉貼]c++語言程序設計超級簡單瞭解
Woody | 2005-12-24 | From
千里之行,始於足下。
 
這是非常非常非常表面的介紹,是為一點都不知道的朋友寫著玩的。也許你看過之後什麼都沒有
收穫到,一直罵作者是個sb.那麼我請您原諒耽誤了您的時間,先表示抱歉了。呵呵
 
一。結構程序設計方法,要點。.三種基本控制結構。順序,循環,選擇
選擇結構,兩種。if switch
if形式1.if� 2. if else 3. if else if else if
switch(多分支選擇,Woody註釋)
switch
{case 常量表達式1 :語句1
case 常量表達式n :語句n
default:語句n+1
}
循環,while(沒有什麼解釋的,先判斷,後執行,Woody註釋)
例子,求1到100整數和
#include� (套入函數,Woody註釋)
 void main()���� (下面主體,Woody註釋)
 {��������
  int i, sum = 0;�� (定義i,賦予數值1,總和開始為0,Woody註釋)
  i = 1;
  while(i <= 100) (循環下面部分,當i<100,判斷條件,Woody註釋)
  {
   sum += i;� (加,一直加,Woody註釋)
   i++;
  }���� (循環結束,Woody註釋)
  cout<<"sum = "< }
do-while 循環(先執行,後判斷)
例子,還舉上面那個,就是求1到100整數和
#include
 void main()
 {
  int i, sum=0;�� (定義賦值。Woody註釋)
  i = 1;
  do������ (下面是循環,Woody註釋)
  {
   sum += i;
   i++;
  }while(i<=100);� (條件,如果條件滿足就循環,Woody註釋)
  cout<<"sum = "< }
for循環,
例子,還是上面那個,求1到100整數和
#include
 void main()
 {
  for(sum = 0, i = 1; i <= 100; i++)sum += i;
  cout<<"sum = "< }
(就是1-2-3-2-3-2-3(1指的是表達式),如果2不滿足,結束。Woody註釋)
 
二,語言基礎:
看例子比較方便瞭解,
//simple.cpp是一個簡單的C++程序 (標準註釋方法,不執行,我沒有用這種註釋,Woody註釋)
#include (一個文件頭,Woody註釋)
void main(void)� (函數,Woody註釋)
{������ (main函數體開始標記,Woody註釋)
int i;���� (聲明一個變量,Woody註釋)
cout<<"jinzhou sb!";��� (輸出,後面的東西,Woody註釋)
cout<<"請輸入一個整數:\n"; (\n是換行的意思,<<輸出符號,Woody註釋)
cin>>i;������� (輸入,後面的東西。Woody註釋)
cout<<"輸入的整數是:";�
cout (Visual C++6編譯連接運行後,就是屏幕上出現「jinzhou sb!請輸入一個整數」
然後你隨便輸入一個,回車,得到「輸入的整數是:」,就是你輸入的那個,大
概明白是這麼個格式就行了。注意一點的就是,函數定義返回類型為void,不用返回
,如果定義為int,則不同。如下。Woody註釋。)
int main()
{
 …
 return 0;
}
(還有就是c++區分大小寫,一般命令小寫多,常量大寫多。變量混用多。Woody註釋)
數據類型略過。大多類似的。
變量使用舉一個簡單的例子。
#include
int main (void)�
{
int workDays = 5;�� (定義一個整型變量,初始化為5,Woody註釋)
float workHours, payRate, weeklyPay;� (實型變量三個,Woody註釋)
workHours = 7.5; payRate = 38.55;� (賦值,Woody註釋)
weeklyPay = workDays * workHours * payRate; (乘法運算,Woody註釋)
cout << "Weekly Pay = " << weeklyPay << '\n'; (輸出換行,Woody註釋)
}
 
就是計算工資呢。
例子,打印給定半徑的圓的面積和周長(有常量定義的實例程序)
void main()
{
 const double PI = 3.1415926535898;� (定義圓周率常量PI,Woody註釋)
 double radius;� (定義圓半徑變量,Woody註釋)
 double area;� (定義圓面積變量,Woody註釋)
 double circumference;� (定義圓周長變量,Woody註釋,)
 cout << "輸入半徑 : ";� (輸出,屏幕顯示,Woody註釋)
 cin >> radius;��� (輸入,Woody註釋)
 area = PI*radius*radius; (面積公式,Woody註釋)
 circumference = 2.0*PI*radius;� (周長共識,Woody註釋)
 cout << "面積 " << radius << " is "
 << area << " \n";
 cout << "周長是 " << circumference� (輸出到屏幕,Woody註釋)
<< ";
}
(注意定義常量的形式為 const 類型 名字 = 值。)
 

三,運算符和表達式
要注意的是:
+ + 自加(前綴) ++valuel + 10 // 得出16,valuel變為6
+ + 自加(後綴) valuel++ + 10 // 得出15,valuel變為6
- - 自減(前綴) --valuel + 10 // 得出14,valuel變為4
- - 自減(後綴) valuel-- + 10 // 得出15,valuel變為4
(其實質就是用'++'代替了"+1"(後綴)和"1+"(前綴)、'-'代替了"-1"。Woody註釋)
 
!� 邏輯非� !(5 = = 5) // 得出 0�� (0是假,1是真,Woody註釋)
&&� 邏輯與� 5 < 6 && 6 < 6 // 得出 0
||� 邏輯或� 5 < 6 || 6 < 5 // 得出 1
~� 取反 ~'\011' // 得出 '\366'
&� 逐位與 '\011' & '\027' // 得出'\001'
|� 逐位或 '\011' | '\027' // 得出'\037'
^� 逐位異或 '\011' ^ '\027' // 得出'\036'
<< 逐位左移 '\011' << 2 // 得出'\044'
>> 逐位右移 '\011' >> 2 // 得出'\002'
實例 10進制值 二進制值
x� 011�� 0 0 0 0 1 0 0 1
y� 027�� 0 0 0 1 0 1 1 1
~x� 366�� 1 1 1 1 0 1 1 0
x & y 001�� 0 0 0 0 0 0 0 1
x | y 037�� 0 0 0 1 1 1 1 1
x ^ y 036�� 0 0 0 1 1 1 1 0
x << 2 044� 0 0 1 0 0 1 0 0
x >> 2 002� 0 0 0 0 0 0 1 0
運算例子,
#include
void main( )
{
 int a,b, m=3,n=4;
 a=7*2+-3%5-4/3;//-3%5=-3,4/3=1
 b=m++ - --n;
 cout<}
結果10 0 4 3
例子
#include
void main( )
{
 char x='m',y='n';
 int n;
 n=x cout < n=x==y-1;
 cout< n=('y'!='Y')+(5<3)+(y-x==1);
 cout <}
結果 1 1 2
 
四,流程控制語句。
if語句;if-else語句;switch語句;while語句;do-while語句;for語句;break語句;continue語句
(都是簡單英語,沒有什麼解釋的,哈哈,Woody註釋)
五,函數。
這個解釋多多網上。
舉例子;求長方形面積。
#include� (C++庫函數說明,Woody註釋)
int area(int length, int width);� ( area函數說明,定義長寬,Woody註釋)
void main()�� (主函數,程序從該函數開始執行,Woody註釋)
{
 int this_length, this_width;� (定義長寬,Woody註釋)
 cout << "輸入長度: "; (cout和cin,就是函數,輸出後面字符串。Woody註釋)
 cin >> this_length;� (輸入,Woody註釋)
 cout << "輸入寬度: ";� (輸出那句話到屏幕,Woody註釋)
 cin >> this_width;
 cout << "\n";���� (回車,Woody註釋)
 cout << "面積 " << this_length << "x" << this_width;
 cout << " 長方形面積是 " << area(this_length, this_width); (調用area函數,Woody註釋)
}
int area(int length, int width) (area函數定義,Woody註釋)
{
 int number;
 number = length * width;
 return number;
}
例子,比較大小的。
#include
int max(int a,int b) (調用這個函數,Woody註釋)
{
 if(a>b)return a; (如果則怎麼怎麼的,Woody註釋)
 else return b;
}����� (以上是定義max函數的,Woody註釋)
void main()
{
 int max(int a,int b);
 int x,y,z;
 cout<<"輸入兩個數"< cin>>x>>y;
 z=max(x,y);������ (z為比較結果,Woody註釋)
 cout<<"最大的數="<}
例子
 
#include
void Foo (int num)
{
 num = 0;
 cout << "num = " << num << '\n';
}
int main (void)
{
 int x = 10;
 Foo(x);
 cout << "x = " << x << '\n';
 return 0;
}
(這個更簡單,不多說,主要是明白num是一個形參變量num,x是實參變量,實參調用時
送到形參,但是因為內存單元不同,即使num賦值0,並不影響x的值,道理大概理解了
就好,Woody註釋)
(不多解釋了,相關詳細內容,要找資料好好揣摩,這裡只是簡單說一下,Woody註釋)
 
六,數組與字符串。
#include
void main(void)
{
 int marks[4] = ; (這個就是數組,就是這個格式,Woody註釋)
 cout<<"第二個元素是:"<}
(這就是定義數組了,找第二個元素的。92。Woody註釋)
例子,求字符串的長度 (這個是字符串的,Woody註釋。)
#define MAXLEN 80
#include
void main(void)
{
 char str[MAXLEN + 1];� (最長加1,因為是從0計算的,Woody註釋)
 int l;����� (定義長度,這個符號可不是1啊,Woody註釋)
 printf("Input a string:"); (輸出,告訴你開始輸入,Woody註釋)
 scanf("%s",str);��� (檢查你輸入的,如果空,Woody註釋)
 l = 0;������ (長度0,Woody註釋)
 while(str[l] != '\0') (非空,Woody註釋)
 l ++;������ (加加,數出來,Woody註釋)
 printf("The length of this string is %d\n",l); (輸出結果回車,Woody註釋)
}
 
七,指針與引用
指針就是在內存中的地址,它可能是變量的地址,也可能是函數的入口地址。
引用為變量提供了一個別名,變量通過引用訪問與通過變量名訪問是完全等價的。
引用提供了與指針相同的能力,但比指針更為直觀,更易於理解。
int d =1;
int* const p =&d
(有const表示不可修改,p是一個常量指針,它指向一個整型變量。就是d,p本
身不能修改,但它所指向的內容卻可以修改:*p =2;這個不大好說,請查閱相
嚴謹詳細資料。關Woody註釋。)
例如:
#include
#define SIZE 10�
void main()
{
 int array[SIZE]; (聲明整數數組,Woody註釋)
 int *p=array;�� (定義一個整型指針p,給他數組首地址,Woody註釋)
 int i ;���� (定義變量i,Woody註釋)
 for(i=0;i  array=i;
 for(i=0;i  cout<<*p++< p=&array[8];�� (給他array[8]的地址,Woody註釋)
 cout<<"array[8]="<<*p< cout<<"array[8]="<}�
(兩個值是一樣的,因為從0開始,所以都是對數組第9個元素的訪問。Woody註釋)
例子:折半查找函數
int BinSearch (char *item, char *table[],�� (就是在table中查找是否含有item的元素)
int n, int (*Compare)(const char*, const char*))� Compare是一個比較函數指針,Woody註釋)
{
 int bot = 0;�� (底部0,Woody註釋)
 int top = n - 1;� (頂部n-1,Woody註釋)
 int mid, cmp;� (定義比較變量,比較,Woody註釋)
while (bot <= top) (比較當然需要循環,循環條件,意思就是不空,Woody註釋)
 {����� (以下循環內容)
mid = (bot + top) / 2;� (mid等於,全部除以2,就是一半,Woody註釋)
if ((cmp = Compare(item,table[mid])) == 0) (如果恰好相等,Woody註釋)
 return mid;� ( 就是它,Woody註釋)
 else if (cmp < 0) (不相等,Woody註釋)
    top = mid - 1; ( 查找數組的下半部,Woody註釋)
   else
    bot = mid + 1;� ( 查找數組的上半部,Woody註釋)
 }
return -1; (上面循環之後,返回-1,沒有找到,因為n就是0了。Woody註釋)
}
 
例如。
char *cities[] = {"Beijing", "Shanghai", "Tianjin", "Zhongqing"};
cout << BinSearch("Tianjin ", cities, 4, strcmp) << '\n'
輸出結果2
(就是,給出一個數組,找找「Tianjin」在四個中的位置,2就是在第三個位置。)
 
八。結構 鏈表
結構(struct)數據類型,它能夠識別一組相關的數據。
鏈表也是表示線性數據最有用的方法之一,用鏈表保存線性數據,可以克服數組的問題
舉例
#include
#include
struct Person_Info {� (個人信息表,下面是相關內容。Woody註釋)
 char name[10];
 int age;
 long ssn;
};
void main (void)
{
 Person_Info* p1;�� (給個指針,Woody註釋)
 p1 = new Person_Info;� (申請內存,Woody註釋)
 p1->age = 27; ( 給age成員賦值,Woody註釋)
 strcpy(p1->name,"jinzhou"); (給name成員賦值 ,Woody註釋)
 cout << "Name: " << p1->name << endl; ( 打印name成員,Woody註釋)
 cout << "Age: " << p1->age << endl; (打印age成員,Woody註釋)
 delete p1;�������� (釋放申請的內存,Woody註釋)
}
簡單例子學生結構的實例
struct stu
  {
   int num;
   int score;
   stu *next;
  }
(明白這個意思就行了,Woody註釋)
 
九,編譯預處理
C++提供的編譯預處理功能主要有以下三種:(一) 宏定義(二) 文件包含(三) 條件編譯
宏定義例子;
#include , (一定要有,或者出錯,Woody註釋)
#define CUBE_THREE 3*3* (用簡單宏定義定義了一個符號常量"CUBE_THREE")
void main()
{
 int a;����� (定義變量,Woody註釋)
 a=CUBE_THREE;�� (賦予值,就是a=3*3*3,Woody註釋)
 cout<<"a is"<}
(這個意思主要是說可以把常用的東西定義為宏。這個不帶參數,帶參數的略。Woody註釋)
文件包含類的略。
例子:條件編譯命令的一個例子
#include
#define TIME
void main()
{
 #ifdef TIME������ (如果TIME被定義過,輸出下面句話。Woody註釋)
  cout<<"Now begin to work"< #else������� (如果沒有定義,輸出下面的,Woody註釋)
  cout<<"You can have a rest"<