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"< 

2007年9月21日 星期五

轉貼:未來數學家的挑戰【二、計算量】 => 計算量 = O(n)

 
 

 

二、計算量

計算量,顧名思意,是指解決某問題所需要計算的時間,但因每個複雜問題的計算往往都要經過許多不同的運算,除加減乘除四則外,還要包含比較,取數據,存數 據等等,若仔細計算起來,十分困難,一般都只繪出一兩個主要的量,加以統計,以上節中售貨員旅行問題為例,其主要的工作是對每一個排法加起總路徑之長,因 對 n 城而言,有 (n-1)! 的排法,我們就定其計算量為 O(n!),即在 n! 之層次(order 即 O 縮寫之來源)之內。

舉二個例子,我們若要求 n 個數的和或平均值,則其計算量為 O(n)。 但若我們要把 n 個數字依次排列,則其計算量會因做法的不同而有相當的差別,一個直接了當的方法是,先求出最大的(比 (n-1) 次),再從不是最大的中間求次大的(比 (n-2) 次),再求第三大的(比 (n-3) 次),……如此一共比了

\begin{displaymath} (n-1)+(n-2)+\cdots+1\\ =\frac{n(n-1)}{2}\\ \end{displaymath}

次就可以完成此工作。因此我們以 O(n2),即在 n2 之層次來表此方法的計算量。 另外一種快排法,先把 n 個數分成若干小塊,每塊排好之後再合起來, 則可以證明此種方法之計算量為 $O(n{\log_2{n}})$ 1 ,因排數字與排名字,電話號碼相同,這種排法很有實用價值, 例如某大城有一百萬戶,則 n2=1012,而 $n{\log_2n}$ 只有 2 x 107,其差別三個月與一分鐘之比。

一般計算量的層次多以下表來區分,

\begin{eqnarray*} &&O(\log n)<o(n)<o(n\log_2n)<o(n^2)\\ &&<o(n^k)<o(2^n)<o(k^n)<o(n!) \end{eqnarray*}

在上表中,k 為某一大於 2 的正整數,它們中間都有一道鴻溝,有基本層之不同,在計算機理論上,若某人能發現一個新的方法,降低一個層次的計算量,那麼他的新方法有資格稱之為一個突破,可以不朽矣。表1 有一個對上項各量之比較,是以計算機每秒作一百萬次 (106) 計算為原則。

n $\log n$ n $n\log n$ n2 n3 2n 3n n!
10 10-6 10-5 10-5 10-4 10-3 10-3 0.059 0.45
20 10-6 10-5 10-5 10-4 10-2 1(秒) 58(分) 1年
50 10-5 10-4 10-4 0.0025 0.125 36年 2 x 1010年 1057年
1000 10-5 10-3 10-3 1 16小時 10333年 極大 極大
106 10-5 1 6 1月 105年 極大 極大 極大
109 10-5 16小時 6天 3年 3 x 109年 極大 極大 極大

表一:以計算機每秒做一百萬次時完成各層次計算量所約需的時間(若無單位,均以秒為單位)

在這個表中,特別注意 n3 與 2n 中之差異,一般稱 2n 為計算量呈指數上升,而 n3 或 nk 之計算量呈 n 的方次上升 2 , 對目前及未來的計算機而言,一個呈方次上升的計算量應可以應付,但對一個呈指數上升的計算量在 n 相當大時則毫無希望。 因此計算機學家所集中精力的方向在如何將一個呈指數上升的計算量問題,簡化成一個方次上升的計算量問題。 我們定義凡對一個問題中最重要的參數 n 而言,若能找到一個方法可以以方次上升的計算量完成, 我們稱此問題為一 P-問題(P 為英文多項式 Polynomial 之第一字母),包含所有此類問題之集合以 P 表示之。

 

2007年9月18日 星期二

[轉貼]Autodesk的C++筆試題,看你能答出多少

[轉貼]Autodesk的C++筆試題,看你能答出多少
 
太多了,詳細請參考www.findgs.com
一、技術題
 
1. 在類的普通成員函數中調用虛函數,情況是怎麼樣的?(對像、引用、指針)
 
2. 關於成員變量初始化順序,幾個有依賴關係的成員變量要初始化,讓寫出構造函數。
 
