




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 4.可對字符量進行的運算 由于字符量具有數值,在機器內也是以整型常量的形式存放,因此字符可參與(cny)任何整數運算。 (1)利用算術運算實現大小寫字符的轉換 如:A+3265+32a b-3298-32B (2)利用算術運算實現字符與整數值之間的互換 如:9-057-489 4+04+48524 (3)字符常量也可以進行關系運算 如:ab 09(比較的是ASCII碼) (4)字符常量也可以進行邏輯運算 如:a&b 0&1第1頁/共44頁第一頁,共45頁。1、字符輸入(shr)函數函數(hnsh)返回值類型函數的名稱無參數從標準輸入設備(一般為鍵盤)讀入一個字符,返回該字符的
2、ASCII碼值,并且將敲入的字符“回顯”到屏幕上。6.3字符輸入與輸出函數第2頁/共44頁第二頁,共45頁。#include /*說明函數(hnsh)getchar的原型包含在哪個文件中*/void main()int a; char b; a=getchar(); b=getchar(); printf(a=%cta=%dtb=%ctb=%dn,a,a,b,b); 從鍵盤輸入字符(z f), 該字符(z f)的ASCII編碼值賦給a第3頁/共44頁第三頁,共45頁。程序運行情況程序運行情況(qngkung)(qngkung)如下:如下:1313 a=1 a=1a=49a=49b=3b=3b=
3、51 b=51 第4頁/共44頁第四頁,共45頁。調用函數getchar時,程序執行被中斷,等待用戶從鍵盤輸入數據(shj)。當用戶鍵入字符并敲回車鍵以后,程序繼續運行。若用戶輸入字符后未按回車鍵,則鍵入的內容一直保留在鍵盤緩沖區中,只有用戶鍵入回車鍵后,字符輸入函數getchar才進行處理。 函數(hnsh)getchar將回車鍵作為一個字符讀入。如果程序中有兩個以上函數(hnsh)getchar時,應該一次性輸入所需字符,最后再按回車鍵,如上例所示。無論輸入的是英文字母或標點符號還是數字,都是作為字符輸入 。第5頁/共44頁第五頁,共45頁。函數(hnsh)返回值類型函數(hnsh)的名稱
4、函數的參數向標準輸出設備(一般為顯示器)輸出一個字符,并返回輸出字符的ASCII碼值。2、字符輸出函數第6頁/共44頁第六頁,共45頁。#include 程序運行結果(ji gu)為:ABBCmain( ) int a=65; char b=B; putchar(a); putchar(65+1); putchar(b); putchar(B+1); 包含(bohn)函數putchar的頭文件第7頁/共44頁第七頁,共45頁。 #include stdio.h void main() char ch;int num=0; ch=getchar();【例6-3】 統計從鍵盤輸入的一行(yxng)
5、字符的個數(以回車鍵作為輸入結束標記)。while(ch!=n) 判斷判斷(pndun)是否是否輸入結束輸入結束num+; ch=getchar(); 第五章第五章 5.1 while語句語句printf(num=%dn,num); 第8頁/共44頁第八頁,共45頁。 【例【例6-46-4】 用用do-whiledo-while語句編寫程序統計從鍵盤語句編寫程序統計從鍵盤輸 入 的 一 行 非 空 字 符 的 個 數 ( 以 回 車 鍵 作 為輸 入 的 一 行 非 空 字 符 的 個 數 ( 以 回 車 鍵 作 為(zuwi)(zuwi)輸入結束標記)。輸入結束標記)。 #include s
6、tdio.hvoid main()char ch; int num=0; ch=getchar(); do num+; ch= getchar(); while(ch!=n); printf(num=%dn,num); 第五章第五章 5.2 do-while語句語句第9頁/共44頁第九頁,共45頁。第第7 7章章 函數函數(hnsh)(hnsh)與模與模塊化程序設計基礎塊化程序設計基礎7.1 7.1 概述概述(i sh)(i sh)7.2 7.2 函數函數(hnsh)(hnsh)的的定義定義7.3 7.3 函數的調用函數的調用7.4 7.4 變量的作用域與存儲特性變量的作用域與存儲特性第10頁
7、/共44頁第十頁,共45頁。7.1 7.1 概述概述(i sh)(i sh)一一. 模塊模塊(m kui)與函數與函數1. 結構化程序設計(shj) C語言是結構化的程序設計語言。一種設計程序的技術。通常采用自頂向下逐步求精的設計方法和單入口單出口控制結構。2.“自頂向下”的模塊化程序設計方法將一個大問題按層次分解成多個方便解決小問題的模塊的設計思想.第11頁/共44頁第十一頁,共45頁。3. 功能模塊 求解較小問題的算法和程序稱作“功能模塊”, 各功能模塊可以先單獨設計(shj),然后將求解所有子問題的模塊組合成求解原問題的程序。 主控模塊主控模塊模塊模塊1_1模塊模塊1_n模塊模塊2_1模
8、塊模塊2_n模塊模塊n_1模塊模塊n_n模塊模塊1模塊模塊2模塊模塊n由功能模塊組成(z chn)程序的結構圖第12頁/共44頁第十二頁,共45頁。4. 函數: 完成相對(xingdu)獨立功能的程序例7-1,輸入(shr)年月日,計算出該日為該年的第幾天。 分析:(1)判斷年份是否為閏年。年份有閏年與平年之分,兩者的區別在于閏年的二月為29天,平年的二月為28天。因此,給定一個年份,首先應確定(qudng)其是否是閏年。(2)求月份對應的天數。月份不同,其對應的天數不同,1、3、5、7、8、10、12月每月為31天,4、6、9、11月每月為30天,2月根據所在年份是否為閏年來確定(qudng
9、)。(3)求總天數。分為經歷完整的月份天數與經歷不完整的月份天數。(4)輸出數據。年月日及相應的天數。第13頁/共44頁第十三頁,共45頁。程序實現:(1)判斷(pndun)閏年。int leap(int year)int lp; lp=(year%4=0&year%100!=0|year%400=0)?1:0;return lp;主控模塊主控模塊判斷閏年判斷閏年求某月的天數求某月的天數輸輸 出出輸輸 入入求總天數求總天數程序模塊結構圖程序模塊結構圖第14頁/共44頁第十四頁,共45頁。(2)求某月的天數。/*函數(hnsh)month_days調用函數(hnsh)leap判斷year
10、是否為閏年*/int month_days(int year,int month) int ds,d; switch(month) case 1: case 3: case 5: case 7: case 8: case 10: case 12:d=31;break; case 2:d=leap(year)?29:28;break; /*若為閏年,d賦值29,否則賦值28*/ default:d=30; return d; 第15頁/共44頁第十五頁,共45頁。(3)求天數和。/*函數(hnsh)days調用函數(hnsh)month_days,求各月份對應的天數*/int days(int
11、year,int month,int day)int i,ds=0; for (i=1;i0?1:(x=0?0:-1);return y;/*返回函數值返回函數值*/第25頁/共44頁第二十五頁,共45頁。(3) return語句的表示語句的表示(biosh)形式如下:形式如下:return 表達式;表達式;或或 return(表達式);(表達式);符號函數的另一種定義符號函數的另一種定義(dngy)形式:形式:int sign(int x) /*形式參數類型說明與參數列表與函數形式參數類型說明與參數列表與函數(hnsh)名一起說明名一起說明*/ return y=x0?1: (x=0?0:-
12、1);/*返回一個復雜的表達式的值返回一個復雜的表達式的值*/當函數類型為當函數類型為float型并且型并且return語句缺省時,調用出錯。語句缺省時,調用出錯。當函數類型為當函數類型為int型并且型并且return語句的表達式缺省或語句的表達式缺省或return語語句缺省時,返回不確定的值(在句缺省時,返回不確定的值(在TC2中返回值為中返回值為0)第26頁/共44頁第二十六頁,共45頁。例例7-3:寫出以下:寫出以下(yxi)程序的運行結果。程序的運行結果。max( ) /*函數類型缺省,為函數類型缺省,為int型,型,return語句缺省語句缺省*/ min( ) /*函數類型缺省,函
13、數類型缺省,return語句缺省表達式語句缺省表達式*/return ;main( )printf(%d,%dn,max(),min()););程序運行結果為:程序運行結果為:-256,-256 /*返回值不確定,返回值不確定,TC2開發環境中返回值為開發環境中返回值為0*/若函數若函數(hnsh)max與函數與函數(hnsh)min的類型為的類型為float,則返,則返回值為:回值為:Floating point error: Domain.Abnormal program termination第27頁/共44頁第二十七頁,共45頁。在具有多個函數的在具有多個函數的C程序中,主函數出現的位
14、置并不重要。程序中,主函數出現的位置并不重要。為閱讀方便,可將主函數為閱讀方便,可將主函數main放在最前面。為了避免過多的放在最前面。為了避免過多的函數聲明函數聲明(shngmng)語句,習慣上將主函數放在所有函數之語句,習慣上將主函數放在所有函數之后。不論主函數放在什么位置,一旦啟動該程序,總是從主后。不論主函數放在什么位置,一旦啟動該程序,總是從主函數開始執行,并且最終在主函數結束整個程序的執行。函數開始執行,并且最終在主函數結束整個程序的執行。3. 函數函數(hnsh)main一個一個C語言程序至少包含一個函數,并且語言程序至少包含一個函數,并且(bngqi)必須有且只能有必須有且只能
15、有一個名為一個名為main的函數,稱之為主函數。的函數,稱之為主函數。在包含多個函數的程序中,不僅可以由主函數調用其它函在包含多個函數的程序中,不僅可以由主函數調用其它函數,還可以由被調函數調用其它函數,但任何函數都不能數,還可以由被調函數調用其它函數,但任何函數都不能調用主函數。調用主函數。通常主函數的類型定義為通常主函數的類型定義為void(在(在TC2中可省略函數中可省略函數main的類的類型說明)。型說明)。第28頁/共44頁第二十八頁,共45頁。7.3 函數函數(hnsh)的調的調用用在在C語言的一般語言的一般(ybn)函數體中,可以包含對其它函數的調用,函數體中,可以包含對其它函數
16、的調用,稱為函數的嵌套調用,甚至包含對自身的調用,稱為函數的遞歸稱為函數的嵌套調用,甚至包含對自身的調用,稱為函數的遞歸調用。調用。一個函數一旦被定義,就可在程序的其它函數中使用一個函數一旦被定義,就可在程序的其它函數中使用(shyng)它,它,這個過程稱為函數調用。這個過程稱為函數調用。一一. 函數的一般調用與聲明函數的一般調用與聲明函數名函數名(實際參數列表)實際參數列表)1. 函數調用形式函數調用形式函數調用的一般形式:函數調用的一般形式:第29頁/共44頁第二十九頁,共45頁。實際參數也稱為實在參數,簡稱實際參數也稱為實在參數,簡稱(jinchng)為實參,實際參數之間為實參,實際參數
17、之間以以“,”分隔。分隔。函數調用時,實參與形參應保持個數、次序及類型的一致性,以確函數調用時,實參與形參應保持個數、次序及類型的一致性,以確保保(qubo)實參與形參之間數據的正確傳遞。實參與形參之間數據的正確傳遞。實際參數一般為表達式,可以實際參數一般為表達式,可以(ky)是常量、變量(調用時必須有是常量、變量(調用時必須有確定的值或確定的地址)。確定的值或確定的地址)。形式參數必須為變量。形式參數必須為變量。當實際參數的個數、次序、類型與對應形式參數的個數、次序、類型當實際參數的個數、次序、類型與對應形式參數的個數、次序、類型不一致時,系統并不提示錯誤,后果卻難以預測。不一致時,系統并不
18、提示錯誤,后果卻難以預測。注意注意第30頁/共44頁第三十頁,共45頁。C語言中函數調用的三種語言中函數調用的三種(sn zhn)形式形式:函數函數(hnsh)語句調用語句調用函數函數(hnsh)表表達式調用達式調用函數參數調用函數參數調用在函數調用后加在函數調用后加“;”,構成一個語句。,構成一個語句。調用函數的目的可能是執行一個動作或調用函數的目的可能是執行一個動作或完成特定的功能。完成特定的功能。大多數函數的調用形式。大多數函數的調用形式。被調用函數執行的結果為調用函數提供一被調用函數執行的結果為調用函數提供一個值,除非一個函數的類型說明為個值,除非一個函數的類型說明為void型。型。調
19、用函數通過表達式接收值。調用函數通過表達式接收值。被調函數作為某個函數的一個參數。被調函數作為某個函數的一個參數。第31頁/共44頁第三十一頁,共45頁。例例7-4, 函數語句函數語句(yj)調用與函數表達式調用。調用與函數表達式調用。#include void main()()printf(nk1=%d,printf(n%k2););程序運行結果為:程序運行結果為:k2k1=3第32頁/共44頁第三十二頁,共45頁。void main( ) /*主函數中采用主函數中采用(ciyng)函數參數調用形式調用函數參數調用形式調用函數函數max2*/ int x,y,z,m; scanf(%d,%d
20、,%d,&x,&y,&z); printf(max=%dn,max2(max2(x,y),z); / *內層函數內層函數max2的值作為外層函數的值作為外層函數max2的實參,整個函數的實參,整個函數max2的值又作函數的值又作函數printf的的實參的的實參*/ 例例7-5:函數參數調用:函數參數調用(dioyng)形式調用形式調用(dioyng)函數函數max2:int max2(int a,int b) /*求兩個求兩個(lin )數中較大者數中較大者*/ int y; y=(ab)?a:b; return y;第33頁/共44頁第三十三頁,共45頁。2. 函數函
21、數(hnsh)聲明聲明調用用戶自定義函數時,一般調用函數和被調用函數應在同一個調用用戶自定義函數時,一般調用函數和被調用函數應在同一個文件中,在調用函數中對被調用函數返回值的類型、函數名稱文件中,在調用函數中對被調用函數返回值的類型、函數名稱(mngchng)、函數形式參數的類型進行說明,這種說明稱為函數聲、函數形式參數的類型進行說明,這種說明稱為函數聲明。明。函數函數(hnsh)聲明的一般形式如下:聲明的一般形式如下:類型名類型名 函數名(類型函數名(類型1 形參形參1,類型,類型2 形參形參2,類型,類型n 形參形參n););或或類型名類型名 函數名(類型函數名(類型1,類型,類型2,類型
22、,類型n););或或類型名類型名 函數名();函數名();函數聲明是以語句形式出現的,因此其后有語句結束標記函數聲明是以語句形式出現的,因此其后有語句結束標記“;”。若函數定義放在主調函數之前,遵循先定義后調用原則若函數定義放在主調函數之前,遵循先定義后調用原則,函數聲明可函數聲明可以省略。以省略。第34頁/共44頁第三十四頁,共45頁。例例7-6: 編程求兩個整數編程求兩個整數(zhngsh)的階乘之和。的階乘之和。long fac(n) /*定義函數定義函數(hnsh)fac,其功,其功能是求能是求n!*/int n;int i; long r=1;/*注意注意r的初始化值為的初始化值為1
23、*/ for(i=1;i=n;i+)r=r*i; return r;#include void main()int m1,m2; long result; long fac(int); /*在主函數中聲明后面在主函數中聲明后面(hu mian)定義定義的函數的函數fac*/ scanf(%d,%d,&m1,&m2); result=fac(m1)+fac(m2); printf(%d!+%d!=%ldn, m1,m2,result);第35頁/共44頁第三十五頁,共45頁。二二. 形參與形參與(cny)實實參參形式參數形式參數(簡稱簡稱(jinchng)形參形參)定義定義(dn
24、gy)函數使用的參數函數使用的參數實際參數實際參數(簡稱實參簡稱實參)調用函數使用的參數調用函數使用的參數C語言中,采用函數之間的參數傳遞方式或用全局變量共享數據語言中,采用函數之間的參數傳遞方式或用全局變量共享數據方式,使一個函數能對不同的數據進行相同功能的處理。方式,使一個函數能對不同的數據進行相同功能的處理。C語言函數的參數傳遞均采用單向值傳遞方式(或稱復制方式)。語言函數的參數傳遞均采用單向值傳遞方式(或稱復制方式)。單向值傳遞方式是指在函數調用時,將實參之值傳遞給對應單向值傳遞方式是指在函數調用時,將實參之值傳遞給對應的形式參數,使形參具有與實參相同的值。的形式參數,使形參具有與實參
25、相同的值。當實際參數是變量的地址值、指針常量或指針變量時,實際參數當實際參數是變量的地址值、指針常量或指針變量時,實際參數傳遞給形式參數的是地址值,也同樣是單向值傳遞方式。傳遞給形式參數的是地址值,也同樣是單向值傳遞方式。第36頁/共44頁第三十六頁,共45頁。例例7-77-7,求方程,求方程(fngchng)ax2+bx+c=0(fngchng)ax2+bx+c=0(a a0 0)的實)的實數根。數根。 分析:分析:(1)一元二次方程的實根的條件是:)一元二次方程的實根的條件是: 。(2)定義函數)定義函數(hnsh)dict來判斷數方程是否有實根,有實根則返來判斷數方程是否有實根,有實根則
26、返回函數回函數(hnsh)值值1,否則返回函數,否則返回函數(hnsh)值值0;然后在主函數;然后在主函數(hnsh)中求方程的實根。中求方程的實根。 240bac #include #include void main() float a,b,c,x1,x2,d,dt; int dict(float,float,float); /*聲明函數聲明函數(hnsh)dict及形式參數類型及形式參數類型*/ printf(Input a,b,c:); scanf(%f,%f,%f,&a,&b,&c);/*輸入方程輸入方程*/ d=dict(a,b,c);/*調用函數調用函數(
27、hnsh)dict,傳遞實參,傳遞實參a,b,c*/ dt=b*b-4*a*c; /* ,可以用一個函數可以用一個函數(hnsh)實現實現*/ 24bac 第37頁/共44頁第三十七頁,共45頁。if(d) x1=(-b+sqrt(dt)/(2*a);); x2=(-b-sqrt(dt)/(2*a);); printf(實根實根x1=%f,x2=%fn,x1,x2);else printf(無實數根無實數根!n);); int dict(a,b,c) /*定義函數定義函數dict及形參說明及形參說明(shumng)*/float a,b,c;float d; d=b*b-4*a*c; /*可以
28、用一個函數實現可以用一個函數實現*/ if(d=0) return(1); else return(0); 第38頁/共44頁第三十八頁,共45頁。函數main函數dictabcabc實參與形參數據傳遞通過通過(tnggu)函數調用,將實參的值傳遞給形參函數調用,將實參的值傳遞給形參. 函數調用時,系統對參數函數調用時,系統對參數(cnsh)的處理步驟為:的處理步驟為:(1)計算各實參的值,將實參值壓入形參棧中,然后執行)計算各實參的值,將實參值壓入形參棧中,然后執行(zhxng)函函數體。數體。(2)當函數執行)當函數執行(zhxng)完返回時,形參從棧頂彈出(取走)。完返回時,形參從棧頂彈
29、出(取走)。 第39頁/共44頁第三十九頁,共45頁。有關有關(yugun)實參與形參的幾點說明:實參與形參的幾點說明:(1)在函數)在函數(hnsh)定義中指定的形參,未調用時,它們不占用存儲單元。定義中指定的形參,未調用時,它們不占用存儲單元。只有調用該函數只有調用該函數(hnsh)時,形參才被分配空間,函數時,形參才被分配空間,函數(hnsh)調用結束調用結束后,形參所占的存儲單元被釋放。后,形參所占的存儲單元被釋放。(2)實參為表達式。函數)實參為表達式。函數(hnsh)調用時,先計算表達式的值,然后將調用時,先計算表達式的值,然后將值傳遞給形參。常量、變量、函數值傳遞給形參。常量、變
30、量、函數(hnsh)值都可看成是表達式的特殊值都可看成是表達式的特殊形式。形式。(3)定義函數時,形參的排列沒有次序要求,但對形參列表中每個)定義函數時,形參的排列沒有次序要求,但對形參列表中每個參數要進行說明。調用函數時,實參類型、個數及排列次序應與形參數要進行說明。調用函數時,實參類型、個數及排列次序應與形參一一對應。若類型不一致,必須在參數前加上強制轉換符,否則參一一對應。若類型不一致,必須在參數前加上強制轉換符,否則會發生會發生“類型不匹配類型不匹配”的錯誤。的錯誤。(4)實參與形參的數據傳遞為單向傳遞,只可由實參向形參傳遞,)實參與形參的數據傳遞為單向傳遞,只可由實參向形參傳遞,不能由形參傳回實參。實參與形參處在不同的函數中,作用的區域不能由形參傳回實參。實參與形參處在不同的函數中,作用的區域不同,即使實參與形參同名,也是不同的變量。不同,即使實參與形參同名,也是不同的變量。第40頁/共44頁第四十頁,共45頁。三三. 函數函數(hnsh)的嵌套調用的嵌套調用 所謂函數的嵌套調用是指一個函數調用另一函數的過程中所謂函數的嵌套調用是指一個函數調用另一函數的過程中又出現又出現(chxin)對其它的函數調用。對其它的函數調用。 這種嵌套調用的層次這種嵌套調用的層次(cngc)原則上不限制。原則上不限制。 函數1 函數2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學校疫情門禁管理制度
- 廠區公用管道管理制度
- 工程專業合同管理制度
- 小車司機安全管理制度
- 農村扶貧資金管理制度
- 公司遲到早退管理制度
- 醫院護理培訓管理制度
- 南通旅游餐飲管理制度
- 小區配電安全管理制度
- 工地人員就餐管理制度
- 2025年普通高等學校招生全國統一考試數學試題(全國二卷)(有解析)
- 2025年安慶宿松縣縣屬國有企業招聘57人筆試參考題庫附帶答案詳解析集合
- 消防考試基礎試題及答案
- 兒童意外異物吞食課件
- 富民銀行筆試題庫及答案
- 中國天眼仰望蒼穹
- 2025年高考第二次模擬考試數學(新高考Ⅱ卷)(參考答案)
- 河南省鄭州市2025年中考二模語文試題(含答案)
- 寧波市慈溪市2025年小升初數學自主招生備考卷含解析
- 黃山旅游發展股份有限公司招聘真題2024
- 低血糖的相關試題及答案
評論
0/150
提交評論