國家計算機等級考試2級C語言C語言部分知識_第1頁
國家計算機等級考試2級C語言C語言部分知識_第2頁
國家計算機等級考試2級C語言C語言部分知識_第3頁
國家計算機等級考試2級C語言C語言部分知識_第4頁
已閱讀5頁,還剩199頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第一章C語言設(shè)計的初步知識第一節(jié)C語言基本常識及標識符基本概念C語言是用接近人們習慣的自然語言和數(shù)學(xué)語言作為語言的表達形式。main是主函數(shù)名,C語言規(guī)定必須用main作為主函數(shù)名。main后的一對圓括號中可以是空的,但這一對圓括號不能省略。一個C程序可以包含任意多個不同名的函數(shù),但必須有一個而且只能有一個主函數(shù)。一個C程序總是從主函數(shù)開始執(zhí)行。函數(shù)體用“{”開始,用“}”結(jié)束。語句的數(shù)量不限。定義語句用分號“;”結(jié)束。C程序中的每一條執(zhí)行語句都必須用“;”結(jié)束,分號是C語句的一部分,不是語句之間的分隔符。在程序中可以對程序進行注釋,注釋部分必須用符號“/*”和“*/”括起來「/*”和“*/”必須成對地出現(xiàn),“/”和“*”之間不可以有空格。注釋可以用西文,也可以用中文。注釋可以出現(xiàn)在程序中任意合適的地方。注釋部分對程序的運行不起作用。C語言源程序經(jīng)過C語言編譯程序編譯之后生成一個后綴為.OBJ目標文件。最后還要由稱為“連接程序”的軟件,把此.OBJ文件與C語言提供的各種庫函數(shù)連接起來生成一個后綴為.EXE的可執(zhí)行文件。X文件 .obj文件 .exe文件標識符1、標識符組成1)標識符可用作變量名、符號名、函數(shù)名、數(shù)組名、文件名。2)合法的標識符由字母、數(shù)字和下劃線組成,并且第一個字符必須為字母或下劃線。3)在標識符中的大寫字母和小寫字母被認為是兩個不同的字符。4)對于標識符的長度一般取前8個字符有效,如果長于8個字符,多余的字符將不被識別。2、標識符分類1)關(guān)鍵字:C語言規(guī)定了一批標識符,它們在程序中都代表著固定的含義,不能另作它用(如main、int),共32個(注意:全部是小寫),見下表:autobreakcasecharconst continuedefaultdodoubleelseenumextern floatforgotoifintlongmain registerreturnshort signedsizeofstaticstruct switch typedefunion unsignedvoidwhile2)預(yù)定義標識符:這些標識符也都有特定的含義,如C語言提供的庫函數(shù)(如printf、scanf)和預(yù)編譯處理命令(如define)等。C語言語法允許把這類標識符另作它用,但這將使這些標識符失去系統(tǒng)規(guī)定的原意,因此,建議用戶不將此類標識符另作它用。3)用戶標識符:用戶標識符一般用來給變量、函數(shù)、數(shù)組或文件命名。如果用戶標識符與關(guān)鍵字相同,程序在編譯時將給出出錯信息;如果與預(yù)定義標識符相同,系統(tǒng)并不報錯,只是該預(yù)定義標識符將失去原定含義。算法算法應(yīng)當具有以下五個特性:1)有窮性。一個算法應(yīng)包含有限個操作步驟。2)確定性。算法中每一條指令必須有確切的含義。3)可行性。算法中指定的操作,都可以通過己經(jīng)實現(xiàn)的基本運算執(zhí)行有限次后實現(xiàn)。4)有零個或多個輸入。在計算機上實現(xiàn)的算法,是用來處理數(shù)據(jù)對?象的,在大多數(shù)情況下這些數(shù)據(jù)對象需耍通過輸入來得到。5)有一個或多個輸出。算法的目的是為了求“解”,這些“解”只有通過輸出才能得到。四、練習I、選擇題:.下列關(guān)于C語言用戶標識符的敘述中正確的是()(034-15題)A)用戶標識符中可以出現(xiàn)下劃線和中劃線(減號)B)用戶標識符中不可以出現(xiàn)中劃線,但可以出現(xiàn)下劃線C)用戶標識符中可以出現(xiàn)下劃線,但不可以放在用戶標識符的開頭D)用戶標識符中可以出現(xiàn)下劃線和數(shù)字,它們都可以放在用戶標識符的開頭.以下不能定義為用戶標識符的是()(03年9月第13題)A)scanf B)Void C)_3com_ D)int.下列選項中,不能用作標識符的是()(04-914題)A)_1234_ B)_l_2 C)int_2_ D)2_int_.以下選項中合法的用戶標識符是()(02年9月第13題)A)long B)_2Test C)3Dmax D)A.dat.以下不能定義為用戶標識符的是(05-4-14題)A)Main B)_0 C)_int D)sizeof.以下4組用戶定義標識符中,全部合法的一組是()(04年4月第14題)A)_main B)If C)txt D)intenclude -max REAL k_2sin turbo 3C0M _001.以下敘述正確的是()(02-4-22題)A)可以把define和if定義為用戶標識符B)可以把define定義為用戶標識符,但不能把if定義為用戶標識符C)可以把if定義為用戶標識符,但不能把define定義為用戶標識符D)define和if都不能定義為用戶標識符.以下敘述中正確的是()(03-4-11題)C語言比其它語言高級C語言可以不用編譯就能被計算機識別執(zhí)行C語言以接近英語國家的自然語言和數(shù)學(xué)語言作為語言的表達形式C語言出現(xiàn)得最晚,具有其它語言的一切優(yōu)點.以下敘述中正確的是()(04412題)C語言的源程序不必通過編譯就可以直接運行C語言中的每條可執(zhí)行語句最終都將被轉(zhuǎn)換成二進制的機器指令C源程序經(jīng)編譯形成的二進制代碼可以直接運行C語言中的函數(shù)不可以單獨進行編譯.用C語言編寫的代碼程序()(04-9-11題)A)可立即執(zhí)行 B)是一個源程序C)經(jīng)過編譯即可執(zhí)行 D)經(jīng)過編譯解釋才能執(zhí)行.算法具有五個特性,以下選項中不屬于算法特性的是()A)有窮性B)簡潔性 C)可行性 D)確定性.一個算法應(yīng)該具有“確定性”等5個特性,下面對另外4個特性的描述中錯誤的是()A)有零個或多個輸入 B)有窮性(04-4-11題)C)有零個或多個輸出 D)可行性.以下敘述中正確的是(05-4-13題)A)用C程序?qū)崿F(xiàn)的算法必須要有輸入和輸出操作B)用C程序?qū)崿F(xiàn)的算法可以沒有輸出但必須要有輸入C)用C程序?qū)崿F(xiàn)的算法可以沒有輸入但必須要有輸出D)用C程序?qū)崿F(xiàn)的算法可以既沒有輸入也沒有輸出第二節(jié)常量、變量及數(shù)據(jù)類型一、常量在程序運行過程中,其值不能被改變的量,稱為常量。在C語言中,常量分為整型常量,實型常量,字符常量和字符串常量。整型常量和實型常量也稱數(shù)值型常量,它們有正負的區(qū)分?;菊统A恐挥脭?shù)字表示,必須不帶小數(shù)點:如:12、-1、0等。實型常量通常用帶小數(shù)點的數(shù)表示,如314159、-2.71828、0.0等?!瓵T'd'則是字符型常量。1、整形常量在C語言中,整型常量可以用十進制、八進制和十六進制形式來表示。1)十進制基本常量用一串連續(xù)的數(shù)字來表示。2)八進制數(shù)用數(shù)字0開頭(注意:不是字母。)。因此,在C程序中不能在一個十進制整數(shù)前面加前導(dǎo)零?!咀⒁狻堪诉M制數(shù)只能用合法的八進制數(shù)字表示,不能寫成018,因為數(shù)字8不是八進制數(shù)字。3)十六進制數(shù)用數(shù)字0和字母x(或大寫字母X)開頭?!咀⒁狻渴M制數(shù)只能用合法的十六進制數(shù)字表示,字母a、b、c、d、e、f,既可用大寫也可用小寫。2、實型常量在C語言中可以用兩種形式表示一個實型常量。1)小數(shù)形式即數(shù)學(xué)中常用的實數(shù)形式,由數(shù)字和小數(shù)點組成(注意:必須要有小數(shù)點),如0.123、.123、123.等都是合法的實型常量。2)指數(shù)形式在數(shù)學(xué)中,一個數(shù)可以用事的形式來表示,如2.3026可以表示為0.23026X101、2.3026X100、23.026X10-1等形式。在C語言中,則以“e”或“E”后跟一個整數(shù)來表示以10為底的靠數(shù)。2.3026可以表示為0.23026E1、23026e0、23.026e-l.【注意】?字母e(或E)之前必須要有數(shù)字?e或E后面的指數(shù)必須為整數(shù)。?在字母e(或E)的前后以及數(shù)字之間不得插入空格。3、字符常量1)基本表示方式C語言中,一個字符常量代表ASCII字符集中的一個字符,在程序中用單引號把一個字符括起來作為字符常量,如‘a(chǎn)','4'等?!咀⒁狻? 單引號中的大寫字母和小寫字母代表不同的字符常量。? 單引號中的空格符‘口’(此處用口來代表一個空格)也是一個字符常量。但不能寫成(兩個連續(xù)的單引號)。? 字符常量只能包含一個字符。因此‘a(chǎn)bc'是非法的。? 字符常量只能用單引號括起來,不能用雙引號括起來。字符常量在內(nèi)存中占一個字節(jié),存放的是字符的ASCII代碼值。C語言規(guī)定,所有字符常量都作為整型量來處理,在計算機內(nèi)部,字符對應(yīng)的整數(shù)值就是ASCII碼。2)轉(zhuǎn)義字符常量轉(zhuǎn)義字符總是以一個反斜線開頭后跟一個特定的字符,用來代表某一個特定的ASCII字符,這些字符常量也必須括在一對單引號內(nèi)。下表列出了C語言中的轉(zhuǎn)義字符?!咀⒁狻? 轉(zhuǎn)義字符常量,如'\n' '\14r只代表一個字符。?反斜線后的八進制數(shù)可以不用0開頭。如:代表的就是字符常量'A',、141'代表字符常量也就是說在一對單引號內(nèi),可以用反斜線后跟一個八進制數(shù)來表示一個ASCII字符。? 反斜線后的十六進制數(shù)只可由小寫字母x開頭,不允許用大寫字母X,也不能用Ox開頭。如:'\x41'代表字符常量‘A','\x6cT(也可寫成‘\x6D')代表字符常量'm'。在一對單引號內(nèi)也可以用反斜線后跟一個十六進制數(shù)來表示一個ASCII字符。表1-2-1字符形式功能字符形式功能\n回車換行\(zhòng)"雙引號\t橫向跳若干格(代表“TAB”鍵)\ddd一至三位八進制數(shù)代表的一個ASCII字符\v豎向跳格\b退格符(代表"backspace”鍵)\xhh一至二位十六進制數(shù)代表的一個ASCII字符\\反斜杠字符“\”\'單引號(撇號)字符\0空值4、字符串常量字符串常量是由雙引號括起來的一串字符。在C語言中,系統(tǒng)在每個字符串的最后自動加入一個字符-'\0'作為字符串的結(jié)束標志?!咀⒁狻孔址A亢妥址A渴怯袇^(qū)別的,例如:是字符常量,在內(nèi)存中占一個字節(jié);而“ABC\n"、“Z”是字符串常量,前者占五個字節(jié)、后者占兩個字節(jié)的存儲空間,其中一個字節(jié)用來存放‘\0'。兩個連續(xù)的雙引號:""也是一個字符串常量,稱作“空串”。但要占一個字節(jié)的存儲空間來存放‘\0'。5、符號常量可以用一個符號名來代表一個常量,但是這個符號名必須在程序中進行特別的“指定例1.2.1計算圓面積。#includez/stdio.hw#definePI3.14159 /?定義符號名PI為3.14159*/main(){floati;s;r=5.0;s=PI*r*r;printf("s=%f\n”,s):}程序運行結(jié)果:5=78.539749程序中用#define命令行(注意:不是語句,后面沒有分號)定義PI代表一串字符3.14159,在對程序進行編譯時,凡本程序中出現(xiàn)PI的地方,編譯程序均用3.14159這一串字符來替換,本程序中,可以把PI視為3.14159的替身。這種符號名通常采用大寫字母。用define進行定義時,必須用#號作為一行的開頭,在#define命令行的最后不得加分號結(jié)束。把#define命令行中定義的符號名稱為符號常量。二、變量其值可以改變的量稱為變量?!咀⒁狻? 程序中所用到的每一個變量都應(yīng)該有一個名字作為標識,屬于用戶自定義標識符。? 變量名的命名規(guī)則應(yīng)遵守標識符命名規(guī)則。? 程序中所要用到的變量應(yīng)該先定義后使用,否則編譯時報錯。象常量一樣,變量也有類型的區(qū)分,如整型變量、實型變量、字符型變量等。C語言在定義變量的同時說明該變量的類型,系統(tǒng)在編譯時就能根據(jù)定義及其類型為它分配相應(yīng)數(shù)量的存儲空間。1、整型變量1)整型數(shù)據(jù)的分類整型常量和整型變量可以分為基本型(int)、短整型(shortint)、長整型(longint)和無符號型(unsigned)四種,其所占用的字節(jié)數(shù)和數(shù)值范圍如表1-2-2所示。表中方括號內(nèi)的單詞可寫也可不寫,各單詞的先后次序無關(guān)緊要。單詞signed用來說明“有符號”,不寫signed也隱含為有符號。表1-2-2類型名稱占用字節(jié)數(shù)數(shù)值范圍[signed]int2 -32768—32767[signed]short[int]2 -32768^32767[signed]long[int]4 -2147483648?2147483647unsigned[int]2 0-65535unsignedshort[int]2 0-65535unsignedlong[int]4 0^4294967295若要表示一個長整型常量,則應(yīng)該在一個整型常量后面加一個字母后綴I或L,這些常量在內(nèi)存中占四個字節(jié)?!咀⒁狻恳粋€足夠大的數(shù),如465356,雖然其面值是在長整型數(shù)的范圍內(nèi),但由于數(shù)字后面未加后綴字母L,因此并不能代表一個長整型數(shù)。無論是短整型還是長整型數(shù),都被識別為有符號整數(shù),無符號整數(shù)在數(shù)字的末尾應(yīng)該加上字母后綴u或U,若是長整型無符號整數(shù)常量,則應(yīng)該加后綴lu或LUo注意:無符號常量不能表示成小于0的負數(shù),例如:-200U是不合法的。2)整型變量的定義整型變量在使用前必須定義,其定義格式如下:inta; /*定義一個基本型整型變量a*/longintb;/*定義一個基本型整型變量b*/【注意】? C語言規(guī)定,可以在定義變量的同時給變量賦初值稱為變量初始化。如:inti=l,j=0,k=2;?一個定義語句必須以一個“;”號結(jié)束。在一個定義語句中也可以同時定義多個變量,

變量之間用逗號隔開。2、實型變量C語言中實型變量分為單精度型和雙精度型兩類,分別用類型名float和double進行定義。計算機系統(tǒng)為float類型的變量分配4個字節(jié)的存儲單元,為double類型的變量分配8個字節(jié)的存儲單元。【注意】? 實型的變量只能存放實型數(shù),不能用整型變量存放一個實數(shù),也不能用實型變量存放一個整數(shù)。?在程序中一個實數(shù)可以用小數(shù)形式表示,也可以用指數(shù)形式表示。但在內(nèi)存中,實數(shù)一律是以指數(shù)形式存放的。?在計算機內(nèi)存中可以精確地存放一個整數(shù),但整型數(shù)值的存放范圍較?。皇褂脤嵭蛿?shù)的范圍大,但往往存在誤差。? 可以給實型變量賦初值,如:floata=1.5,b=0.0;3、字符變量C語言中,字符變量用關(guān)鍵字char進行定義;在定義的同時可以賦初值。字符變量在內(nèi)存中占一個字節(jié),字符變量可以存放ASCII字符集中的任何字符。所以字符變量可以作為整型變量來處理,可以參與對整型變量所允許的任何運算。例如:charcl,c2,c3;intk=5;cl=T;cl++;c2='A';c3=(c2+32+k)%25;三、練習I.選擇題:1.C語言中最簡單的數(shù)據(jù)類型包括()(97-4-21題)A)整型、實型、邏輯型 B)整型、實型、字符型C)整型、字符型、邏輯型 D)整型、實型、邏輯型、字符型2.以下選項中不屬于C語言類型的是()(02年4月第19題)A)signedshortint B)unsignedlongintC)unsignedint D)longshortC語言提供的合法的數(shù)據(jù)類型關(guān)鍵字是()(97-9-21題、98-4-21題)A)Double B)short C)integerD)CharC語言提供的合法的數(shù)據(jù)類型關(guān)鍵字是()(01年4月第18題)5.在C語言中,合法的長整型常數(shù)是()(97-9-22題、01-9-16題)A)swicthB)charC)CaseD)defaultA)swicthB)charC)CaseD)defaultA)0L B)4962710 C)0.054838743D)216D.在C語言中,不合法的整型常數(shù)是()(99-9-17題)A)32768 B)0 C)037 D)OxAF.以下選項中可作為C語言合法常量的是(05-4-12題)A)-80. B)-080 C)-8el.O D)-80.0e.以下選項中可作為C語言合法整數(shù)的是()(03912題)A)10110B B)0386 C)OXffa D)x2a2①A)5E2.0B)E-3C).2E0D)1.3E②A)1.2E0.5B)3.14159EC).5E-3D)E1510.以下選項中,不能作為合法常量的是(05-4-15題)A)1.234e04B)1.234e0.4C)1.234e+4D)1.234e09.在C語言中,合法的實型常數(shù)是()()(02-9-12題、04-4-1311.字符(char)型數(shù)據(jù)在微機內(nèi)存中的存儲形式是()(95-9-35題)A)反碼B)補碼A)反碼B)補碼C)EBCDIC碼D)ASCII碼12.設(shè)有語句chara=''72';則變量a()(94-4-23題、00-9-29題)A)包含1A)包含1個字符B)包含2個字符C)包含3個字符D)說明不合法13.已定義c為字符型變量,則下列語句中正確的是()(03-9-31題)c='97';c="97”c='97';c="97”;C)c=97;D)c="a"14.在14.在C語言中,合法的字符常量是()()(97-9-24題、01-9-18題、98422題)①A)(\f②A),\084,B)"A"B)'\x43'C)C)15.在C語言中,非法的字符常量是(B)'\17'16.卜一列選項中不正確的轉(zhuǎn)義字符是(E)①A)(\f②A),\084,B)"A"B)'\x43'C)C)15.在C語言中,非法的字符常量是(B)'\17'16.卜一列選項中不正確的轉(zhuǎn)義字符是(E)17.A)(W*\xaa'B)F)''t'65'ab')(01-9-34題)C)"\n")(98-9-21題)C)'074'一定義ch為字符型變量,則以下賦值語句中錯誤的是(A)ch=B)ch=62+3;C)ch=NULL:D)D)A“\0?D)'\xaa'D)'\0')(03-9-25題)D)ch='\xaa';18.A)OxFFB)1.2e0.5C)2LD)18.A)OxFFB)1.2e0.5C)2LD)'\72'以下所列的C語言常量中,錯誤的是()(01417題)19.A)字符AB)19.A)字符AB)字符aC)字符eD)非法的常量已知大寫字母A的ASCII碼值是65,小寫字母a的ASCII碼是97,則用八進制表示的字符常量是()(02-9-14題)20.下列變量定義中合法的是()(00419題)A)short_a=l-.le-l;C)longdo=0xfdalA)short_a=l-.le-l;C)longdo=0xfdal;21.16位C編譯系統(tǒng)中,若定義longa;A)a=20000+20000;B)a=4000*10;D)float2_and=l-e-3;則能給a賦40000的正確語句()(02-4-21題)C)a=30000+10000;D)a=4000L*10L;第三節(jié)運算符和表達式一、 基本的算術(shù)運算符.算術(shù)運算符組成:+、-、*、/、%加、減、乘、除、求余運算符【說明】? 這些運算符需要兩個運算對象,稱為雙目運算符。? 除求余運算符外,運算對象可以是整型,也可以是實型。?求余運算符的運算對象只能是整型。在“%”運算符左側(cè)的運算數(shù)為被除數(shù),右側(cè)的運算數(shù)為除數(shù),運算結(jié)果是兩數(shù)相除后所得的余數(shù)。當運算量為負數(shù)時,符號與被除數(shù)相同。例如17%-3的結(jié)果為2,-19%4的結(jié)果為-3。? “+”和也可用作單目運算符,運算符必須出現(xiàn)在運算量的左邊?!咀⒁狻? 雙目運算符兩邊運算數(shù)的類型必須一致才能進行操作。所得結(jié)果的類型與運算數(shù)的類型一致。例如1.0/2.0運算結(jié)果為0.5;1/2運算結(jié)果為0。? 如果雙目運算符兩邊運算數(shù)的類型不一致,如一邊是整型數(shù),一邊是實型數(shù)時,系統(tǒng)將自動把整型轉(zhuǎn)換為實型數(shù),使運算符兩邊的類型達到一致后,再進行運算。?在C語言中,所有實型數(shù)的運算均以雙精度方式進行。若是單精度數(shù),則在尾數(shù)部分補0,使之轉(zhuǎn)化為雙精度數(shù)。.運算符的優(yōu)先級、結(jié)合性和算術(shù)表達式1)算術(shù)運算符的優(yōu)先級單目 雙目()、+、-、*、/、%、+、-同級同級同級高 >低優(yōu)先級2)算術(shù)運算符和圓括號的結(jié)合性以上所列的運算符中,只有單目運算符和“+”的結(jié)合性是從右到左,其余運算符的結(jié)合性都是從左到右。3)算術(shù)表達式用算術(shù)運算符和一對圓括號將運算量連接起來的、符合C語法的表達式稱為算術(shù)表達式。運算對象可以是常量、變量和函數(shù)等。【注意】?在算術(shù)表達式中,可使用多層圓括號。運算時從內(nèi)層圓括號開始,由內(nèi)向外依次計算表達式的值。? 在算術(shù)表達式中,若包含不同優(yōu)先級的運算符,則按運算符的優(yōu)先級別由高到低進行,若表達式中運算符的級別相同,則按運算符的結(jié)合方向進行。二、 賦值運算符和賦值表達式.賦值運算符和賦值表達式在C語言中,“=”號稱為賦值運算符,由賦值運算符組成的表達式稱為賦值表達式,形式為:變量名=表達式?!咀⒁狻?賦值運算符不同于數(shù)學(xué)中“等于號”,不是等同的關(guān)系,而是進行“賦予”的操作。?賦值號的左邊必須是一個代表某一存儲單元的變量名,且只能是變量不能是常量或表達式。賦值號的右邊必須是C語言中合法的表達式。賦值運算的功能是先求出右邊表達式的值,然后把此值賦給等號左邊的變量,如a=5+4就是先計算出5+4的值為9,再將9賦給變量a。? 賦值表達式x=y的作用是,將變量y所代表的存儲單元中的內(nèi)容賦給變量x所代表的存儲單元,x中原有的數(shù)據(jù)被替換掉:賦值后,y變量中的內(nèi)容保持不變。?在C語言中,“=”號被視為一個運算符,a=19是一個表達式,而表達式應(yīng)該有一個值,C語言規(guī)定最左邊變量所得到的新值就是賦值表達式的值。? 賦值運算符的優(yōu)先級別只高于逗號運算符,且具有自右向左的結(jié)合性。.復(fù)合的賦值表達式在賦值運算符之前加上其它運算符可以構(gòu)成復(fù)合賦值運算符,其中與算術(shù)運算有關(guān)的復(fù)合運算符是:+=、-=、*=、/=、%=等。表達式n+=l的運算規(guī)則等價于n=n+l,表達式n*=m+3的運算規(guī)則等價于n=n*(m+3)?!咀⒁狻? 兩個符號之間不可以有空格? 復(fù)合賦值運算符的優(yōu)先級與賦值運算符的優(yōu)先級相同。三、 自加什+)、自減(-)運算符自加運算符“++”和自減運算符“-”的運算結(jié)果是使運算對象的值增I或減1。如i++,相當于1三+1;i-,相當于i=i-l。因此,自加或自減運算本身也是一種賦值運算?!咀⒁狻? ++、-運算符是單目運算符,運算對象可以是整型變量也可以是實型變量,不能是常量和表達式,因此,如++3、(i+j上等都是不合法的。? ++(或-)在變量后面,先取變量原值作為表達式的值,再使變量的值增1(或減1);++(或-)在變量前面,先使變量的值增1(或減1),再取變量新值作為表達式的值,具體情況見下表(設(shè)有如下定義:inta=2;)。表達式表達式值變量a的值TOC\o"1-5"\h\za++2 3++a3 3—2 1-a1 1?++和-運算符的結(jié)合方向是“自右至左”。例如有一表達式-i++,負號運算符和自加運算符優(yōu)先級相同;結(jié)合方向“自右至左”,即相當于對表達式T++)進行運算。如果需要輸出表達式-i++的值,則應(yīng)先取出i的值使用,輸出-i++的值3然后使i增值為4。逗號運算符和逗號表達式“,”是C語言提供的?種特殊運算符,用逗號將表達式連接起來的式子稱為逗號表達式。逗號表達式的一般形式為:表達式1,表達式2,…,表達式n【說明】?逗號運算符的結(jié)合性為從左到右。即,先計算表達式1,最后計算表達式no最后一個表達式的值就是此逗號表達式的值。例: 設(shè)有定義inta=3,b=4;則表達式a+b,a-b,a-的值為3?在所有運算符中,逗號運算符的優(yōu)先級別最低。關(guān)系運算.C語言中的邏輯值在C語言中,邏輯值只有兩個,“真”和“假”,其中用非零值來表示“真”,用零表示“假”。因此,對于任意一個表達式,如果值為0時,就代表一個“假”值;只要值是非零,無論是正數(shù)還是負數(shù),都代表一個“真”值。.關(guān)系運算符C語言提供了6種關(guān)系運算符:〈(小于)<=(小于或等于)>(大于)>=(大于或等于)==(等于) !=(不等于)相同【注意】?由兩個字符組成的運算符之間不可以加空格。關(guān)系運算符是雙目運算符,具有自左至右的結(jié)合性。?由關(guān)系運算符組成的表達式,稱為關(guān)系表達式。關(guān)系運算符兩邊的運算對象可以是C語言中任意合法的表達式。.關(guān)系表達式及關(guān)系表達式的值關(guān)系運算的結(jié)果得一個整數(shù)值:0或1。用零代表“假”,用非零代表“真二例如,若a=10,b=16,表達式a>=b為“假",值為0;若a=10,b=6時,表達式a>=b為“真”,值為1。六、 邏輯運算.邏輯運算符C語言提供了三種邏輯運算符:①&&邏輯“與”②||邏輯“或”③I邏輯“非”【說明】? &&和||是雙目運算符,!是單目運算符,應(yīng)該出現(xiàn)在運算對象的左邊。邏輯運算符具有自左向右的結(jié)合性.?邏輯運算符的優(yōu)先級次序是:!(邏輯非)級別最高,&&(邏輯與)次之,||(邏輯或)最低。?邏輯運算的對象可以是C語言中任意合法的表達式。.邏輯表達式和邏輯表達式的值由邏輯運算符和運算對象所組成的表達式稱為邏輯表達式。邏輯表達式的運算結(jié)果或者為1(“真”),或者為0(“假”)。由邏輯運算符組成的邏輯表達式在運算時,&&卜與)運算相當于“乘”運算,||(或)運算相當于“加”運算。以a&&b為例,其運算規(guī)律如下表:a取值b取值&&運算||運算TOC\o"1-5"\h\z0 0 0 00 10 110 0 11111“非”運算規(guī)律:對''假"取非,結(jié)果為"真"對''真"取非,結(jié)果為“假”【注意】?數(shù)學(xué)關(guān)系式0<x<10表示x的值在大于0、小于10的范圍內(nèi)。但在C語言中不能用0<x<10這樣一個關(guān)系表達式,只有采用C語言提供的邏輯表達式O<x&&x<IO才能正確表述以上關(guān)系。.“短路”現(xiàn)象1)多個表達式相“與”:表達式1&&表達式2&&表達式3…&&表達式n只要第一個表達式結(jié)果為0,其運算結(jié)果為0,后面的(n-l)個表達式不再進行運算,如:inta=l/b=2/c=3;-a&&(b+c)&&++b&&c-,因為-a的運算為0,整個表達式的值為0,下劃線部分不再進行計算,因此,變量b和c值均不發(fā)生變化2)多個表達式相“或”:表達式1||表達式2||表達式3?“||表達式n只要第一個表達式結(jié)果為1,其運算結(jié)果為1,后面的(n-l)個表達式不再進行運算,如:inta=l,b=2,c=3;a-||(b+c)||++b||c-,因為a-的值為1,整個表達式的運算結(jié)果為0,下劃線部分不再進行計算,因此,變量b和c值均不發(fā)生變化3)多個表達式相“與”相“或”混合計算,以&&開頭:表達式1&&表達式2||表達式3…&&表達式n以先“與"后“或”的順序計算,中間有多個&&和多個||連續(xù)運算的地方,按規(guī)則1)和2)進行運算4)多個表達式相“與"相“或”混合計算,以||開頭:表達式1||表達式 2&&表達式3…&&表達式n如果第一個表達式結(jié)果為1,后面全部短路,否則結(jié)合前3點進行運算。七、 條件運算符和條件表達式.條件運算符條件運算符由兩個運算符組成,它們是?:。這是C語言提供的唯一的三目運算符。.條件表達式條件表達式的形式:表達式1?表達式2:表達式3【說明】當“表達式1”的值為非零時,“表達式2”的值就是整個條件表達式的值;當“表達式1”的值為零時,“表達式3”的值作為整個條件表達式的值。例: 設(shè)有定義inta=2,b=3,c;c=a>b?7:6的值為6八、 可對字符量進行的運算? 在C程序中,字符量可參與任何整數(shù)運算。例如:'B'-*A'=66-65=1 <a'+l=97+l=98='b'? 利用算術(shù)運算很容易把大寫字母轉(zhuǎn)換成小寫字母或把小寫字母轉(zhuǎn)換成大寫字母。例如:^'+32=65+32=97='a' ^'"32=98-32=66=*B'? 可以通過算術(shù)運算把數(shù)字字符轉(zhuǎn)換為整數(shù)值或把一位整數(shù)轉(zhuǎn)換成數(shù)字字符。例如:'9'-<0'=57-48=9 *3'-<0'=51-48=39+'0'=9+48=57='9' 4+'0'=4+48=52='4'【注意】要分清諸如整數(shù)9和字符9的區(qū)別。整數(shù)9在程序中直接寫成9;字符9在程序中用’9,表示,它的值是57。?在C語言中,字符量也可以進行關(guān)系運算。如:匕‘<'b'由于在ASCII代碼表中,'a'的值97小于'b'的值98,所以關(guān)系運算的結(jié)果為“真但是,如果進行邏輯運算的話,如:'a'&&'b'由于'a'和'b'的ASCII代碼值都為非零,''與"運算的結(jié)果則為1。九、 各種運算符的優(yōu)先級和結(jié)合性運算符的優(yōu)先級和結(jié)合性見下表優(yōu)先級運算符運算符功能運算類型最高15()(1->. 圓括號、函數(shù)參數(shù)表數(shù)組元素下標指向結(jié)構(gòu)體成員結(jié)構(gòu)體成員14!++、*&(類型名)sizeof邏輯非按位取反自加1、自減1求正求負間接運算符求地址運算符強制類型轉(zhuǎn)換求所占字節(jié)數(shù)單目運算13*、/、%乘、除、整數(shù)求余雙目算術(shù)運算12+、-加、減雙目算術(shù)運算11<<、?左移、右移移位運算10<、<=、>、>=小于、小于等于、大于、大于等于關(guān)系運算9 ==、!=等于、不等關(guān)系運算8 & 按位與位運算7人按位異或位運算6 | 按位或位運算5 &&邏輯與邏輯運算4 ||邏輯或邏輯運算3 ?:條件運算三目運算2_ 1_ _ ?_一、1~、.一、一、/=、%=、&=、A=、|=、<<=、>>=賦值、運算且賦值 雙目運算最低1, 順序求值 順序運算其中,2、3、14的結(jié)合性為從右至左,其余為從左至右。十、練習I.選擇題1.C語言中,運算對象必須是整型數(shù)的運算符是( )(96-9-22、97-4-22>00-9-17)A)%B)/C)<D)!E)\F)**G)=H)%=I)<=2.假定有以下變量定義:intk=7,x=12;則能使值為3的表達式是()(99-418題)A)x%=(k%=5)B)x%=(k-k%5)C)x%=k-k%5 D)(x%=k)-(k%=5)3.設(shè)有語句:inta=3:則執(zhí)行了語句a+=a-=a*a:后,變量a的值是()(94-4-21題)A)3 B)0 C)9 D)-124.設(shè)有語句:inta=12:則執(zhí)行了語句a+=a-=a*a;后,變量a的值是()(95-9-22題)A)552 B)264 C)144 D)-2645.設(shè)有語句:intx=10:則執(zhí)行了語句x+=x-=x-x:后,變量x的值是()(98-9-25題)A)10 B)20 C)40 D)306.以下程序的輸出結(jié)果是()(02-9-20題)main(){intk=2J=2,m;m=(k+=i*=k);printf("%d,%d\n”,m,i);}A)8,6 B)8,3 C)6,4 D)7,4.下列關(guān)于單目運算符++、-的敘述中正確的是()(03-447題)A)它們的運算對象可以是任何變量和常量B)它們的運算對象可以是char型變量和int型變量,但不能是float型變量C)它們的運算對■象可以是int型變量,但不能是double型變量和float型變量D)它們的運算對象可以是char型變量、int型變量和float型變量.設(shè)有以下定義,則下面語句中錯誤的是()(04-4-16題)inta=0;doubleb=1.25;charc='A';#defined2A)a++; B)b++; C)C++; D)d++;.若有說明和語句:inta=5:a++:則表達式a++的值是()(97-9-25題)A)7 B)6 C)5 D)4.以下程序的輸出結(jié)果是(Dmain(){inti=10,j=l;printf("%d,%d\n”,i-,++j);}()(94-4-12題)A)9,2 B)10,2 C)9,1 D)10,1(2)main(){inta=12,b=12;printf("%d%d\n”,--a,++b);}()(97-4-26題)A)1010 B)1212 C)1110 D)1113(3)main(){intx=023;printf("%d\n",--x);}()(01-9-21題、03-4-25題)A)17 B)18 C)23 D)24(4)main(){intx=10,y=10:printf("%d%d\n”,x--,-y);}()(96-9-28題)A)1010 B)99 C)910 D)109(5)main(){inti=010.j=10;printf(u%d,%d\n",++i,j-);}()(99-4-21)A)11,10B)9,10 C)010,9 D)10,911.設(shè)有intx=ll;則表達式(x++*l/3)的值是()(00-4-16題)A)3 B)4 C)11 D)1212.設(shè)有語句:inta=5:則執(zhí)行了語句a*=a/=a++;后,變量a的值是()(01-4-20題、01-9-23題)A)2 B)1 C)40 D)3.有以下程序(04-9-16題)main(){intm=3,n=4,x;x=-m++;x=x+8/++n;printf("%d\n",x);}程序運行后的輸出結(jié)果是A)3 B)5 C)-l D)-2.有以下程序(04-9-17題)main(){chara='a',b;print("%c,",++a);printf("%c\n",b=a++);}程序運行后的輸出結(jié)果是A)b,b B)b,c C)a,b D)a,c.若已定義t為double類型,則表達式t=l,t+5,t++的值是()(98-4-26題)A)1 B)6.0 C)2.0 D)1.016.以下程序的輸出結(jié)果是()(96-4-24題)main(){intx=100,y=200;printf(a%dn,(x,y));}A)200 B)100C)100200 D)輸出格式符不夠,輸出不確定的值17.以下程序的輸出結(jié)果是()(97-4-25題)main(){intx=10,y=3,z;printf("%d\n",z=(x%y,x/y));}A)1 B)0 C)4 D)318.設(shè)x,y,z和k都是int型變量,則執(zhí)行表達式:x=(y=4,z=16,k=32)后,x的值為()A)4 B)16 C)32 D)52(99-4-16題)19.執(zhí)行下面程序中的輸出語句后,a的值是()(96-9-31題)main(){inta;printf("%d\n”,(a=3*5,a*4,a+5));}A)65 B)20 C)15 D)1020.以下選項中,與k=n++完全等價的表達式是()(02-9-23題)A)k=n,n=n+l B)n=n+l,k=n C)k=++n D)k+=n+l21.如果下面的變量都是int類型,則輸出結(jié)果是()(94-4-11題)main(){intsum=pad=5;pad=sum++,pad++,++pad;printf("%d\n",pad);}TOC\o"1-5"\h\zA)7 B)6 C)5 D)422.以下程序的輸出結(jié)果是()(00-9-21題)main(){inty=3,x=3,z=l;printf("%d%d\n”,(++x,y++),z+2);}A)34 B)42 C)43 D)3323.下列運算符中優(yōu)先級最高的運算符是()(98-4-42題)A)<= B)= C)% D)&&24.表達式:10!=9的值是()(97-9-23題)A)true B)非零值 C)0 D)125.為表示關(guān)系x2y》z,應(yīng)使用C語言表達式()(97-4-23題、98-9-23題)A)(x>=y)&&(y>=z)B)(x>=y)AND(y>=z)C)(x>=y>=z)D)(x>=y)&(y>=z)26.能正確表示a210或a《0的關(guān)系表達式是()(97-9-33題、00-9-22題)A)a>=10ora<=0B)a>=10|a<=0C)a>=10||a<=0D)a>=10&&a<=027.能正確表示a和b同時為正或同時為負的邏輯表達式是()(99-9-28題)A)(a>=0||b>=0)&&(a<0||b<0) B)(a>=0&&b>=0)||(a<0&&b<0)C)(a+b>0)&&(a+b<=0) D)a*b>028.不能滿足a和b的值都大于0,小于n時值為“真”,否則值為“假”的表達式是()A)(a>0)&&(b>0)&&(a<n)&&(b<n) B)a&&b&&(a<n)&&(b<n)C)!((a<=0)11(b<=0)11(b>=n)11(a>=n))D)!(a<=0)&&!(b<=0)&&l(b>=n)&&!(a>=n)29.若x和y代表整型數(shù),以下表達式中不能正確表示數(shù)學(xué)關(guān)系|x-y|<10的是A)abs(x-y)<10 B)x-y>-10&ax-y<10/*(04-9-21題)*/C)(x-y)<-10||!(y-x)>10 D)(x-y)*(x-y)<10030.設(shè)a為整型變量,不能正確表達數(shù)學(xué)關(guān)系:10<a<15的是()(98-4-25題)A)10<a<15 B)a==ll||a==12||a==13||a==14C)a>10&&a<15 D)!(a<=10)&&!(a>=15)31.若要求在if后一對圓括號中表示a不等于0的關(guān)系,則能正確表示這一關(guān)系的表達式為()(97-4-28題)A)a<>0 B)!a C)a=0 D)a32.當c的值不為0時,下列選項中能正確將c的值賦給變量a、1)的()(99-9-21題)A)c=b=a; B)(a=c)||(b=c)C)(a=c)&&(b=c)D)a=c=b;33.若變量c為char類型,能正確判斷出c為小寫字母的表達式是()(01-4-28題)A)'a'<=c<='z' B){c>='a')11{c<='z')C){'a'<=c)and('z'>=c) D)(c>='a')&&{c<='z')34.以下選項中不能正確判斷a為偶數(shù)的表達式是()A)a%2==0B)!a%2!=0C)a/2*2-a==0D)!(a%2)35.語句printf(“%d”,(a=2)&&(b=-2));的輸出結(jié)果是()(99-9-18?)A)無輸出B)結(jié)果不確定C)-1 D)136.以下程序的輸出結(jié)果是()(94-4-29題、98-9-42題)main(){inta,b,d=241;a=d/100%9;b=(-l)&&(-l);printf("%d,%d\n”,a,b);}A)6,1 B)2,1 C)6,0 D)2,037.語句:printf("%d",d=2>=7<=9);的輸出結(jié)果是()A)語法錯誤 B)1 C)0 D)d=l38.以下程序段執(zhí)行后,x的值為()(00-9-39題)inta=14,b=15,x;charc='A':x=(a&&b)&&(c<,B,);A)true B)false C)0 D)139.設(shè)2=5力=64=77=8,01=2用=2,執(zhí)行(111=2>13)&&(11=0€1);后門的值為()(95-9-42題、99-4-44題、01-9-24題)A)1 B)2 C)3 D)440.以下程序的輸出結(jié)果是()(03-9-16題)main(){inta=l,b=2,m=0,n=0,k;k=(n=b>a)||(m=a<b);printf("%d,%d\n”,k,m);}A)0,0 B)0,1 C)1,0 D)1,141.已有定義:intx=3,y=4,z=5;則表達式!(x+y)+z-l&&y+z/2的值()(02-9-21題)A)6 B)0 C)2 D)142.以下程序的輸出結(jié)果是()(02-4-27題)main(){inta=4,b=5,c=0,d;d=!a&&!b||!c;printf("%d\n",d);}A)1 B)0 C)非0的數(shù) D)-143.設(shè)a、b和c都是int型變量,且a=3,b=4,c=5,且以下表達式中值為0的表達式是()(96-4-21題)A)'a'&&'b'B)a<=b C)a||b+c&&b-cD)!((a<b)&&!c||1)44.設(shè)intx=l,y=l:則表達式(!x||y--)的值是()(00-4-20題)A)0 B)1 C)2 D)-145.設(shè)x、y、t均為int型變量,則執(zhí)行語句:x=y=3;t=++x||++y;后,y的值為()A)不定值B)4 C)3 D)1(01-4-21題)46.設(shè)x,y,z,t均為int型變量,則執(zhí)行以下語句后,t的值為()(98-9-27題)x=y=z=l;t=++x11++y&&++z;A)不定值B)2 C)1 D)047.以下程序的輸出結(jié)果是()(97-4-37題)main(){inta=-l,b=4,k;

