第4章常用標(biāo)準(zhǔn)庫函數(shù)_第1頁
第4章常用標(biāo)準(zhǔn)庫函數(shù)_第2頁
第4章常用標(biāo)準(zhǔn)庫函數(shù)_第3頁
第4章常用標(biāo)準(zhǔn)庫函數(shù)_第4頁
第4章常用標(biāo)準(zhǔn)庫函數(shù)_第5頁
已閱讀5頁,還剩70頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第4章

常用標(biāo)準(zhǔn)庫函數(shù)1程序設(shè)計基礎(chǔ)第4章常用標(biāo)準(zhǔn)庫函數(shù)4.1輸入輸出函數(shù)4.2字符串操作函數(shù)4.3數(shù)學(xué)運(yùn)算函數(shù)4.4圖形操作函數(shù)4.5綜合應(yīng)用舉例2程序設(shè)計基礎(chǔ)庫函數(shù)

C編譯系統(tǒng)為方便用戶使用而提供的已經(jīng)編寫好的公共函數(shù)。ANSIC標(biāo)準(zhǔn)庫函數(shù)大致分為以下幾類:輸入輸出函數(shù)、數(shù)學(xué)函數(shù)、字符串函數(shù)、目錄函數(shù)、分類函數(shù)、診斷函數(shù)、時間日期函數(shù)、其它函數(shù)。在C語言中要使用庫函數(shù),應(yīng)當(dāng)使用編譯預(yù)處理命令“#include”把與該庫函數(shù)相關(guān)的頭文件包含進(jìn)來注意3程序設(shè)計基礎(chǔ)4.1輸入輸出函數(shù)1.字符輸入輸出函數(shù)1)字符輸出函數(shù)putchar()函數(shù)原型:int

putchar(intc);功能:向終端輸出一個字符?!菊f明】(1)參數(shù)c可以是字符型變量、整型變量、字符常量或整型常量(要求在0-255范圍內(nèi))。(2)函數(shù)返回值為輸出字符的ASCII碼值。(3)putchar函數(shù)也可以輸出轉(zhuǎn)義字符。4程序設(shè)計基礎(chǔ)#include"stdio.h"voidmain(){chara,b,c;int

i,j,k;a='s';putchar(a);putchar('\n');/*換行*/putchar('s');putchar('\n');/*換行*/i=115;putchar(i);putchar('\n');/*換行*/putchar(115);putchar(10);/*換行*/}【例4.1】體會字符輸出函數(shù)的功能。5程序設(shè)計基礎(chǔ)4.1輸入輸出函數(shù)1.字符輸入輸出函數(shù)2)字符輸入函數(shù)getchar()

函數(shù)原型:int

getchar(void);功能:從鍵盤輸入中得到一個字符?!菊f明】(1)函數(shù)返回值為輸入字符的ASCII碼值。(2)getchar函數(shù)的值可以賦給一個字符變量或整型變量,也可以不賦給任何變量。(3)不同的字符輸入方法對結(jié)果的影響不同。6程序設(shè)計基礎(chǔ)【例4.2】體會字符輸入函數(shù)的功能。

#include"stdio.h"voidmain(){chara,b,c;a=getchar();b=getchar();c=getchar();putchar(a);putchar(b);putchar(c);}若輸入:sun↙則輸出:sun若輸入:sun則輸出:Su7程序設(shè)計基礎(chǔ)2.格式輸入輸出函數(shù)1)格式輸出函數(shù)printf()函數(shù)原型:int

printf("格式控制",輸出列表)功能:產(chǎn)生格式化輸出,按"格式控制"所指格式將輸出表列的值輸出到標(biāo)準(zhǔn)輸出設(shè)備?!菊f明】(1)"格式控制",用于說明輸出的數(shù)據(jù)類型及格式。(2)輸出表列與格式控制中說明的控制格式相對應(yīng)的要輸出的數(shù)據(jù)表。(3)原則上,輸出表列中變量的個數(shù)與類型應(yīng)與格式說明中指定的數(shù)據(jù)的個數(shù)和類型應(yīng)一致,且從左到右一一對應(yīng)。4.1輸入輸出函數(shù)8程序設(shè)計基礎(chǔ)常用printf函數(shù)格式字符見表4.1所示

格式字符意義d,i按帶符號十進(jìn)制整數(shù)輸出(正數(shù)不輸出符號)u按無符號十進(jìn)制整數(shù)輸出o按無符號八進(jìn)制整數(shù)輸出(不輸出前導(dǎo)符o)x,X按無符號十六進(jìn)制整數(shù)輸出(不輸出前導(dǎo)符ox)c按字符型輸出,只輸出一個字符s按字符串輸出f按浮點型小數(shù)輸出,隱含輸出6位小數(shù)e,E按科學(xué)計數(shù)法輸出,數(shù)字部分的小數(shù)部分為6位g,G按e和f格式中較短的一種輸出表4.1printf函數(shù)格式字符printf函數(shù)格式字符9程序設(shè)計基礎(chǔ)常用的修飾符如表4.2(其中w、n均代表一個正整數(shù))。