3. 寫一個雙鏈表。
 
4. 寫個is-a和has-a。
 
5. struct vs. class.
 
6. 稱8個小球的問題
 
7. stl 裡面vector的實現(內部空間的申請與分配)
 
8. struct /class的區別
 
9. 為什麼要用struct //成員的默認屬性不同,用struct的話,主要是作為數據的集合。
 
10. 怎樣使一個class不能被實例化 //1,構造函數私有化,2,抽像類
 
11. 私有繼承和public繼承的區別。 //is-a has-a
 
12. void *p的問題 //不能++
 
13. 引用和指針的區別與聯繫。引用是否可以更改
 
14. windows編程基礎,線程與進程的區別
 
15. com+是否熟悉
 
16. 簡述一下hash算法
 
17. 一個32位的數據,怎樣找到最左邊的一個1?// n位的2進制數據怎樣找罪左邊的1,如果是在最左位,這個數是負數,否則的話,左移一位,看是否變成負數,這是O(n)的算法,O(n/2)的算法:二分方式查找
 
18. 一個4*4的格子,填入1~15 然後給個目標狀態,怎樣去搜索。
 
19. 給你100萬個數據,數據的值在0~65535之間 用最快的速度排序
 
20. 如果我們的一個軟件產品,用戶回復說:運行速度很慢,你怎麼處理?
 
21. 八皇后問題,詳述解法
 
22. kmp快速匹配算法 ---不算輕鬆的搞定
 
23. 無向圖中兩點間最短路問題 ---偉大的迪傑克斯拉算法
 
24. 空間中任意給兩個向量,求角平分線
 
25. 什麼是平衡樹
26. 哈夫曼編碼問題
 
27. 有向圖求環
 
28. .給n個點,求凸包問題
 
29. 四則運算(給一個前綴表達式,然後求解;給一個中綴表達式)
 
30. STL中container有哪些?
 
31. map中的數據存儲方式是什麼?
 
32. map和hashmap有什麼區別?
 
33. hashmap是標準庫中的嗎?
 
34. vector中的erase方法跟algorithm的remove有什麼區別?
 
35. object是什麼?
 
36. C++中如何阻止一個類被實例化?
 
37. 一般在什麼時候構造函數被聲明成private呢?//比如要阻止編譯器生成默認的copy constructor
 
38. 什麼時候編譯器會生成默認的copy constructor呢?
 
39. 如果你已經寫了一個構造函數,編譯器還會生成copy constructor嗎?
 
40. 為什麼說如果一個類作為基類,則它的析構函數要聲明成virtual的?
 
41. inline的函數和#define有什麼區別?什麼時候會真的被inline,什麼時候不會呢?
 
42. 如果把一個類的成員函數寫在類的聲明中是什麼意思?
 
43. public繼承和private繼承有什麼架構上的區別?//public是is-a的關係,private是has-a的關係
 
44. 在多繼承的時候,如果一個類繼承同時繼承自class A和class B,而class A和B中都有一個函數叫foo(),如何明確的在子類中指出override哪個父類的foo()?
 
45. 虛擬繼承的語法是什麼?
 
46. 部分模版特例化和全部模版特例化有什麼區別?
 
47. 編一個函數,使一個單項鏈表轉置。
 
48. 拆解一個整數,比如4,可以拆解成4=3+1;4=2+2;4=2+1+1;4=1+1+1+1
 
49. 不用庫函數,實現strcpy或者memcpy等函數
 
50. 內聯函數的作用和缺點
 
51. 指針和引用的區別
 
52. 友元的意義
 
53. 虛函數的意義
 
54. Overload, Overwrite, Override 各自的特點和意義
 
55. 頭文件中的ifndef/define/endif 幹什麼用?//防止該頭文件被重複引用。
 
56. 2#i nclude <filename.h> 和#i nclude 「filename.h」 有什麼區別?
 
57. 在C++ 程序中調用被C 編譯器編譯後的函數,為什麼要加extern 「C」?//C++語言支持函數重載,C 語言不支持函數重載。函數被C++編譯後在庫中的名字與C 語言的不同。C++提供了C 連接交換指定符號extern「C」來解決名字匹配問題
58. 一個類有基類、內部有一個其他類的成員對象,構造函數的執行順序是怎樣的?//先執行基類的(如果基類當中有虛基類,要先執行虛基類的,其他基類則按照聲明派生類時的順序依次執行),再執行成員對象的,最後執行自己的。
 
