基礎第02天用戶權限、vi操作linux服務器搭建_第1頁
基礎第02天用戶權限、vi操作linux服務器搭建_第2頁
基礎第02天用戶權限、vi操作linux服務器搭建_第3頁
基礎第02天用戶權限、vi操作linux服務器搭建_第4頁
基礎第02天用戶權限、vi操作linux服務器搭建_第5頁
免費預覽已結束,剩余144頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論