表4.2printf函數(shù)修飾符修飾符意義0ww為輸出寬度,不足w時,左補(bǔ)零如:%05d-ww為輸出寬度,不足w時,右補(bǔ)空格如:%-5d+ww為輸出寬度,不足w時,左補(bǔ)空格如:%+5d#使八進(jìn)制、十六進(jìn)制輸出帶前導(dǎo)符:o、ox或oX。如:%#o、%#xw.n

w為輸出寬度,n為小數(shù)位數(shù)或輸出的字符個數(shù)。不夠規(guī)定寬度,左補(bǔ)空格,超過規(guī)定寬度,按實際長度輸出。如:%6.2f;%6.9sl可加在格式字符d,u,o,x前面作前綴,輸出long或double型時使用,如:%ldprintf函數(shù)格式字符10程序設(shè)計基礎(chǔ)printf函數(shù)格式字符對上述格式字符可進(jìn)行如下分類:整型格式:d(i),o,x,u字符型格式:c字符串格式:s;實型格式:f,e,g修飾符:l,m,n,-【注意】(1)格式符最好用小寫(除X,E,G外,都應(yīng)用小寫)。(2)格式說明以“%”開頭,以上述格式字符之一結(jié)束,中間可插入修飾符(l,w,n,-)。其它字符照原樣輸出,也可使用“轉(zhuǎn)義字符”。(3)若想輸出“%”,在“格式控制”中應(yīng)使用連續(xù)兩個“%”,如printf(“%f%%”,1.0/3)。(4)不同的系統(tǒng)在格式輸出時有些差異。11程序設(shè)計基礎(chǔ)d格式

%d,%wd(%0wd),

%-wd,%ld(%wld,%0wld,%-wld)u格式%u,%wu,%0wu,%-wu,%lu,%wlu,%0wlu,%-wlu

o格式

%o,%wo,%0wo,%#wo(加前導(dǎo)0),%-wo,%-#wo(加前導(dǎo)0);

%lo,%wlo,%0wlo,%#wlo(加前導(dǎo)0),%-wlo,%-#wlo(加前導(dǎo)0)x格式

%x,%wx,%0wx,%#wx(加前導(dǎo)0x),%-mx,%-#wx(加前導(dǎo)0x)(含義同d格式);

%lx,%wlx,%0wlx,%#wlx(加前導(dǎo)0x),%-wlx,%-#wlx(加前導(dǎo)0x)c格式

%c,%wc

,%-wc

(含義同d格式)

s格式

%s,%ws

,%-ws

,%w.ns

,%-w.ns

(含義同d格式)

f格式

%f,%w.nf,%-w.nf

e格式%e,%w.ne,%0w.ne,%-w.ne,%Eg格式

%g,%w.ng,%0w.ng,

%-w.ng各種常用格式字符具體用法介紹:12程序設(shè)計基礎(chǔ)【例4.3】體會printf函數(shù)的功能。

#include"stdio.h"voidmain(){inta=123,b=-3721;floatx=123.456;printf("a=%d,b=%d\n",a,b);printf("a=%4da=%04da=%-4d\n",a,a,a);printf("b=%7db=%07db=%-9db=%2d\n",b,b,b,b);printf("a=%8ld,b=%8ld\n",a,b);printf("a=%-8ld,b=%-8ld\n",a,b);printf("%3s,%7.2s,%.4s,%-5.3s\n","sun","sun","sun","sun");printf("%f,%e,%g\n",x,x,x);printf("%10.3e,%010.1e,%012.5e\n",x,x,x);}13程序設(shè)計基礎(chǔ)4.1輸入輸出函數(shù)2.格式輸入輸出函數(shù)2)格式輸入函數(shù)scanf()

函數(shù)原型:int