59. 請描述一個你熟悉的設計模式
 
60. 在UML 中,聚合(aggregation)和組合(composition)有什麼區別?
 
61. C#和C++除了語法上的差別以外,有什麼不同的地方?
 
(1) c#有垃圾自動回收機制,程序員不用擔心對象的回收。(2)c#嚴禁使用指針,只能處理對象。如果希望使用指針,則僅可在unsafe 程序塊中能使用指針。(3)c#只能單繼承。(4)必須通過類名訪問靜態成員。不能像C++中那樣,通過對像訪問靜態成員。(5)在子類中覆蓋父類的虛函數時必須用關鍵字override,覆蓋父類的方法要用關鍵字new
 
62. New delete與malloc free 的區別
 
63. #define DOUBLE(x) x+x,i = 5*DOUBLE(10);i是多少?正確的聲明是什麼?
 
64. 有哪幾種情況只能用intialization list 而不能用assignment?
 
當類中含有const、reference 成員變量;基類的構造函數都需要參數;類中含有其他類的成員對象,而該類的構造函數都需要參數。
 
65. C++是不是類型安全的?//不是。兩個不同類型的指針之間可以強制轉換。C#是類型安全的。
 
66. main 函數執行以前,還會執行什麼代碼?//全局對象的構造函數會在main 函數之前執行。
 
67. 描述內存分配方式以及它們的區別。//(1)從靜態存儲區域分配。內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在。例如全局變量,static 變量。(2) 在棧上創建。在執行函數時,函數內局部變量的存儲單元都可以在棧上創建,函數執行結束時這些存儲單元自動被釋放。棧內存分配運算內置於處理器的指令集。(3) 從堆上分配,亦稱動態內存分配。程序在運行的時候用malloc 或new 申請任意多少的內存,程序員自己負責在何時用free 或delete 釋放內存。動態內存的生存期由我們決定,使用非常靈活,但問題也最多。
 
68. 比較一下C++中static_cast 和 dynamic_cast 的區別。
 
69. 當一個類A 中沒有生命任何成員變量與成員函數,這時sizeof(A)的值是多少,如果不是零,請解釋一下編譯器為什麼沒有讓它為零。
 
70. 已知兩個鏈表head1 和head2各自有序,請把它們合併成一個鏈表依然有序,要求用遞歸方法進行。
 
太多了,詳細請參考www.findgs.com

[轉貼]數學面積計算公式大全

[轉貼]數學面積計算公式大全
長方形=長*寬
平行四邊形=長*高
三角形=長*高/2
正方形=邊長*邊長
圓=圓周率*半徑的平方

這些是小學的,我已經挖空心思了,
我是六年級的

又找了一些:
我給的確實是初中的數學定理和公式大全,樓主看不懂問題不在這裡,建議樓主先從基礎知識抓起,光記公式而不理解是不行的,介紹
幾個初中生學習網站初中數學資源網
http://www.1230.org/
初中數學網
http://www.czsx.com.cn/
初中數學樂園
http://www.0618.org/
華師大初中數學網站
http://www.hsdczsx.com/Article_Index.asp
中學數學題庫
http://www.tiku.net/
這是初中的代數公式:
http://www.edu3g.com/math/expressions/czds/index1.html

初中數學常用公式:
http://edu.northeast.cn/system/2006/09/11/050545772.shtml

初中數學公式,這個需要下載:
http://www.hnmaths.com/Soft/czsx/200605/693.html

常用數學公式表:
http://www.wen8.net/html/307.htm

http://forum.heftyedu.com/viewthread.php?tid=740

另外關於學習方法的:(那個同學跟你的情況有點類似吧)
http://zhidao.baidu.com/question/18903134.html
希望對你有幫助,





