




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、教學(xué)任務(wù):各種數(shù)據(jù)類型及存儲方式常量:概念,分類轉(zhuǎn)義字符大端小端基本輸入輸出函數(shù)實驗2的題目3和題目4初步接觸效率C語言基本數(shù)據(jù)結(jié)構(gòu)與常用函數(shù)2.1 字符集與標(biāo)識符2.2 基本數(shù)據(jù)類型2.3 常量與變量2.4 大端小端2.5 輸入/輸出函數(shù)用法2.6 常用函數(shù) 小結(jié) 學(xué)習(xí)目標(biāo)掌握標(biāo)識符的命名規(guī)則掌握各種基本類型常量的使用學(xué)會變量的定義和初始化理解整型數(shù)據(jù)的內(nèi)存存儲形式學(xué)會使用基本數(shù)據(jù)的輸入、輸出函數(shù)學(xué)會常用庫函數(shù)的使用方式2.1 字符集與標(biāo)識符C語言的字符集 大寫英文字母小寫英文字母數(shù)字:0 1 2 3 4 5 6 7 8 9其他符號:+ - + - * * / % = | & ! /
2、 % = | & ! # # “ , . : ; ( ) _ ? 空格空格 標(biāo)識符 給程序中的實體變量、函數(shù)、數(shù)組、結(jié)構(gòu)體及文件起的名字??崭窨崭穹亲帜富蛳路亲帜富蛳聞澗€開頭劃線開頭關(guān)鍵字關(guān)鍵字非字母、數(shù)字、非字母、數(shù)字、下劃線下劃線2.2 基本數(shù)據(jù)類型例2-1 輸入一個非負(fù)整數(shù)n,求n!。 #include void main() int i=1,n;short jc=1; scanf(“%d”,&n); if(n0) while(i=n) jc=jc*i; i=i+1; printf(“%d!=%dn”,n,jc); 例2-1 輸入一個非負(fù)整數(shù)n,求n!。 #include
3、 void main() int i=1,n; int jc=1; scanf(“%d”,&n); if(n0) while(i=n) jc=jc*i; i=i+1; printf(“%d!=%.0fn”,n,jc); 例2-1 輸入一個非負(fù)整數(shù)n,求n!。 #include void main() int i=1,n; double jc=1; scanf(“%d”,&n); if(n0) while(i=n) jc=jc*i; i=i+1; printf(“%d!=%.0fn”,n,jc); 2.2.1 整型數(shù)據(jù)整型數(shù)據(jù)在內(nèi)存中的存放形式根據(jù)是否表示負(fù)數(shù)分為:有符號數(shù)和無符
4、號數(shù)。有符號整數(shù)有符號數(shù)以補碼形式存儲在計算機(jī)中,最高位為符號位。對于負(fù)數(shù)需先轉(zhuǎn)換成原碼才知道它的數(shù)值是多少。例:int a= -1, b=2; b無符號數(shù)只表示大于等于0的整數(shù),沒有符號位,它的每一位都是數(shù)值位。使得無符號數(shù)比有符號數(shù)多一個數(shù)值位,從而能表示更大的正數(shù)。無符號數(shù)直接以數(shù)值的二進(jìn)制形式存儲在計算機(jī)中。 例:unsigned int c=0 x1234, d=0 xFFFFFFFF;以變量a和d為例,他們在計算機(jī)里的表示一樣,但是由于類型不同,系統(tǒng)把一個解讀為-1的補碼,一個解讀為很大的正數(shù)。d數(shù)值的表示方法原碼、反碼和補碼原碼:最高位為符號位,其余各位為數(shù)值本身的絕對值反碼:正
5、數(shù):反碼與原碼相同負(fù)數(shù):符號位為1,其余位對原碼取反補碼:正數(shù):原碼、反碼、補碼相同負(fù)數(shù):最高位為1,其余位為原碼取反,再對整個數(shù)加1原碼原碼反碼反碼補碼補碼+7000001110000011100000111-7100001111111100011111001+0000000000000000000000000-0100000001111111100000000數(shù)的范圍數(shù)的范圍0111111111111111(-127+127)0111111110000000(-127+127)0111111110000000(-128+127)(用一字節(jié)表示數(shù))(用一字節(jié)表示數(shù))例例 補碼:補碼:1111
6、1001 取反:取反:10000110 加加1: 10000111=-7考慮:整數(shù)溢出如果整形太大或太小,超出了整數(shù)類型的范圍會怎么樣?下面分別對有符號和無符號進(jìn)行測試。#includeint main() signed int i = 2147483647;/有符號整形最大正數(shù)unsigned int j=4294967295;/無符號整形最大正數(shù)printf(“%d %d %dn”, i, i+1, i+2);printf(“%u %u %un”, j, j+1, j+2);return 0;這種溢出的情況對于char型和short型同樣適用。結(jié)果是:2147483647 -2147483
7、648 -21474836474294967295 0 1注意:當(dāng)變量溢出時,系統(tǒng)沒有給出提示,所以編程時需要自己處理這個問題。2.2.2 實型數(shù)據(jù)實型數(shù)據(jù)在內(nèi)存中的存放形式 占4或8個字節(jié),在內(nèi)存中以指數(shù)形式存放實型變量的分類 float 32 bit, 數(shù)范圍 10-38-1038 6位有效位 double 64 bit, 數(shù)范圍 10-308-10308 16位有效位 float a,b,x; a=11111111.1111; b=11111111.1; x=123.456789E10; double y; y=123.456789E10;實型數(shù)據(jù)的舍入誤差有效位數(shù):在浮點數(shù)類型可表示的
8、數(shù)的范圍里,從第一個非零數(shù)字開始的十進(jìn)制精確位的位數(shù)。和printf的%f默認(rèn)輸出6位意義不同。浮點數(shù)的比較float m=3.1;if(m=3.1) printf(“m=3.1n”);計算機(jī)一般都是用一種浮點的格式來近似地模擬實數(shù)算術(shù)運算。無論是 float 還是double類型的變量,都有精度限制。不要假設(shè)浮點運算結(jié)果是精確的,尤其不能直接比較兩個浮點數(shù)是否相等。這并不是C語言特有的問題,其他程序設(shè)計語言有同樣的問題,它依賴于cpu的處理能力。在沒有“正確”浮點模型的處理器上,編譯器要被迫進(jìn)行代價非凡的仿真。那么如何檢查浮點數(shù)在“足夠接近”情況下的相等?浮點數(shù)的定義決定他的絕對精度會隨著其
9、量級而變化。所以比較兩個浮點數(shù)最好的方法就是用一個浮點數(shù)的量級相關(guān)的閥值。參考14章14.5節(jié)P172double a;. .if(a = 0.0) /不可以 do_something();2.2.3 字符型數(shù)據(jù)字符類型的數(shù)據(jù)存儲單元中存放的是對應(yīng)字符的存放的是對應(yīng)字符的ASCII代碼代碼。一個字節(jié)存儲一個字符。char a,b,c;2.2.4 枚舉類型在程序中,可能需要為某些整數(shù)定義一個別名,可以利用預(yù)處理指令#define來完成這項工作:#define MON 1#define TUE 2#define WED 3#define THU 4#define FRI 5#define SAT
10、6#define SUN 7但是從上面的定義來看六個常量雖然在表達(dá)了同一類型的信息,但是在語法上是彼此孤立的個體,不是一個完整的邏輯整體。2.2.4 枚舉類型1. 定義一種新的數(shù)據(jù)類型定義一種新的數(shù)據(jù)類型 - 枚舉型枚舉型enum DAYMON=1, TUE, WED, THU=99, FRI, SAT=0, SUN;(1) 枚舉型是一個集合,集合中的元素(枚舉成員)是一些命名的整型常量,元素之間用逗號,隔開。(2) DAY是一個標(biāo)識符,可以看成這個集合的名字,是一個是一個可選項可選項,即是可有可無的項。(3) 第一個枚舉成員的默認(rèn)值為整型的0,后續(xù)枚舉成員的值在前一個成員上加1。(4) 可以
11、人為設(shè)定枚舉成員的值,從而自定義某個范圍內(nèi)的整數(shù)。(5) 枚舉型是預(yù)處理指令#define的替代。(6) 類型定義以分號;結(jié)束。2.2.4 枚舉類型方法一:方法一:枚舉類型的定義和變量的聲明分開enum DAY MON=1, TUE, WED, THU, FRI, SAT, SUN;enum DAY yesterday;enum DAY today;enum DAY tomorrow; /變量tomorrow的類型為枚舉型enum DAY good_day, bad_day; /變量good_day和bad_day的類型均為枚舉型enum DAY2.2.4 枚舉類型方法二:方法二:類型定義與變
12、量聲明同時進(jìn)行:enum saturday, sunday = 0, monday, tuesday, wednesday, thursday, friday workday; /變量workday的類型為枚舉型enum DAYenum week Mon=1, Tue, Wed, Thu, Fri Sat, Sun days; enum BOOLEAN false, true end_flag, match_flag;2.3 常量與變量2.3.1 常量與符號常量 常量:在C程序文本中出現(xiàn)的任何明確的數(shù)值都稱為常量在程序執(zhí)行過程中,其值不能被改變的量。常量的類型由其書寫格式?jīng)Q定。整型常量(三種形
13、式)1.十進(jìn)制整數(shù)。 123, -56, 0, -19 02.八進(jìn)制整數(shù)。 0123 即十進(jìn)制的 83 -011 -9 020 163.十六進(jìn)制整數(shù)。 0 x123 即十進(jìn)制的 291 -0 x56 即十進(jìn)制的 -86 0 x1a 即十進(jìn)制的 26整型常量的類型1. int 2. long3. int short4. unsigned short a,b;unsigned int x,y;a=50000; x=50000;b=70000; 溢出 y=70000;注意: 非負(fù)整型常數(shù)可視為無符號型常量,也可加后綴字符u或U,注意數(shù)的范圍。5000U unsigned int 5000 int5.
14、 整型數(shù)后加 L,l 表示long int 型 12l, 89L, 02L bit Byte實型常量的表示方法 1.十進(jìn)制小數(shù)形式。 0.123, 98.78 , 123.0 0.0 2. 指數(shù)形式。 注意 : E 或e 前必須有數(shù)字,后為整數(shù)。 1e3, (1*103=1000) 142e-3 (142*10-3=0.142) 2.3E2 (2.3*102=230) 3. float類型實常量類型實常量 實型常量均為實型常量均為double類型,即以類型,即以8個字節(jié)存放個字節(jié)存放,有效位數(shù)為16位,加f后綴則為float型實常量,有效位數(shù)為6。轉(zhuǎn)義字符轉(zhuǎn)義字符含義含義nvradddtbf“
15、xhh轉(zhuǎn)義字符轉(zhuǎn)義字符含義含義換行換行垂直制表垂直制表回車回車響鈴響鈴單引號單引號3位位8進(jìn)制數(shù)代表的字符進(jìn)制數(shù)代表的字符水平制表水平制表退格退格換頁換頁反斜線反斜線雙引號雙引號2位位16進(jìn)制數(shù)代表的字符進(jìn)制數(shù)代表的字符如如 101 -A 012 -n x61 -a 60 -0 483 -( )例例:A-101-x41-65如如 A A6565, a a9797, 0 048 , 48 , nn1010如如 a A ? n 101 例例 轉(zhuǎn)義字符舉例轉(zhuǎn)義字符舉例l2-2#include void main() printf(101 x42 Cn); printf(I say:How are y
16、ou?n); printf(C Programn); printf(“Turbo 1234567 9);運行結(jié)果:運行結(jié)果:(屏幕顯示屏幕顯示)A B CI say:”How are you?”C ProgramTurbo S457 9例例 #include void main() printf(“Yb=n”); printf(“Ybn”); 運行結(jié)果:運行結(jié)果:屏幕顯示:屏幕顯示:=Y【例 2-1】 輸入一個字符,輸出該字符的字形及其ASCII碼。#include void main() char ch; scanf(“%c”,&ch); / 輸入一個字符 printf(“%c AS
17、CII:%dn”,ch,ch); / 輸出該字符的字形及其ASCII碼 運行結(jié)果:運行結(jié)果:A A ASCII:65h e l l o 0例例 字符串字符串“hellohello”在內(nèi)存中在內(nèi)存中 a 0例例 a“a”例例 空串空串 “”“”0例例: char ch; ch=“A”; 例例: char ch; ch=A; 符號常量在程序中指定用符號名代表一個常量,程序中可以使用符號名代替常量。 定義方法:#define 符號名 常量值將來可以在需要用到該常量值的地方用符號名即可。運行結(jié)果:運行結(jié)果:1 circle:6.28 area:3.14編譯程序根據(jù)變量定義為其編譯程序根據(jù)變量定義為其分
18、配指定字節(jié)的內(nèi)存單元分配指定字節(jié)的內(nèi)存單元.地址地址int a=1, b=-3,c;abc4字節(jié)字節(jié)4字節(jié)字節(jié)4字節(jié)字節(jié)地址地址地址地址.內(nèi)存內(nèi)存1-3隨機(jī)數(shù)隨機(jī)數(shù)例1 int student; stadent=19; /Undefined symbol statent in function main 例2 float a,b,c; c=a%b; /Illegal use of floating point in function main 例例: int a,b,c; float data; a=100;決定分配字節(jié)數(shù)決定分配字節(jié)數(shù)和數(shù)的表示范圍和數(shù)的表示范圍合法標(biāo)識符合法標(biāo)識符例例: i
19、nt a=2,b,c=4; float data=3.67; char ch=A; int x=1,y=1,z=1; int x=y=z=1; main() int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“data=%fn”,data);變量定義變量定義可執(zhí)行語句可執(zhí)行語句main() int a,b=2; a=1; float data; data=(a+b)*1.2; printf(“data=%fn”,data);2.3.2 變量例例 float a;a=111111.111; /* a=111111.1*/double b;b=1
20、11111.111; /* b=111111.111*/例例 a=a=D D; /; /* * a=68; a=68; * */ / x= x=A A+5; /+5; /* * x=65+5; x=65+5; * */ / s= s=! !+ +G G / /* * s=33+71; s=33+71; * */ /例例 l2-2d1 #define PRICE 12.5 main() int num=3; float total; char ch1,ch2=D; total=num*PRICE; ch1=ch2-A+a; printf(“total=%f,ch1=%cn”,total,ch1)
21、; 宏定義宏定義變量定義變量定義輸出結(jié)果輸出結(jié)果運行結(jié)果:運行結(jié)果:total=37.500000, ch1=d2.4 大端小端地址:對系統(tǒng)內(nèi)存以字節(jié)為單位從0號開始編址。32位系統(tǒng):機(jī)器字是32位。并且地址用32位的二進(jìn)制來表示的系統(tǒng)。它的尋址范圍在。一個變量的地址是指變量的最低字節(jié)的地址。&變量名對于整形short 、int、long類型數(shù)據(jù)在內(nèi)存上占用不止一個字節(jié)。那么數(shù)據(jù)是怎樣存放在多個字節(jié)的呢?例如:int a = 0 x12345678; 高地址 高地址由于硬件平臺的不同,有右邊兩種方式小端模式:低位上的數(shù)存放在低地址。 如左表所示。arm和intel架構(gòu)。大端模式:低位上
22、的數(shù)存儲在高地址。 低地址 低地址如右表所示。一些網(wǎng)絡(luò)服務(wù)器平臺。7856341212345678思考:如何判斷當(dāng)前系統(tǒng)是大端還是小端?(根據(jù)字節(jié)序的特點)2.5 輸入/輸出函數(shù)用法2.5.1單個字符的輸入/輸出函數(shù)用法C語言無I/O語句,I/O操作由函數(shù)實現(xiàn) 如:scanf()、printf()、putchar()、getchar()、puts()、gets()等函數(shù)使用時應(yīng)在源文件中包含頭文件stdio.h #include 1.字符輸出函數(shù)putchar【例例 2-3】 putchar函數(shù)的使用。函數(shù)的使用。#include void main() char c=A; putchar(c
23、); putchar(A); / 輸出輸出A putchar(n); / 輸出一個回車換行符輸出一個回車換行符 putchar(101); / 輸出輸出ASCII碼為碼為101(八進(jìn)制八進(jìn)制)對應(yīng)的字母對應(yīng)的字母A putchar(65); / 輸出輸出ASCII碼為碼為65(十進(jìn)制十進(jìn)制)對應(yīng)的字母對應(yīng)的字母A 運行結(jié)果:運行結(jié)果:AAAA2.字符輸入函數(shù)(getchar) 【例例 2-4】 getchar函數(shù)的使用。函數(shù)的使用。#include void main() char c1,c2,c3; c1=getchar(); / 輸入一個字符賦值給變量輸入一個字符賦值給變量c1 c2=ge
24、tchar(); c3=getchar(); putchar(c1); putchar(c2); putchar(c3);運行結(jié)果:運行結(jié)果:abc abc 運行結(jié)果:運行結(jié)果:a b c a b例例l2-3d3#include main() char c1,c2; c1=getchar(); printf(%c,%dn,c1,c1); c2=c1+32; printf(%c,%dn,c2,c2);輸入:輸入:A 輸出:輸出:A,65 a,972.5.2 printf函數(shù)用法運行結(jié)果:運行結(jié)果:a=1,b=2運行結(jié)果:運行結(jié)果:2.1 1.2 d=2.10 h=1.20 area=1.26 【
25、例 2-5】 輸入三角形的底和高,求三角形的面積。#include void main() double d,h,area; printf(Input d h:n); / 輸入提示 scanf(%lf%lf,&d,&h); / 輸入數(shù)據(jù) area=d*h/2; / 計算面積 printf(d=%.2f h=%.2f area=%.2fn,d,h,area); / 數(shù)據(jù)保留2位小數(shù) 說明說明 格式字符要用小寫格式字符要用小寫 格式字符與輸出項個數(shù)應(yīng)相同,按先后順序一一對應(yīng)格式字符與輸出項個數(shù)應(yīng)相同,按先后順序一一對應(yīng) 輸出轉(zhuǎn)換輸出轉(zhuǎn)換:格式字符與輸出項類型不一致格式字符與輸出項類
26、型不一致,自動按指定格式輸出自動按指定格式輸出格式字符:格式字符:十六進(jìn)制無符號整數(shù)十六進(jìn)制無符號整數(shù)不帶符號十進(jìn)制整數(shù)不帶符號十進(jìn)制整數(shù)十進(jìn)制整數(shù)十進(jìn)制整數(shù)指數(shù)形式浮點小數(shù)指數(shù)形式浮點小數(shù)單一字符單一字符字符串字符串八進(jìn)制無符號整數(shù)八進(jìn)制無符號整數(shù)小數(shù)形式浮點小數(shù)小數(shù)形式浮點小數(shù)e和和f中較短一種中較短一種百分號本身百分號本身int a=567;printf ( “%d”,a);int a=255;printf(“%x”,a);int a=65;printf(“%o”,a);int a=567;printf(“%u”,a);char a=65;printf(“%c”,a);printf(“%
27、s”,“ABC”);float a=567.789;printf(“%e”,a);float a=567.789;printf(“%f”,a);float a=567.789;printf(“%g”,a);printf(“%”);567ff101567AABC5.677890e+02567.789000567.789%d,ix,Xoucse,Efg%例例 main() unsigned short int u=65535; printf(”u=%hdn,u); 輸出結(jié)果:輸出結(jié)果:u=-1例例 int a=3,b=4; printf(“%d %dn”,a,b); printf(“a=%d ,
28、b=%dn”,a,b); 例例 int a=3,b=4; printf(“%d %dn”,a,b); printf(“a=%d , b=%dn”,a,b);輸出結(jié)果輸出結(jié)果: 3 4 a=3, b=411 11 11 11 11 11 11 1165535int main()char str12=C program;char *ptr = 123 456;printf(hello worldn);printf(%s,ABC);printf(%s,str);printf(%s,ptr);/%s要求提供一個地址, /printf把該地址開始的一連串字符輸出到屏幕上, /直到遇到0字符為止print
29、f(n%c,*ptr);/該用法是提供一個字符char s5=m,s,n,o,k;printf(%s,s);/問題:數(shù)組s里沒有0字符,printf會到數(shù)組外面/尋找0字符,將導(dǎo)致數(shù)組把外面的字符也打印出來,/造成輸出亂碼return 0;字符串的輸出方法字符串的輸出方法紅色字體為溢出打印的結(jié)果,紅色字體為溢出打印的結(jié)果,且在不同的系統(tǒng)上,溢出效果不一樣。且在不同的系統(tǒng)上,溢出效果不一樣。運行結(jié)果:運行結(jié)果:hello worldABCC program123 4561msnokC program運行結(jié)果:運行結(jié)果:27331b2727,33,1ba= 27,a= 33,a= 1b 【例 2-
30、6】 分別用十、八、十六進(jìn)制形式輸出整型數(shù)據(jù)。#include void main() int a=27; printf(%d%o%x%un,a,a,a,a); / 輸出各數(shù)間無分隔符 printf(%d,%o,%xn,a,a,a); / 以十、八、十六形式輸出a printf(a=%5d,a=%5o,a=%5xn,a,a,a,a); / %5d指定a的輸出寬度占5列 【例 2-7】 字符的輸出。#include void main() char c=A; int b=65; printf(%c,%dn,c,c); printf(%c,%dn,b,b); printf(%c,%dn,c+1,c
31、+1); / 計算c+1的值為66,即B printf(%c,%dn,c+32,c+32);/ 將大寫字母轉(zhuǎn)換為小寫字母 運行結(jié)果:運行結(jié)果:A,65A,65B,66a,97 【例 2-8】 單、雙精度實型數(shù)據(jù)的輸出。#include void main() float f=314.15; double d=3.1415926; printf(f=%f, f=%en,f,f); printf(d=%f, d=%en,d,d); printf(d=%6.3f, d=%6.2f, d=%.3fn,d,d,d); 運行結(jié)果:運行結(jié)果:f=314.149994, f=3.141500e+002d=3.
32、141593, d=3.141593e+000d= 3.142, d= 3.14, d=3.142 Printf的返回值的返回值#includeint main() int a=123; int ret = printf(a=%dn,a); printf(上一個printf輸出的字符的個數(shù)為%dn,ret); return 0;運行結(jié)果:運行結(jié)果:a=123上一個上一個printf輸出的字符的個數(shù)為輸出的字符的個數(shù)為62.5.2 scanf函數(shù)用法地址表:變量的地址,常用取地址運算符&例如:scanf(“%d%d”,&a,&b); 其中“%d%d”表示以十進(jìn)制形式輸入兩
33、個整數(shù),&a、&b表示變量a、b存儲空間地址。 運行結(jié)果:運行結(jié)果:27 27 scanf成功賦值了成功賦值了2個個a=27,b=39 注意:注意:若scanf期望得到整形數(shù)或浮點數(shù),它可以跳過接下來的tab鍵,空格鍵 回車鍵,直到遇到其他字符為止. 若其他字符對于整形數(shù)或浮點數(shù)的表示來說為非法字符,scanf將匹配失敗,并返回.scanfscanf的返回值為之前成功匹配的個數(shù)的返回值為之前成功匹配的個數(shù) 【例 2-9】 整型數(shù)據(jù)的輸入。#include void main() int a,b; scanf(“%d%x”,&a,&b);/ 分別以10進(jìn)制16進(jìn)制
34、形式輸入a、b int ret = scanf(%d%d,&a,&b); printf(scanf成功賦值了%d個n , ret); printf(a=%d,b=%dn,a,b); 運行結(jié)果:運行結(jié)果:27,27 scanf成功賦值了成功賦值了1個個a=27,b=-858993460 運行結(jié)果:運行結(jié)果:abc a,b,c【例 2-10】 字符型數(shù)據(jù)的輸入。 若用getchar或scanf的%c接收字符,空格、tab鍵和回車鍵都會當(dāng)做一個字符接收。#include void main() char c1,c2,c3; scanf(“%c%c%c”,&c1,&c2
35、,&c3); printf(%c,%c,%cn,c1,c2,c3); 運行結(jié)果:運行結(jié)果:a b c a, ,b 運行結(jié)果:運行結(jié)果:1.23 4.567 area=5.617【例 2-11】 輸入矩形的邊長,求矩形面積。#include void main() double x,y,area; printf(“Input x y:n”); / 輸入提示 scanf(“%lf%le”,&x,&y); / 輸入double類型數(shù)據(jù)要用格式符%lf或%le area=x*y; printf(area=%.3fn,area); 2.5.4 格式控制串使用規(guī)則 運行結(jié)果:運行結(jié)
36、果:a= 3,b= 12.35,c=s.n對實數(shù)對實數(shù),指定小數(shù)點后位數(shù)指定小數(shù)點后位數(shù)(四舍五入四舍五入)對字符串對字符串,指定實際輸出位數(shù)指定實際輸出位數(shù)修飾符修飾符功功 能能m輸出數(shù)據(jù)域?qū)捿敵鰯?shù)據(jù)域?qū)?數(shù)據(jù)長度數(shù)據(jù)長度m,左補空格左補空格;否則按實際輸出否則按實際輸出輸出數(shù)據(jù)在域內(nèi)左對齊(缺省右對齊輸出數(shù)據(jù)在域內(nèi)左對齊(缺省右對齊) )-指定在有符號數(shù)的正數(shù)前顯示正號指定在有符號數(shù)的正數(shù)前顯示正號(+)(+)+輸出數(shù)值時指定左面不使用的空位置自動填輸出數(shù)值時指定左面不使用的空位置自動填0 00在八進(jìn)制和十六進(jìn)制數(shù)前顯示前導(dǎo)在八進(jìn)制和十六進(jìn)制數(shù)前顯示前導(dǎo)0 0,0 0 x x#在在d,o,
37、x,ud,o,x,u前,指定輸出精度為前,指定輸出精度為longlong型型在在e,f,ge,f,g前,指定輸出精度為前,指定輸出精度為doubledouble型型l【例 2-13】 長度修正符l(L)的使用。#include void main() int a;long b;float x;double y; scanf(“%d%ld%f%lf”,&a,&b,&x,&y);printf(a=%d,b=%ldn,a,b);printf(x=%f,y=%lfn,x,y);運行結(jié)果:運行結(jié)果:1 2 1.234 1234.56789 a=1,b=2x=1.23400
38、0,y=1234.567890 【例 2-14】指定寬度輸出。#include void main() int a=12345; printf(a=%d#n, a); printf(a=%4d#n, a); printf(a= %8d#n, a); printf(a=%-8d#n, a);運行結(jié)果:運行結(jié)果:a=12345#a=12345#a= 12345#a=12345 # 【例 2-15】 指定輸出小數(shù)位數(shù)。#include void main() float x=123.45; double y=1234.567898765; printf(x=%f y=%fn, x,y); print
39、f(x=%8.2f y=%8.2fn, x,y); printf(x=%4.2f y=%.2fn, x,y); 運行結(jié)果:運行結(jié)果:x=123.450000 y=1234.567899x= 123.45 y= 1234.57x=123.45 y=1234.57 scanf函數(shù)格式控制字符串使用 scan formattedscanf(“格式控制字符串”,地址列表) scanf函數(shù)從格式控制字符串的首字符開始輸入,到格式控制字符串尾部結(jié)束輸入。遇非格式說明符則必須原樣輸入與之抵消。遇非格式說明符則必須原樣輸入與之抵消。 遇格式說明符則以此格式輸入數(shù)據(jù)存放到地址列表中對遇格式說明符則以此格式輸入數(shù)
40、據(jù)存放到地址列表中對應(yīng)的變量內(nèi)存單元中應(yīng)的變量內(nèi)存單元中例例 scanf(“%2d %*3d %2d”,&a,&b); 輸入輸入 12 345 67 則則12a, 67bl修飾符修飾符功功 能能hm*用于用于d,o,xd,o,x前,指定輸入為前,指定輸入為shortshort型整數(shù)型整數(shù)用于用于d,o,xd,o,x前,指定輸入為前,指定輸入為longlong型整數(shù)型整數(shù)用于用于e,fe,f前,指定輸入為前,指定輸入為doubledouble型實數(shù)型實數(shù)指定輸入數(shù)據(jù)寬度,遇空格或不可轉(zhuǎn)換字符則結(jié)束指定輸入數(shù)據(jù)寬度,遇空格或不可轉(zhuǎn)換字符則結(jié)束抑制符,指定輸入項讀入后不賦給變量抑制符
41、,指定輸入項讀入后不賦給變量例例 scanf(“%3d%*4d%f”,&k,&f); 輸入輸入 12345678765.43 則則123k, 8765.43f說明:用“%c”格式符時,空格,tab鍵,回車鍵和轉(zhuǎn)義字符作為有效字符輸入輸入的數(shù)據(jù)項先存放在內(nèi)存輸入緩沖區(qū)中,在按回車鍵后,才按輸入格式從緩沖區(qū)依次讀數(shù)據(jù),多出數(shù)據(jù)留在緩沖區(qū)內(nèi),可被下一個輸入語句使用 如如 scanf(“%d%c%f”,&a,&b,&c); 若輸入若輸入1234a123o.26 則則 1234 a, a b, 123 c例例 int x; char ch; scanf(“%d”,
42、&x); ch=getchar(); printf(“x=%d,ch=%dn”,x,ch);執(zhí)行:執(zhí)行:123 輸出:輸出:x=123,ch=10例例 int x; char ch; scanf(“%d”,&x); scanf(“%c”,&ch); printf(“x=%d,ch=%dn”,x,ch);執(zhí)行:執(zhí)行:123 輸出:輸出:x=123,ch=10解決方法:解決方法:(1 1)用)用getchar()getchar()清除清除(2 2)用函數(shù))用函數(shù)fflush(stdin)fflush(stdin)清除全部剩余內(nèi)容清除全部剩余內(nèi)容 (3) (3) 用格式串中空
43、格或用格式串中空格或“% %* *c c”來來“吃掉吃掉”注意:后兩項并非總是有效果注意:后兩項并非總是有效果例例 int x; char ch; scanf(“%d”,&x); scanf(“ %c”,&ch);或或 scanf(“%*c%c”,&ch);); 比如輸入:123ab c*dema int num ; char ch; scanf(%d,&num); while(getchar()!=n) ;/空語句 ch = getchar(); printf(%d ch=%cn,num,ch);【例 2-17】 輸入整型數(shù)據(jù)時規(guī)定域?qū)挕?#include v
44、oid main() int a; double x; scanf(%3d%lf ,&a,&x);printf(a=%d,x=%fn ,a,x);運行結(jié)果:運行結(jié)果:1234 56.78 a=-12,x=34.000000【例 2-18】 輸入實型數(shù)據(jù)時規(guī)定域?qū)挕?include void main() int a; double x; scanf(%d%4lf ,&a,&x);printf(a=%d,x=%fn ,a,x);運行結(jié)果:運行結(jié)果:1234 56.78 a=-1234,x=56.700000【例 2-19】 已知等差數(shù)列的第一項為a,公差為d,求前
45、n項之和,a、d、n由鍵盤輸入。(輸入緩沖區(qū))#include void main() int a,d,n,sum; printf(“input a n:n”); / 提示輸入 scanf(%d%d,&a,&n); / 輸入 printf(“input d:n”); scanf(%d,&d); sum=a*n+n*(n-1)*d/2; printf(sum=%dn,sum); 運行結(jié)果:運行結(jié)果:input a n: 1 100 input d:2 sum=10000運行結(jié)果:運行結(jié)果:input a n: 1 100 2 input d:sum=10000 【例 2-
46、20】 輸入項之間的分隔符。 #include void main() int a,b,c; printf(“input a b cn”); / 輸入提示 scanf(%d%d%d,&a,&b,&c); printf(“a=%d,b=%d,c=%dn”,a,b,c); printf(“input a,b,cn”); / 輸入提示 scanf(%d,%d,%d,&a,&b,&c); printf(“a=%d,b=%d,c=%dn”,a,b,c); printf(“input a= b= c=n”); / 輸入提示 scanf( a=%d b=%d
47、c=%d,&a,&b,&c); printf(“a=%d,b=%d,c=%dn”,a,b,c); 運行結(jié)果:運行結(jié)果:input a b c1 2 3 a=1,b=2,c=3input a,b,c4,5,6 a=4,b=5,c=6input a= b= c=a=7 b=8 c=9 a=7,b=8,c=9 【例 2-21】 格式符“%*c”的使用。#include void main() char x,y; printf(“one:”); scanf(%c%*c%c%*c,&x,&y); printf(x=%c,y=%cn,x,y); printf(“tw
48、o:”); scanf(%c%c,&x,&y); printf(x=%c,y=%cn,x,y);運行結(jié)果:運行結(jié)果:one:A B x=A,y=Btwo:A B x=A,y=2.6 常用函數(shù)C語言處理程序提供的函數(shù)稱為庫函數(shù)。由系統(tǒng)提供,在iso c標(biāo)準(zhǔn)中規(guī)定的函數(shù),庫函數(shù)。用戶使用庫函數(shù)時,需將包含庫函數(shù)聲明的頭文件,include到程序中。#include 例:#include 庫函數(shù)名(實參數(shù)表列)例:sin(0.5);函數(shù)原型 (頭文件有庫函數(shù)的原型。)確定函數(shù)的實參類型及返回值類型例:cos的函數(shù)原型是 double cos(double x);【例例 2-22】 輸
49、入一個正數(shù),求它的平方根值。輸入一個正數(shù),求它的平方根值。#include #include void main() double x,y; scanf(“%lf”,&x); x=x0?x:-x; / 求求x的絕對值的絕對值 y=sqrt(x); / 調(diào)用函數(shù)求調(diào)用函數(shù)求 printf(“%.4fn”,y); 文件包含預(yù)處理命令文件包含預(yù)處理命令變量定義變量定義輸入數(shù)據(jù)輸入數(shù)據(jù)輸出數(shù)據(jù)輸出數(shù)據(jù)調(diào)用函數(shù)調(diào)用函數(shù)運行結(jié)果:運行結(jié)果:3 1.7321x2.6.1 常用數(shù)學(xué)函數(shù)使用時,應(yīng)在源文件中包含頭文件math.h,并且并且在用gcc編譯時,結(jié)尾加上-lm1.平方根函數(shù)sqrt 函數(shù)原型:
50、double sqrt(double x) 功能:計算 。例:sqrt(1.234);2.絕對值函數(shù)fabs 函數(shù)原型:double fabs(double x) 功能:計算|x|。例:fabs(-1.76);返回值為1.76。3.指數(shù)函數(shù)pow 函數(shù)原型:double pow(double x,double y) 功能:計算x y 。例:pow(2.34,4); 返回值為2.344。4. e的指數(shù)函數(shù)exp 函數(shù)原型:double exp(double x) 功能:計算e x 。例:exp(2.3); 返回值為e2.3。x5.以e為底的對數(shù)函數(shù)log 函數(shù)原型:double log(doub
51、le x) 功能:計算ln x 。例:log(123.4);返回值為ln(123.4)。6.以10為底的對數(shù)函數(shù)log10 函數(shù)原型:double log10(double x) 功能:計算log10 x .例:log10(123.4);返回值為log10(123.4)。7.正弦函數(shù)sin 函數(shù)原型:double sin(double x) 例:sin(45*3.14159/180); 返回值為45正弦值。8.反正弦函數(shù)acos 函數(shù)原型:double asin(double x) 例:asin(0.176); 返回sin值為0.176所對應(yīng)的弧度值。9.正切函數(shù)tan 函數(shù)原型:double
52、 tan(double x) 例:cos(45*3.14159/180); 返回值為45正切值1.0。2.6.2 常用字符函數(shù) 使用時,應(yīng)在源文件中包含頭文件ctype.h1.大寫字母轉(zhuǎn)換為小寫字母函數(shù)tolower 函數(shù)原型:char tolower(char x) 返回值:x是大寫字母時返回對應(yīng)的小寫字母,否則返回x。 例:tolower(A)為a, tolower(#)為# 。2.檢查字母函數(shù)isalpha 函數(shù)原型:int isalpha(char x) 返回值:x是字母時,返回非0,否則返回0。 例:isalpha(1)為0, isalpha(x)為非0 。 3.檢查大寫字母函數(shù)is
53、upper 函數(shù)原型:int isupper(char x) 返回值:x是大寫字母時,返回非0,否則返回0。 例:isupper(a)為0, isupper(A)為非0 。4.檢查數(shù)字字符函數(shù)isdigit 函數(shù)原型:int isdigit(char x) 返回值:x是數(shù)字字符時,返回非0,否則返回0。 例:isdigit(7)為非0, isdigit(007)為0 。5.檢查字母、數(shù)字字符函數(shù)isalnum 函數(shù)原型:int isalnum(char x) 返回值:x是字母、數(shù)字時,返回非0,否則返回0。 例:isalnum(X20)為0, isalnum(A)為非0 。6.檢查可打印字符函
54、數(shù)isgraph 函數(shù)原型:int isgraph(char x) 返回值:x是可打印字符時,返回非0,否則返回0。 例:isgraph(001)為0, isgraph(#)為非0 。2.6.3 其他常用函數(shù)使用時,應(yīng)在源文件中包含頭文件stdlib.h1. 隨機(jī)數(shù)發(fā)生器函數(shù) rand 函數(shù)原型: int rand(void) 返回值:產(chǎn)生一個0(int的最大值)之間的隨機(jī)整數(shù)。 例:rand()返回產(chǎn)生的隨機(jī)數(shù)。 2.初始化隨機(jī)數(shù)發(fā)生器函數(shù) srand 函數(shù)原型: void srand(unsigned a) 功能:以給定數(shù)初始化隨機(jī)數(shù)發(fā)生器。 例:srand(10);rand(); 以給定數(shù)10初始化隨機(jī)數(shù)發(fā)生器,再產(chǎn)生一個隨機(jī)數(shù)。例如:srand(time(NULL);rand();以當(dāng)前系統(tǒng)時間初始化隨機(jī)數(shù)發(fā)生器,再產(chǎn)生一個隨機(jī)數(shù)。其中time為系統(tǒng)庫函數(shù),對應(yīng)頭文件為ti
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國家飾布藝品數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國低溫雙門食具消毒柜數(shù)據(jù)監(jiān)測研究報告
- 內(nèi)科三基培訓(xùn)試題及答案
- 江蘇省南京師范大學(xué)附屬中學(xué)2024-2025學(xué)年高一上學(xué)期期末考試化學(xué)試卷(含答案)
- 河北省部分學(xué)校2024-2025學(xué)年高三下學(xué)期3月聯(lián)考思想政治試題(含答案)
- 施工類承包商部門級環(huán)境培訓(xùn)試題
- 2025年消防設(shè)施操作員之消防設(shè)備高級技能能力提升試卷A卷附答案
- 2024廣東省中考英語真題【原卷版】
- 采購與項目執(zhí)行分包合同(2篇)
- 鋼管腳手架分包合同
- 中醫(yī)藥膳學(xué)(上篇總論)課件
- 勞動創(chuàng)造美好生活教案完整版精
- 6提高電纜線路施工質(zhì)量一次合格率QC成果
- 2021年福建省南平市第一醫(yī)院醫(yī)護(hù)人員招聘筆試試題及答案解析
- GB∕T 17587.1-2017 滾珠絲杠副 第1部分:術(shù)語和符號
- 土石壩設(shè)計畢業(yè)設(shè)計
- 【分享貼】2018AFP案例結(jié)業(yè)題目10:青年家庭限購政策下的公寓商鋪答案解析
- 三年級學(xué)生學(xué)情分析
- 高中化學(xué)競賽-中級無機(jī)化學(xué)--金屬原子簇word版本
- 沖壓工藝與模具設(shè)計拉深
- 水泥穩(wěn)定碎石配合比設(shè)計報告7頁
評論
0/150
提交評論