scanf("格式控制",地址列表)功能:執(zhí)行格式化輸入,從標(biāo)準(zhǔn)輸入設(shè)備上按"格式控制"所指格式,輸入數(shù)據(jù)給地址列表所指向的單元?!菊f明】(1)格式控制"格式控制",的含義同printf函數(shù)(2)輸入表列只能采用“地址表列”(3)在執(zhí)行數(shù)據(jù)輸入時,以一個或多個空格、或回車鍵、或跳格鍵(Tab)作為分隔符。(4)例中,“&”是地址運(yùn)算符,作用于變量,其地址在變量定義時由編譯程序確定。14程序設(shè)計基礎(chǔ)scanf函數(shù)格式字符表4.3scanf函數(shù)格式字符格式字符意義d,i輸入有符號的十進(jìn)制整數(shù)u輸入無符號的十進(jìn)制整數(shù)o輸入無符號的八進(jìn)制整數(shù)x,X輸入無符號的十六進(jìn)制整數(shù)c輸入一個字符s輸入一個字符串,輸入的字符串的頭,尾和中間都不能有空格。f輸入一個小數(shù)形式的浮點數(shù),可用小數(shù)或指數(shù)形式輸入e,E輸入一個指數(shù)形式的浮點數(shù),可用小數(shù)或指數(shù)形式輸入15程序設(shè)計基礎(chǔ)scanf函數(shù)常用的修飾符表4.4scanf函數(shù)修飾符修飾符意義l輸入long型(%ld,%lo,%lx,%lu)和double型(%lf,%le)數(shù)據(jù)。h輸入short型(%hd,%ho,%hx,%hu)數(shù)據(jù)。w指定輸入數(shù)據(jù)的寬度(正整數(shù))。*本項輸入不賦給變量,即跳過。16程序設(shè)計基礎(chǔ)【注意】(1)在scanf中應(yīng)使用變量的地址。(2)選擇合適的輸入分隔符。(3)可以指定輸入數(shù)據(jù)的寬度,系統(tǒng)自動截取。(4)在用“%c”輸入字符時,空格和“轉(zhuǎn)義字符”都作為有效字 符輸入,不需要用空格作間隔。(5)“%*”一般用于在利用現(xiàn)成的數(shù)據(jù)輸入時,“跳過”某些數(shù) 據(jù)。(6)輸入數(shù)據(jù)時不能規(guī)定精度。(7)在輸入數(shù)據(jù)時,遇到以下情況該數(shù)據(jù)認(rèn)為結(jié)束:遇空 格、回車、跳格鍵(Tab)、遇寬度結(jié)束、遇非法輸 入。17程序設(shè)計基礎(chǔ)【例4.4】體會格式輸入輸出函數(shù)的功能。#include"stdio.h"voidmain(){inta;charc;scanf("%d",&a);scanf("%c",&c);printf("a=%d",a);printf("c=%c",c);}18程序設(shè)計基礎(chǔ)4.2字符串操作函數(shù)1字符串輸出函數(shù)puts()函數(shù)原型:int

puts(char*str)功能:從str指定的地址開始,依次將存儲單元中的字符串輸出到顯示器,直至遇到字符串結(jié)束標(biāo)志為止?!菊f明】若成功,返回?fù)Q行符;若失敗,返回EOF?!咀⒁狻?1)若字符串中包含轉(zhuǎn)義字符,則按轉(zhuǎn)義后的結(jié)果輸出。(2)輸出時自動把‘\0’轉(zhuǎn)換為‘\n’后輸出(自動換行)。19程序設(shè)計基礎(chǔ)【例4.5】體會字符串輸出函數(shù)的功能。#include"stdio.h"voidmain(){ chars[]="good\nsun\tday";

puts(s);}20程序設(shè)計基礎(chǔ)4.2字符串操作函數(shù)2字符串輸入函數(shù)gets()函數(shù)原型:char*gets(char*str)功能:從鍵盤輸入一個字符串(該字符串中可以包含空格),直至遇到回車符為止,并將該字符串存放到由str所指定的數(shù)組中(或內(nèi)存區(qū)域)?!菊f明】(1)輸入字符串時以換行符作為分隔符(空格是有效輸入)。(2)輸入時自動把‘\n’轉(zhuǎn)換為‘\0’后存于字符串的尾部。(3)參數(shù)str為字符串中第一個字符的存放地址,通常為字符數(shù)組名,也可以是第8章將要介紹的字符型指針變量。21程序設(shè)計基礎(chǔ)【例4.6】體會字符串輸入函數(shù)的功能。

#include"stdio.h"voidmain(){inti;chars[10];gets(s);puts(s);}22程序設(shè)計基礎(chǔ)4.2字符串操作函數(shù)3字符串連接函數(shù)strcat()函數(shù)原型:char*strcat(char*str1,char*str2)功能:將以str2為首地址的字符串連接到str1串的后面,且從str1串的’\0’所在單元連接起,即自動覆蓋了str1串的結(jié)束標(biāo)志’\0’?!菊f明】(1)參數(shù)str2既可以為字符數(shù)組名、指向字符數(shù)組的指針變量,也可以為字符串常量。(2)str1必須有足夠的空間來存儲連接結(jié)果,以確保兩個字符串連接后不出現(xiàn)超界現(xiàn)象。(3)連接時取消str1后的‘\0’,只在連接后的新串尾部加‘\0’。(4)該函數(shù)的返回值為str1串的首地址。23程序設(shè)計基礎(chǔ)【例4.7】利用strcat函數(shù)實現(xiàn)字符串的連接。#include"string.h"#include"stdio.h"voidmain(){chars1[15]="hello",s2[10]="world";strcat(s1,s2);puts(s1);puts(s2);strcat(s1,"good");puts(s1);}24程序設(shè)計基礎(chǔ)4.2字符串操作函數(shù)4字符串復(fù)制函數(shù)strcpy()函數(shù)原型:char*strcpy(char*str1,char*str2)功能:將字符串str2復(fù)制到字符串str1后,返回指向str1的指針?!菊f明】(1)參數(shù)str2既可以為字符數(shù)組名、指向字符數(shù)組的指針變量,也可以為字符串常量。(2)str1串所在的字符數(shù)組要留有足夠的空間,以確保復(fù)制字符串后不出現(xiàn)超界現(xiàn)象。(3)復(fù)制后str1原來內(nèi)容被覆蓋。【注意】不能如此復(fù)制字符串:charstr1[]=“abc”;charstr2[]=str1;25程序設(shè)計基礎(chǔ)【例4.8】利用strcpy函數(shù)實現(xiàn)字符串的復(fù)制。#include<string.h>#include"stdio.h"voidmain(){chars1[20]="helloworld",s2[10]="good";strcpy(s1,s2);puts(s1);puts(s2);strcpy(s1,"welcome");puts(s1);}26程序設(shè)計基礎(chǔ)4.2字符串操作函數(shù)5字符串比較函數(shù)strcmp()函數(shù)原型:int