1 過兩點有且只有一條直線
2 兩點之間線段最短
3 同角或等角的補角相等
4 同角或等角的余角相等
5 過一點有且只有一條直線和已知直線垂直
6 直線外一點與直線上各點連接的所有線段中,垂線段最短
7 平行公理 經過直線外一點,有且只有一條直線與這條直線平行
8 如果兩條直線都和第三條直線平行,這兩條直線也互相平行
9 同位角相等,兩直線平行
10 內錯角相等,兩直線平行
11 同旁內角互補,兩直線平行
12兩直線平行,同位角相等
13 兩直線平行,內錯角相等
14 兩直線平行,同旁內角互補
15 定理 三角形兩邊的和大於第三邊
16 推論 三角形兩邊的差小於第三邊
17 三角形內角和定理 三角形三個內角的和等於180°
18 推論1 直角三角形的兩個銳角互余
19 推論2 三角形的一個外角等於和它不相鄰的兩個內角的和
20 推論3 三角形的一個外角大於任何一個和它不相鄰的內角
21 全等三角形的對應邊、對應角相等
22邊角邊公理(SAS) 有兩邊和它們的夾角對應相等的兩個三角形全等
23 角邊角公理( ASA)有兩角和它們的夾邊對應相等的兩個三角形全等
24 推論(AAS) 有兩角和其中一角的對邊對應相等的兩個三角形全等
25 邊邊邊公理(SSS) 有三邊對應相等的兩個三角形全等
26 斜邊、直角邊公理(HL) 有斜邊和一條直角邊對應相等的兩個直角三角形全等
27 定理1 在角的平分線上的點到這個角的兩邊的距離相等
28 定理2 到一個角的兩邊的距離相同的點,在這個角的平分線上
29 角的平分線是到角的兩邊距離相等的所有點的集合
30 等腰三角形的性質定理 等腰三角形的兩個底角相等 (即等邊對等角)
31 推論1 等腰三角形頂角的平分線平分底邊並且垂直於底邊
32 等腰三角形的頂角平分線、底邊上的中線和底邊上的高互相重合
33 推論3 等邊三角形的各角都相等,並且每一個角都等於60°
34 等腰三角形的判定定理 如果一個三角形有兩個角相等,那麼這兩個角所對的邊也相等(等角對等邊)
35 推論1 三個角都相等的三角形是等邊三角形
36 推論 2 有一個角等於60°的等腰三角形是等邊三角形
37 在直角三角形中,如果一個銳角等於30°那麼它所對的直角邊等於斜邊的一半
38 直角三角形斜邊上的中線等於斜邊上的一半
39 定理 線段垂直平分線上的點和這條線段兩個端點的距離相等
40 逆定理 和一條線段兩個端點距離相等的點,在這條線段的垂直平分線上
41 線段的垂直平分線可看作和線段兩端點距離相等的所有點的集合
42 定理1 關於某條直線對稱的兩個圖形是全等形
43 定理 2 如果兩個圖形關於某直線對稱,那麼對稱軸是對應點連線的垂直平分線
44定理3 兩個圖形關於某直線對稱,如果它們的對應線段或延長線相交,那麼交點在對稱軸上
45逆定理 如果兩個圖形的對應點連線被同一條直線垂直平分,那麼這兩個圖形關於這條直線對稱
46勾股定理 直角三角形兩直角邊a、b的平方和、等於斜邊c的平方,即a^2+b^2=c^2
47勾股定理的逆定理 如果三角形的三邊長a、b、c有關係a^2+b^2=c^2 ,那麼這個三角形是直角三角形
48定理 四邊形的內角和等於360°
49四邊形的外角和等於360°
50多邊形內角和定理 n邊形的內角的和等於(n-2)×180°
51推論 任意多邊的外角和等於360°
52平行四邊形性質定理1 平行四邊形的對角相等
53平行四邊形性質定理2 平行四邊形的對邊相等
54推論 夾在兩條平行線間的平行線段相等
55平行四邊形性質定理3 平行四邊形的對角線互相平分
56平行四邊形判定定理1 兩組對角分別相等的四邊形是平行四邊形
57平行四邊形判定定理2 兩組對邊分別相等的四邊形是平行四邊形
58平行四邊形判定定理3 對角線互相平分的四邊形是平行四邊形
59平行四邊形判定定理4 一組對邊平行相等的四邊形是平行四邊形
60矩形性質定理1 矩形的四個角都是直角
61矩形性質定理2 矩形的對角線相等
62矩形判定定理1 有三個角是直角的四邊形是矩形
63矩形判定定理2 對角線相等的平行四邊形是矩形
64菱形性質定理1 菱形的四條邊都相等
65菱形性質定理2 菱形的對角線互相垂直,並且每一條對角線平分一組對角
66菱形面積=對角線乘積的一半,即S=(a×b)÷2
67菱形判定定理1 四邊都相等的四邊形是菱形
68菱形判定定理2 對角線互相垂直的平行四邊形是菱形
69正方形性質定理1 正方形的四個角都是直角,四條邊都相等
70正方形性質定理2正方形的兩條對角線相等,並且互相垂直平分,每條對角線平分一組對角
71定理1 關於中心對稱的兩個圖形是全等的
72定理2 關於中心對稱的兩個圖形,對稱點連線都經過對稱中心,並且被對稱中心平分
73逆定理 如果兩個圖形的對應點連線都經過某一點,並且被這一
點平分,那麼這兩個圖形關於這一點對稱
74等腰梯形性質定理 等腰梯形在同一底上的兩個角相等
75等腰梯形的兩條對角線相等
76等腰梯形判定定理 在同一底上的兩個角相等的梯形是等腰梯形
77對角線相等的梯形是等腰梯形
78平行線等分線段定理 如果一組平行線在一條直線上截得的線段
相等,那麼在其他直線上截得的線段也相等
79 推論1 經過梯形一腰的中點與底平行的直線,必平分另一腰
80 推論2 經過三角形一邊的中點與另一邊平行的直線,必平分第
三邊
81 三角形中位線定理 三角形的中位線平行於第三邊,並且等於它
的一半
82 梯形中位線定理 梯形的中位線平行於兩底,並且等於兩底和的
一半 L=(a+b)÷2 S=L×h
83 (1)比例的基本性質 如果a:b=c:d,那麼ad=bc
如果ad=bc,那麼a:b=c:d
84 (2)合比性質 如果a/b=c/d,那麼(a±b)/b=(c±d)/d
85 (3)等比性質 如果a/b=c/d=…=m/n(b+d+…+n≠0),那麼
(a+c+…+m)/(b+d+…+n)=a/b
86 平行線分線段成比例定理 三條平行線截兩條直線,所得的對應
線段成比例
87 推論 平行於三角形一邊的直線截其他兩邊(或兩邊的延長線),所得的對應線段成比例
88 定理 如果一條直線截三角形的兩邊(或兩邊的延長線)所得的對應線段成比例,那麼這條直線平行於三角形的第三邊
89 平行於三角形的一邊,並且和其他兩邊相交的直線,所截得的三角形的三邊與原三角形三邊對應成比例
90 定理 平行於三角形一邊的直線和其他兩邊(或兩邊的延長線)相交,所構成的三角形與原三角形相似
91 相似三角形判定定理1 兩角對應相等,兩三角形相似(ASA)
92 直角三角形被斜邊上的高分成的兩個直角三角形和原三角形相似
93 判定定理2 兩邊對應成比例且夾角相等,兩三角形相似(SAS)
94 判定定理3 三邊對應成比例,兩三角形相似(SSS)
95 定理 如果一個直角三角形的斜邊和一條直角邊與另一個直角三
角形的斜邊和一條直角邊對應成比例,那麼這兩個直角三角形相似
96 性質定理1 相似三角形對應高的比,對應中線的比與對應角平
分線的比都等於相似比
97 性質定理2 相似三角形周長的比等於相似比
98 性質定理3 相似三角形面積的比等於相似比的平方
99 任意銳角的正弦值等於它的余角的餘弦值,任意銳角的餘弦值等
於它的余角的正弦值
100任意銳角的正切值等於它的余角的余切值,任意銳角的余切值等
於它的余角的正切值
101圓是定點的距離等於定長的點的集合
102圓的內部可以看作是圓心的距離小於半徑的點的集合
103圓的外部可以看作是圓心的距離大於半徑的點的集合
104同圓或等圓的半徑相等
105到定點的距離等於定長的點的軌跡,是以定點為圓心,定長為半
徑的圓
106和已知線段兩個端點的距離相等的點的軌跡,是著條線段的垂直
平分線
107到已知角的兩邊距離相等的點的軌跡,是這個角的平分線
108到兩條平行線距離相等的點的軌跡,是和這兩條平行線平行且距
離相等的一條直線
109定理 不在同一直線上的三點確定一個圓。
110垂徑定理 垂直於弦的直徑平分這條弦並且平分弦所對的兩條弧
111推論1 ①平分弦(不是直徑)的直徑垂直於弦,並且平分弦所對的兩條弧
②弦的垂直平分線經過圓心,並且平分弦所對的兩條弧
③平分弦所對的一條弧的直徑,垂直平分弦,並且平分弦所對的另一條弧
112推論2 圓的兩條平行弦所夾的弧相等
113圓是以圓心為對稱中心的中心對稱圖形
114定理 在同圓或等圓中,相等的圓心角所對的弧相等,所對的弦
相等,所對的弦的弦心距相等
115推論 在同圓或等圓中,如果兩個圓心角、兩條弧、兩條弦或兩
弦的弦心距中有一組量相等那麼它們所對應的其餘各組量都相等
116定理 一條弧所對的圓周角等於它所對的圓心角的一半
117推論1 同弧或等弧所對的圓周角相等;同圓或等圓中,相等的圓周角所對的弧也相等
118推論2 半圓(或直徑)所對的圓周角是直角;90°的圓周角所
對的弦是直徑
119推論3 如果三角形一邊上的中線等於這邊的一半,那麼這個三角形是直角三角形
120定理 圓的內接四邊形的對角互補,並且任何一個外角都等於它
的內對角
121①直線L和⊙O相交 d<r
②直線L和⊙O相切 d=r
③直線L和⊙O相離 d>r
122切線的判定定理 經過半徑的外端並且垂直於這條半徑的直線是圓的切線
123切線的性質定理 圓的切線垂直於經過切點的半徑
124推論1 經過圓心且垂直於切線的直線必經過切點
125推論2 經過切點且垂直於切線的直線必經過圓心
126切線長定理 從圓外一點引圓的兩條切線,它們的切線長相等,
圓心和這一點的連線平分兩條切線的夾角
127圓的外切四邊形的兩組對邊的和相等
128弦切角定理 弦切角等於它所夾的弧對的圓周角
129推論 如果兩個弦切角所夾的弧相等,那麼這兩個弦切角也相等
130相交弦定理 圓內的兩條相交弦,被交點分成的兩條線段長的積
相等
131推論 如果弦與直徑垂直相交,那麼弦的一半是它分直徑所成的
兩條線段的比例中項
132切割線定理 從圓外一點引圓的切線和割線,切線長是這點到割
線與圓交點的兩條線段長的比例中項
133推論 從圓外一點引圓的兩條割線,這一點到每條割線與圓的交點的兩條線段長的積相等
134如果兩個圓相切,那麼切點一定在連心線上
135①兩圓外離 d>R+r ②兩圓外切 d=R+r
③兩圓相交 R-r<d<R+r(R>r)
④兩圓內切 d=R-r(R>r) ⑤兩圓內含d<R-r(R>r)
136定理 相交兩圓的連心線垂直平分兩圓的公共弦
137定理 把圓分成n(n3):
⑴依次連結各分點所得的多邊形是這個圓的內接正n邊形
⑵經過各分點作圓的切線,以相鄰切線的交點為頂點的多邊形是這個圓的外切正n邊形
138定理 任何正多邊形都有一個外接圓和一個內切圓,這兩個圓是同心圓
139正n邊形的每個內角都等於(n-2)×180°/n
140定理 正n邊形的半徑和邊心距把正n邊形分成2n個全等的直角三角形
141正n邊形的面積Sn=pnrn/2 p表示正n邊形的周長
142正三角形面積√3a/4 a表示邊長
143如果在一個頂點周圍有k個正n邊形的角,由於這些角的和應為
360°,因此k×(n-2)180°/n=360°化為(n-2)(k-2)=4
144弧長計算公式:L=n兀R/180
145扇形面積公式:S扇形=n兀R^2/360=LR/2
146內公切線長= d-(R-r) 外公切線長= d-(R+r)
(還有一些,大家幫補充吧)

