主函數(shù)中for (i=0;i!='\0';i++)要改成for (i=0;i100;i++),scanf ("%c",str[i]);要改成scanf (" %c",str[i]);。
成都創(chuàng)新互聯(lián)公司是一家網(wǎng)站設計制作、網(wǎng)站建設,提供網(wǎng)頁設計,網(wǎng)站設計,網(wǎng)站制作,建網(wǎng)站,按需搭建網(wǎng)站,網(wǎng)站開發(fā)公司,從2013年成立是互聯(lián)行業(yè)建設者,服務者。以提升客戶品牌價值為核心業(yè)務,全程參與項目的網(wǎng)站策劃設計制作,前端開發(fā),后臺程序制作以及后期項目運營并提出專業(yè)建議和思路。
del_samechar函數(shù)中第二個for就不能用i變量控制了,不然第二個for循環(huán)完后i就越界了,第一個for就不再執(zhí)行了還有,控制應該是str[i]!='\0'而不應該是i!='\0'。
其實把函數(shù)?del_samechar寫成以下就可以了——
void?del_samechar(char?str[]){
int?i,n;
for(n=i=0;str[j]=str[i];i++)
if(str[j]!=str[j-1]?||?j==0)
j++;
}
C語言具有簡潔緊湊,靈活方便,運算符豐富,數(shù)據(jù)類型豐富,表達方式靈活實用等特點,所以C語言程序設計更主動、靈活。很多人從C語言入門編程,下面整理了一些C語言基礎知識,希望對大家有所幫助!
1.C語言中,變量必須先聲明后使用,即一個程序塊(花括號對)中所有臨時變量必須在第一條可執(zhí)行語句之前全部聲明,而不能像C++那樣隨用隨聲明;
2.C語言中參數(shù)傳值傳遞形參,即為參數(shù)的拷貝,此與C++/JAVA相同,同時值得注意,ANSI C不支持引用,此與C++/JAVA有區(qū)別,那么要對參數(shù)進行修改只能使用指針方式(指針傳值指針本身仍是形參,要修改指針本身那必須使用雙重指針);
3.C語言默認類型為int,即參數(shù)無類型或函數(shù)無返回值類型聲明,則認為是int(貌似一些編譯器不支持),同時不建議使用該特性;
4.無參數(shù)的函數(shù)聲明應當使用void表明,否則C語言按照老式聲明方法忽略參數(shù)類型檢查;
5.全局變量建議全大寫,局部變量建議全小寫,內(nèi)部變量31個字符有效,外部變量不區(qū)分大小寫,僅6個字符有效,所以必須保持唯一性;
6.ANSI C是按照多字節(jié)實現(xiàn)的,UNICODE是后來發(fā)展的,所以有char/WCHAR,與.NET中char直接是雙字節(jié)有區(qū)別,在C#中導入dll時值得注意;
7.C語言支持枚舉,并且枚舉和int直接強制類型轉(zhuǎn)換即可,比.NET方便;
8.#define聲明宏定義直接在編譯時替換,不進行類型檢查,const聲明常量則可以進行類型檢查;
9.運算符的優(yōu)先級記憶比較麻煩,還是()可靠;
10.goto并不是一無是處,在不考慮程序可讀性的情況下可能獲得更高的效率;
11.函數(shù)實際也可以與特殊的類型相對應,那樣對于理解函數(shù)指針比較方便,函數(shù)為外部類型;
12.static用于全局變量和函數(shù)則限定該變量和函數(shù)的使用范圍僅為該源文件(從而無需考慮與其他源文件不得重名),用于函數(shù)內(nèi)部變量則該變量的內(nèi)存分配和回收不再同于普通臨時變量(調(diào)用函數(shù)生成,函數(shù)返回銷毀),而是一直存在于靜態(tài)變量區(qū),從而可以保存一些狀態(tài);
13.頭文件的作用體現(xiàn)在調(diào)用其他源文件時不需要再次寫函數(shù)定義,所以實現(xiàn)函數(shù)是不需要頭文件的,調(diào)用時才需要,可以采用富頭文件定義一大組接口,然后使用多個源文件分別實現(xiàn);
14.寄存器變量使用register聲明,僅適用于使用頻率高的局部變量(含形參)(受限于底層硬件,不一定會被分配到寄存器,但是這么寫不影響效率);
15.全局變量和靜態(tài)變量默認初始化為全零且僅初始化一次,局部變量默認初始化為未定義且每次都會重新初始化;
16.遞歸調(diào)用的方法一般比較緊湊,但是每次調(diào)用會單獨維護調(diào)用的`堆棧,所以效率不是最高;
17.#include的作用體現(xiàn)于將一些內(nèi)容避免重新寫一遍(主要是類型、函數(shù)和外部變量定義),所以實際上不一定為h文件;
18.表示一行尚未結(jié)束,對于定義長的字符串和define比較有用;
19.函數(shù)調(diào)用的執(zhí)行順序不確定,所以對于a()+b()這樣函數(shù)中使用相同變量并且改變其值的需要借助臨時變量處理,防止不同實現(xiàn)的調(diào)用順序不一致;
20.##用于宏定義中連接前后兩個部分,如cat(a, b) a ## b;
21.指針是C/C++的重要內(nèi)容,當然也是雙面刃,用好了很方便而且高效,用不好那就造成程序不穩(wěn)定;
22.使用va_list, va_start, va_arg, va_end來定義可變參數(shù)的函數(shù),通過va_start函數(shù)中的第一個不變參數(shù)將va_list指向參數(shù)列表(函數(shù)調(diào)用的棧中),然后通過va_arg獲取每個參數(shù)并將va_list移動指定類型的長度,最后則通過va_end完成必要的回收工作,需要指出的是va_arg沒有結(jié)束邊界,所以比較有效的方式有兩種,一種對于參數(shù)類型一致,則可以第一個參數(shù)指出后續(xù)參數(shù)的總數(shù),然后依次獲取,另一種對于不同類型的參數(shù)混用,則可以通過類型標識+參數(shù)配對的方式進行使用(第一個參數(shù)依然可以指定數(shù)量,當然也可以檢查標識),從而避免最后讀取無效的參數(shù),對于可變參數(shù)僅支持int和double兩種類型(參數(shù)未限定類型,故按照舊式聲明理解)以及指針類型;
23.函數(shù)指針是用來在C語言中實現(xiàn)動態(tài)調(diào)用的比較有效的方式
24.結(jié)構(gòu)體用作參數(shù)依然是拷貝為形參傳遞,這點與JAVA中全部對象都是類有區(qū)別(類的對象通過引用傳值,C#支持struct),所以對于大的結(jié)構(gòu)體事宜使用指針傳遞,而對于小的結(jié)構(gòu)體拷貝傳值效率并不低;
25.代碼中字符數(shù)組為靜態(tài)常量,對其操作無效,程序塊中數(shù)組的聲明是可以自動回收的,通過malloc/calloc分配的內(nèi)存為堆內(nèi)存,需要自行通過free回收;
01
c語言入門基礎知識點有:c語言的命名;變量及賦值;基本數(shù)據(jù)類型;格式化輸出語句;強制類型轉(zhuǎn)換;不可改變的常量;自動類型轉(zhuǎn)換。C語言是一種通用的、面向過程式的計算機程序設計語言。
C語言是一門面向過程的、抽象化的通用程序設計語言,廣泛應用于底層開發(fā)。C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產(chǎn)生少量的機器語言以及不需要任何運行環(huán)境支持便能運行的高效率程序設計語言。盡管C語言提供了許多低級處理的功能,但仍然保持著跨平臺的特性,以一個標準規(guī)格寫出的C語言程序可在包括類似嵌入式處理器以及超級計算機等作業(yè)平臺的許多計算機平臺上進行編譯。
c語言入門基礎知識:
1、c語言的命名編程時給變量或者函數(shù)起的名字就是標識符。C語言的標識符是不可以隨便起名字的,必須遵守一定的規(guī)則。C 語言規(guī)定,標識符可以是字母(A~Z,a~z)、數(shù)字(0~9)、下劃線_組成的字符串,并且第一個字符必須是字母或下劃線。
在使用標識符時還有注意以下幾點:
(1)標識符的長度最好不要超過8位,因為在某些版本的C中規(guī)定標識符前8位有效,當兩個標識符前8位相同時,則被認為是同一個標識符。
(2)標識符是嚴格區(qū)分大小寫的。例如Imooc和imooc 是兩個不同的標識符。
(3)標識符最好選擇有意義的英文單詞組成做到"見名知意",不要使用中文。
(4)標識符不能是C語言的關(guān)鍵字。想了解更多C語言關(guān)鍵字的知識,請查閱WIKI。
2、變量及賦值變量就是可以變化的量,而每個變量都會有一個名字(標識符)。變量占據(jù)內(nèi)存中一定的存儲單元。使用變量之前必須先定義變量,要區(qū)分變量名和變量值是兩個不同的概念。就好比:住在房間里的客人與房間號是兩個不同的概念。變量定義的一般形式為:數(shù)據(jù)類型 變量名;多個類型相同的變量:數(shù)據(jù)類型 變量名, 變量名, 變量名...;變量名和標識符的命名規(guī)范完全相同。
注意:在定義中不允許連續(xù)賦值,如int a=b=c=5;是不合法的。
變量的賦值分為兩種方式:1.先聲明再賦值2.聲明的同時賦值。
3、基本數(shù)據(jù)類型C語言中的數(shù)據(jù)也是有類型的,C語言中,數(shù)據(jù)類型可分為:基本數(shù)據(jù)類型,構(gòu)造數(shù)據(jù)類型,指針類型,空類型四大類。
4、格式化輸出語句格式化輸出語句,也可以說是占位輸出,是將各種類型的數(shù)據(jù)按照格式化后的類型及指定的位置從計算機上顯示。這樣做的好處,是有利于計算機能夠準確的將我們所要類型數(shù)據(jù)給我們。其格式為:printf("輸出格式符",輸出項);
5、不可改變的常量在程序執(zhí)行過程中,值不發(fā)生改變的量稱為常量。C語言的常量可以分為直接常量和符號常量。直接常量也稱為字面量,是可以直接拿來使用,無需說明的量,比如:整型常量:13、0、-13;實型常量:13.33、-24.4;字符常量:‘a(chǎn)’、‘M’字符串常量:”I love php!”在C語言中,可以用一個標識符來表示一個常量,稱之為符號常量。符號常量在使用之前必須先定義,其一般形式為:#define 標識符 常量值;符號常量的標示符一般習慣使用大寫字母,變量的標示符一般習慣使用小寫字母,加以區(qū)分。
6、自動類型轉(zhuǎn)換數(shù)據(jù)類型存在自動轉(zhuǎn)換的情況,自動轉(zhuǎn)換發(fā)生在不同數(shù)據(jù)類型運算時,在編譯的時候自動完成。自動轉(zhuǎn)換遵循的規(guī)則就好比小盒子可以放進大盒子里面一樣,下圖表示了類型自動轉(zhuǎn)換的規(guī)則。
7、強制類型轉(zhuǎn)換強制類型轉(zhuǎn)換是通過定義類型轉(zhuǎn)換運算來實現(xiàn)的。其一般形式為:(數(shù)據(jù)類型) (表達式);其作用是把表達式的運算結(jié)果強制轉(zhuǎn)換成類型說明符所表示的類型。
注意:double類型的數(shù)據(jù)的格式符 %f或%lf。
一、算法結(jié)構(gòu)
1、順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu);
2、循環(huán)結(jié)構(gòu)又分為while型、until型、for循環(huán)結(jié)構(gòu);
二、數(shù)據(jù)類型
1、常量:常量包括字面常量、直接常量和符號常量;
2、變量:C語言規(guī)定標志符只能由字母、數(shù)字和下劃線三種字符組成,且第一個字符必須是字母或者下劃線;必須壓迫先定義后使用;每一個變量被定義以確定類型后,在編譯時就能為其分配相應的存儲單元;
3、整數(shù)類型:整數(shù)常量有十進制、八進制和十六進制;“%d”
4、整形變量:數(shù)據(jù)在內(nèi)存中存放形式是以二進制形式存放;有int型、shortint型和longint型,無符號整型變量的范圍是-32768—32767,有符號型為0~65535.通常把long定義為32位,把short定義為16位,int可以是32位也可以為16位,這都主要取決于機器字長。
三、運算符
1、算術(shù)運算符(+-*/%)結(jié)合方向自左向右
2、關(guān)系運算符( == = = !=)
3、邏輯運算符(! ||)
4、位運算符( ~ | ^ )
5、賦值運算符(=及符號擴展賦值運算符)
6、條件運算符(?:)
7、逗號運算符(,)
8、指針運算符(* )
四、控制語句
完成一定的控制功能。
1、if()~else~
2、for()~
3、while()~
4、do~while()
5、continue
6、break
7、switch
8、goto
9、return
五、數(shù)組
一維數(shù)組的定義:類型說明符數(shù)組名【常量表達式】;先定義后引用;一維數(shù)組初始化時可以只對一部分元素初始化,在對全部數(shù)組元素初始化的時候可以部規(guī)定長度;但是若被定義的數(shù)組長度與提供的初始值不一樣時,則數(shù)組長度不能省略。
二維數(shù)組的定義:類型說明符數(shù)組名【常量表達式】【常量表達式】C語言中存放二維數(shù)組是先存放第一行的元素,緊接著是第二行,其實也是以一維的方式存放。如果初始化時能指定所有元素的初始值,第一維大小可以省略,但是第二維不能省略。
字符數(shù)組:定義和初始化跟數(shù)組差不多,只是需要加單引號。字符和字符串結(jié)束標志,C語言規(guī)定,以‘\0’代表。
六、函數(shù)
1、一個源程序由多個函數(shù)組成。
2、C程序的執(zhí)行從main()函數(shù)開始;
3、所有函數(shù)都是平行的;
4、函數(shù)分類;可以分為標準和自定義,還可以分為有參函數(shù)和無參函數(shù)。
七、指針
指針是指向一片內(nèi)存空間的地址,指針變量是變量,是存放一片內(nèi)存空間首地址的變量,我們一般所說的指針都是指針變量。