k=(++a<0)&&!(b-<=0);printf(M%d%d%d\nw,k,a,b);}A)104 B)103 C)00348.以下程序的輸出結(jié)果是()(96-9?33題)main(){inta=-l,b=4,k;k=(a++<=0)&&(!(b-<=0));printf(“%d%d%d\n”,k,a,b);}A)003 B)012 C)10349.設(shè)ch是char型變量,其值為A,且有下面的表達式:ch=(ch>='A'&&ch<=*Z')?(ch+32):ch;執(zhí)行后表達式的值是(D)004D)112)(96-4-23題)D)zTOC\o"1-5"\h\zA)A B)a C)Z50.設(shè)a=l,b=2,c=3,d=4,則表達式a<b?a:c<d?a:d的結(jié)果是(D)004D)112)(96-4-23題)D)zA)4 B)3 C)2 D)151.若整型變量a、b、c、d中的值依次為:1、4、3、2。則條件表達式a<b?a:c<d?c:d的值(05-4-22題)A)1 B)2 C)3 D)452.設(shè)w、x、y、z、m均為int型變量,則以下程序段執(zhí)行后,m的值()(01-9-26題)①w=l;x=2;y=3;z=4;②m=(w<x)?w:x;m=(m<y)?m:y;m=(m<z)?m:z;A)4 B)3 C)2 D)153.以下程序的輸出結(jié)果是()(02-4-24題)main(){inta=5,b=4,c=6,d;printf("%d\n",d=a>b?(a>c?a:c):(b));}A)5 B)4 C)6 D)不確定.以下程序的輸出是()main(){inti,j,k,a=3,b=2;i=(--a==b++)?--a:++b:j=a++;k=b;printf(“i=%d,j=%d,k=%d\n”,i,j,k);}A)i=2,j=l,k=3B)i=l,j=l,k=2C)i=4,j=2,k=4D)i=l,j=l,k=3.設(shè)有如下的變量定義,則以下符合C語言語法的表達式是()(99-4-17題)inti=8,k,a,b;unsignedlongw=5;doublex=1.42,y=5.2;A)x%(-3) B)a=a*3=2C)y=float(i) D)a+=a-=(b=4)*(a=3)56.若變量已正確定義并賦值,卜面符合C語言語法的表達式是()(00-9-16題)D)a=a+7=c+bA)a:=b+lB)a=b=c+2C)int18.5%3D)a=a+7=c+bE)a=7+b+c,a++F)a=a+7;.以下選項中非法的表達式是()E)a=7+b+c,a++F)a=a+7;.以下選項中非法的表達式是()A)0<=x<100B)i=j==0.請選出合法的C語言賦值語句(01-9-20題)①A)a=b=58 B)i++;D)k=int(a+b);②A)x=3,y=5B)a=b=6③A)a=7+b+c=a+7:B)a=7+b++=a+7:.下列選項中不正確的賦值語句是C)(char)(65+3)D)x+l=x+l)()()(95-9-24題、96-9-21題、98-9-26題、C)a=58,b=58E)x+y:C)i—; D)y=int(x);C)a=7+b,c=a+7:D)a=7+b,b++,a+7①A)++t:B)k=i==j:C)a=b+c=l;D)nl=(n2=(n3=0))①A)++t:B)k=i==j:C)a=b+c=l;D)nl=(n2=(n3=0));②A)j++; B)++(i+l); C)x=j>0; D)n=(i=2,++i);60.若以下選項中的變量已正確定義,則正確的賦值語句是()(04-4-15題)A)xl=26.8%3;B)l+2=x2; C)x3=0xl2;D)x4=l+2=3;61.若變量a、i已正確定義,且i已正確賦值,則合法的語句是()(00-9-19題)A)a==l B)++i; C)a=a++=5; D)a=int(i);.以下變量x、y、z均為double類型且已正確賦值,不能正確表示數(shù)學(xué)式子的C語言表達式是()(01419題)A)x/y*z B)x*(l/(y*z))C)x/y*l/zD)x/y/z.假設(shè)在程序中a、b、c均被定義成整型,并且已賦大于1的值,則下列能正確表示代數(shù)式的表達式是()(95-9-38題)A)l/a*b*cB)l/(a*b*c) C)1.0/a/b/cD)l/a/b(float)c64.設(shè)有定義:floata=2,b=4,h=3;,以下C語言表達式中與代數(shù)式(a+b)h計算結(jié)果不相符的是()(04-4-17題)A)(a+b)*h/2B)(l/2)*(a+b)*hC)(a+b)*h*l/2D)h/2*(a+b)65.與數(shù)學(xué)式子對應(yīng)的C語言表達式是()(02-9-18題)A)3*xAn/(2*x-l) B)3*x**n/(2*x-l)C)3*pow(x,n)*(l/(2*x-l)) D)3*pow(n,x)/(2*x-l)II.填空題1.設(shè)x和y均為int型變量,且x=l,y=2,則以下表達式1.0+x/y的值為。(98-9-6)2.若有語句inti=-19J=i%4;printf("%d\n”,j);則輸出結(jié)果是 。(0346題).以下程序的輸出結(jié)果是。(02-4-8題)main(){inta=0;a+=(a=8);printf("%d\n",a);}.以下程序的輸出結(jié)果是。(01-4-6題)main(){inta=l,b=2;a=a+b:b=a-b;a=a-b;printf("%d,%d\n”,a,b);}.以下程序運行后的輸出結(jié)果是o(03-9-6題)main(){intp=30;printf("%d\n”,(p/3>0?p/10:p%3))}.若有定義:inta=10,b=9,c=8;接著順序執(zhí)行下列語句后,變量b中的值是—.c=(a-=(b-5));c=(a%ll)+(b=3);(00-9-7題).設(shè)y是int型變量,請寫出判斷y為奇數(shù)的關(guān)系表達式.(01-9-7題).若x為整型,請以最簡單的形式寫出邏輯表達式!x的等價的c語言關(guān)系表達式 o(00-4-7題).設(shè)a,b,c為整型,且a=2,b=3,c=4,則執(zhí)行完以下語句:a*=16+(b++卜(++c);后,a的值是。(95-9-8題).已有定義語句:inta=O,b=l,c=l,d:執(zhí)行語句:d=-a||++b&&--c;后,a的值為,b的值為,c的值為,d的值為 o.若已知a=10,b=20,則表達式!a<b的值是。(98-4-7題).設(shè)x,y,z,t均為int型變量,則執(zhí)行語句:x=y=z=3;t=(++x||++y)&&++z;后,x的值為,y的值為_,Z的值為,t的值為—O.以下程序運行后的輸出結(jié)果是—。(02-4-9題)main(){inta=5,b=4,c=3,d;d=(a>b>c):printf("%d\n",d);}.表示“整數(shù)x的絕對值大于5”時值為“真”的C語言表達式是 ,(00-9-8題).條件10<x<100或者x<0的C語言表達式是。(97-4-6題).⑴(98-4-6題)數(shù)學(xué)式子寫成C語言表達式是o⑵(96-4-6題)數(shù)學(xué)式子寫成C語言表達式是。⑶請寫出代數(shù)式的C語言表達式?第四節(jié)數(shù)據(jù)類型裝換強制類型轉(zhuǎn)換表達式強制類型轉(zhuǎn)換表達式的形式:(類型名乂表達式)其中(類型名)稱為強制類型轉(zhuǎn)換運算符,可以利用強制類型轉(zhuǎn)換運算符,將一個表達式的值轉(zhuǎn)換成指定的類型。例如,表達式(int)3.234把3.234轉(zhuǎn)換成整數(shù)3;表達式(doub⑹(10%3)把10%3所得結(jié)果1轉(zhuǎn)換成雙精度數(shù)1.0。賦值運算中的類型轉(zhuǎn)換在賦值運算中,只有在賦值號右側(cè)表達式的類型與左側(cè)變量類型完全一致時,賦值操作才能進行。如果賦值運算符兩側(cè)的數(shù)據(jù)類型不一致,在賦值前,系統(tǒng)將自動先把右側(cè)表達式求得的數(shù)值,按賦值號左邊變量的類型進行轉(zhuǎn)換,也可以用強制類型轉(zhuǎn)換的方式進行轉(zhuǎn)換賦給賦值號左邊的變量。但這種轉(zhuǎn)換僅限于數(shù)值數(shù)據(jù)之間,通常稱為“賦值兼容”,對于另外一些數(shù)據(jù),如地址值就不能賦給一般的變量,稱為“賦值不兼容”。在C語言的表達式中(不包括賦值表達式),如果運算符兩邊的整數(shù)類型不相同,將進行類型轉(zhuǎn)換。【注意】?運算符兩邊一個是短整型,一個是長整型,則短整型轉(zhuǎn)換成長整型。?運算符兩邊一個是有符號整型,一個是無符號整型,則有符號整型轉(zhuǎn)換成無符號整型。?在C語言的賦值表達式中,賦值號右邊的值先轉(zhuǎn)換成與賦值號左邊的變量相同的類型,然后進行賦值。?當賦值號左邊的變量為短整型,右邊的值為長整型時,短整型變量只能接受長整型數(shù)低位上兩個字節(jié)中的數(shù)據(jù),高位上兩個字節(jié)中的數(shù)據(jù)將丟失。算術(shù)運算中的類型轉(zhuǎn)換如果雙目運算符兩邊運算數(shù)的類型不一致,如一邊是整型數(shù),一邊是實型數(shù)時,系統(tǒng)將自動把整型轉(zhuǎn)換為實型數(shù),使運算符兩邊的類型達到一致后,再進行運算。關(guān)系運算符類型轉(zhuǎn)換當關(guān)系運算符兩邊的值類型不一致時,其類型轉(zhuǎn)換規(guī)則,與雙目算術(shù)運算中的類型轉(zhuǎn)換規(guī)則相同。若x和y都是實型數(shù),應(yīng)當避免使用x==y這樣的關(guān)系式,因為存放在內(nèi)存中的實型數(shù)是有誤差的,不可能精確相等,這將導(dǎo)致x==y的值為0o練習I.選擇題1.若有以下定義:chara;intb;floatc;doubled;則表達式a*b+d-c值的類型為()(98-9-22題)A)float B)int C)char D)double2.若有以下程序段,執(zhí)行后c3中的值是()(00-9-20題)intcl=l,c2=2,c3;c3=1.0/c2*cl;A)D)20 B)0.5 C)13.若變量a是int類型,并執(zhí)行了語句:a='A'+1.6;則正確的敘述()(02417題)A)D)2A)a的值是字符C B)a的值是浮點型C)不允許字符型和浮點型相加 D)a的值是字符‘A'的ASCII值加上1.若有定義:inta=8,b=5,c;執(zhí)行語句c=a/b+0.4;后,c的值為()(02-4-16題)A)1.4 B)1 C)2.0 D)2.若已定義x和y為double類型,則表達式x=l,y=x+3/2的值是(),則表達式x=2,y=x+3/2的值是()(98-4-23題、00-9-18題、01-9-19題)A)1B)2C)2.0D)2.5E)3.5F)3G)3.0.以下程序的輸出結(jié)果是()(96-9-24題)main(){intx=10,y=3;printf("%d\n",y=x/y);}A)0 B)1 C)3 D)不確定的值.以下程序的輸出結(jié)果是()(00417題)main(){doubled=3,2:intx,y:x=1.2;y=(x+3.8)/5.0;printf("%d\n",d*y);}A)3 B)3.2 C)0 D)3.07.設(shè)a和b均為double型變量,且a=5.5,b=2.5,則表達式(int)a+b/b的值是()A)6.500000 B)6 C)5.500000D)6.000000(02-9-16題).有以下定義語句doublea,b;intw;longc;若各變量已正確賦值,則下列選項中正確的表達式是(04-9-15題)A)a=a+b=b++ B)w%((int)a+b)C)(c+w)%{int>a D)w=a==b;.以下程序的輸出結(jié)果是()(94-4-24題)#include<math.h>main(){inta=l,b=4,c=2;floatx=10.5,y=4.0,z;z=(a+b)/c+sqrt((double(y))*1.2/c+x:printf(,z);)A)14.000000B)15.400000C)13.700000D)14.900000IK填空題1、設(shè)有以下變量定義,并已賦確定的值charw;intx;floaty;doublez;則表達式w*x+z-y所求得值的數(shù)據(jù)類型為o(00-4-6題)2、已有定義:floatx=4.6:則表達式:x+=x+l的值是。3、語句:x++;++x;x=x+l;x=l+x;執(zhí)行后都使變量x中的值增1,請寫出一條同一功能的賦值語句(不得與列舉的相同)o(01-9-6題)第二章順序結(jié)構(gòu)結(jié)構(gòu)化程序由三種基本結(jié)構(gòu)組成。.順序結(jié)構(gòu)。賦值語句,輸入、輸出語句都可構(gòu)成順序結(jié)構(gòu)。當執(zhí)行由這些語句構(gòu)成的程序時,將按這些語句在程序中的先后順序逐條執(zhí)行,沒有分支,沒有轉(zhuǎn)移。.選擇結(jié)構(gòu)。if語句、switch語句都可構(gòu)成選擇結(jié)構(gòu)。當執(zhí)行到這些語句時,將根據(jù)不同的條件去執(zhí)行不同分支中的語句。.循環(huán)結(jié)構(gòu)。根據(jù)各自的條件,使同一組語句重復(fù)執(zhí)行多次或一次也不執(zhí)行。第一節(jié)語句賦值語句在賦值表達式的尾部加上一個“;”號,就構(gòu)成了賦值語句。復(fù)合語句和空語句.復(fù)合語句在C語言中,一對“{}”不僅可用作函數(shù)體的開頭和結(jié)尾的標志,也可用作復(fù)合語句的開頭和結(jié)尾的標志;復(fù)合語句形式為:{語句1;語句2;…;語句n;)用一對花括號把若干語句括起來構(gòu)成一個語句組,一個復(fù)合語句在語法上視為一條語句,在一對花括號內(nèi)的語句數(shù)量不限。在復(fù)合語句內(nèi),不僅可以有執(zhí)行語句,還可以有定義部分。.空語句C程序中的所有語句都必須由一個分號作為結(jié)束。如果只有一個分號,這個分號也是一條語句,稱為“空語句”。練習I、選擇題.C語言中用于結(jié)構(gòu)化程序設(shè)計的三種基本結(jié)構(gòu)是()(03-442題)A)順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu) B)if、switch,breakC)for-,while、do-while D)if、for>continue.以下4個選項中,不能看作一條語句的是()(04-4-19題)A){;} B)a=0,b=0,c=0;C)if(a>0); D)if(b==O)m=l;n=2;.結(jié)構(gòu)化程序由三種基本結(jié)構(gòu)組成,三種基本結(jié)構(gòu)組成的算法(04-9-12題)A)可以完成任何復(fù)雜的任務(wù) B)只能完成部分復(fù)雜的任務(wù)C)只能完成符合結(jié)構(gòu)化的任務(wù) D)只能完成一些簡單的任務(wù).以下說法中正確的是()(99-9-26題)A)#define和printf都是C語句 B)#define是C語句,而printf不是C)printf是C語句,但#define不是D)#define和printf都不是C語句.設(shè)x和y均為int型,則以下語句:x+=y;y=x-y;x-=y;的功能是()(99-4-20題)A)把x和y按從大到小排列 B)把x和y按從小到大排列C)無確定結(jié)果 D)交換x和y中的值.設(shè)變量x為float型且已賦值,則以下語句中能將x中的數(shù)值保留到小數(shù)點后兩位,并將第三位四舍五入的是()(03-9-19題)A)x=x*100+0.5/100.0; B)x=(x*100+0.5)/100.0;C)x=(int)(x*100+0.5)/100.0; D)x=(x/100+0.5)*100.0;第二節(jié)數(shù)據(jù)輸出C語言本身不提供用于輸入和輸出的語句??梢酝ㄟ^調(diào)用標準庫函數(shù)提供的輸入和輸出函數(shù)來實現(xiàn)數(shù)據(jù)的輸入和輸出。一、printf函數(shù)(C語言提供的標準輸出函數(shù))的一般調(diào)用形式printf函數(shù)的?般調(diào)用形式:printf(格式控制,輸出項表);例如:printf("a=%d,b=%d”,a,b);【說明】?printf是函數(shù)名;在圓括號中用雙引號括起來的字符串稱為格式控制串。? %d格式轉(zhuǎn)換說明符。C語言中的格式說明符含義如表2-2-1所示。? “a=",“b=”等都是希望原樣輸出的字符。?輸出項表中的各輸出項要用逗號隔開,輸出項可以是合法的常量、變量或表達式。格式轉(zhuǎn)換說明的個數(shù)要與輸出項的個數(shù)相同,使用的格式描述符也要與它們一一對應(yīng)且類型匹配。例如:inti=2518;floata=3.1415;printf("i=%d,a=%f,a*10=%e\n”,i,a,a*10);運行后輸出結(jié)果:i=2518,a=3.141500,a*10=3.141500e+01二、printf函數(shù)中常用的格式說明每個格式說明都必須用“%”開頭,以一個格式字符作為結(jié)束,在此之間可以根據(jù)需要插入“寬度說明“、左對齊符號前導(dǎo)零符號“#”等。.格式字符【注意】格式字符只允許用小寫字母。表2-2-1printf函數(shù)中的格式字符含義格式字符說明%c輸出一個字符%d輸出帶符號的十進制整型數(shù)%o以八進制無符號形式輸出整型數(shù)(不帶前導(dǎo)0)%x或X以十六進制無符號形式輸出整型數(shù)(不帶前導(dǎo)Ox或0X),對于x用abcdef輸出,對于X用ABCDEF輸出%u按無符號的十進制形式輸出整型數(shù)%f以帶小數(shù)點的形式輸出單精度和雙精度數(shù)%e或E以[-]m.ddddddexx或Hm.ddddddExx的指數(shù)形式輸出單精度和雙精度數(shù)。d的個數(shù)由精度指定,隱含的精度為6:若指定的精度為0,小數(shù)部分(包括小數(shù)點)都不輸出%s輸出字符串中的字符,直到遇到“\0”,或者輸出山精度指定的字符數(shù)%%打印一個%.長度修飾符長度修飾符加在%和格式字符之間,對于長整型數(shù)一定要加l(long);h可用于短整型數(shù)(short)的輸出。.輸出數(shù)據(jù)所占的寬度當使用%d、%c、%f、%e、…格式說明時,輸出數(shù)據(jù)所占的寬度由系統(tǒng)決定(通常取數(shù)據(jù)本身的寬度,不加空格),并采用右對齊的形式??梢杂靡韵聝煞N方法人為控制輸出數(shù)據(jù)所占的寬度:⑴在%與格式字符之間插入一個整數(shù)來指定輸出寬度,注意,不能用變量。如%2d就是以帶符號十進制整數(shù)輸出表達式的值,并且輸出結(jié)果占兩位寬度;同理,%2c輸出一個字符,并且輸出結(jié)果占兩位寬度?!咀⒁狻? 如果實際輸出結(jié)果的寬度超過指定的輸出寬度,則按數(shù)據(jù)的實際寬度完整輸出:?如果指定的輸出寬度多于數(shù)據(jù)實際所需寬度,數(shù)據(jù)右對齊,左邊補以空格。(2)對于float或double類型的實型數(shù)可以用"%m.n”的形式在指定寬度的同時來指定小數(shù)位的位數(shù)。其中,“m”用以指定輸出數(shù)據(jù)總的所占寬度,“n”稱為精度,用以指定輸出數(shù)據(jù)小數(shù)位所占位數(shù)?!咀⒁狻?當輸出數(shù)據(jù)的小數(shù)位多于“n”指定的寬度時,截去右邊多余的小數(shù),并對截去的第一位小數(shù)做四舍五入處理;?當輸出數(shù)據(jù)的小數(shù)位少于“n”指定的寬度時,在小數(shù)的最右邊添0。?當輸出數(shù)據(jù)所占的寬度大于“m”指定的寬度時,小數(shù)位仍按上述規(guī)則處理,整數(shù)部分并不丟失。也可以用“.n”的形式來指定小數(shù)位的位數(shù)。這時輸出數(shù)據(jù)的寬度由系統(tǒng)決定。?若指定%Q,則不輸出小數(shù)點和小數(shù)部分。?對于字符串,用來指定最多輸出的字符個數(shù)。.輸出數(shù)據(jù)左對齊可以在指定輸出寬度的同時指定數(shù)據(jù)左對齊。這可在寬度前加號來實現(xiàn)。.使輸出的數(shù)字總是帶有+號或-號可以在%和格式字符間(或指定的輸出寬度前)加一個“+”號來實現(xiàn)。例如:printf(“%+d,%+d\n”,10,-10);輸出結(jié)果:+10,-10.在輸出的八進制數(shù)前添加0,在輸出的十六進制數(shù)前添加Ox通常,在用格式字符。和x按八進制數(shù)和十六進制數(shù)的形式輸出整數(shù)時,在數(shù)據(jù)的前面并不出現(xiàn)0和Ox,如果需要在輸出的八進制數(shù)前添加0,在輸常的十六進制數(shù)前添加Ox,可在%號和格式字符。和x之間插入一個#號。調(diào)用printf函數(shù)時的注意事項?在格式控制串中,格式說明與輸出項從左到右在類型上必須一一對應(yīng)匹配。如不匹配,將導(dǎo)致數(shù)據(jù)不能正確輸出,這時,系統(tǒng)并不報錯。?在輸出長整型數(shù)據(jù)時,一定要使用%Id格式說明,如果遺漏了字母I,只用了%d,將輸出錯誤的數(shù)據(jù)。?在格式控制串中,格式說明與輸出項的個數(shù)應(yīng)該相同。如果格式說明的個數(shù)少于輸出項的個數(shù),多余的輸出項不予輸出;如果格式說明的個數(shù)多于輸出項的個數(shù),則對于多余的格式將輸出不定值(或0值)。?在格式控制串中,除了合法的格式說明外,可以包含任意的合法字符,這些字符在輸出時將“原樣照印”。?如果需要輸出百分號%,則應(yīng)該在格式控制串中用兩個連續(xù)的百分號%%來表示。?在輸出語句中改變輸出變量的值汝ll:i=5;printf("%d%d\n",i,++i);則不能保證先輸出i的值,然后再求i++,并輸出。?當使用的格式說明%c一個緊接一個時,在輸入字符時,字符之間沒有間隔符,這時空格、回車和橫向跳格符都將按字符讀入。調(diào)用putchar函數(shù)輸出單個字符可以利用putchar函數(shù)輸出單個字符?!菊{(diào)用形式】putchar(ch)以上調(diào)用形式把變量ch以字符形式輸出,其中ch可以是字符變量或是字符常量,在以上函數(shù)調(diào)用的后面跟一個分號“;”,就形成一條獨立的輸出語句。【注意】?使用getchar時,必須在程序開頭出現(xiàn)包含頭文件stdio.h的命令行:#include"stdio.h"五、練習I、選擇題1.有以下程序(04-9-19題)main(){inta=666,b=888;printf("%d\n",a,b);}程序運行后的輸出結(jié)果是A)錯誤信息B)666 C)888 D)666,8882.設(shè)有如下程序段,則以下敘述中正確的是()(03-9-18題)main(){intx=2002,y=2003;printf("%d\n”,(x,y)):}A)輸出語句中格式說明符的個數(shù)少于輸出項的個數(shù),不能正確輸出B)運行時產(chǎn)生出錯信息C)輸出值為2002D)輸出值為20033.設(shè)有定義:longx=-123456L;則以下能夠正確輸出變量x值的語句()(02-9-19題)A)printf(Hx=%d\n",x): B)printf("x=%ld\n”,x):C)printf("x=%8dl>\n",x); D)printf("x=%LD\n”,x);4.有以下程序(05419題)main(){intm,n,p;scanf("m=%dn=%dp=%d",&m,&n,&p);printf("%d%d%d\n",m,n/p);}若想從鍵盤上輸入數(shù)據(jù),使變量m中的值為123,n中的值為456,p中的值為789,則正確的輸入是A)m=123n=456p=789 B)m=123n=456p=789C)m=123,n=456,p=789 D)1234567895.有以下程序(05-4-20題)main()

溫馨提示

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

評論

0/150

提交評論