strcmp(char*str1,char*str2);功能:比較兩個字符串的大小。【說明】(1)兩個參數(shù)str1和str2既可以為字符數(shù)組名、指向字符數(shù)組的指針變量,也可以為字符串常量。(2)兩個字符串進(jìn)行比較不能直接用關(guān)系運(yùn)算符進(jìn)行比較,必須用strcmp函數(shù)進(jìn)行比較(3)字符串之間比較的規(guī)則(4)兩個字符串比較結(jié)果的函數(shù)返回值等于第一個不同字符的ASCII代碼之差。

【注意】對兩個字符串比較,不能寫成如下形式:

if(str1==str2) 或if(str1>str2) 或if(str1<str2) 27程序設(shè)計基礎(chǔ)【例4.9】利用strcmp函數(shù)實現(xiàn)字符串的比較。

#include<string.h>#include"stdio.h"voidmain(){chars1[]="ABC",s2[]="ABD";intn;n=strcmp(s1,s2);printf("n=%d\n",n);n=strcmp(s2,s1);printf("n=%d\n",n);}28程序設(shè)計基礎(chǔ)4.2字符串操作函數(shù)6求字符串長度函數(shù)strlen()函數(shù)原型:unsignedint

strlen(char*str)功能:求字符串str的實際長度(從首地址到‘\0’之間的字符個數(shù),不包含’\0’),并將其作為函數(shù)值返回。【說明】參數(shù)str可以是字符數(shù)組、字符指針或串常量。29程序設(shè)計基礎(chǔ)【例4.10】利用strlen函數(shù)求字符串的長度。#include<string.h>#include"stdio.h"voidmain(){chars1[]="good\tbetter\tbest\n";chars2[]="ab\105";puts(s1);puts(s2);printf("%d\n",strlen(s1));printf("%d\n",strlen(s2));

printf("%d\n",strlen("hello"));

printf("%d\n",strlen("world"));}30程序設(shè)計基礎(chǔ)4.2字符串操作函數(shù)7strlwr函數(shù)函數(shù)原型:char*strlwr(char*str);功能:把字符串中的所有字母都變成小寫?!菊f明】(1)參數(shù)str可以是字符數(shù)組、字符指針或串常量。(2)運(yùn)行該函數(shù)后參數(shù)str的內(nèi)容改變。(3)函數(shù)返回值為字符串的首地址。31程序設(shè)計基礎(chǔ)【例4.11】體會strlwr函數(shù)的功能。#include<string.h>#include"stdio.h"voidmain(){chars1[]="GOOD\tBetteR\tBesT\n";chars2[]="AB\105";puts(s1);puts(s2);strlwr(s1);strlwr(s2);puts(s1);puts(s2);}32程序設(shè)計基礎(chǔ)4.2字符串操作函數(shù)8strupr函數(shù)函數(shù)原型:char*strupr(char*str)功能:把字符串str中的所有字母都變成大寫?!菊f明】(1)參數(shù)str可以是字符數(shù)組、字符指針或串常量。(2)運(yùn)行該函數(shù)后參數(shù)str的內(nèi)容改變。(3)函數(shù)返回值為字符串的首地址。33程序設(shè)計基礎(chǔ)【例4.12】體會strupr函數(shù)的功能。

#include<string.h>#include"stdio.h"voidmain(){chars1[]="good\tbetter\tbest\n";chars2[]="ab\105";puts(s1);puts(s2);strupr(s1);strupr(s2);puts(s1);puts(s2);}34程序設(shè)計基礎(chǔ)4.3數(shù)學(xué)運(yùn)算函數(shù)1求絕對值函數(shù)abs函數(shù)函數(shù)原型:int

abs(inti);功能:返回整數(shù)的絕對值。fabs函數(shù)函數(shù)原型:doublefabs(doublex);功能:返回浮點數(shù)的絕對值。35程序設(shè)計基礎(chǔ)【例4.13】體會絕對值函數(shù)的使用。#include<stdio.h>#include<math.h>int