實用工具:常用數學公式


公式分類 公式表達式

乘法與因式分 a2-b2=(a+b)(a-b) a3+b3=(a+b)(a2-ab+b2) a3-b3=(a-b(a2+ab+b2)

三角不等式 |a+b||a|+|b| |a-b||a|+|b| |a|b<=>-bab

|a-b||a|-|b| -|a|a|a|

一元二次方程的解 -b+√(b2-4ac)/2a -b-√(b2-4ac)/2a

根與係數的關係 X1+X2=-b/a X1*X2=c/a 註:韋達定理

判別式
b2-4ac=0 註:方程有兩個相等的實根
b2-4ac>0 註:方程有兩個不等的實根
b2-4ac<0 註:方程沒有實根,有共軛複數根

三角函數公式

兩角和公式
sin(A+B)=sinAcosB+cosAsinB sin(A-B)=sinAcosB-sinBcosA
cos(A+B)=cosAcosB-sinAsinB cos(A-B)=cosAcosB+sinAsinB
tan(A+B)=(tanA+tanB)/(1-tanAtanB) tan(A-B)=(tanA-tanB)/(1+tanAtanB)
ctg(A+B)=(ctgActgB-1)/(ctgB+ctgA) ctg(A-B)=(ctgActgB+1)/(ctgB-ctgA)

倍角公式
tan2A=2tanA/(1-tan2A) ctg2A=(ctg2A-1)/2ctga
cos2a=cos2a-sin2a=2cos2a-1=1-2sin2a

半角公式
sin(A/2)=√((1-cosA)/2) sin(A/2)=-√((1-cosA)/2)
cos(A/2)=√((1+cosA)/2) cos(A/2)=-√((1+cosA)/2)
tan(A/2)=√((1-cosA)/((1+cosA)) tan(A/2)=-√((1-cosA)/((1+cosA))
ctg(A/2)=√((1+cosA)/((1-cosA)) ctg(A/2)=-√((1+cosA)/((1-cosA))

和差化積
2sinAcosB=sin(A+B)+sin(A-B) 2cosAsinB=sin(A+B)-sin(A-B)
2cosAcosB=cos(A+B)-sin(A-B) -2sinAsinB=cos(A+B)-cos(A-B)
sinA+sinB=2sin((A+B)/2)cos((A-B)/2 cosA+cosB=2cos((A+B)/2)sin((A-B)/2)
tanA+tanB=sin(A+B)/cosAcosB tanA-tanB=sin(A-B)/cosAcosB
ctgA+ctgBsin(A+B)/sinAsinB -ctgA+ctgBsin(A+B)/sinAsinB

某些數列前n項和
1+2+3+4+5+6+7+8+9+…+n=n(n+1)/2 1+3+5+7+9+11+13+15+…+(2n-1)=n2
2+4+6+8+10+12+14+…+(2n)=n(n+1) 12+22+32+42+52+62+72+82+…+n2=n(n+1)(2n+1)/6
13+23+33+43+53+63+…n3=n2(n+1)2/4 1*2+2*3+3*4+4*5+5*6+6*7+…+n(n+1)=n(n+1)(n+2)/3

正弦定理 a/sinA=b/sinB=c/sinC=2R 註: 其中 R 表示三角形的外接圓半徑

餘弦定理 b2=a2+c2-2accosB 註:角B是邊a和邊c的夾角

圓的標準方程 (x-a)2+(y-b)2=r2 註:(a,b)是圓心坐標
圓的一般方程 x2+y2+Dx+Ey+F=0 註:D2+E2-4F>0
拋物線標準方程 y2=2px y2=-2px x2=2py x2=-2py

直稜柱側面積 S=c*h 斜稜柱側面積 S=c'*h
正稜錐側面積 S=1/2c*h' 正稜台側面積 S=1/2(c+c')h'
圓台側面積 S=1/2(c+c')l=pi(R+r)l 球的表面積 S=4pi*r2
圓柱側面積 S=c*h=2pi*h 圓錐側面積 S=1/2*c*l=pi*r*l

弧長公式 l=a*r a是圓心角的弧度數r >0 扇形面積公式 s=1/2*l*r

錐體體積公式 V=1/3*S*H 圓錐體體積公式 V=1/3*pi*r2h
斜稜柱體積 V=S'L 註:其中,S'是直截面面積, L是側稜長
柱體體積公式 V=s*h 圓柱體 V=pi*r2h