基礎(chǔ)第02天用戶(hù)權(quán)限、vi操作linux服務(wù)器搭建_第1頁(yè)
基礎(chǔ)第02天用戶(hù)權(quán)限、vi操作linux服務(wù)器搭建_第2頁(yè)
基礎(chǔ)第02天用戶(hù)權(quán)限、vi操作linux服務(wù)器搭建_第3頁(yè)
基礎(chǔ)第02天用戶(hù)權(quán)限、vi操作linux服務(wù)器搭建_第4頁(yè)
基礎(chǔ)第02天用戶(hù)權(quán)限、vi操作linux服務(wù)器搭建_第5頁(yè)
已閱讀5頁(yè),還剩144頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

CC它是人和人交換信息不可缺少的工具。們必須和計(jì)算機(jī)角落。也最方便的方式——語(yǔ)言,而C語(yǔ)言就是人和計(jì)算機(jī)交流的一種語(yǔ)言。最重要的功能:說(shuō)的一方傳遞信息,聽(tīng)的一方接收說(shuō)的一方下達(dá)指令,聽(tīng)的一方遵循命令做事情語(yǔ)言是人和人交流,C語(yǔ)言是人和機(jī)器交流。只是,人可以不聽(tīng)另外一個(gè)人,語(yǔ)言有獨(dú)特的語(yǔ)則和定義,雙方必須遵循這些規(guī)則和定義才能實(shí)現(xiàn)真正交流。指令是對(duì)計(jì)算機(jī)進(jìn)行程序控制的最小單位所有的指令的集合稱(chēng)為計(jì)算機(jī)的指令系統(tǒng)程序是為完成一項(xiàng)特定任務(wù)而用某種語(yǔ)言編寫(xiě)的一組指令序計(jì)算機(jī)的大腦或者說(shuō)心臟就是CPU,它控制著整個(gè)計(jì)算機(jī)的運(yùn)作。每種CPU,都有自己的指令系統(tǒng)。這個(gè)指令系統(tǒng),就是該CPU器語(yǔ)言。機(jī)器語(yǔ)言是一組由0和1系列組成的指令碼,這些指令碼,是CPU制作廠商規(guī)要讓計(jì)算機(jī)干活,就得用機(jī)器語(yǔ)言(二級(jí)制數(shù))去命令它。這樣令,不是種計(jì)算機(jī)的機(jī)器指令編制的程序,不能在另一種計(jì)算機(jī)上執(zhí)行。代0與1。一門(mén)人類(lèi)可以比較輕松認(rèn)識(shí)的編程語(yǔ)言。情。這正如如何才能讓說(shuō)的話(huà)人明白呢?——翻譯!器,將標(biāo)識(shí)符換成0與1,知道怎么把匯編語(yǔ)言翻譯成機(jī)器語(yǔ)言。匯編語(yǔ)言翻譯成機(jī)器語(yǔ)言,難道就不能把其他更人性化的語(yǔ)言翻譯成機(jī)器語(yǔ)言?1954年,F(xiàn)ortran低層的計(jì)算機(jī)硬件。這類(lèi)語(yǔ)言,稱(chēng)為高級(jí)語(yǔ)言。言,這就是編譯程序,簡(jiǎn)稱(chēng)編譯器。數(shù)據(jù)被加工的過(guò)程?;谶@類(lèi)方法的程序設(shè)計(jì)語(yǔ)言成為面向過(guò)程的語(yǔ)言。C語(yǔ)言就是這種面向過(guò)程的程序設(shè)計(jì)語(yǔ)言。CC代碼量執(zhí)行速功能強(qiáng)編程自寫(xiě)代碼實(shí)現(xiàn)周可移植性較過(guò)于自由,經(jīng)驗(yàn)不足易出對(duì)平臺(tái)庫(kù)依賴(lài)CCC語(yǔ)言的應(yīng)用極其廣泛,從,到底層操作系統(tǒng),從多應(yīng)用到大型,均可使用C言來(lái)開(kāi)發(fā):C語(yǔ)言可以寫(xiě)程C語(yǔ)言可以專(zhuān)門(mén)針對(duì)某個(gè)寫(xiě)出功能強(qiáng)大的程序C語(yǔ)言可以寫(xiě)出大型游戲的引C語(yǔ)言可以寫(xiě)出另一個(gè)語(yǔ)C語(yǔ)言可以寫(xiě)操作系統(tǒng)和驅(qū)動(dòng)程序,并且只能用C語(yǔ)言編任何設(shè)備只要配置了微處理器,就都支持C語(yǔ)言。從微波爐到,都是C言技術(shù)來(lái)推動(dòng)的CC語(yǔ)言?xún)H有32個(gè)關(guān)鍵字,9種控制語(yǔ)句,34種運(yùn)算符,卻能完成無(wú)數(shù)的功能學(xué)習(xí)C第一個(gè)C語(yǔ)言程序 編寫(xiě)C語(yǔ)言代碼 #include#includeint{printf("oreturn}C語(yǔ)言的源代碼文件是一個(gè)普通的文本文件,但擴(kuò)展名必須是.cgccC編輯器(如vi、記事本)是指我用它來(lái)寫(xiě)程序的(編輯代碼),而我們寫(xiě)的代碼編譯器是將易于編寫(xiě)、閱讀和的高級(jí)計(jì)算機(jī)語(yǔ)言翻譯為計(jì)算機(jī)能解讀、運(yùn)gcc(GNUCompilerCollection,GNU編譯器套件),是由GNU開(kāi)發(fā)的編程語(yǔ)言編譯器。gcc原本作為GNU操作系統(tǒng)的編譯器,現(xiàn)已被大多數(shù)類(lèi)Unix操作系統(tǒng)(如Linux、BSD、MacOSX)采納為標(biāo)準(zhǔn)的編譯器,gcc于微軟的Windows。gcc最初用于編譯C語(yǔ)言,隨著項(xiàng)目的發(fā)展gcc已經(jīng)成為了能夠編譯C、C++、Java、Ada、fortran、ObjectC、ObjectC++、Go語(yǔ)言的編譯器大。編譯命令格式gccgcc[-option1]...<filename>g++[-option1]...命令、選項(xiàng)和源文件之間使用空格一行命令中可以有零個(gè)、一個(gè)或多文件名可以包含文件的絕對(duì)路徑,也可以使用相對(duì)路生成一個(gè)默認(rèn)名,Linux平臺(tái)為a.out,Windows平臺(tái)為a.exegcc、g++編譯常用選項(xiàng)說(shuō)明選含-o--S(-c(gccwarning的意思是警告,是有問(wèn)題,但不影響編error是錯(cuò)誤,如果遇到error,那么就不能編windows命令行界面下,默認(rèn)是沒(méi)有g(shù)cc編譯器,我們需要配置一下環(huán)境。由于我們安裝了Qt,Qt是一個(gè)集成開(kāi)發(fā)環(huán)境,內(nèi)部集成gcc編譯器,配置一下環(huán)境變量即可使用gcc。進(jìn)入Qt裝拷貝gcc所在的路徑(不同安裝有所差異設(shè)置windows環(huán)境變量計(jì)算機(jī)(右擊)-屬性:如果是win7,雙擊Path后,把拷貝的路徑追加到后面,路徑之間需要英文”;”分隔:如果是win10,界面做得友好一下,新建添加路徑即測(cè)試gcc命令Linux編譯后的可執(zhí)行程序只能在Linux運(yùn)行,Windows編譯后的程序只能Windows下運(yùn)行64位的Linux編譯后的程序只能在64Linux下運(yùn)行,32Linux的程序只能在32的Linux64位的Windows后的程序只能在64Windows下運(yùn)行,32Windows編譯后的程序可以在64的Windows行。#include意思是頭文件包含,#include<stdio.h>代表包含stdio.h使用C語(yǔ)言庫(kù)函數(shù)需要提前包含庫(kù)函數(shù)對(duì)應(yīng)的頭文件,如這里使用printf()函數(shù),需要包含stdio.h頭文可以通過(guò)man3printf看printf需的頭#include<#include的區(qū)<>表示系統(tǒng)直接按系統(tǒng)指定 檢""表示系統(tǒng)先在""指定的路徑(沒(méi)寫(xiě)路徑代表當(dāng)前路徑)查找頭文件,如 stdio.h是在操作系統(tǒng)的系 下一個(gè)完整的C語(yǔ)言程序,是由一個(gè)、且只能有一個(gè)main()函數(shù)(又稱(chēng)主函main函數(shù)是C語(yǔ)言程序的,程序是從main函數(shù)開(kāi)始執(zhí)行{}叫代碼塊,一個(gè)代碼塊內(nèi)部可以有一條或者多條語(yǔ)C語(yǔ)言每句可執(zhí)行代碼都是";"分號(hào)結(jié)所有的#開(kāi)頭的行,都代表預(yù)編譯指令,預(yù)編譯指令行結(jié)尾是沒(méi)有分所有的可執(zhí)行語(yǔ)句必須是在代碼塊一些說(shuō)明和解釋?zhuān)@樣有利于代碼的閱讀/**/叫塊注塊注釋是C語(yǔ)言標(biāo)準(zhǔn)的注釋行注釋是從C++語(yǔ)言借鑒過(guò)來(lái)printf是C語(yǔ)言庫(kù)函數(shù),功能是向標(biāo)準(zhǔn)輸出設(shè)備輸出一個(gè)字printf(“oworld\n”);//\n的意思是回車(chē)換return代表函數(shù)執(zhí)行完畢,返回return代表函數(shù)的終如果main定義的時(shí)候前面是int,那么return后面就需要寫(xiě)一個(gè)整數(shù);如main義的時(shí)候前面是void,那么return面什么也不需要寫(xiě)main函數(shù)中return0程序執(zhí)行成功,return-1表程序執(zhí)行intmain()和voidmain()在C是一樣的,但C++只接受int這種定義方systemsystem函數(shù)的使用#include#includeintsystem(constchar返回值-1示例代#include<stdio.h>#include#include<stdio.h>#include<stdlib.h>int{");//system("lsLinux平臺(tái)需要頭文件#includereturn}system返回值不同系統(tǒng)結(jié)果不一樣C語(yǔ)言所有的庫(kù)函數(shù)調(diào)用,只能保證語(yǔ)法是一致的,但不能保證執(zhí)行結(jié)果是一一樣的。在學(xué)習(xí)Linux發(fā)展史時(shí),我們得知Linux的發(fā)展離不開(kāi)POSIX標(biāo)準(zhǔn),只要符合Unix和linux很多庫(kù)函數(shù)都是支持POSIX的,但Windows支持的比較差。如果將Unix代碼移植到Linux一般代價(jià)很小,如果把Windows代碼移植到Unix者Linux較麻煩。Qt圖形界面調(diào)用voidvoid{//system("calc需要頭文件:#includeWinExec("calcWinExec("calcSW_NORMAL需要頭文件:#include}void{}void{}MFC圖形界面調(diào)用voidvoid{//TODO://WinExec("calcSW_NORMAL需要頭文件:#includesystem("calc需要頭文件:#include}void{//TODO://WinExec("notepad",}CCC代碼編譯成可執(zhí)行程序經(jīng)過(guò)4步預(yù)處理除,這里并不會(huì)檢查語(yǔ)法編譯:檢查語(yǔ)法,將預(yù)處理后文件編譯生成匯編文匯編:將匯編文件生成目標(biāo)文件(二:C語(yǔ)言寫(xiě)的程序是需要依賴(lài)各種庫(kù)的,所以編譯之后還需要把庫(kù)gcc編譯過(guò)程預(yù)處預(yù)處理:gcc編譯:gcc匯編:gcc鏈接o.c-o.i-o.s-o.o-選含--S(-c(-o指定生成的輸出文件名為文件后含C預(yù)處理后的Cgcco.c-odemo(還是經(jīng)過(guò):預(yù)處理、編譯、匯編、的過(guò)程Linux平臺(tái)下,ldd(“l(fā)”為字母)可執(zhí)行程序Windows平臺(tái)下,需要相應(yīng)軟件CPU64位和32寄存器是CPU內(nèi)部最基本的單CPU對(duì)外是通過(guò)總線(xiàn)(地址、控制、數(shù)據(jù))來(lái)和外部設(shè)備交互的,總線(xiàn)的寬度8,同時(shí)CPU存器也是8那么這個(gè)CPU叫8CPU如果總線(xiàn)是32寄存器也是32那么這個(gè)CPU就是32有一種CPU的寄存器是32位的,但總線(xiàn)是16位,準(zhǔn)32所有的64CPU兼容32指令,32位要兼容16指令,所以在位的CPU上是可以識(shí)別32指64位的CPU構(gòu)架上運(yùn)行了64件操作系統(tǒng),那么這個(gè)系統(tǒng)是6464位的CPU構(gòu)架上,運(yùn)行了32軟件操作系統(tǒng),那么這個(gè)系統(tǒng)就3264位的軟件不能運(yùn)行在32位的CPU之8163264ABCD按與CPU遠(yuǎn)近來(lái)分,離得最近的是寄存器,然后緩存(CPU緩存),最后內(nèi)存CPU算時(shí),先預(yù)先把要用的數(shù)據(jù)從硬盤(pán)讀到內(nèi)存,然后再把即將要用的數(shù)據(jù)讀到寄存器。于是CPU<--->寄存器<--->內(nèi)存,這就是它們之間的信息交換度。于是就在寄存器與內(nèi)存之間設(shè)置一個(gè)緩存。的話(huà),機(jī)器里就沒(méi)有內(nèi)存的存在。由此可以看出,從遠(yuǎn)近來(lái)看:CPU〈---〉寄存存存#includeint#includeint{//定義整型變量abcinta;intb;int{mova,3 movb,4 moveax,a addeax,b movc,eax }printf("%d\n",c);//把c的值輸出return0;//成功完成}#include#includeint{////定義整型變量abcinta;intb;inta=b=c=a+printf("%d\n",c);//把c的值輸出return0;//成功完成}設(shè)置斷點(diǎn)選擇反匯編按根據(jù)匯編代碼分析程集成開(kāi)發(fā)環(huán)境(IDE,IntegratedDevelopmentEnvironment)面工具。集成了代碼編寫(xiě)功能、分析功能、編譯功能、調(diào)試功能等的開(kāi)發(fā)軟件服務(wù)套。所有具備這一特性的軟件或者軟件套(組)環(huán)境。QtQtCreator跨平QtIDE,QtCreatorQtNokia后推出的一款新的輕量級(jí)集成開(kāi)發(fā)環(huán)境(IDE)。此IDE能夠跨平臺(tái)運(yùn)行,支持的系統(tǒng)包括Linux(32位及64位)、MacOSX以及Windows。根據(jù)描述,QtCreator的設(shè)計(jì)目標(biāo)是使開(kāi)發(fā)人員能夠利用Qt這個(gè)應(yīng)用程序框架更加快速及含Ctrl+Ctrl+Alt+.h文件和對(duì)應(yīng).cpp含Ctrl+Ctrl+nextstepVisualStudioVisualStudio(簡(jiǎn)稱(chēng)VS)是微軟公司的開(kāi)發(fā)工具包系列產(chǎn)品。VS是一個(gè)基本完整的開(kāi)發(fā)工具集,它包括了整個(gè)軟件生命周期中所需要的大部分工具,如UML具、代碼管控工具、集成開(kāi)發(fā)環(huán)境(IDE)等等,所寫(xiě)的目標(biāo)代碼適用于微軟支持的所有平臺(tái)。VisualStudio目前最流行的Windows含+k,Ctrl++k,Ctrl++k,Ctrl+++Shift+nextstepVS2013的C4996由于微軟在VS2013建議再使用C傳統(tǒng)庫(kù)函數(shù)等,所以直接使用這些庫(kù)函數(shù)會(huì)提示C4996錯(cuò)誤VS建議采用帶_s的函數(shù),如scanf_s、strcpy_s,但這些并不是標(biāo)準(zhǔn)C示:#define#define_CRT_SECURE_NO_WARNINGS #pragmawarning(disable:4996) 數(shù)據(jù)類(lèi)型的作用:編譯器預(yù)算對(duì)象(變量)分配的內(nèi)存空間大小常量在程序運(yùn)行過(guò)程中,其值不能被改常量一般出現(xiàn)在表達(dá)式或賦值語(yǔ)句100,200,-3.14,0.125,-變量在程序運(yùn)行過(guò)程中,其值可以改變量在使用前必須先定義,定義變量前必須有相應(yīng)的數(shù)據(jù)類(lèi)標(biāo)識(shí)符命名規(guī)標(biāo)識(shí)符不能是關(guān)鍵標(biāo)識(shí)符只能由字母、數(shù)字、下劃線(xiàn)第一個(gè)字符必須為字母或下標(biāo)識(shí)符中字母區(qū)分大變量特變量在編譯時(shí)為其分配相應(yīng)的內(nèi)存可以通過(guò)其名字和地址相應(yīng)內(nèi)變量不需要建立空間,如:externint定義變量需要建立空間,如:int#include#includeint{//extern 空externinta=10;err,intb=//定義一個(gè)變量b,b的類(lèi)型為int,b賦值為return}從廣義的角度來(lái)講中包含著定義,即定義是的一個(gè)特例,所以并非所有的都是定義:intb它既是,同時(shí)又是定對(duì)于externb來(lái)講它只是不是定一般的情況下,把建立空間的稱(chēng)之為“定義”,而把不需要建立 #include#include<stdio.h>#defineMAX10int{int //定義了一個(gè)變量,其類(lèi)型為int,名字叫constintb10;//定義一個(gè)const常量,名為叫b,值為//b=11;err,//MAX=100;//err,aMAX;//將abc的值設(shè)置為MAX的值a=123;printf("%d\na打印變量a的值return0;}進(jìn)制也就是進(jìn)位制,是人們規(guī)定的一種進(jìn)位方法。對(duì)于任何一種進(jìn)制—X制,就表示某一位置上的數(shù)運(yùn)算時(shí)是逢X一位。進(jìn)制是逢十進(jìn)一,十六進(jìn)制是逢十六進(jìn)一,二進(jìn)制就是逢二進(jìn)一,以此類(lèi)推,x進(jìn)制就是逢x十六進(jìn)000011112223334445556667778899AB十六進(jìn)CDEF二進(jìn)制是計(jì)算技術(shù)中廣泛采用的一種數(shù)制。二進(jìn)制數(shù)據(jù)是用0和1兩個(gè)數(shù)碼來(lái)表示的數(shù)。它的基數(shù)為2,進(jìn)位規(guī)則是“逢二進(jìn)一”,借位規(guī)則是“借一當(dāng)當(dāng)前的計(jì)算機(jī)系統(tǒng)使用的基本上是二進(jìn)制系統(tǒng),數(shù)據(jù)在計(jì)算機(jī)中主要是以補(bǔ)的形式 的。術(shù)含bit(Byte(一個(gè)字節(jié)為8個(gè)二進(jìn)制,稱(chēng)為8位,計(jì)算機(jī)中的最小單位是WORD(2,16WORD,4,321bit,11Byte,1,81M(11024k,1Kb(1024bit,10241KB(1024Byte,10241Mb(1024Kb=1024*1MB(1024KB=1024*十進(jìn)制轉(zhuǎn)化二進(jìn)制的方法:用十進(jìn)制數(shù)除以2,分別取余數(shù)和商數(shù),商數(shù)為的時(shí)候,將余數(shù)倒著數(shù)就是轉(zhuǎn)化后的結(jié)果十進(jìn)制的小數(shù)轉(zhuǎn)換成二進(jìn)制:小數(shù)部分和2相乘,取整數(shù),不足1取0,每次八進(jìn)制,Octal,縮寫(xiě)OCT或O,一種以8為基數(shù)的,采用0,1,2,3,4,5,6,7八個(gè)數(shù)字,進(jìn)1。一些編程語(yǔ)言中常常以數(shù)字0開(kāi)始表明八進(jìn)制的數(shù)和二進(jìn)制數(shù)可以按位對(duì)應(yīng)(八進(jìn)制一位對(duì)應(yīng)二進(jìn)制三位)應(yīng)用在計(jì)算機(jī)語(yǔ)言中。十進(jìn)制轉(zhuǎn)化八進(jìn)制的方法用十進(jìn)制數(shù)除以8,分別取余數(shù)和商數(shù),商數(shù)為0的時(shí)候,將余數(shù)倒著數(shù)就是它由0-9,A-F組成,字母不區(qū)分大小寫(xiě)。與10進(jìn)制的對(duì)應(yīng)關(guān)系是:0-9對(duì)應(yīng)0-9,A-F應(yīng)10-15。十六進(jìn)制的數(shù)和二進(jìn)制數(shù)可以按位對(duì)應(yīng)(十六進(jìn)制一位對(duì)應(yīng)二進(jìn)制四位)此常應(yīng)用在計(jì)算機(jī)語(yǔ)言中。十進(jìn)制轉(zhuǎn)化十六進(jìn)制的方法用十進(jìn)制數(shù)除以16,分別取余數(shù)和商數(shù),商數(shù)為0的時(shí)候,將余數(shù)倒著數(shù)就是C1-900xC#include#includeint{inta=123;intb=intc=////0//printf("十進(jìn)制:%d\n",aprintf("八進(jìn)制:%o\n", //%o,為字母o,不是數(shù)printf("十六進(jìn)制:%x\nreturn}計(jì)算機(jī)內(nèi)存數(shù)值方一個(gè)數(shù)的原碼(原始的二進(jìn)制碼)有如下特點(diǎn)最做為符號(hào)位,0表示正,為1表示其它數(shù)值部分就是數(shù)值本身絕對(duì)值的二進(jìn)制負(fù)數(shù)的原碼是在其絕對(duì)值的基礎(chǔ)上,最變?yōu)橄旅鏀?shù)值以1字節(jié)的大小描十進(jìn)制原-1000-1000減誰(shuí),才能確定結(jié)果是正還是負(fù),所以原碼不便于加減運(yùn)算。對(duì)于正數(shù),反碼與原碼相對(duì)于負(fù)數(shù),符號(hào)位不變,其它部分取反(1變0,0變十進(jìn)制反-1111-1111反碼運(yùn)算也不方便,通常用來(lái)作為求補(bǔ)碼的中間過(guò)渡在計(jì)算機(jī)系統(tǒng)中,數(shù)值一律用補(bǔ)碼來(lái)補(bǔ)碼特對(duì)于正數(shù),原碼、反碼、補(bǔ)碼相對(duì)于負(fù)數(shù),其補(bǔ)碼為它的反碼加補(bǔ)碼符號(hào)位不動(dòng),其他位求反,最后整個(gè)數(shù)加1,得到原十進(jìn)制補(bǔ)-1111十進(jìn)制補(bǔ)-0000#include#includeint{inta=-printf("%x\n",////fffffff1對(duì)應(yīng)的二進(jìn)制:1111111111111111111111111111//符號(hào)位不變,其它取反:1000000000000000000000000000//上面加1:10000000000000000000000000001111 return}示例1:用8位二進(jìn)制數(shù)分別表示+0十進(jìn)制原-1000十進(jìn)制反-1111不管以原碼方式,還是以反碼方式,0也有兩種表示形式。為什么同樣一個(gè)0兩種不同的表示方法呢?但是如果以補(bǔ)碼方式,補(bǔ)碼統(tǒng)一了零的編碼十進(jìn)制補(bǔ)-100000000由于只用8位描述,最1丟棄,變?yōu)?000十進(jìn)制原9-十進(jìn)制補(bǔ)9-十進(jìn)制補(bǔ)9-最的1溢出,剩余8位二進(jìn)制表示的是3,正確在計(jì)算機(jī)系統(tǒng)中,數(shù)值一律用補(bǔ)碼來(lái),主要原因是統(tǒng)一了零的編將符號(hào)位和其它位統(tǒng)一處將減法運(yùn)算轉(zhuǎn)變?yōu)榧臃ㄟ\(yùn)兩個(gè)用補(bǔ)碼表示的數(shù)相加時(shí),如果最(符號(hào)位)有進(jìn)位,則進(jìn)位被舍sizeofsizeof不是函數(shù),所以不需要包含任何頭文件,它的功能是計(jì)算一個(gè)數(shù)據(jù)sizeof回值為size_t類(lèi)型在32操作系統(tǒng)下是unsignedint,是一個(gè)無(wú)符號(hào)的整#include#includeint{{intintbsizeof(a);//sizeofprintf("b=%d\n",sizetc=printf("cu\nc);//用無(wú)符號(hào)數(shù)的方式輸出creturn}打印格含10int%o(8int16int16int10#include#includeint{inta=123; intb=0567; intc=0xabc;//定義變量c,以16進(jìn)制方式賦值為0xabcprintf("a=%d\n",printf("8進(jìn)制:b=%o\n",b);printf("10進(jìn)制:bd\nb);printf("16進(jìn)制:c=%x\n",c);printf("16進(jìn)制:cX\nc);printf("10進(jìn)制:c=%d\n",c);unsignedintd0xffffffff定義無(wú)符號(hào)int變量d,以16printf("有符號(hào)方式打?。篸d\nd);printf("無(wú)符號(hào)方式打?。篸u\nd);return0;}#include#includeint{intprintf("請(qǐng)輸入a的值//不要加scanf("%d",printf("a%d\na打印a的值return0;}short、int、long、long數(shù)據(jù)類(lèi)占用空short(2int(4long(longlong(Windows4,Linux4(328(648注意雖然C言標(biāo)準(zhǔn)中沒(méi)有明確規(guī)定整型數(shù)據(jù)的長(zhǎng)度,但long型整數(shù)的長(zhǎng)度不能短于int類(lèi)型,short類(lèi)型整數(shù)的長(zhǎng)度不能短于int類(lèi)型。。整型常所需類(lèi)int10l,long10ll,longlong10u,unsignedint10ul,unsignedlong10ull,unsignedlonglong打印格含shortintlonglonglongunsignedshortunsignedintunsignedlongunsignedlonglong#include#includeint{shorta=10;intb=10;longc=10l;或者longlongd10ll;或者printf("sizeof(a)=%u\n",sizeof(a));printf("sizeof(b)=%u\n",sizeof(b));printf("sizeof(c)=%u\n",sizeof(c));printf("sizeof(c)=%u\n",printf("shorta=%hd\n",a);printf("intb=%d\n",b);printf("longc=%ld\n",c);printf("longlongd=%lld\n",d);unsignedshorta2=20u;unsignedintb2=20u;unsignedlongc2=20ul;unsignedlonglongd2=20ull;printf("unsignedshorta=%hu\n",a2);printf("unsignedintb=%u\n",b2);printf("unsignedlongc=%lu\n",c2);printf("unsignedlonglongd=%llu\n",d2);return}有符號(hào)數(shù)是最為符號(hào)位,0代表正數(shù),1代表負(fù)數(shù)#include#includeint{signedinta=定義有符號(hào)整型變量printf("%X\na F BA//1011111100001111111100001011return}無(wú)符號(hào)數(shù) 不是符號(hào)位,而就是數(shù)的一部分,無(wú)符號(hào)數(shù)不可能是負(fù)數(shù)#include#includeint{unsignedinta定義無(wú)符號(hào)整型變量printf("%X\nareturn}增大數(shù)的表達(dá)最大值。數(shù)據(jù)類(lèi)占用空取值范2-32768到(-215~215-4 (-231~231-4 (-231~231-unsigned20到65535(0216-unsigned40(0~232-unsigned40(0~232-字符型變量用于一個(gè)單一字符,在C語(yǔ)言中用char表示,其中每個(gè)字符變量都會(huì)占用1節(jié)。在給字符型變量賦值時(shí),需要用一對(duì)英文半角格式的單引號(hào)('')把字符括起來(lái)。對(duì)應(yīng)的ASCII編碼放到變量的單元中。char的本質(zhì)就是一個(gè)1字節(jié)大小的整型。#include#includeint{charch=printf("sizeof(ch)=%u\n",printf("ch[%%c%c\nch);//printf("ch[%%d]%d\nch打印‘a(chǎn)ASCIIcharA='A';chara='a';printf("a=%d\n",printf("A=%d\n",printf("Ac\n",'a32小寫(xiě)a轉(zhuǎn)大寫(xiě)printf("ac\n",'A32大寫(xiě)A轉(zhuǎn)小寫(xiě)chch='printf("空字符:%d\nch空字符ASCII的值為printf("Ac\n",'a小寫(xiě)a轉(zhuǎn)大寫(xiě)printf("ac\n",'A大寫(xiě)A轉(zhuǎn)小寫(xiě)return}#include#includeint{charprintf("請(qǐng)輸入ch的值//不要加scanf("%c",printf("chc\n",ch打印chreturn}ASCII對(duì)照表ASCII控制字ASCII字ASCII字ASCII字0@、1!Aa2"Bb3#Cc4$Dd5%Ee6&Ff7,Gg8(Hh9)Ii*Jj+Kk,Ll-Mm.Nn/Oo0Pp1Qq2Rr3Ss4Tt5Uu6Vv7Ww8Xx9Yy:Zz;[{</|=]}>^`?_ASCII碼大致由以下兩部分組ASCII非打印控制字符ASCII表上的數(shù)字0-31分配給了控制字符,用于ASCII打印字符:數(shù)字32-126分配給了能在鍵盤(pán)上找到的字符,當(dāng)查看或打印文檔時(shí)就會(huì)出現(xiàn)。數(shù)字127代表Del命令。轉(zhuǎn)義字含ASCII碼值(十進(jìn)制退格(BS)轉(zhuǎn)義字含ASCII碼值(十進(jìn)制換頁(yè)(FF),換行(LF)回車(chē)(CR)水平制表(HT)(TAB垂直制表代表一個(gè)單引號(hào)(撇號(hào))8,d3816h316注意:紅色字體標(biāo)注的為不可打印字符#include#includeint{printf("\refg\nr\nprintf("\befg\n");//\b為退格鍵,\n為換行printf("%d\n\123\123'為8對(duì) 進(jìn)制數(shù)printf("%d\n\x23'\x23'為16進(jìn)制轉(zhuǎn)義字符,0x23對(duì)應(yīng)10進(jìn)制數(shù)為return}當(dāng)超過(guò)一個(gè)數(shù)據(jù)類(lèi)型能夠存放最大的范圍時(shí),數(shù)值會(huì)溢出有符號(hào)位最 溢出的區(qū)別:符號(hào)位溢出會(huì)導(dǎo)致數(shù)的正負(fù)發(fā)生改變,但最的溢出會(huì)導(dǎo)致最 丟失。數(shù)據(jù)類(lèi)占用空取值范1-128127(-27~27-unsigned10到255(0~28-#include#includeint{charch=0x7f+2;//127+2printf("%d\n", 0111 ,這是負(fù)數(shù)補(bǔ)碼,其原碼為11111111,結(jié)果為-//unsignedcharch2;ch2=0xff+1;//255+1printf("%u\n",ch2); 1111 ,char只有8位的溢出,結(jié)果為00000000,十進(jìn)制為ch2=0xff+2;printf("%u\n", 1111 ,char只有8位的溢出,結(jié)果為00000001,十進(jìn)制為return}實(shí)型變量也可以稱(chēng)為浮點(diǎn)型變量,浮點(diǎn)型變量是用來(lái)小數(shù)數(shù)值的。在C語(yǔ)言中,浮點(diǎn)型變量分為兩種:?jiǎn)尉雀↑c(diǎn)數(shù)(float)、雙精度浮點(diǎn)數(shù)(double),但是double量所表示的浮點(diǎn)數(shù)比f(wàn)loat型變量更精確。數(shù)據(jù)類(lèi)占用空有效數(shù)字范47815~16由于浮點(diǎn)型變量是由有限的單元組成的,因此只能提供有限的有效數(shù)字在有效位以外的數(shù)字將被舍去,這樣可能會(huì)產(chǎn)生一些誤差。不以f結(jié)尾的常量是double型,以f結(jié)尾的常量(如3.14f)是float型#include#includeint{floata3.14f或3.14Fdoubleb=3.14;printf("a=%f\n",printf("b=%lf\n",a3.2e3f3.2*100032000,e可以寫(xiě)printf("a1=%f\n",a=100e-3f;//100*0.001=printf("a2=%f\n",a=printf("a3f\na結(jié)果為return}含externinta;constinta=定義寄存器變量,提高效率。registerCPUregisterregister字符串是內(nèi)存中一段連續(xù)的char空間,以'\0'(數(shù)字0)結(jié)字符串常量與字符常量的不每個(gè)字符串的結(jié)尾,編譯器會(huì)自動(dòng)的添加一個(gè)結(jié)束標(biāo)志位'\0',即aprintf函數(shù)和putchar函數(shù)打印格對(duì)應(yīng)數(shù)據(jù)類(lèi)含shortunsigned打印格對(duì)應(yīng)數(shù)據(jù)類(lèi)含shortunsignedunsigned8unsigned10unsigned16,xabcdef,X char(字符串以'\0‘結(jié)尾,這個(gè)'\0'即空字符void16%printf附加格式字含l(d,u,x,o-m(字含0(0mnm.n(指定nn=6#include#include<stdio.h>intmain(){inta=printf("a=%d\n",a);//格式化輸出一個(gè)字符串printf("%p\n&a);//輸出變量a在內(nèi)存中的地址編號(hào)charc=longa2=100;printf("%ld,%lx,%lo\n",a2,a2,longlonga3=printf("%lld,%llx,%llo\n",a3,a3,intabc=printf("abc='%6d'\n",printf("abc='%-6d'\n",abc);printf("abc='%06d'\n",abc);printf("abc='%-06d'\n",doubled=printf("d=\'%-10.3lf\'\n",return}scanf函數(shù)與getchar函數(shù)getchar是從標(biāo)準(zhǔn)輸入設(shè)備一個(gè)charscanf通過(guò)%轉(zhuǎn)義的方式可以得到用戶(hù)通過(guò)標(biāo)準(zhǔn)輸入設(shè)備輸入的數(shù)據(jù)#include#includeint{charch1;charch2;charch3;inta;intch1=getchar();printf("ch1=%c\n",getchar測(cè)試此處getchar()ch2=getchar();printf("\'ch2=%ctest\'\n",getchar測(cè)試此處getchar()printf("請(qǐng)輸入ch3",printf("ch3=%c\n",scanf("%d",&a);printf("a=%d\n",scanf("%d",&b);printf("b=%d\n",return}運(yùn)算符類(lèi)作sizeof術(shù)術(shù)示結(jié)+3---術(shù)示結(jié)+加10+-減10-5*乘10*/除10/2%10%1a=2;a=3;a=2;a=3;-a=2;b=--a=1;-a=2;b=a--a=1;術(shù)示結(jié)=a=2;a=2;a=0;-a=5;a-a=2;a*=2;a=4;a/=2;a=3;a%2;C語(yǔ)言的比較運(yùn)算中,“真”用數(shù)字“1”來(lái)表示,“假”用數(shù)字“0”來(lái)表術(shù)示結(jié)4==04!=1<>4<4>4<=4>=0101術(shù)術(shù)示結(jié)!非如果a!a術(shù)示結(jié)如果a!a與a&&如果ab或a||如果ab有一個(gè)為真,1--.---2--~~-*&!(類(lèi)型--3/除*乘%4+加-減56><7表達(dá)式8&9^|2=------------,-問(wèn)題。轉(zhuǎn)換的方法有兩種自動(dòng)轉(zhuǎn)換(隱式轉(zhuǎn)換):遵循一定的規(guī)則,由編譯系統(tǒng)自動(dòng)完成強(qiáng)制類(lèi)型轉(zhuǎn)換:把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成所需的數(shù)據(jù)類(lèi)型類(lèi)型轉(zhuǎn)換的原則:占用內(nèi)存字節(jié)數(shù)少(值域小)的類(lèi)型,向占用內(nèi)存字節(jié)數(shù)(值域大)的類(lèi)型轉(zhuǎn)換,以保證精度不降低#include#includeint{intnum=5;printf("s1=%d\n",num/2);printf("s2=%lf\n",num/2.0);return}需的類(lèi)型,其基本語(yǔ)法格式如下所示:#include#includeint{floatx=0;inti=0;x=i=i=//x為實(shí)型,i//printf("x=%f,i=%d\n",x,return}C語(yǔ)言支持最基本的三種程序運(yùn)行結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)順序結(jié)構(gòu):程序按順序執(zhí)行,不發(fā)生跳轉(zhuǎn)選擇結(jié)構(gòu):依據(jù)是否滿(mǎn)足條件,有選擇的執(zhí)行相應(yīng)功循環(huán)結(jié)構(gòu):依據(jù)條件是否滿(mǎn)足,循環(huán)多次執(zhí)行某段代if開(kāi)開(kāi)判斷條執(zhí)行語(yǔ)結(jié)#include#includeint{inta=1;intb=if(a>{printf("%d\n",}return}if…else語(yǔ)句 結(jié)結(jié)#include#include<stdio.h>intmain(){inta=1;intb=if(a>{printf("%d\n",}{printf("%d\n",}return}if…elseif…else語(yǔ)句開(kāi)開(kāi)判斷條件tue判斷條件判斷條件結(jié)執(zhí)行語(yǔ)句執(zhí)行語(yǔ)句執(zhí)行語(yǔ)句執(zhí)行語(yǔ)句#include#includeint{unsignedintscanf("%u",if(a<{printf("個(gè)位}elseif(a<{printf("十位}elseif(a<{printf("百位}{printf("很大}return}#include#includeint{inta=10;intb=20;intc;if(a>{c=}{c=}printf("c1=%d\n",a=b=c=(a>b?a:bprintf("c2=%d\n",return}#include#includeint{charc=switchc)//{casecase'2':printf("notOK\n");default://如果上面的條件都不滿(mǎn)足,那么執(zhí)行printf("areu}return}while語(yǔ)句開(kāi)開(kāi)循環(huán)條結(jié)執(zhí)行語(yǔ)#include#includeint{inta=20;while(a>10){scanf("%d",printf("a=%d\n",}return}do…while語(yǔ)句開(kāi)開(kāi)執(zhí)行語(yǔ)循環(huán)條結(jié)#include#includeint{inta=1;{printf("a=%d\n",}while(a<return}for#include#includeint{intintsum=for(i=0;i<=100;{sum+=}printf("sum=%d\n",sum);return0;}循環(huán)語(yǔ)句之間可以相互嵌套#include#includeint{intnum=0;inti,j,k;for(i=0;i<10;{for(j=0;j<10;{for(k=0;k<10;{{ oworld\n");}}}printf("num=%d\n",num);return0;}break、continue、break語(yǔ)句在switch條件語(yǔ)句和循環(huán)語(yǔ)句中都可以使用break當(dāng)它出現(xiàn)在switch條件語(yǔ)句中時(shí),作用是終止某個(gè)case并跳出switch結(jié)當(dāng)它出現(xiàn)在循環(huán)語(yǔ)句中,作用是跳出當(dāng)前內(nèi)循環(huán)語(yǔ)句,執(zhí)行后面的代碼當(dāng)它出現(xiàn)在嵌套循環(huán)語(yǔ)句中,跳出最近的內(nèi)循環(huán)語(yǔ)句,執(zhí)行后面的代碼#include#includeint{inti=0;while{printf("i=%d\n",if(i=={break;跳出while}}intflag=0;intm=0;intn=0;for(m=0;m<10;{for(n=0;n<10;{if(n=={flag=break;break;跳出for(n0;n10;}}if(flag=={break;跳出for(m=0;m10;}}return}continue語(yǔ)句使用continue語(yǔ)句。int{intsum=//定義變量for(inti=1;i<=100;{ifi20)//如果i是一個(gè)偶數(shù),執(zhí)行if{ }sum }printf("sum=%d\n",sum);return0;}#include#includeint{gotoEnd;//無(wú)條件跳轉(zhuǎn)到Endreturnreturn}起來(lái)——稱(chēng)為數(shù)組。同的數(shù)據(jù)類(lèi)型,同時(shí)所有的成員在內(nèi)存中的地址是連續(xù)的。數(shù)組屬于構(gòu)造數(shù)據(jù)類(lèi)一個(gè)數(shù)組可以分解為多個(gè)數(shù)組元素:這些數(shù)組元素可以是基本數(shù)據(jù)類(lèi)型或構(gòu)造類(lèi)型。intintstructStu按數(shù)組元素類(lèi)型的不同,數(shù)組可分為:數(shù)值數(shù)組、字符數(shù)組、指針數(shù)組、結(jié)構(gòu)數(shù)組等類(lèi)別。inta[10];chars[10];charinta[10];chars[10];char*p[10];通常情況下,數(shù)組元素下標(biāo)的個(gè)數(shù)也稱(chēng)為維數(shù),根據(jù)維數(shù)的不同,可將數(shù)組分為一維數(shù)組、二維數(shù)組、三維數(shù)組、數(shù)組等。通常情況下,二維及以上的數(shù)組稱(chēng)為數(shù)組。數(shù)組名字符合標(biāo)識(shí)符的書(shū)寫(xiě)規(guī)定(數(shù)字、英文字母、下數(shù)組名不能與其它變量名相同,同一作用域內(nèi)是唯一方括號(hào)[]中常量表達(dá)式表示數(shù)組元素的個(gè)03定義數(shù)組時(shí)[]內(nèi)最好是常量,使用數(shù)組時(shí)[]內(nèi)即可是常量,也可以是變#include#includeint{inta[10];//定義了一個(gè)數(shù)組,名字叫a,有10個(gè)成員,每個(gè)成員都是int//a[0]……a[9],沒(méi)有a[0]=0;a[9]=inti=for(i=0;i<10;{a[i]i;//}for(i=0;i<10;i++){printf("%d",}return}初始化為零。局部數(shù)組若不初始化,內(nèi)容為隨機(jī)值。intinta[10]1,2,3,4,5,6,7,8,9,10inta[10]1,2,3初始化前三個(gè)成員,后面所有元素都設(shè)置為0inta[10]={0};//所有的成員都設(shè)置為0inta1,2,3,4,5定義了一個(gè)數(shù)組,有5數(shù)組名是一個(gè)地址的常量,代表數(shù)組中首元素#include#includeint{inta[10]1,2,3,4,5,6,7,8,9,10printf("a=%p\n",printf("&a[0]=%p\n",intnsizeof(a);//數(shù)組占用內(nèi)存的大小,10個(gè)int類(lèi)型,10*4=intn0sizeof(a[0]);//數(shù)組第0個(gè)元素占用內(nèi)存大小,第0個(gè)元素為inti=for(i=0;i<sizeof(a)/sizeof(a[0]);{printf("%d",}return}#include#includeint{inta[]={1,-2,34,5,6,7,-8,9,10};//inti=intmax=for(i=0;i<sizeof(a)/sizeof(a[0]);{if(a[i]>{max=}}printfprintf("數(shù)組中最大值為:%d\nreturn}#include#includeint{inta[]={1,-2,34,5,6,7,-8,9,10};//inti=intj=sizeof(a)/sizeof(a[0])-1;inttmp;while(i<{tmp=a[i];a[i]=a[j];a[j]=tmp;}for(i=0;i<sizeof(a)/sizeof(a[0]);{printf("%d",}return}#include#includeint{inta[]={1,-2,34,5,6,7,-8,9,10};//inti=0;intj=intn=sizeof(a)/sizeof(a[0]);inttmp;//1//2forfor(i=0;i<n-1;{forj0jni1j++)//{if(a[j]>a[j+{tmp=a[j];a[j]=a[j+1];a[j+1]=}}}for(i=0;i<n;{printf("%d",}return}二維數(shù)組定義的一般形式是類(lèi)型說(shuō)明符類(lèi)型說(shuō)明符數(shù)組名[常量表達(dá)式1][常量表達(dá)式其中常量表達(dá)式1表示第一維下標(biāo)的長(zhǎng)度,常量表達(dá)式2表示第二維下標(biāo)的度int命名規(guī)則同一維數(shù)定義了一個(gè)三行四列的數(shù)組,數(shù)組名為a其元素類(lèi)型為整型,該數(shù)組的元素個(gè)數(shù)為3×4即:二維數(shù)組a是按行進(jìn)行存放的,先存放a[0]行,再存放a[1]行、a[2]行,并二維數(shù)組在概念上是二維的:其下標(biāo)在兩個(gè)方向上變化,對(duì)其一般需要兩個(gè)下標(biāo)。在內(nèi)存中并并存在二維數(shù)組,二維數(shù)組實(shí)際的硬件器是連續(xù)編址的,數(shù)組存放方式是一樣的。#include#includeint{//定義了一個(gè)二維數(shù)組,名字叫//由3個(gè)一維數(shù)組組成,這個(gè)一維數(shù)組是intinta[3][4];a[0][0]=a[2][3]=12;inti=0;intj=intnum=for(i=0;i<3;{for(j=0;j<4;{a[i][j]=}}for(i=0;i<3;i++){for(j=0;j<4;{printf("%d,",}}return}////分段賦 inta[3][4]={{1,2,3,4},{5,6,7,8,},{9,10,11,12intinta[3][4]{{1,2,3,4{5,6,7,8,{9,10,11,12inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12inta[3][4]={1,2,3,4};inta[3][4]={0};inta[][4]={1,2,3,4,5,6,7,8};數(shù)組名是一個(gè)地址的常量,代表數(shù)組中首元素#include#includeint{//定義了一個(gè)二維數(shù)組,名字叫//每個(gè)元素又是一個(gè)一維數(shù)組inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12//第0個(gè)一維數(shù)組的數(shù)組名為printf("a=%p\n",printf("a[0]=%p\n",//測(cè)二維數(shù)組所占內(nèi)存空間,有3個(gè)一維數(shù)組,每個(gè)一維數(shù)組的空間為//sizeof(a)=3*4*4=printf("sizeof(a)=%d\n",printf("sizeof(a[0])=%d\n",sizeof(a[0])printf("sizeof(a[0][0])=%d\n",printf("i=%d\n",sizeof(a)/printf("j=%d\n",sizeof(a[0])/printf("n=%d\n",sizeof(a)/return}#include#includeint{////行代表人 //floata[5][3]={{80,75,56},{59,65,71},{59,63,70},{85,45,90},{76,77,45}inti,low[3]={0floats=0,lesson_aver[3]={0for(i=0;i<3;{for(j=0;j<5;{s=s+if(a[j][i]<{}}lesson_aver[i]=s/5;s=0;}for(i=0;i<3;i++){printf("%.2f\n",}for(i=0;i<3;i++){ }returnreturn}數(shù)組的定義與二維數(shù)組類(lèi)似,其語(yǔ)法格式具體如intint定義了一個(gè)三維數(shù)組,數(shù)組的名字是a,數(shù)組的長(zhǎng)度為3,每個(gè)數(shù)組的元素又是一個(gè)二維數(shù)組,這個(gè)二維數(shù)組的長(zhǎng)度是4,又是一個(gè)一維數(shù)組,這個(gè)一維數(shù)組的長(zhǎng)度是5,元素類(lèi)型是int。#include#includeint{//inta[3][4][5]定義了一個(gè)三維數(shù)組,有3個(gè)二維數(shù)組inta[3][4][5]={{{1,2,3,4,5},{6,7,8,9,10},{0},{0}},{{0},{0},{0{0}},{{0},{0},{0},{0}}inti,j,for(i=0;i<3;{for(j=0;j<4;{for(k=0;k<5;{//添 元素代printf("%d,",}}}return}C語(yǔ)言中沒(méi)有字符串這種數(shù)據(jù)類(lèi)型,可以通過(guò)char的數(shù)組來(lái)替代字符串一定是一個(gè)char的數(shù)組,但char的數(shù)組未必是字符串?dāng)?shù)字0(和字符‘\0’等價(jià))結(jié)尾的char數(shù)組就是一個(gè)字符串,但如果char數(shù)組沒(méi)有以數(shù)字0結(jié)尾,那么就不是一個(gè)字符串,只是普通字符數(shù)組,所以字符串是一種特殊的char的數(shù)組。#include#includeint{charc1'c'pr'o'g'};//printf("c1s\n",c1亂碼,因?yàn)闆](méi)有’\0’charc2[]={'c','','p','r','o','g','\0'};printf("c2=%s\n",//字符串處理以‘\0’(數(shù)字0)作為結(jié)束符,后面的'h','l'l'e''o'不會(huì)輸出charc3[]={'c','','p','r','o','g','\0','h','l','l','e','o','\0'};printf("c3=%s\n",return}#include#include//CC語(yǔ)言字符串,以字符‘\0數(shù)字0intmain(){//不指定長(zhǎng)度沒(méi)有0charbuf[]={'a','b','c'printf("bufs\n //charbuf2[100]={'a','b','c'};printf("buf2=%s\n",charbuf3[1000//charbuf4[2'1'2'3數(shù)組越界charbuf5[50]={'1','a','b','0','7'};printf("buf5=%s\n",charbuf6[50]={'1','a','b',0,'7'printf("buf6=%s\n",charbuf7[50]charbuf7[50]={'1','a','b','\0','7'printf("buf7=%s\n",charbuf8[]="agjdslgjlsdjg";//\012相當(dāng)于charstr[]=printf("str==%s\n",return}由于字符串采用了'\0'標(biāo)志,字符串的輸入輸出將變得簡(jiǎn)單方便#include#includeint{charprintf("inputstring1:scanf("%sstr);//scanf(“%s”,str)默認(rèn)以空格分隔printf("output:%s\n",str);return}#include#includeint{charstr1[]="abcdef";charstr2[]="123456";chardst[100];inti=while(str1[i]!={dst[i]=str1[i];}}intj=while(str2[j]!={dst[i+j]=str2[j];}dst[ij]0;printf("dst=%s\n",dst);return0;}當(dāng)調(diào)用函數(shù)時(shí),需要關(guān)心5要素頭文件:包含指定的頭文函數(shù)名字:函數(shù)名字必須和頭文件的名字一功能:需要知道此函數(shù)能干嘛后才參數(shù):參數(shù)類(lèi)型要匹返回值:根據(jù)需要接收返回#include#includetimettime(timet返回值:當(dāng)前系統(tǒng)時(shí)間time_t相當(dāng)于long#includevoidsrand(unsignedint功能:用來(lái)設(shè)置rand()#includeint返回值#include#include<time.h>#include#include<time.h>#include<stdlib.h>int{time_ttm=time(NULL);//得到系統(tǒng)時(shí)間srand((unsignedint)tm);//隨機(jī) intr=rand();printf("r=%d\n",r);return}#include#includechar*gets(char參數(shù)返回值gets(str)與scanf(“%s”,str)gets(str)允許輸入的字符串含有空scanf(“%s”,str)不允許含有空注意:由于scanf()和gets()無(wú)法知道字符串s大小,必須遇到換行符或讀到文件結(jié)尾為止才接收輸入,因此容易導(dǎo)致字符數(shù)組越界(緩沖區(qū)溢出)的情charstr[100];charstr[100];printf("請(qǐng)輸入strprintf("str=%s\n",#include#includechar*fgets(char*s,intsize,FILE功功文件結(jié)尾或是已讀了size-1個(gè)字符為止,最后會(huì)自動(dòng)加上字符'\0'作為字符串結(jié)束。參數(shù) 字符串的長(zhǎng)度(size-1)返回值 fgets()在一個(gè)用戶(hù)通過(guò)鍵盤(pán)輸入的字符串的時(shí)候,同時(shí)把用戶(hù)輸入的回車(chē)也做為字符串的一部分。通過(guò)scanf和gets含結(jié)尾的“\n”,但通過(guò)fgets結(jié)尾多了“\n”。fgets存在緩沖區(qū)溢出的問(wèn)題。charcharprintf("請(qǐng)輸入str:");fgets(strsizeof(strstdin);printf("strs\"\n#include#includeintputs(constchar返回值#include#includeint{ o oreturn}#include#includeintintfputs(constchar*str,FILE*fputs()是puts()的文件操作版本,但fputs()不會(huì)自動(dòng)輸出一個(gè)'\n' o o oworld",#include#includesizetstrlen(constchar返回值:字符串s的長(zhǎng)度,size_t為unsignedintcharstr[]="abcdefg";intn=strlen(str);printf("n=%d\n",n);#include#includechar*strcpy(char*dest,constchar 到dest所指向的空間中,'\0'也會(huì)拷貝過(guò)參數(shù)返回值注意:如果參數(shù)dest所指的內(nèi)存空間不夠大,可能會(huì)造成緩沖溢出的錯(cuò)誤情charchardest[20]="charsrc[]="ostrcpystrcpy(dest,printf("%s\n",#include#includechar*strncpy(char*dest,constchar*src,sizet功能:把指向字符串的前個(gè)字符 參數(shù)返回值chardest[20]charsrc[]= ostrncpy(dest,src,printf("%s\n",dest[5]=printf("%s\n",#include#includechar*strcat(char*dest,constchar返回值charstr[20]=char*src= oprintf("%s\n",strcat(str,#include#includechar*strncat(char*dest,constchar*src,sizet功能:將字符串前個(gè)字符連接到dest的尾部,‘\0’參數(shù)參數(shù)返回值charcharstr[20]=char*src= oprintf("%s\n",strncat(str,src,#include#includeintstrcmp(constchar*s1,constchar功能s1s2ASCII參數(shù)返回值char*str1=" oworld";char*str2=" omike";if(strcmp(str1,str2)=={}elseif(strcmp(str1,str2)>{}{}#include#includeintstrncmp(constchar*s1,constchar*s2,sizet功能s1s2前nASCII參數(shù)參數(shù)返回值char*str1=" ochar*str1=" oworld";char*str2=" omike";if(strncmp(str1,str2,5)=={}elseif(strcmp(str1, oworld")>{}{}#include#includeintsprintf(char*_CRT_SECURE_NO_WARNINGS,constchar*format,'\0'為止。參數(shù)返回值-1chardst[100]={0};inta=10;charsrc[]=" oworld";printf("a=%d,src=%s",a,src);intlen=sprintf(dst,"a=%d,src=%s",a,printf("dst=\"%s\"\n",printf("len=%d\n",#include#includeintsscanf(constchar*str,constchar*format,參數(shù)返回值-1數(shù)據(jù),并根據(jù)參數(shù)formatcharsrc[]="a=10,b=20";inta;intsscanf(src,"a=%d,b=%d",&a,printf("a:%d,b:%d\n",a,#include#includechar*strchr(constchar*s,int返回值charcharsrc[]="ddda123abcd";char*p=strchr(src,'a');printf("p=%s\n",p);#include#includechar*strstr(constchar*haystack,constchar*needle);返回值charcharsrc[]="ddddabcd123abcd333abcd";char*p=strstr(src,"abcd");printf("p=%s\n",#include#includechar*strtok(char*str,constchar功割字符時(shí),則會(huì)將該字符改為\0字符,當(dāng)連續(xù)出現(xiàn)多個(gè)時(shí)只替換第一個(gè)為\0。參數(shù)返回值在第一次調(diào)用時(shí):strtok()必需給予參數(shù)s字符往后的調(diào)用則將參數(shù)s設(shè)置成NULL,每次調(diào)用成功則返回指向被分割出片charchara[100]adc*fvcv*ebcy*hghbdfg*casdert";char*s=strtok(a,"*");//將"*"分割的子串取出while(s!=NULL){printf("%s\n",s=strtok(NULL,}#include#includeintatoi(constchar功參數(shù)nptr返回值類(lèi)似的函數(shù)有atof():把一個(gè)小數(shù)形式的字符串轉(zhuǎn)化為一個(gè)浮點(diǎn)數(shù)atol():將一個(gè)字符串轉(zhuǎn)化為long類(lèi)charstr1[]="-10";intcharstr1[]="-10";intnum1=atoi(str1);printf("num1=%d\n",charstr2[]="0.123";doublenum2=atof(str2);printf("num2=%lf\n",C序是由函數(shù)組成的,我們寫(xiě)的代碼都是由主函數(shù)main()開(kāi)始執(zhí)行的。函數(shù)是C程序的基本模塊,是用于完成特定任務(wù)的程序代碼單元。從函數(shù)定義的角度看,函數(shù)可分為系統(tǒng)函數(shù)和用戶(hù)定義函數(shù)兩種系統(tǒng)函數(shù),即庫(kù)函數(shù)數(shù),可以直接使用它們,如我們常用的打印函數(shù)printf()。用戶(hù)定義函數(shù):用以解決用戶(hù)的專(zhuān)門(mén)需要函數(shù)的使用可以省去重復(fù)代碼的編寫(xiě),降低代碼重復(fù)intmax(inta,int{if(a>return}return}}int{//操作1//inta1=10,b1=20,c1=c1max(a1,b1調(diào)用////操作2//inta2=11,b2=21,c2=c2max(a2,b2調(diào)用//……return0;}函數(shù)可以讓程序更加模塊化,從而有利于程序的閱讀,修改和完到它們的平均值;打印出一個(gè)柱狀圖。如果我們把這些操作直接寫(xiě)在main()以讓程序更加清晰、模塊化:#include#includeint{floatreadlist(list,sort(list,average(list,bargraph(list,return}似于C序的函數(shù)。默認(rèn)情況下,公司就是一個(gè)大部一個(gè)部門(mén)的情況下),相當(dāng)于C程序的main()函數(shù)。如果公司比較小(程序比較小),因?yàn)槿蝿?wù)少而簡(jiǎn)單,一個(gè)部門(mén)即可(main()函數(shù))勝任。但是,如果這個(gè)公司很大型應(yīng)用程序務(wù)多而雜,如果只是一個(gè)部門(mén)當(dāng)于沒(méi)有部門(mén),沒(méi)有分工),我們可想而知,公司管理、運(yùn)營(yíng)起來(lái)會(huì)有多,不是說(shuō)這樣不可以運(yùn)營(yíng),只是這樣不完美而已,如果根據(jù)公司要求分成一個(gè)個(gè)部能封裝一個(gè)一個(gè)函數(shù)招聘由行政部門(mén)負(fù)責(zé),研發(fā)由技術(shù)部門(mén)負(fù)責(zé)等,這樣就可以分工明確,結(jié)構(gòu)清晰,方便管理,之間還可以相互協(xié)調(diào)。函數(shù)定義的一般形式{執(zhí)行語(yǔ)句部分}理論上是可以隨意起名字,最好起的名字見(jiàn)名知意,應(yīng)該讓用戶(hù)看到這個(gè)函數(shù)名字就知道這個(gè)函數(shù)的功能。注意,函數(shù)名的后面有個(gè)圓換號(hào)(),代表這個(gè)為函數(shù),不是普通的變量名。在定義函數(shù)時(shí)指定的形參,在未出現(xiàn)函數(shù)調(diào)用時(shí),它們并不占內(nèi)存中的單元,因此稱(chēng)它們是形式參數(shù)或虛擬參數(shù),簡(jiǎn)稱(chēng)形參,表示它們并voidvoidmax(inta10,intb20)error,{}}在定義函數(shù)時(shí)指定的形參,必須是,類(lèi)型+變量的形式//1://1:right,類(lèi)型+voidmax(inta,int{}//2:error,voidmax(int,{}//3:error,inta,intb;voidmax(a,b){}在定義函數(shù)時(shí)指定的形參,可有可無(wú),根據(jù)函數(shù)的需要來(lái)設(shè)計(jì),如果沒(méi)有形參,圓括號(hào)內(nèi)容為空,或?qū)懸粋€(gè)void關(guān)鍵字:void{}void{}花括號(hào){}里的內(nèi)容即為函數(shù)體的內(nèi)容,這里為函數(shù)功能實(shí)現(xiàn)的過(guò)程,這和以前的寫(xiě)代碼沒(méi)太大區(qū)別,以前我們把代碼寫(xiě)在main()函數(shù)里,現(xiàn)在函數(shù)的返回值是通過(guò)函數(shù)中的return語(yǔ)句獲得的,return后面的值也可盡量保證return語(yǔ)句中表達(dá)式的值和函數(shù)返回類(lèi)型是同一類(lèi)intintmax函數(shù)的返回值為int{inta=returnreturna返回值a為int類(lèi)型,函數(shù)返回類(lèi)型也是int}如果函數(shù)返回的類(lèi)型和return語(yǔ)句中表達(dá)式的值不一致,則以函數(shù)返回類(lèi)型為準(zhǔn),即函數(shù)返回類(lèi)型決定返回值的類(lèi)型。對(duì)數(shù)值型數(shù)據(jù),可以自動(dòng)進(jìn)行類(lèi)型轉(zhuǎn)換。doubledoublemax函數(shù)的返回值為double{inta=returna返回值a為int類(lèi)型,它會(huì)轉(zhuǎn)為double}注意:如果函數(shù)返回的類(lèi)型和return句中表達(dá)式的值不一致,而它又return語(yǔ)句的另一個(gè)作用為中return所在的執(zhí)行函數(shù),類(lèi)似于break中斷循環(huán)、switch語(yǔ)句一樣intint{return1;//執(zhí)行到,函數(shù)已經(jīng)被中斷,所以下面的return2無(wú)法被執(zhí)行到return2;//沒(méi)有執(zhí)行}如果函數(shù)帶返回值,return后面必須跟著一個(gè)值,如果函數(shù)沒(méi)有返回值,函數(shù)名字的前面必須寫(xiě)一個(gè)void鍵字,這時(shí)候,我們寫(xiě)代碼時(shí)也可以通過(guò)return中斷函數(shù)(也可以不用),只是這時(shí),return后面不帶內(nèi)容(分號(hào)“;”除外)。voidvoidmax最好要有void{return;}定義函數(shù)后,我們需要調(diào)用此函數(shù)才能執(zhí)行到這個(gè)函數(shù)里的代碼段。這和main()函數(shù)不一樣,main()為編譯器設(shè)定好自動(dòng)調(diào)用的主函數(shù),無(wú)需人為調(diào)用,我們都是在main()函數(shù)里調(diào)用別的函數(shù),一個(gè)C程序里有且只有一個(gè)main()函數(shù)。#include#includevoid{{printf("thisisfor}int{ print_testreturn}進(jìn)入main()函調(diào)用print_test()函它會(huì)在main()函數(shù)的前尋找有沒(méi)有一個(gè)名字叫“print_test”的如果找到,接著檢查函數(shù)的參數(shù),這里調(diào)用函數(shù)時(shí)沒(méi)有傳參,函數(shù)定義也沒(méi)有形參,參數(shù)類(lèi)型匹配;開(kāi)始執(zhí)行print_test()函數(shù),這時(shí)候,main()函數(shù)里面的執(zhí)行會(huì)阻塞在print_test()這一行代碼,等待print_test()函數(shù)print_test()函數(shù)執(zhí)行完(這里打印一句話(huà)),main()才會(huì)繼續(xù)往下執(zhí)行,執(zhí)行到return0,程序執(zhí)行完畢。形參出現(xiàn)在函數(shù)定義中,在整個(gè)函數(shù)體內(nèi)都可以使用,離開(kāi)該函數(shù)則不能使用。實(shí)參出現(xiàn)在主調(diào)函數(shù)中,進(jìn)入被調(diào)函數(shù)后,實(shí)參也不能使用實(shí)參變量對(duì)形參變量的數(shù)據(jù)傳遞是“值傳遞”,即單向傳遞,只由實(shí)參傳給形參,而不能由形參傳回來(lái)給實(shí)參。在調(diào)用函數(shù)時(shí),編譯系統(tǒng)臨時(shí)給形參分配單元。調(diào)用結(jié)束后,形參單元被釋放。實(shí)參單元與形參單元是不同的單元。調(diào)用結(jié)束后,形參單元被釋放,函數(shù)調(diào)用結(jié)束返回主調(diào)函數(shù)后則不能再使用該形參變量。實(shí)參單元仍保留并維持原值。因此,在執(zhí)行一個(gè)被調(diào)用函數(shù)時(shí),形參的值如果發(fā)生改變,并不會(huì)改變主調(diào)函數(shù)中實(shí)參的值。如果是調(diào)用無(wú)參函數(shù),則不能加上“實(shí)參”,但括號(hào)不能省void{}int{test();right,圓括號(hào)()test(250error,return}如果實(shí)參表列包含多個(gè)實(shí)參,則各參數(shù)間用逗號(hào)隔voidtest(inta,int{}int{intp=10,q=test(p, return}實(shí)參與形參的個(gè)數(shù)應(yīng)相等,類(lèi)型應(yīng)匹配(相同或賦值兼容)。實(shí)參與形參按順序?qū)?yīng),一對(duì)一地傳遞數(shù)據(jù)。實(shí)參可以是常量、變量或表達(dá)式,無(wú)論實(shí)參是何種類(lèi)型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須具有確定的值,以便把這些值傳送給形參。所以,這里的變量是在圓括號(hào)()外面定義好、賦好值的變量。voidtest(inta,int{}int{intp=10,q=20;test(p,q); //righttest(11,30-10);//righttest(intaintberrorreturn}如果函數(shù)定義沒(méi)有返回值,函數(shù)調(diào)用時(shí)不能寫(xiě)void關(guān)鍵字,調(diào)用函數(shù)void{}int{test();//voidtest();//error,void關(guān)鍵字只能出現(xiàn)在定義,不可能出現(xiàn)在調(diào)用的地方inta=test(); //error,函數(shù)定義根本就沒(méi)有返回值return}如果函數(shù)定義有返回值,這個(gè)返回值我們根據(jù)用戶(hù)需要可用可不用,但是,假如我們需要使用這個(gè)函數(shù)返回值,我們需要定義一個(gè)匹配類(lèi)型的變量來(lái)接收。函數(shù)的定義返回值為intint{}intint{intatestright,a為int類(lèi)型intb;b= rightchar*ptest雖然調(diào)用成功沒(méi)有意義p為char*,函數(shù)返回值為int,errorint只是類(lèi)型,沒(méi)有定義變量int=test();errorint只是類(lèi)型,沒(méi)有定義變量inttest();return}如果使用用戶(hù)自己定義的函數(shù),而該函數(shù)與調(diào)用它的函數(shù)(即主調(diào)函數(shù))不在對(duì)被調(diào)用的函數(shù)作。所謂函數(shù),就是在函數(shù)尚在未定義的情況下,事先將該函數(shù)的有關(guān)信息注意:一個(gè)函數(shù)只能被定義一次,但可以多次#include#includeintmax(intx,intyintmax(int,int);//式int{inta=10,b=25,nummax=0;num_max=max(a,bprintf("num_max=%d\n",num_max);return0;}//intintmax(intx,int{returnx>y?x:}函數(shù)定義和的區(qū)別1)型、函數(shù)體等,它是一個(gè)完整的、獨(dú)立的函數(shù)單位。2)的作用則是把函數(shù)的名字、函數(shù)類(lèi)型以及形參的個(gè)數(shù)、類(lèi)型和順序(注意,不包括函數(shù)體)通知編譯系統(tǒng),以便在對(duì)包含函數(shù)調(diào)用的語(yǔ)句進(jìn)行編譯時(shí),據(jù)此對(duì)其進(jìn)行對(duì)照檢查(是否一致)。mainexitmain函數(shù)中調(diào)用exitreturn結(jié)果是一樣的,但在子函數(shù)中調(diào)用只是代表子函數(shù)終止了,在子函數(shù)中調(diào)用exit,那么程序終止#include<stdio.h>#include#include<stdio.h>#include<stdlib.h>void{}int{whilereturn}把函數(shù)放在頭文件xxx.h中,在主函數(shù)中包含相應(yīng)頭文在頭文件對(duì)應(yīng)的xxx.c中實(shí)現(xiàn)xxx.h的函當(dāng)一個(gè)項(xiàng)目比較大時(shí),往往都是分文件,這時(shí)候有可能不把同一個(gè)頭文include多次,或者頭文件嵌套包a.h包含b.h#include#includeb.h#include#includemain.c使用其中頭文件#include#includeint{return}編譯上面的例子,會(huì)出現(xiàn)如下錯(cuò)誤為了避免同一個(gè)文件被include多次,C/C++中有兩種方式,一種是方式,一種是pragmaonce式方法一#ifndef#ifndefSOMEFILE_H #define 方法二#pragma#pragma內(nèi)存含器:計(jì)算機(jī)的組成中,用來(lái)程序和數(shù)據(jù),輔助CPU進(jìn)行運(yùn)算處理內(nèi)存:內(nèi)部存貯器,暫存程序/數(shù)據(jù)——掉電丟失SRAM、DRAM、DDR、外存:外部器,長(zhǎng)時(shí)間保存程序/數(shù)據(jù)—掉電不丟ROM、ERRROM、(NAND、N

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論