main(void){intn1=-1234;printf("number1:%dabsolutevalue:%d\n",n1,abs(n1));floatn2=-1234.0;printf("number2:%fabsolutevalue:%f\n",n2,fabs(n2));return0;}36程序設(shè)計基礎(chǔ)4.3數(shù)學(xué)運(yùn)算函數(shù)2指數(shù)和對數(shù)函數(shù)exp函數(shù)函數(shù)原型:doubleexp(doublex);功能:返回指數(shù)函數(shù)exp的值。pow

函數(shù)函數(shù)原型:doublepow(doublex,doubley);功能:返回指數(shù)函數(shù)(x的y次方)的值。log函數(shù)函數(shù)原型:doublelog(doublex);功

能:返回自然對數(shù)函數(shù)ln(x)(即logex)的值。log10函數(shù)函數(shù)原型:doublelog10(doublex);功

能:返回以10為底的對數(shù)函數(shù)(即log10x)的值。37程序設(shè)計基礎(chǔ)【例4.14】體會指數(shù)和對數(shù)函數(shù)的使用。#include<stdio.h>#include<math.h>int

main(void){doubleresult;doublex1=4.0;result=exp(x1);

printf("(e^%lf)=%lf\n",x1,result);doublex2=2.0,y=3.0;

printf("%lf^%lfis%lf\n",x2,y,pow(x2,y));doublex3=8.6872;result=log(x3);

printf("Thenaturallogof%lfis%lf\n",x3,result);doublex4=800.6872;result=log10(x4);

printf("Thecommonlogof%lfis%lf\n",x4,result);return0;}38程序設(shè)計基礎(chǔ)4.3數(shù)學(xué)運(yùn)算函數(shù)3三角函數(shù)sin函數(shù)函數(shù)原型:doublesin(doublex);功能:正弦函數(shù),返回x的正弦(即sin(x))的值,x的單位為弧度。asin函數(shù)函數(shù)原型:doubleasin(doublex);功能:反正弦函數(shù),返回x的反正弦(即sin-1(x))的值,x應(yīng)在-1到1范圍內(nèi)。cos函數(shù)函數(shù)原型:doublecos(doublex);功能:余弦函數(shù),返回x的余弦(即cos(x))的值,x的單位為弧度。acos函數(shù)函數(shù)原型:doubleacos(doublex);功能:反余弦函數(shù),返回x的反余弦(即cos-1(x))的值,x應(yīng)在-1到1范圍內(nèi)。tan函數(shù)函數(shù)原型:doubletan(doublex);功能:正切函數(shù),返回x的正切(即tan(x))的值,x為弧度。atan函數(shù)函數(shù)原型:doubleatan(doublex);功能:反正切函數(shù),返回x的反正切(即tan-1(x))的值。39程序設(shè)計基礎(chǔ)【例4.15】體會三角函數(shù)的使用#include<stdio.h>#include<math.h>int

