重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
暈了,補充的公式是錯的
在天壇街道等地區,都構建了全面的區域性戰略布局,加強發展的系統性、市場前瞻性、產品創新能力,以專注、極致的服務理念,為客戶提供網站建設、成都網站建設 網站設計制作按需求定制網站,公司網站建設,企業網站建設,高端網站設計,成都全網營銷,外貿網站制作,天壇街道網站建設費用合理。
C(m,n)=n!/((n-m)!m!)
--------------------------
//VC++6.0下調試通過。
#include iostream
using namespace std;
double jiecheng(int n)
{
if (0==n)
return 1;
else
return jiecheng(n-1)*n;
}
double C(int n, int m)
{
return jiecheng(m)/(jiecheng(m-n)*jiecheng(n));
}
void main()
{
double sum=C(1,100)+C(2,100)+C(100,100);
coutsumendl;
}
#includestdio.h
#includemath.h
void f(int x)
{
int j=0,i;
double k;
k=sqrt(x);
for(i=2;ik;i++)
{
if(x%i==0)
j++;
}
if(j==0)
printf("%4d",x);
}
int g(int x)
{
int a,b,c;
a=x/100;
b=x%100/10;
c=x%10;
if(a*a*a+b*b*b+c*c*c==x)
return 1;
else
return 0;
}
void main()
{
int array[100],i,n=300;
for(i=0;i99;i++,n++)
array[i]=n;
for(i=0;i99;i++,n++)
printf("%4d,",array[i]);
printf("素數為:");
for(i=0;i99;i++,n++)
f(array[i]);
printf("水仙花數為:");
for(i=0;i99;i++,n++)
if(g(array[i])==1)
printf("%4d,",array[i]);
}
C語言知識要點——轉給那些還沒把書看完的同志們
來源: 李志遠的日志
1.C源程序的框架
盡管各個C源程序的功能千變萬化,但框架是不變的,主要有:編譯預處理、主函數()、函數n()等,主函數的位置不一定在最前面,可以在程序的中部或后面,主函數的名字固定為main。
2.C語言源程序的書寫規則:
(1)C源程序是由一個主函數和若干個其它函數組成的。
(2)函數名后必須有小括號,函數體放在大括號內。
(3)C程序必須用小寫字母書寫。
(4)每句的末尾加分號。
(5)可以一行多句。
(6)可以一句多行。
(7)可以在程序的任何位置加注釋。
3.語句種類
語句是程序的基本成分,程序的執行就是通過一條條語句的執行而得以實現的,根據表現形式及功能的不同,C語言的基本語句可以分為五大類。
(1)流程控制語句
流程控制語句的功能是控制程序的走向,程序的流程有三種基本結構:順序結構、分支結構和循環結構,任何復雜的程序都可以由這三種基本結構復合而成。其中后兩種結構要用特定的流程控制語句實現。
(2)表達式語句
表達式語句的形式是:表達式;,即表達式后跟一分號";",分號是語句結束符,是一個語句必不可少的成分。表達式和表達式語句的區別在于表達式代表的是一個數值,而表達式語句則代表一種動作。最常見的表達式語句是賦值語句。
(3)函數調用語句
函數調用語句實際上也是一種表達式語句,形式為:在一次函數調用的小括號后面加上一個分號。
(4)空語句
空語句的形式就是一個分號,它不代表任何動作,常常作為一個意義轉折點使用。
(5)復合語句
復合語句從形式上看是多個語句的組合,但在語法意義上它只相當于一個語句,在任何單一語句存在的地方都可以是復合語句。注意復合語句中最后一個語句末尾的分號不能少。復合語句右大括號后面沒有分號。
4.運算符
用來表示數據各種操作的符號稱為運算符。運算符實際上代表了一種類型數據的運算規則。不同的運算符具有不同的運算規則,其操作的數據類型必須符合該運算符的要求,運算結果的數據類型也是固定的。
根據參加操作的數據個數多少,可以將C語言的運算符分為單目運算符,雙目運算符和三目運算符(三目運算符只有條件運算符一個)。
根據運算對象和運算結果的數據類型可分為算術運算符、關系運算符、邏輯運算符等。
5.表達式
表達式是由常量、變量、函數,通過運算符連接起來而形成的一個算式。一個常量,一個變量或一個函數都可以看成是一個表達式。
表達式的種類有:
算術表達式、關系表達式、邏輯表達式、賦值表達式、字位表達式、強制類型轉換表達式、逗號表達式(順序表達式)、條件表達式、指針表達式。
6.數據的輸入/輸出
C語言本身沒有輸人/輸出語句,數據的輸入/輸出是通過調用庫函數來實現的。
第二章 數據類型知識點
劃分數據類型的意義是編譯系統對每個不同類型的數據在內存中分配的字節數不同,不同類型的數據可以按規定參加不同類型的運算。
1.C語言的數據類型
數據類型有:整型、字符型、實型單精度型、雙精度型、構造類型數組類型、結構體類型、共用體類型、枚舉類型、指針類型、空類型,其中整型、實型、字符型是C語言中的基本類型。
2.各種類型數據的定義方法
定義形式:數據類型 變量名1,變量名2,......變量名n;
3.常量與變量
(1)常量——在程序執行期間其值不變的量。它不能被賦值。
(2)變量——在程序運行期間其值可以改變的量。
4.各種類型數據的混合運算
各類數據運算前會自動轉換成同一類型。規律如右圖示:從右向左的箭頭表示必定的轉換,如float型數據運算前化成double型,以提高運算精度,結果也為double型,short或char型數據運算前化成int型,結果也為int型;從下向上的箭頭表示轉換方向是向級別高的靠攏。
5.強制類型變換
當我們需要對數據進行類型變換,而機器又不能自動完成時,就要用強制類型變換,形式為:(數據類型符)(被轉換對象)。
第三章 選擇知識點
C語言中實現選擇結構的控制語句有兩種:條件分支語句if和開關分支語句switch。
1.if語句的三種形式:
(1) if(表達式)語句;
(2) if(表達式)語句1;
else語句2;
(3) if(表達式1)語句1;
else if(表達式2)語句2;
else if(表達式3)語句3;
...
else if(表達式n)語句n;
2.開關分支語句switch
(1)形式
switch(表達式)
{ case e1:語句1;break;
case e2:語句2;break;
case e3:語句3;break;
......
case en:語句n;break;
default :語句n+1;
}
(2)功能
當表達式的值等于e1時,執行語句1;
當表達式的值等于e2時,執行語句2;
......
當表達式的值等于en時,執行語句n;
當表達式的值與常量e1、e2......en誰都不等時,就執行default后的語句
第四章 循環知識點
循環就是在程序執行過程中,反復多次的執行同一段程序。C語言中有三種循環語句。
1.while循環語句
形式為:while(表達式)
{
循環體
};
執行過程是:先計算表達式的值,當表達式的值非0時就執行循環體,之后再判斷表達式的值,且重復以上過程;當表達式的值為0時就結束循環。
2.do-- while循環語句
形式為:do
{
循環體
} while(表達式);
執行過程是:先執行循環體一次,再判斷表達式的值,當表達式的值非0時就再執行循環體,之后再判斷表達式的值,且重復以上過程;當表達式的值為0時就結束循環。
3.for循環語句
形式為:for(表達式1;表達式2;表達式3)
{ 循環體 }
4.三種循環語句的比較
三種循環語句可以完成同一件事,可任選其一。
使用while和do-- while循環時,要提前給循環變量賦初值。而for循環是在表達式1中賦初值的。
while循環和for循環都是先判斷條件后執行循環體,有可能一次也不執行循環體,do-- while循環是先執行循環體,后判斷條件,即循環體至少也得執行一次。for循環不限于計數循環,其循環條件可以是邏輯表達式和字符表達式等。
5.循環嵌套
三種循環控制語句可以互相嵌套,即在一個循環體內部又可以出現另一循環,這種嵌套在理論上來說可以是無限的。注意必須是一個循環完整的套住另一個循環。
6.break語句
break語句只能出現在三種循環語句和switch多分支語句中,其作用是用來中斷這四種語句的執行。當程序執行到break語句時,會跳出break語句所在的循環或switch分支,而直接執行緊跟在它們后面的語句。
7.continue語句
continue語句只能出現在三種循環語句中,當程序執行到continue語句時,其作用是提前結束本次循環,自動跳過循環體中后半部剩余的語句的執行,而直接回到循環條件判斷。根據判斷的結果決定是否繼續執行下次循環。
8. goto 語句
goto語句是一種非結構化語句,其作用是使程序的執行無條件的轉移到某一處。使用格式為: goto 標號;利用goto語句與if條件語句配合,也可以實現條件循環。C語句允許在任何語句前添加標號,作為跳轉目標,標號的構成是標識符后面加一個":"。
第五章 數組知識點
數組就是同類型的一批數據的集合,用一個變量名存放,區分各元素的辦法是用下標。
1.一維數組
類型說明符數組名\[數組長度\];
(1)數組命名要符合標識符的命名規則。
(2)數組名后的括號必須是方括號,不能是圓括號。
(3)數組長度必須是正整數,可以是個表達式,但不能有變量,C語言不支持動態數組。
(4)數組長度表示數組中元素的個數
(5)數組元素的下標從0開始數,所以最大下標是數組的長度減1。
2.多維數組(以二維為例)
類型說明符數組名\[第一維長度\]\[第二維長度\];
(1)數組命名要符合標識符的命名規則。
(2)數組名后的括號必須是兩個方括號,定義時不能寫成inta\[3,4\];。
(3)數組長度必須是整型常量表達式。
(4)第一維長度表示數組行數,第二維長度表示數組列數。
(5)每個數組元素都有兩個下標,第一維表示該元素所在的行,第二維表示該元素所在的列,每一維的下標都從0開始數。
二維數組的初始化:C語言規定只有靜態數組和外部數組才允許在定義時賦初值,賦初值形式如下:
static類型說明符數組名\[第一維長度\]\[第二維長度\]={初值表};
二維數組的引用:二維數組不能整體引用,要引用數組的單個元素,形式為:數組名\[下標\]\[下標\]和普通變量的使用無任何區別。
3.字符數組
C語言中沒有字符串變量,字符串是靠字符數組實現的,所謂字符數組就是元素的數據類型為字符型的數組。
(1)字符數組的定義形式:char數組名\[數組長度\];
因為C語言中的整型數據和字符型數據是相通的,所以也可以這樣定義:int數組名\[數組長度\];
(2)字符數組的初始化:給字符數組的初始化有兩種方式,一種是用字符常量,另一種是用字符串。形式如下:
staticchar數組名\[數組長度\]={字符常量表};
staticchar數組名\[數組長度\]={字符串常量};
4.數組與函數
數組經常作為函數的參數,數組做函數的參數有兩種形式,一是數組元素做函數的參數,一是數組名做函數的參數,當用數組名做函數的實參時傳送的是首地址。
5.常用的字符串處理函數
C語言提供了一些處理字符串的標準函數,用以完成一些常見的操作。對以下幾個函數要掌握其功能和調用形式。
(1)gets(字符數組名)此函數功能是從鍵盤輸入一串字符,回車后送到字符數組中,注意定義數組時數組長度要足夠大。
(2)puts(字符數組名)此函數功能是將字符數組的內容輸出到屏幕上。
(3)strcat(字符數組名1,字符數組名2)此函數功能是將字符數組1中的'\\0'去掉后將字符數組2的內容連接到字符數組1的末尾。
(4)strcpy(字符數組名1,字符數組名2)函數功能是將字符數組2的內容(包括'\\0')拷貝到字符數組1中,字符數組2處也可以是字符串常量。strcpy函數可以實現拷子串。
(5)strcmp(字符數組名1,字符數組名2)函數功能是兩個字符串(ASCII碼)比大小。
(6)strlen(字符數組名)此函數功能是求字符串的長度,注意不包括'\\0'。
(7)strlwr(字符數組名)此函數功能是將字符串中的所有大寫字母都變成小寫。
(8)strupr(字符數組名)此函數功能是將字符串中的所有小寫字母都變成大寫。
第六章 函數知識點
每個C源程序都是由函數組成的,一個主函數和若干個其它函數,C語言程序設計的基礎工作就是函數的具體編寫,C語言中的函數就相當于其它高級語言中的子程序。
1.函數的概念
函數就是一個數據加工廠,從函數外部接收數據,在函數內部加工處理,然后得到一個結果返回給外部的調用者。所以函數就是對語言功能的擴充,對函數的調用就是對功能的調用。
2.標準函數
各種高級語言都定義了一些標準函數,C語言中的標準函數稱為庫函數,是將一些基本的、常用的功能編成了函數,供大家使用方便。使用庫函數時必須把它的頭文件用#i nclude命令包含進來,每個庫函數的功能及對應的頭文件都會在手冊中給出。
3.自定義函數
C 語言也允許用戶自己編寫函數以實現C庫函數中沒有提供的功能,稱作自定義函數。
4.定義函數
C語言規定每個函數都要獨立定義,函數定義不能嵌套。
函數定義的形式:數據類型函數名(形參表)
形參說明語句序列
{ 說明語句序列
可執行語句序列 }
5.函數調用
函數調用的形式是: 函數名(實參表)。當實參表中有多個參數時,要用逗號隔開,若被調函數無參數,調用時小括號也不能省。函數調用過程是:將實參的值傳給形參,在函數體內進行加工處理,然后由return語句將函數值返回調用處。
5.全局變量和局部變量
局部變量:在函數內部定義的變量稱為局部變量,只在本函數中有效。
全局變量:在函數外部定義的變量稱為全局變量,它的作用范圍是從定義開始到本文件結束。
6.動態存儲與靜態存儲
內存中的用戶數據區分為動態存儲區和靜態存儲區,動態存儲區是指程序運行期間給變量臨時分配存儲單元,變量用完后立即釋放單元的區域,動態存儲區放的是函數的形參、自動變量、函數調用期間的現場保護數據和返回地址。
靜態存儲區是指程序運行期間給變量分配固定的存儲單元,放的是全局變量和局部靜態變量。
一個變量除了它的數據類型以外還有存儲類型,定義一個變量時應該說明這兩種類型。
第七章 預處理知識點
對高級語言編譯連接就是把源程序轉換成機器語言,C語言在進行編譯之前還要預先處理三件事:宏定義命令、文件包含命令和條件編譯命令,統稱為預處理命令,其特點是:
1.所有的預處理命令都放在程序的頭部,以#開頭,且#號后面不留空格。
2.預處理命令不是C的語句,行尾不加分號。
3.預處理命令是在編譯預處理階段完成的,所以它們沒有任何計算、操作等執行功能。
4.預處理命令有所變動后,必須對程序重新進行編譯和連接。
1.宏定義
宏定義命令的作用是給一些常用的對象重新命名,在程序中可以用宏名來引用這些對象,預處理時宏名會被代表的內容替換,此過程稱為宏展開或宏替換。宏定義有兩種形式:
2.文件包含
使用文件包含命令可以將另—個C源程序的全部內容包含進來,其形式為:
#i nclude <文件名>或#i nclude "文件名"
通常可以把經常用到的,帶公用性的一些函數或符號等集合在...起形成一個源文件,然后用此命令將這個源文件包含進來,這樣可以避免在每個新程序中都要重新鍵入這些內容。
3.條件編譯
顧名思義滿足條件時進行編譯,為了解決程序移植問題,C語言提供了條件編譯命令,它能使源程序在不同的編譯環境下生成不同的目標代碼文件。條件編譯命令有3種形式。
第八章 指針知識點
1.什么是指針和指針變量?
指針就是內存地址,因為通過"地址"可以找到變量,所以內存"地址"形象的稱為指針。
指針變量就是存地址的變量。在C語言中用一個變量存另一個變量的地址,那么就稱這個變量為指針變量,指針變量的值就是地址。通常指針變量被簡稱為指針。
指針變量是有類型的,即指針值增1表示指向下一個數據,如整型數據在內存中占兩個字節,它的指針變量增1是增兩個字節。如實型數據在內存中占4個字節,它的指針變量增1是增4個字節。
2.怎樣定義指針變量?
定義形式為:數據類型*指針變量名1,*指針變量名2......;
3.指針的有關運算
指針為內存地址是整數,可以進行一些算術運算、關系運算、賦值運算、特殊運算等,但要注意運算代表的實際意義。
4.指向數組的指針變量
(1)指向數組元素的指針變量定義形式為:inta\[10\];
int*p=a;
(2)指向一維數組的指針變量
定義形式為:inta\[3\]\[4\];
int(*p)\[4\];
p=a;
(3)指向字符串的指針變量
定義形式為: char*p="字符序列";
C語言中的字符串是以隱含形式的字符數組存放的,定義了指針變量p并不是將整個字符串都存放在p中了,而p中存放的是字符串的首地址。
5.指向函數的指針變量
一個函數在編譯時被分配一個入口地址,這個地址就是函數的指針,可以用一個指針變量指向它。指向函數的指針變量定義形式為:
數據類型(*指針變量名);
6.指針變量做函數的參數
(1)指針作函數的參數可以傳送地址,如數組的首地址,函數的入口地址等。
(2)指針作函數的參數也可以用地址方式傳送數據。
7.返回值是指針的函數
即函數的返回值是內存的地址,利用這種方法可以將一個以上的數據返回給函數的調用者。定義形式如下:
數據類型*函數名(形參表)
8.指針數組
定義形式為:數據類型*數組名\[數組長度\];
數組中的每個元素都是指針類型的數據,這種數組被稱為指針數組。
9.指向指針的指針
定義形式為:數據類型**指針變量名;
指向指針數據的指針變量稱為指向指針的指針。
10.main函數的形參
main函數可以帶兩個形參,如:
main(argc,argv)
intargc;
char *argv\[\];
{
......
}
11.指向結構體的指針變量
結構體變量的指針就是該變量所占據的內存段的首地址。指向結構體的指針變量定義形式為:struct結構體類型名*指針變量名;
12.指向共用體的指針變量
共用體變量的指針就是該變量所占據的內存段的首地址。指向共用體的指針變量定義形式為:union共用體類型名*指針變量名;
替換了的字符時(這里為正中間的字符"4"),原來的字符己不復存在。
第九章 結構體與共用體知識點
結構體類型是C語言的一種構造數據類型,它是多個相關的不同類型數據的集合,相當于其它高級語言中的記錄。
1.結構體類型定義
結構體類型的形式為:
struct結構體類型名
{ 數據類型成員名1;
...
數據類型成員名n;
}
2.結構體變量的定義
結構體變量有三種定義形式:
(1)先定義結構體類型,后定義結構體變量。
(2)定義結構體類型的同時定義結構體變量。
(3)不定義結構體類型名,直接定義結構體變量。
3.結構體變量的引用
(1)結構體變量的初始化:許多C版本規定對外部或靜態存儲類型的結構體變量可以進行初始化,而對局部的結構體變量則不可以,新標準C無此限制,允許在定義時對自動變量初始化。
(2)結構體成員的引用:由于C語言一般不允許對結構體變量的整體引用,所以對結構體的引用只能是對分量的引用,結構體變量中的任一分量可以表示為:結構體變量名·成員名
4.結構體與數組
C語言中數組的成員可以是結構體變量,結構體變量的成員也可以是數組。
結構體數組有三種定義形式:
(1)先定義結構體類型,后定義結構體數組。
(2)定義結構體類型的同時定義結構體數組。
(3)不定義結構體類型名,直接定義結構體變量。
5.結構體與指針
一方面結構體變量中的成員可以是指針變量,另一方面也可以定義指向結構體的指針變量,指向結構體的指針變量的值是某一結構體變量在內存中的首地址。
結構體指針的定義形式:struct結構體類型名*結構體指針變量名。
由結構體指針引用結構體成員的方法
6.用指針處理鏈表
結構體的成員可以是指針類型,并且這個指針類型就是本結構體類型的,這樣可以構造出一種動態數據結構—成為鏈表。所謂動態數據就是指在編譯時不能確定數據量的多少,而是在程序執行時才確定的數據,動態數據可以比較方便的進行數據插人或刪除等操作。
7.結構體與函數
結構體變量的成員可以作函數的參數、指向結構體變量的指針也可以作函數的參數。雖然結構體變量名也可以作為函數的參數,將整個結構體變量進行傳遞,但一般不這樣做,因為如果結構體的成員很多,或者有些成員是數組,則程序運行期間,將全部成員一個一個的傳遞,既浪費時間,又浪費空間,開銷太大。
8.結構體與共用體
結構體變量中的成員可以是共用體,共用體變量中的成員可以是結構體。
共用體
為了節省存儲空間,C語言允許將幾種不同類型的數據存放在同一段內存單元,它們共用一個起始地址,稱做共用體。
1.共用體類型定義
union共用體類型名
{ 數據類型成員名1;
...
數據類型成員名n;
}
2.共用體變量定義
(1)先定義類型,后定義變量。
(2)定義類型的同時定義變量。
(3)不定義類型名,直接定義變量。
3.共用體變量的引用
(1)共用體變量不能整體引用,只能引用其成員,形式為:共用體變量名·成員名
(2)共用體變量的成員不能初始化,因為它只能放一個數據。
(3)共用體變量存放的數據是最后放入的數據。
(4)共用體變量的長度是最大的成員的長度。
(5)可以引用共用體變量的地址、各個成員的地址,它們都是同一個地址。
(6)共用體變量不能當函數的參數或函數的返回值,但可以用指向共用體變量的指針作函數的參數。
(7)共用體變量的成員可以是數組,數組的成員也可以是共用體變量。
第十章 位運算知識點
位運算就是按二進制位進行操作的運算,運算的對象只能是整型或字符型,不能是實型。不同長度的變量進行位運算,系統會自動右對齊,而左端的不齊部分,對于無符號數左端補滿0,對于有符號數則:正數左端補滿0,負數左端補滿1。
第十一章 文件知識點
操作系統是以文件為單位對數據進行管理的,任何一種計算機高級語言都要有和磁盤文件打交道的能力,否則該語言的功能充其量是算一算、顯示顯示而已。在C語言中沒有單獨的文件操作語句,所有對文件的操作都是通過庫函數來完成的,所以本章的重點是學會使用有關文件操作的庫函數。
1.文件的基本概念
2.文件類型指針
3.文件的操作
#include stdio.h
void main()
{ int Ack(int m,int n);
int m,n;
printf("\nEnter m and n:\n");
scanf("%d,%d",m,n);
printf("Ack(%d,%d)=%d\n",m,n,Ack(m,n));
}
int Ack(int m,int n)
{ if(m==0)
return(n+1);
else if(n==0)
return(Ack(m-1,1));
else
return(Ack((m-1),Ack(m,n-1)));
}
用簡單的C的遞歸就可以實現了 ,由于電腦問題,結果圖片上傳不了,不過可以運行