main(void){doubleresult,x=0.5;result=sin(x);printf("Thesinof%lfis%lf\n",x,result);result=asin(x);printf("Thearcsinof%lfis%lf\n",x,result);result=cos(x);printf("The

cosof%lfis%lf\n",x,result);result=acos(x);printf("Thearccosineof%lfis%lf\n",x,result);result=tan(x);printf("Thetanof%lfis%lf\n",x,result);result=atan(x);printf("Thearctangentof%lfis%lf\n",x,result);return0;}

40程序設(shè)計基礎(chǔ)4.3數(shù)學(xué)運(yùn)算函數(shù)4其他函數(shù)sqrt函數(shù)函數(shù)原型:doublesqrt(doublex);功能:計算平方根,返回x的平方根,x應(yīng)大于等于0。ceil函數(shù)函數(shù)原型:doubleceil(doublex);功能:向上舍入,返回不小于x的最小整數(shù)。floor函數(shù)函數(shù)原型:doublefloor(doublex);功能:向下舍入,返回不大于x的最大整數(shù)。fmod函數(shù)函數(shù)原型:doublefmod(doublex,doubley);功能:計算x對y的模,返回x/y的余數(shù)。41程序設(shè)計基礎(chǔ)【例4.16】體會其他數(shù)學(xué)函數(shù)的使用。#include<math.h>#include<stdio.h>int

main(void){doublex=4.0,result;result=sqrt(x);

printf("Thesquarerootof%lfis%lf\n",x,result);doublenumber=100.16;doubledown,up;down=floor(number);up=ceil(number);

printf("originalnumber%5.2lf\n",number);

printf("numberroundeddown%5.2lf\n",down);

printf("numberroundedup%5.2lf\n",up);doublex1=5.0,y=2.0;result=fmod(x1,y);

printf("Theremainderof(%lf/%lf)is\%lf\n",x1,y,result);return0;}42程序設(shè)計基礎(chǔ)4.4圖形操作函數(shù)1有關(guān)圖形模式和坐標(biāo)位置的函數(shù)initgraph函數(shù)函數(shù)原型:

void

far

initgraph(int

far

*graphdriver,

int

far

*graphmode,

char

far

*pathtodriver);

功能:初始化圖形系統(tǒng)。

registerbgidriver

函數(shù)函數(shù)原型:

int

registerbgidriver(void(*driver)(void));

功能:

登錄已連接進(jìn)來的圖形驅(qū)動程序代碼。getmaxx

函數(shù)函數(shù)原型:intfargetmaxx(void);功能:返回屏幕的最大x坐標(biāo)。getmaxy

函數(shù)函數(shù)原型:intfargetmaxy(void);功能:返回屏幕的最大y坐標(biāo)。43程序設(shè)計基礎(chǔ)4.4圖形操作函數(shù)2屏幕顏色的設(shè)置和清屏函數(shù)setbkcolor

函數(shù)函數(shù)原型:voidfarsetbkcolor(intcolor);功能:設(shè)置當(dāng)前背景顏色。setcolor

函數(shù)函數(shù)原型:voidfarsetcolor(intcolor);功能:設(shè)置當(dāng)前前景顏色。getmaxcolor函數(shù)函數(shù)原型:intfargetmaxcolor(void);功能:返回可以傳給函數(shù)setcolor的最大顏色值。cleardevice函數(shù)函數(shù)原型:voidfarcleardevice(void);功能:清除圖形屏幕內(nèi)容。44程序設(shè)計基礎(chǔ)【例4.17】體會圖形模式的初始化和有關(guān)坐標(biāo)位置的函數(shù)以及屏幕顏色的設(shè)置和清屏函數(shù)的使用。

#include<graphics.h>#include<stdlib.h>#include<stdio.h>#include<conio.h>int

main(void){

int

gdriver,gmode;

intcolor,maxcolor,x,y,bkcol;charmsg[80];

registerbgidriver(EGAVGA_driver);/*登錄已連接進(jìn)來的圖形驅(qū)動程序代碼*/

initgraph(&gdriver,&gmode,"");/*初始化圖形系統(tǒng)*/

maxcolor=getmaxcolor();

settextjustify(CENTER_TEXT,CENTER_TEXT);/*為圖形函數(shù)設(shè)置文本的對齊方式*/x=getmaxx()/2;y=getmaxy()/2;45程序設(shè)計基礎(chǔ)

for(bkcol=0;bkcol<=maxcolor;bkcol++){

cleardevice();/*清除圖形屏幕內(nèi)容*/

setbkcolor(bkcol);/*設(shè)置當(dāng)前背景顏色*/if(bkcol==WHITE)

setcolor(EGA_BLUE);/*設(shè)置當(dāng)前前景顏色*/

sprintf(msg,"Backgroundcolor:%d",bkcol);

outtextxy(x,y,msg);

getch();}for(color=1;color<=maxcolor;color++){

cleardevice();

setcolor(color);

sprintf(msg,"Color:%d",color);/*送格式化輸出到字符串中*/

outtextxy(x,y,msg);/*在指定位置顯示字符串*/

getch();}

closegraph();return0;}46程序設(shè)計基礎(chǔ)4.4圖形操作函數(shù)3基本圖形函數(shù)畫點函數(shù)putpixel函數(shù)原型:voidfarputpixel(intx,inty,int

pixelcolor);功能:在指定位置畫一像素【例4.18】體會畫點函數(shù)putpixel的使用。(見教材)47程序設(shè)計基礎(chǔ)4.4圖形操作函數(shù)3基本圖形函數(shù)畫線函數(shù)(1)line函數(shù)函數(shù)原型:voidfarline(intx0,inty0,intx1,inty1);

功能:畫一條從點(x0,y0)到(x1,y1)的直線。(2)lineto函數(shù)

函數(shù)原型:voidfarlineto(intx,inty);

功能:畫一條從當(dāng)前位置到點(x,y)的直線。(3)linerel函數(shù)

函數(shù)原型:voidfarlinerel(int

dx,int

dy);

功能:畫一條從當(dāng)前位置(x,y)到按相對增量確定的點(x+dx,y+dy)的直線。(4)circle函數(shù)函數(shù)原型:voidfarcircle(intx,inty,intradius);

功能:以(x,y)為圓心,radius為半徑畫一個圓。48程序設(shè)計基礎(chǔ)4.4圖形操作函數(shù)3基本圖形函數(shù)畫線函數(shù)(5)arc函數(shù)函數(shù)原型:voidfararc(intx,inty,int

stangle,int

endangle,intradius);功能:畫圓弧線。(6)ellipse函數(shù)函數(shù)原型:voidellipse(intx,inty,int

stangle,int

endangle,int

xradius,int

yradius);

功能:畫橢圓線。(7)rectangle函數(shù)函數(shù)原型:voidfarrectangle(intx1,inty1,intx2,inty2);功能:畫一個矩形框。(8)drawpoly函數(shù)函數(shù)原型:voidfardrawpoly(int

numpoints,intfar*polypoints);

功能:畫一個多邊形?!纠?.19】體會上述畫線函數(shù)的使用。(見教材)49程序設(shè)計基礎(chǔ)4.4圖形操作函數(shù)4封閉圖形填充函數(shù)setfillstyle函數(shù)函數(shù)原型:

void

far

setfillstyle(int

pattern,

int

color);

功能:

設(shè)置填充模式和顏色。bar函數(shù)函數(shù)原型:

voidfarbar(intx1,inty1,intx2,inty2);功能:

畫一個二維條形圖。bar3d函數(shù)函數(shù)原型:

voidfarbar3d(intx1,inty1,intx2,inty2,intdepth,int

topflag);功能:畫一個三維條形圖。50程序設(shè)計基礎(chǔ)4.4圖形操作函數(shù)4封閉圖形填充函數(shù)sector函數(shù)函數(shù)原型:voidfarsector(intx,inty,int

stangle,int

endangle,int

xradius,int

yradius);功能:畫一個橢圓扇形,再按規(guī)定方式填充。pieslice函數(shù)

函數(shù)原型:voidfarpieslice(intx,inty,int

stangle,int

endangle,intradius);功能:畫一個扇形,再按規(guī)定方式填充。【例4.20】體會上述圖形填充函數(shù)的使用。

(見教材)

51程序設(shè)計基礎(chǔ)4.5綜合應(yīng)用舉例#include<string.h>#include"stdio.h"voidmain(){charc;

printf("pleaseinputaletter:");

scanf("%c",&c);//或c=getchar();c=(c>='a'&&c<='z')?(c+'A'-'a'):(c+'a'-'A');printf("%c\n",c);//或putchar(c);}【例4.21】從鍵盤輸入一個字母,將大寫轉(zhuǎn)換為小寫,小寫轉(zhuǎn)換為大寫再輸出。52程序設(shè)計基礎(chǔ)【例4.22】從鍵盤輸入圓半徑r的值,求圓周長、圓面積的值并輸出。#include"stdio.h"voidmain(){floatr,l,s;floatpi=3.1415926;

printf("pleaseinputtheradius:\n");

scanf("%f",&r);l=2*pi*r;s=pi*r*r;

printf("perimeteris%6.2f\n",l);

printf("areais%6.2f\n",s);}53程序設(shè)計基礎(chǔ)【例4.23】從鍵盤輸入兩個字符串,測試字符串操作函數(shù)的使用。#include<string.h>#include"stdio.h"voidmain(){chars1[30],s2[15];printf("pleaseinputtwostring:\n");gets(s1);gets(s2);puts(s1);puts(s2);strcat(s1,s2);puts(s1);strupr(s2);puts(s2);strcpy(s1,s2);puts(s1);printf("compares1withs2=%d\n",strcmp(s1,s2));printf("%d\n",strlen(s1));}54程序設(shè)計基礎(chǔ)小結(jié)輸入輸出函數(shù)字符串操作函數(shù)數(shù)學(xué)運(yùn)算函數(shù)圖形操作函數(shù)1字符輸入輸出函數(shù):putchar()

getchar()2格式輸入輸出函數(shù):printf()

scanf()

1字符串輸出函數(shù)puts()2字符串輸入函數(shù)gets()3字符串連接函數(shù)strcat()4字符串復(fù)制函數(shù)strcpy()5字符串比較函數(shù)strcmp()6求字符串長度函數(shù)strlen()7strlwr函數(shù)8strupr函數(shù)1求絕對值函數(shù)2指數(shù)和對數(shù)函數(shù)3三角函數(shù)4其他函數(shù)1有關(guān)圖形模式和坐標(biāo)位置的函數(shù)2屏幕顏色的設(shè)置和清屏函數(shù)3基本圖形函數(shù):

畫點函數(shù);畫線函數(shù)4封閉圖形填充函數(shù)55程序設(shè)計基礎(chǔ)8.4指針與字符串1.字符串的表示形式1)字符數(shù)組:該方法是將字符串所包含的每個字符(包括結(jié)尾標(biāo)志’\0’)依次存放到一個字符數(shù)組中?!纠?.12】用字符數(shù)組存放字符串,并將其輸出。#include<stdio.h>main(){charstring[]="Hello.world!";printf("%s\n",string);}運(yùn)行結(jié)果:Hello,world!56程序設(shè)計基礎(chǔ)【說明】(1)字符數(shù)組string長度未明確定義,默認(rèn)的長度是字符串中字符個數(shù)外加結(jié)尾標(biāo)志,string數(shù)組長度應(yīng)該為13。(2)String是數(shù)組名,它表示字符數(shù)組首元素的地址(如圖8.19所示),string+6表示序號為6的元素的地址,它指向w,string[6],*(string+6)表示數(shù)組中序號為6的元素的值w。【注意】字符數(shù)組允許使用%s格式進(jìn)行整體輸出。而對一個數(shù)值型數(shù)組,是不能企圖用數(shù)組名輸出其全部元素?!舅伎肌孔址麛?shù)組初始化還有哪些形式?57程序設(shè)計基礎(chǔ)8.4指針與字符串1.字符串的表示形式2)字符指針對字符串而言,也可以不定義字符數(shù)組,直接定義指向字符串的指針變量來表示一個字符串?!纠?.13】用字符指針存放字符串并進(jìn)行輸出。#include<stdio.h>main(){char*string="Hello,world!";printf("%s\n",string);}運(yùn)行結(jié)果:Hello,world!58程序設(shè)計基礎(chǔ)【說明】(1)在這里沒有定義字符數(shù)組,在程序中定義了一個字符指針變量string。(2)C編譯程序是將字符串常量"Hello,world!"按字符數(shù)組處理的。【注意】在輸出時,用printf("%s\n",string);語句,%s表示輸出一個字符串,輸出項指定為字符指針變量string,系統(tǒng)先輸出它所指向的一個字符,然后自動使string加1,使之指向下一個字符,然后再輸出一個字符,直到遇到字符串結(jié)束標(biāo)志'\0'為止。【思考】如何實現(xiàn)對字符串中的每個元素的存取訪問?59程序設(shè)計基礎(chǔ)8.4指針與字符串2使用字符指針訪問字符串可以通過字符數(shù)組用下標(biāo)方法訪問字符串同樣也可以通過字符指針方法訪問字符串?!纠?.14】比較兩個字符串是否相等,相等輸出YES,不相等輸出NO。(1)下標(biāo)法將字符串的各字符(包括結(jié)尾標(biāo)志‘\0’)依次存放到字符數(shù)組中,利用下標(biāo)變量或數(shù)組名對數(shù)組進(jìn)行操作。程序代碼如下頁所示:60程序設(shè)計基礎(chǔ)程序如下:#include"stdio.h"main(){/*n為標(biāo)志,n為0時表示二字符串相等*/intn=0;inti=0;chars1[]="the";chars2[]="that";while(s1[i]!='\0'&&s2[i]!='\0'){if(s1[i]!=s2[i])/*當(dāng)二字符串不相等時執(zhí)行下面語句*/61程序設(shè)計基礎(chǔ){ n=1;/*n為1時表示二字符串不等*/ break; }i++;}if(n==0)printf("YES");elseprintf("NO");}運(yùn)行結(jié)果:NO【說明】通過下標(biāo)變量i訪問字符串各元素s1[i],s2[i]的值。【思考】考慮采用其他的循環(huán)控制條件實現(xiàn)上例。當(dāng)二字符串中的一個字符串是另一個字符串的子串時,如何對上述程序進(jìn)行改進(jìn)。62程序設(shè)計基礎(chǔ)

(2)指針法

對字符串而言,也可以不定義字符數(shù)組,直接定義指向字符串的指針變量,利用該指針變量對字符串進(jìn)行操作。程序如下:#include"stdio.h"#include"string.h"main(){/*n為標(biāo)志,n為0時表示二字符串相等*/intn=0;char*s1="the",*s2="that";while(*s1!='\0'&&*s2!='\0'){if(*s1!=*s2)/*當(dāng)二字符串不相等時執(zhí)行下面語句*/63程序設(shè)計基礎(chǔ){n=1;/*n為1時表示二字符串不等*/break;}s1++;s2++;}if(n==0)printf("YES");elseprintf("NO");}運(yùn)行結(jié)果:NO【說明】指針變量s1,s2的值允許改變且此例中二者必須同步移動。循環(huán)結(jié)束后指針變量的取值已不再是字符的首地址?!咀⒁狻勘纠齼煞N方法中,采用下標(biāo)法較為直觀清晰,而采用指針變量自加依次訪問字符串中各字符執(zhí)行速度快。究竟采用哪種方法較好,讀者可根據(jù)實際需要做合適取舍?!舅伎肌咳绾尾捎煤瘮?shù)調(diào)用的方法實現(xiàn)上例?64程序設(shè)計基礎(chǔ)8.4指針與字符串3字符數(shù)組與字符指針的區(qū)別

(1)存儲方式的區(qū)別字符數(shù)組由若干元素組成,每個元素存放一個字符而字符串指針中存放的是地址(字符串的首地址),決不是將整個字符串放到字符指針變量中。(2)賦值方式的區(qū)別對字符數(shù)組只能對各個元素賦值,不能用下列方法對字符數(shù)組賦值。charstr[13];str="Hello,world!";但若將str定義成字符指針,就可以采用下列方法賦值。char*str;str="Hello,world!";等價于char*str="Hello,world!";65程序設(shè)計基礎(chǔ)8.4指針與字符串3字符數(shù)組與字符指針的區(qū)別(3)定義方式的區(qū)別定義一個數(shù)組后,編譯系統(tǒng)分配具體的內(nèi)存單元,各單元有確切的地址;定義一個指針變量,編譯系統(tǒng)分配一個存儲地址單元,在其中可以存放地址值,也就是說,該指針變量可以指向一個字符型數(shù)據(jù)。但在對它賦以一個具體地址值前,它并未指向哪一個字符數(shù)據(jù)。(4)運(yùn)算方面的區(qū)別指針變量的值允許改變,如果定義了指針變量string,則string可以進(jìn)行++,--等運(yùn)算;而數(shù)組

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論