




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
期末復習考試形式:2016秋季學期示例平時:綜合作業15分考勤:5分期末:筆試+上機考試60+20分考試題型選擇題(共20題,每題2分,共40分);其中結構體部分(第九章一道選擇題);文件部分(第十章一道選擇題)填空題(共7
題(10空),每題2分,共20分)編程題(共5題,每題8分,共40分)第3章數據類型、運算符與表達式是語言的基本成分,是組成程序的基本元素,要掌握。熟悉各種基本數據類型的常量和變量:常量的表示形式;變量的定義、變量初始化、變量賦值熟悉常用運算符的定義及優先級別。會計算各表達式的值重點:
輸入輸出函數的各種使用方式,如八進制,十進制,十六進制的輸入輸出。自增和自減運算符的使用。賦值和計算時的類型轉換(自動和強制)。逗號表達式的使用。3.2.1常量和變量1.常量:在程序運行過程中,其值不能被改變的量整型常量:如1000,12345,0,-345實型常量十進制小數形式:如0.34-56.790.0指數形式:如12.34e3(代表12.34103)字符常量:如’?’轉義字符:如’\n’字符串常量:如”boy”符號常量:#definePI3.14163.2.1常量和變量2.變量:在程序運行期間,變量的值是可以改變的變量必須先定義,后使用定義變量時指定該變量的名字和類型變量名和變量值是兩個不同的概念變量名實際上是以一個名字代表的一個存儲地址從變量中取值,實際上是通過變量名找到相應的內存地址,從該存儲單元中讀取數據3.2.1常量和變量3.常變量:constinta=3;4.標識符:一個對象的名字C語言規定標識符只能由字母、數字和下劃線3種字符組成,且第一個字符必須為字母或下劃線合法的標識符:如sum,average,_total,Class,day,BASIC,li_ling不合法的標識符:M.D.John,¥123,#33,3D64,a>b大小寫字母是不同的字符3.2.7運算符和表達式1.基本的算術運算符:+:正號運算符(單目運算符)-:負號運算符(單目運算符)*:乘法運算符/:除法運算符%:求余運算符+:加法運算符-:減法運算符3.2.7運算符和表達式說明兩個整數相除的結果為整數如5/3的結果值為1,舍去小數部分如果除數或被除數中有一個為負值,舍入方向不固定。例如,-5/3,有的系統中得到的結果為-1,在有的系統中則得到結果為-2;1/2=?VC++采取“向零取整”的方法
如5/3=1,-5/3=-1,取整后向零靠攏%運算符要求參加運算的運算對象(即操作數)為整數,結果也是整數。余數符號與被除數相同。
如8%3,結果為2。-8%3=?8%-3=?
-8%-3=?0-22-2#include<stdio.h>#include<math.h>{intmain()floatf1,f2;scanf(“%f”,&f1);f2=pow(f1,0.5);//f2=sqrt(f1);printf(“rootof%0.2f=%f\n”f1,f2);Return0;}3.2.7運算符和表達式C沒有乘方運算,冪運算采用庫函數pow(x,y)2.自增、自減運算符:作用是使變量的值加1或減1++i,--i:在使用i之前,先使i的值加(減)1i++,i--:在使用i之后,使i的值加(減)1++/--運算符注意:++、--只能作用于變量,不能用于表達式和常量,如:22++、++(a+b)錯誤右結合性-i++-(i++)不建議++、--運算符連用,如果要在一條語句中將特定變量自增自減不止一次時,最好分多條語句執行,而不要在一條語句中自增自減多次3.2.7運算符和表達式3.算術表達式和運算符的優先級與結合性:用算術運算符和括號將運算對象(也稱操作數)連接起來的、符合C語法規則的式子,稱為C算術表達式運算對象包括常量、變量、函數等C語言規定了運算符的優先級和結合性3.算術表達式和運算符的優先級與結合性()圓括號-,++,--單目運算符,取負、自加、自減*、/、%雙目運算符,乘、除、取模+、-雙目運算符,加、減雙目算術運算符:左結合單目運算符取負“-”、“++”、“--”:右結合高低3.2.7運算符和表達式6.C運算符(1)算術運算符
(+-*/%++--)(2)關系運算符
(><==>=<=!=)(3)邏輯運算符
(!&&||)(4)位運算符
(<<>>~|∧&)(5)賦值運算符
(=及其擴展賦值運算符)(6)條件運算符
(?:)寫出下列式子的C表達式:
寫出下列C表達式的值:(x=4*5,x*5),x+25(逗號表達式)i=6;j=(++i)+(i++);i,j各為多少?!2+1>2&&15%5+2a=12;a-=a*a;3.3C語句3.3.1C語句的作用和分類3.3.2最基本的語句----賦值語句歸納總結:1.賦值運算符2.復合的賦值運算符在賦值符“=”之前加上其他運算符,可以構成復合的運算符+=-=*=/=%=a+=b等價于a=a+bx*=y+8等價于x=x*(y+8)X%=y/3等價于x=x%(y/3)歸納總結:1.賦值運算符2.復合的賦值運算符3.賦值表達式一般形式為:
變量
賦值運算符
表達式對賦值表達式求解的過程:求賦值運算符右側的“表達式”的值賦給賦值運算符左側的變量歸納總結:
3.賦值表達式賦值表達式“a=3*5”的值為15,對表達式求解后,變量a的值和表達式的值都是15“a=(b=5)”和“a=b=5”等價“a=b”和“b=a”含義不同例:a=5+(c=6)后a=11
a=b=c=5后a=5問:inta=12;a+=a-=a*aa=?歸納總結:1.賦值運算符2.復合的賦值運算符3.賦值表達式4.賦值過程中的類型轉換兩側類型一致時,直接賦值兩側類型不一致,但都是算術類型時,自動將右側的類型轉換為左側類型后賦值定義變量時要防止數據溢出3.4數據的輸入輸出3.4.1輸入輸出舉例3.4.2有關數據輸入輸出的概念3.4.3用printf函數輸出數據3.4.4用scanf函數輸入數據3.4.5字符數據的輸入輸出3.4.2有關數據輸入輸出的概念幾乎每一個C程序都包含輸入輸出輸入輸出是程序中最基本的操作之一3.4.2有關數據輸入輸出的概念(1)所謂輸入輸出是以計算機主機為主體而言的從計算機向輸出設備(如顯示器、打印機等)輸出數據稱為輸出從輸入設備(如鍵盤、磁盤、光盤、掃描儀等)向計算機輸入數據稱為輸入3.4.2有關數據輸入輸出的概念(2)C語言本身不提供輸入輸出語句輸入和輸出操作是由C標準函數庫中的函數來實現的printf和scanf不是C語言的關鍵字,而只是庫函數的名字putchar、getchar、puts、gets3.4.2有關數據輸入輸出的概念(3)在使用輸入輸出函數時,要在程序文件的開頭用預編譯指令#include<stdio.h>或#include″stdio.h″3.4.3用printf函數輸出數據在C程序中用來實現輸出和輸入的,主要是printf函數和scanf函數這兩個函數是格式輸入輸出函數用這兩個函數時,必須指定格式3.4.3用printf函數輸出數據1.printf函數的一般格式printf(格式控制,輸出表列)例如:printf(”i=%d,c=%c\n”,i,c);格式聲明3.4.3用printf函數輸出數據1.printf函數的一般格式printf(格式控制,輸出表列)例如:printf(”i=%d,c=%c\n”,i,c);普通字符3.4.3用printf函數輸出數據1.printf函數的一般格式printf(格式控制,輸出表列)例如:printf(”i=%d,c=%c\n”,i,c);可以是常量、變量或表達式3.4.3用printf函數輸出數據2.常用格式字符d格式符。用來輸出一個有符號的十進制整數可以在格式聲明中指定輸出數據的域寬printf(”%5d%5d\n”,12,-345);%d輸出int型數據%ld輸出long型數據3.4.3用printf函數輸出數據2.常用格式字符c格式符。用來輸出一個字符charch=’a’;printf(”%c”,ch);或printf(”%5c”,ch);輸出字符:a3.4.3用printf函數輸出數據2.常用格式字符s格式符。用來輸出一個字符串printf(”%s”,”CHINA”);輸出字符串:CHINA3.4.3用printf函數輸出數據2.常用格式字符f格式符。用來輸出實數,以小數形式輸出①不指定數據寬度和小數位數,用%f
例3.6用%f輸出實數,只能得到6位小數。doublea=1.0;printf(”%f\n”,a/3);3.4.3用printf函數輸出數據2.常用格式字符f格式符。用來輸出實數,以小數形式輸出②指定數據寬度和小數位數。用%m.nf
printf("%20.15f\n",1/3);
printf("%.0f\n”,10000/3.0);3.4.3用printf函數輸出數據2.常用格式字符f格式符。用來輸出實數,以小數形式輸出②指定數據寬度和小數位數。用%m.nffloata;a=10000/3.0;printf("%f\n",a);3.4.3用printf函數輸出數據2.常用格式字符f格式符。用來輸出實數,以小數形式輸出③輸出的數據向左對齊,用%-m.nf3.4.3用printf函數輸出數據2.常用格式字符f格式符。用來輸出實數,以小數形式輸出float型數據只能保證6位有效數字double型數據能保證15位有效數字計算機輸出的數字不都是絕對精確有效的3.4.3用printf函數輸出數據2.常用格式字符e格式符。指定以指數形式輸出實數%e,VC++給出小數位數為6位
指數部分占5列
小數點前必須有而且只有1位非零數字printf(”%e”,123.456);
輸出:1.234560
e+0023.4.3用printf函數輸出數據2.常用格式字符e格式符。指定以指數形式輸出實數%m.neprintf(”%13.2e”,123.456);
輸出:1.23e+002(前面有4個空格)3.4.4用scanf函數輸入數據1.scanf函數的一般形式scanf(格式控制,地址表列)含義同printf函數3.4.4用scanf函數輸入數據1.scanf函數的一般形式scanf(格式控制,地址表列)可以是變量的地址,或字符串的首地址3.4.4用scanf函數輸入數據2.scanf函數中的格式聲明與printf函數中的格式聲明相似以%開始,以一個格式字符結束,中間可以插入附加的字符scanf("a=%f,b=%f,c=%f",&a,&b,&c);3.4.4用scanf函數輸入數據3.使用scanf函數時應注意的問題scanf(”%f%f%f”,a,b,c);錯scanf(”%f%f%f”,&a,&b,&c);對對于scanf("a=%f,b=%f,c=%f",&a,&b,&c);
132↙
錯
a=1,b=3,c=2↙
對
a=1b=3c=2↙
錯3.4.4用scanf函數輸入數據3.使用scanf函數時應注意的問題對于scanf(”%c%c%c”,&c1,&c2,&c3);
abc↙
對
abc↙
錯對于scanf(”%d%c%f”,&a,&b,&c);若輸入
1234a123o.26↙3.4.4用scanf函數輸入數據3.使用scanf函數時應注意的問題對于scanf(”%c%c%c”,&c1,&c2,&c3);
abc↙
對
abc↙
錯對于scanf(”%d%c%f”,&a,&b,&c);若輸入
1234a123o.26↙3.4.4用scanf函數輸入數據3.使用scanf函數時應注意的問題對于scanf(”%c%c%c”,&c1,&c2,&c3);
abc↙
對
abc↙
錯對于scanf(”%d%c%f”,&a,&b,&c);若輸入
1234a123o.26↙3.4.5字符數據的輸入輸出1.用putchar函數輸出一個字符從計算機向顯示器輸出一個字符putchar函數的一般形式為:putchar(c)3.4.5字符數據的輸入輸出2.用getchar函數輸入一個字符向計算機輸入一個字符getchar函數的一般形式為:getchar()第4章選擇結構程序設計4.1選擇結構和條件判斷4.2用if語句實現選擇結構4.3關系運算符和關系表達式4.4邏輯運算符和邏輯表達式4.5條件運算符和條件表達式4.6選擇結構的嵌套4.7用switch語句實現多分支選擇結構4.8選擇結構程序綜合舉例4.1選擇結構和條件判斷C語言有兩種選擇語句:(1)if語句,實現兩個分支的選擇結構(2)switch語句,實現多分支的選擇結構4.2.2if語句的一般形式if(表達式)語句1[else語句2]關系表達式邏輯表達式數值表達式方括號內的部分為可選的4.2.2if語句的一般形式if(表達式)語句1[else語句2]簡單的語句復合語句另一個if語句等最常用的3種if語句形式:1.if(表達式)語句1(沒有else子句)2.if(表達式)語句1else語句2(有else子句)3.if(表達式1)
語句1elseif(表達式2)語句2elseif(表達式3)語句3
┆elseif(表達式m)語句melse語句m+1(在else部分又嵌套了多層的if語句)if(number>500)cost=0.15;elseif(number>300)cost=0.10;elseif(number>100)cost=0.075;elseif(number>50)cost=0.05;elsecost=0;if(number>500)cost=0.15;elseif(number>300)cost=0.10;elseif(number>100)cost=0.075;elseif(number>50)cost=0.05;elsecost=0;等價于分號不能丟說明:(1)整個if語句可寫在多行上,也可寫在一行上但都是一個整體,屬于同一個語句(2)“語句1”…“語句m”是if中的內嵌語句
內嵌語句也可以是一個if語句(3)“語句1”…“語句m”可以是簡單的語句,也可以是復合語句4.3關系運算符和關系表達式4.3.1關系運算符及其優先次序4.3.2關系表達式4.3.1關系運算符及其優先次序關系運算符:用來對兩個數值進行比較的比較運算符C語言提供6種關系運算符:①<(小于)②<=(小于或等于)③>(大于)④>=(大于或等于)
⑤==(等于)⑥!=(不等于)優先級相同(高)優先級相同(低)4.3.1關系運算符及其優先次序關系、算術、賦值運算符的優先級算術運算符(高)賦值運算符(低)關系運算符4.3.1關系運算符及其優先次序c>a+b等效于c>(a+b)a>b==c等效于(a>b)==ca==b<c等效于a==(b<c)a=b>c等效于a=(b>c)4.3.2關系表達式關系表達式用關系運算符將兩個數值或數值表達式連接起來的式子關系表達式的值是一個邏輯值,即“真”或“假”在C的邏輯運算中,以“1”代表“真”,以“0”代表“假”4.4邏輯運算符和邏輯表達式4.4.1邏輯運算符及其優先次序4.4.2邏輯表達式4.4.3邏輯型變量4.4.1邏輯運算符及其優先次序3種邏輯運算符:&&(邏輯與)||(邏輯或)!(邏輯非)&&和||是雙目(元)運算符!是一目(元)運算符邏輯表達式用邏輯運算符將關系表達式或其他邏輯量連接起來的式子4.4.1邏輯運算符及其優先次序ab!a!ba&&ba||b真真假假真真真假假真假真假真真假假真假假真真假假邏輯運算的真值表4.4.1邏輯運算符及其優先次序邏輯運算符的優先次序!→&&→||(!為三者中最高)與其他運算符的優先次序!(高)算術運算符關系運算符&&和||賦值運算符(低)4.4.2邏輯表達式邏輯表達式的值應該是邏輯量“真”或“假”編譯系統在表示邏輯運算結果時以數值1代表“真”,以0代表“假”但在判斷一個量是否為“真”時以0代表“假”,以非0代表“真”注意:將一個非零的數值認作為“真”4.4.2邏輯表達式(1)若a=4,則!a的值為0(2)若a=4,b=5,則a&&b的值為1(3)a和b值分別為4和5,則a||b的值為1(4)a和b值分別為4和5,則!a||b的值為1(5)4&&0||2的值為14.4.2邏輯表達式修改后的邏輯運算真值表ab!a!ba&&ba||b非0非00011非000101假非01001假011004.5條件運算符和條件表達式有一種if語句,當被判別的表達式的值為“真”或“假”時,都執行一個賦值語句且向同一個變量賦值如:if(a>b)max=a;elsemax=b;max=(a>b)?a
:b;條件運算符4.5條件運算符和條件表達式有一種if語句,當被判別的表達式的值為“真”或“假”時,都執行一個賦值語句且向同一個變量賦值如:if(a>b)max=a;elsemax=b;max=(a>b)?a
:b;條件表達式4.5條件運算符和條件表達式條件表達式的一般形式為表達式1?表達式2:
表達式34.5條件運算符和條件表達式條件運算符的執行順序:求解表達式1若為非0(真)則求解表達式2,此時表達式2的值就作為整個條件表達式的值若表達式1的值為0(假),則求解表達式3,表達式3的值就是整個條件表達式的值4.5條件運算符和條件表達式條件運算符優先于賦值運算符條件運算符的結合方向為“自右至左”以下為合法的使用方法:a>b?(max=a):(max=b);a>b?printf(“%d”,a):printf(“%d”,b);4.7用switch語句實現多分支選擇結構switch語句用來實現多分支選擇結構學生成績分類85分以上為’A’等70~84分為’B’等60~69分為’C’等……人口統計分類
按年齡分為老、中、青、少、兒童switch語句的作用是根據表達式的值,使流程跳轉到不同的語句switch語句的一般形式:switch(表達式){case常量1:語句1case常量2:語句2
┇
┇
┇case常量n:語句ndefault:語句n+1}整數類型(包括字符型)switch語句的作用是根據表達式的值,使流程跳轉到不同的語句switch語句的一般形式:switch(表達式){case常量1:語句1case常量2:語句2
┇
┇
┇case常量n:語句ndefault:語句n+1}不能相同分段函數例:例:讀程序,給出程序的運行結果第5章循環結構程序設計5.1為什么需要循環控制5.2用while語句實現循環5.3用do---while語句實現循環5.4用for語句實現循環5.5循環的嵌套5.6幾種循環的比較5.7改變循環執行的狀態5.8循環程序舉例重點:
三種基本循環結構的使用,while和do…while的區別,for結構中三個表達式的作用 判斷素數算法 遞推算法 求n個數的和,平均值,最大值,最小值等拆數算法:如數值轉換(學會使用n=n/d和r=n%d)窮舉算法,如水仙花數實現循環的語句(四種)1、用goto語句和if語句構成循環;
(不提倡)2、用while語句;
(當型循環—先判斷后執行)3、用do-while語句;
(直到型循環—先執行后判斷)4、用for語句。
(多功能)while語句的一般形式如下:while(表達式)語句;循環體表達式語句N-S圖while語句的一般形式如下:while(表達式)語句“真”時執行循環體語句“假”時不執行循環條件表達式while循環的特點是:先判斷條件表達式,后執行循環體語句注意:若循環體包含一條以上的語句,應以復合語句的形式出現;循環前,必須給循環控制變量賦初值;循環體中,必須有改變循環控制變量值的語句(使循環趨于結束的語句);循環體可以為空。例:while((c=getchar())!=‘A’);等價于c=getchar();while(c!=‘A’)c=getchar();5.3用do---while語句實現循環do---while語句的特點:先無條件地執行循環體,然后判斷循環條件是否成立do---while語句的一般形式為:do
語句while(表達式);表達式YN循環體語句分號不能省略,
切記5.4用for語句實現循環for語句的一般形式為for(表達式1;表達式2;表達式3)
語句設置初始條件,只執行一次。可以為零個、一個或多個變量設置初值執行5.4用for語句實現循環for語句的一般形式為for(表達式1;表達式2;表達式3)
語句循環條件表達式,用來判定是否繼續循環。在每次執行循環體前先執行此表達式,決定是否繼續執行循環5.4用for語句實現循環for語句的一般形式為for(表達式1;表達式2;表達式3)
語句作為循環的調整器,例如使循環變量增值,它是在執行完循環體后才進行的5.4用for語句實現循環for語句的執行過程:(1)先求解表達式1(2)求解表達式2,若其值為真,執行循環體,然后執行下面第(3)步。若為假,則結束循環,轉到第(5)步(3)求解表達式3(4)轉回上面步驟(2)繼續執行(5)循環結束,執行for語句下面的一個語句求解表達式1表達式2語句求解表達式35.4用for語句實現循環for語句不僅可以用于循環次數已經確定的情況,還可以用于循環次數不確定而只給出循環結束條件的情況for語句完全可以代替while語句5.7改變循環執行的狀態5.7.1用break語句提前終止循環5.7.2用continue語句提前結束本次循環5.7.3break語句和continue語句的區別5.7.1用break語句提前終止循環break語句可以用來從循環體內跳出循環體,即提前結束循環,接著執行循環下面的語句[例]判斷m是否為素數
輸入mk=sqrt(m)i=2i<=km%i為0是否結束循環i++i>=k+1是否m是素數m不是素數#include”math.h”voidmain(){intm,i,k;scanf(“%d”,&m);k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>k)printf(“%d是素數”,m)elseprintf(“%d是合數”,m);}結束循環,即轉到for循環的下一語句。Break總是作if的內嵌語句flag=1{flag=0;break;}flag5.7.2用continue語句提前結束本次循環有時并不希望終止整個循環的操作,而只希望提前結束本次循環,而接著執行下次循環。這時可以用continue語句5.7.2用continue語句提前結束本次循環
例5.5要求輸出100~200之間的不能被3整除的數。(不能被3也不能被7)編程思路:對100到200之間的每一個整數進行檢查如果不能被3整除,輸出,否則不輸出無論是否輸出此數,都要接著檢查下一個數(直到200為止)。Nn=100n≤200Yn能被3整除Nn=n+1輸出nYfor(n=100;n<=200;n++){if(n%3==0)
continue;printf("%d",n);}If(n%3)printf(“%d”,n);5.7.3break語句和continue語句的區別continue語句只結束本次循環,而不是終止整個循環的執行break語句結束整個循環過程,不再判斷執行循環的條件是否成立N表達式1Y表達式2N……Y…………N表達式1Y表達式2NY…………break語句continue語句強行退出循環只結束本次循環
例5.9輸入一個大于3的整數n,判定它是否素數(prime,又稱質數)。解題思路:讓n被i整除(i的值從2變到n-1)如果n能被2~(n-1)之中任何一個整數整除,則表示n肯定不是素數,不必再繼續被后面的整數除,因此,可以提前結束循環注意:此時i的值必然小于nNNYn=i+1輸入ni=2i≤n-1Yn被i整除i≤a輸出不是素數Y輸出是素數N#include<stdio.h>intmain(){intn,i;printf(“n=?");scanf("%d",&n);for(i=2;i<=n-1;i++)if(n%i==0)break;if(i<n)printf("%disnot\n",n);elseprintf("%dis\n",n);return0;}#include<stdio.h>intmain(){intn,i;printf(“n=?");scanf("%d",&n);for(i=2;i<=n-1;i++)if(n%i==0)break;if(i<n)printf("%disnot\n",n);elseprintf("%dis\n",n);return0;}k=sqrt(n);#include<stdio.h>intmain(){intn,i,k;printf(“n=?");scanf("%d",&n);for(i=2;i<=k;i++)if(n%i==0)break;if(i<n)printf("%disnot\n",n);elseprintf("%dis\n",n);return0;}k=sqrt(n);#include<math.h>#include<stdio.h>intmain(){intn,i,k;printf(“n=?");scanf("%d",&n);for(i=2;i<=k;i++)if(n%i==0)break;if(i<=k)printf("%disnot\n",n);elseprintf("%dis\n",n);return0;}k=sqrt(n);#include<math.h>
例5.10求100~200間的全部素數。(非素數之和)解題思路:使用例5.9的算法在例5.9程序中只要增加一個外循環,先后對100~200間的全部整數一一進行判定即可
……for(n=101;n<=200;n=n+2){k=sqrt(n);for(i=2;i<=k;i++)if(n%i==0)break;if(i>=k+1) {printf("%d",n); m=m+1; } if(m%10==0)printf(“\n”);}……只對奇數進行檢查控制每行輸出10個數據例:求100~1000之間的“水仙花”數。如:153=1^3+5^3+3^3“水仙花”數:水仙花數是指一個n位數(n≥3),它的每個位上的數字的n次冪之和等于它本身。水仙花數只是自冪數的一種,嚴格來說三位數的3次冪數才成為水仙花數。例:讀程序,寫出程序運行結果7c98例:猴子吃桃。猴子第一天摘下若干個桃子,當即吃了一半,還不過癮,又多吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃一個。以后每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘多少桃子。分析:由"到第10天早上想再吃時,見只剩下一個桃子了"可知,事實上在第九天吃過后就只有一個了.我們用total(day)來表示每一天的桃子數,這樣由題意,total(10)=1,那么total(9)=(total(10)+1)*2,total(8)=(total(9)+1)*2.....#include<stdio.h>total(intday){intsum;if(day==10)sum=1;elseif(day<10)sum=2*(total(day+1)+1);return(sum);}
voidmain(){intsum;sum=total(1);printf("猴子一共摘桃%d個。/n",sum);}例:試找出滿足下列條件的所有三位數其百位數不大于2將個位與百位對換,得到的三位數是原三位數的兩倍多分析:用三重循環的循環控制變量分別表示百位數、十位數和個位數百位數i取值1~2十位數j取值0~9個位數k取值2~9n=100*i+10*j+km=100*k+10*j+i若m>=2*n并m<3*n則n為滿足條件的三位數voidmain(){intI,j,k,n,m,s=0;for(i=0;i<=2;++i)for(j=0;j<=9;++j)for(k=2;k<=9;++k){n=100*n=100*i+10*j+k;m=100*k+10*j+I;if(m>=2*n&&m<3+n){++s;printf(“%d”,n);if(s%10==0)printf(“\n”);}}}分析:用一重循環的循環控制變量i表示原來的三位數i=101~299百位數n1=i/100十位數n2=(i-n1*100)/10個位數n3=i-100*n1-10*n2m=100*n3+10*n2+n1若m>=2*i并m<3*i則i為滿足條件的三位數For(i=101;i<=299;++i){n1=i/100n2=(i-n1*100)/10n3=i-100*n1-10*n2m=100*n3+10*n2+n1例:1~100中其各位數字的平方等于其本身的所有整數。第6章利用數組處理批量數據數組是一組有序數據的集合。數組中各數據的排列是有一定規律的,下標代表數據在數組中的序號用一個數組名和下標惟一確定數組中的元素數組中的每一個元素都屬于同一個數據類型6.1怎樣定義和引用一維數組6.2怎樣定義和引用二維數組6.3字符數組6.1怎樣定義和引用一維數組6.1.1怎樣定義一維數組6.1.2怎樣引用一維數組元素6.1.3一維數組的初始化6.1.4一維數組程序舉例6.1.1怎樣定義一維數組定義一維數組的一般形式為:
類型符
數組名[常量表達式];數組名的命名規則和變量名相同如inta[10];數組名6.1.1怎樣定義一維數組定義一維數組的一般形式為:
類型符
數組名[常量表達式];數組名的命名規則和變量名相同如inta[10];數組長度6.1.1怎樣定義一維數組定義一維數組的一般形式為:
類型符
數組名[常量表達式];數組名的命名規則和變量名相同如inta[10];10個元素:a[0],a[1],a[2],…,a[9]每個元素的數據類型a[0]a[1]a[2]a[3]…a[7]a[8]a[9]6.1.1怎樣定義一維數組定義一維數組的一般形式為:
類型符
數組名[常量表達式];inta[4+6];合法intn=10;inta[n];intA[10],b[5];charc[8];floatX[20],y[4*M+1],w[5];&&(M是符號常量)不合法6.1.2怎樣引用一維數組元素引用數組元素的表示形式為:
數組名[下標]如a[0]=a[5]+a[7]-a[2*3]合法intn=5,a[10];a[n]=20;合法6.1.3一維數組的初始化在定義數組的同時,給各數組元素賦值inta[10]={0,1,2,3,4,5,6,7,8,9};inta[10]={0,1,2,3,4};相當于inta[10]={0,1,2,3,4,0,0,0,0,0};inta[10]={0,0,0,0,0,0,0,0,0,0};相當于inta[10]={0};inta[5]={1,2,3,4,5};可寫為inta[]={1,2,3,4,5};6.3.1怎樣定義字符數組6.3.2字符數組的初始化6.3.3怎樣引用字符數組中的元素6.3.4字符串和字符串結束標志6.3.5字符數組的輸入輸出6.3.6善于使用字符串處理函數6.3.7字符數組應用舉例6.3字符數組一、字符數組的定義在C語言中,沒有專門的字符串變量,而是將字符串存入字符數組來處理
即用一個一維數組來存放一個字符串,每個元素存放一個字符
字符數組是數組的一個特殊情況,但它的定義方法與上述介紹的類似;引用方法可以與上述介紹類同,也有其獨特的引用方法
由于字符型與整型是互相通用的,因此上面定義可改為:定義形式:
char數組名[][[]],……charc[10];c[0]=’I’;c[1]=’’;c[2]=’a’;c[3]=’m’;c[4]=’’;c[5]=’h’;c[6]=’a’;c[7]=’p’;c[8]=’p’;c[9]=’y’;6.3.1怎樣定義字符數組Iam
happyc[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]charc[10]={’I’,’’,’a’,’m’,’’,’h’,’a’,’p’,’p’,’y’};charc[10]={’c’,’’,’p’,’r’,’o’,’g’,’r’,’a’,’m’};6.3.2字符數組的初始化Iam
happyc[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]cprogram\0c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]1、按元素賦注意:
在c語言中,將字符串作為字符數組來處理,即用一個一維數組來存放一個字符串。如:c[10]存放字符串“Iamhappy”。
為了測定實際字符串的長度,C語言規定了一個“字符串結束標志”,即遇到字符’\0’時,表示字符串結束。在C語言中,是將字符串作為字符數組來處理的關心的是字符串的有效長度而不是字符數組的長度為了測定字符串的實際長度,C語言規定了字符串結束標志’\0’6.3.4字符串和字符串結束標志’\0’代表ASCII碼為0的字符從ASCII碼表可以查到,ASCII碼為0的字符不是一個可以顯示的字符,而是一個“空操作符”,即它什么也不做用它作為字符串結束標志不會產生附加的操作或增加有效字符,只起一個供辨別的標志6.3.4字符串和字符串結束標志charc[]={”Iamhappy”};可寫成charc[]=”Iamhappy”;相當于charc[11]={”Iamhappy”};6.3.4字符串和字符串結束標志charc[10]={”China”};可寫成charc[10]=”China”;從c[5]開始,元素值均為\0只顯示printf(”%s”,c);6.3.4字符串和字符串結束標志China\0\0\0\0\0字符數組的輸入輸出可以有兩種方法:
逐個字符輸入輸出(%c)
整個字符串一次輸入輸出(%s)輸出的字符中不包括結束符’\0’用%s輸出字符串時,printf函數中的輸出項是字符數組名,不是數組元素名6.3.5字符數組的輸入輸出1、逐個字符數組元素輸入輸出:用%c格式符描述
例:scanf(“%c”,&a[i]);printf(“%c%c%c”,a[0],a[2],a[3]);2、整個字符串(數組)輸入輸出:用%s格式符描述
例:chara[]=“china”;scanf(”%s”,a);printf(“%s”,a);如果一個字符數組中包含多個’\0’,則遇第一個’\0’時輸出就結束可以用scanf函數輸入一個字符串scanf函數中的輸入項c是已定義的字符數組名,輸入的字符串應短于已定義的字符數組的長度6.3.5字符數組的輸入輸出charc[6];scanf(”%s”,c);China↙系統自動在China后面加一個’\0’注:用%s輸入時,遇空格或回車便認為一個字符串結束6.3.5字符數組的輸入輸出在C函數庫中提供了一些用來專門處理字符串的函數,使用方便6.3.6善于使用字符串處理函數1.puts函數----輸出字符串的函數其一般形式為:puts(字符數組/字符串)作用是將一個字符串輸出到終端charstr[20]=”China”;puts(str);
輸出China6.3.6善于使用字符串處理函數2.gets函數----輸入字符串的函數(以回車結束)其一般形式為:gets(字符數組)作用是輸入一個字符串到字符數組charstr[20];gets(str);
Computer↙6.3.6善于使用字符串處理函數3.strcat函數----字符串連接函數其一般形式為:strcat(字符數組1,字符數組2)其作用是把兩個字符串連接起來,把字符串2接到字符串1的后面,結果放在字符數組1中6.3.6善于使用字符串處理函數使用字符串函數時,在程序開頭用#include<string.h>4.strcpy和strncpy函數-字符串復制strcpy一般形式為:strcpy(字符數組1,字符串2/字符數組2)作用是將字符串2復制到字符數組1中去charstr1[10],str2[]=”China”;strcpy(str1,str2);6.3.6善于使用字符串處理函數China\0\0\0\0\0str14.strcpy和strncpy函數-字符串復制strcpy一般形式為:strcpy(字符數組1,字符串2)作用是將字符串2復制到字符數組1中去charstr1[10],str2[]=”China”;strcpy(str1,str2);6.3.6善于使用字符串處理函數China\0\0\0\0\0str1要足夠大4.strcpy和strncpy函數-字符串復制strcpy一般形式為:strcpy(字符數組1,字符串2)作用是將字符串2復制到字符數組1中去charstr1[10],str2[]=”China”;strcpy(str1,str2);6.3.6善于使用字符串處理函數數組名形式4.strcpy和strncpy函數-字符串復制strcpy一般形式為:strcpy(字符數組1,字符串2)作用是將字符串2復制到字符數組1中去charstr1[10],str2[]=”China”;strcpy(str1,str2);6.3.6善于使用字符串處理函數數組名或字符串常量4.strcpy和strncpy函數-字符串復制strcpy一般形式為:strcpy(字符數組1,字符串2)作用是將字符串2復制到字符數組1中去charstr1[10],str2[]=”China”;strcpy(str1,str2);相當于strcpy(str1,”China”);6.3.6善于使用字符串處理函數4.strcpy和strncpy函數-字符串復制charstr1[10],str2[]=”China”;str1=”China”;錯誤str1=str2;錯誤6.3.6善于使用字符串處理函數4.strcpy和strncpy函數-字符串復制可以用strncpy函數將字符串2中前面n個字符復制到字符數組1中去strncpy(str1,str2,2);作用是將str2中最前面2個字符復制到str1中,取代str1中原有的最前面2個字符復制的字符個數n不應多于str1中原有的字符6.3.6善于使用字符串處理函數5.strcmp函數----字符串比較函數其一般形式為strcmp(字符串1,字符串2)作用是比較字符串1和字符串2strcmp(str1,str2);strcmp(”China”,”Korea”);strcmp(str1,”Beijing”);6.3.6善于使用字符串處理函數5.strcmp函數----字符串比較函數字符串比較的規則是:將兩個字符串自左至右逐個字符相比,直到出現不同的字符或遇到’\0’為止如全部字符相同,認為兩個字符串相等若出現不相同的字符,則以第一對不相同的字符的比較結果為準6.3.6善于使用字符串處理函數5.strcmp函數----字符串比較函數”A”<”B””a”>”A””computer”>”compare””these”>”that””1A”>”$20””CHINA”>”CANADA””DOG”<”cat””Tsinghua”>”TSINGHUA”6.3.6善于使用字符串處理函數5.strcmp函數----字符串比較函數比較的結果由函數值帶回如果字符串1=字符串2,則函數值為0如果字符串1>字符串2,則函數值為一個正整數如果字符串1<字符串2,則函數值為一個負整數6.3.6善于使用字符串處理函數5.strcmp函數----字符串比較函數if(str1>str2)printf(”yes”);錯誤if(strcmp(str1,str2)>0)printf(”yes”);正確6.3.6善于使用字符串處理函數6.strlen函數----測字符串長度的函數其一般形式為:strlen(字符數組)它是測試字符串長度的函數(不含‘\0’)函數的值為字符串中的實際長度6.3.6善于使用字符串處理函數6.strlen函數----測字符串長度的函數charstr[10]=”China”;printf(”%d”,strlen(str));輸出結果是5也可以直接測試字符串常量的長度strlen(”China”);6.3.6善于使用字符串處理函數7.strlwr函數----轉換為小寫的函數其一般形式為strlwr(字符串)函數的作用是將字符串中大寫字母換成小寫字母6.3.6善于使用字符串處理函數8.strupr函數----轉換為大寫的函數其一般形式為strupr(字符串)函數的作用是將字符串中小寫字母換成大寫字母6.3.6善于使用字符串處理函數第7章用函數實現模塊化程序設計7.1為什么要用函數
7.2怎樣定義函數7.3調用函數7.4對被調用函數的聲明和函數原型7.5函數的嵌套調用
7.6函數的遞歸調用7.7數組作為函數參數
7.8局部變量和全局變量7.9變量的存儲方式和生存期7.10關于變量的聲明和定義7.11內部函數和外部函數7.1為什么要用函數mainabcfghdeie說明:(1)一個C程序由一個或多個程序模塊組成,每一個程序模塊作為一個源程序文件。對較大的程序,一般不希望把所有內容全放在一個文件中,而是將它們分別放在若干個源文件中,由若干個源程序文件組成一個C程序。這樣便于分別編寫、分別編譯,提高調試效率。一個源程序文件可以為多個C程序共用。說明:(2)一個源程序文件由一個或多個函數以及其他有關內容(如預處理指令、數據聲明與定義等)組成。一個源程序文件是一個編譯單位,在程序編譯時是以源程序文件為單位進行編譯的,而不是以函數為單位進行編譯的。說明:(3)C程序的執行是從main函數開始的,如果在main函數中調用其他函數,在調用后流程返回到main函數,在main函數中結束整個程序的運行。說明:(4)所有函數都是平行的,即在定義函數時是分別進行的,是互相獨立的。一個函數并不從屬于另一個函數,即函數不能嵌套定義。函數間可以互相調用,但不能調用main函數。main函數是被操作系統調用的。說明:(5)從用戶使用的角度看,函數有兩種。庫函數,它是由系統提供的,用戶不必自己定義而直接使用它們。應該說明,不同的C語言編譯系統提供的庫函數的數量和功能會有一些不同,當然許多基本的函數是共同的。用戶自己定義的函數。它是用以解決用戶專門需要的函數。說明:(6)從函數的形式看,函數分兩類。
①無參函數。無參函數一般用來執行指定的一組操作。無參函數可以帶回或不帶回函數值,但一般以不帶回函數值的居多。
②有參函數。在調用函數時,主調函數在調用被調用函數時,通過參數向被調用函數傳遞數據,一般情況下,執行被調用函數時會得到一個函數值,供主調函數使用。7.3.2函數調用時的數據傳遞1.形式參數和實際參數在調用有參函數時,主調函數和被調用函數之間有數據傳遞關系定義函數時函數名后面的變量名稱為“形式參數”(簡稱“形參”)主調函數中調用一個函數時,函數名后面參數稱為“實際參數”(簡稱“實參”)實際參數可以是常量、變量或表達式,而形參只能是變量或數組。7.3.2函數調用時的數據傳遞2.實參和形參間的數據傳遞在調用函數過程中,系統會把實參的值傳遞給被調用函數的形參或者說,形參從實參得到一個值該值在函數調用期間有效,可以參加被調函數中的運算實參和形參的類型必須一致。字符型和整型可以互相匹配C語言中實參對形參的數據傳遞是“值傳遞”,即單向傳遞。它僅由參數的對應位置確定,與名字無關。7.3.2函數調用時的數據傳遞
例7.2輸入兩個整數,要求輸出其中值較大者。要求用函數來找到大數。解題思路:(1)函數名應是見名知意,今定名為max(2)由于給定的兩個數是整數,返回主調函數的值(即較大數)應該是整型(3)max函數應當有兩個參數,以便從主函數接收兩個整數,因此參數的類型應當是整型7.3.2函數調用時的數據傳遞先編寫max函數:intmax(intx,inty){intz;z=x>y?x:y;return(z);}7.3.2函數調用時的數據傳遞在max函數上面,再編寫主函數#include<stdio.h>intmain(){intmax(intx,inty);inta,b,c;printf(“twointegernumbers:");scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“maxis%d\n”,c);}實參可以是常量、變量或表達式7.3.2函數調用時的數據傳遞
c=max(a,b);(main函數)intmax(intx,inty)(max函數){intz;z=x>y?x:y;return(z);}7.3.3函數調用的過程在定義函數中指定的形參,在未出現函數調用時,它們并不占內存中的存儲單元。在發生函數調用時,函數max的形參被臨時分配內存單元。2a3bxy23實參形參7.3.3函數調用的過程調用結束,形參單元被釋放實參單元仍保留并維持原值,沒有改變如果在執行一個被調用函數時,形參的值發生改變,不會改變主調函數的實參的值2a3bxy23實參形參【例】讀程序,寫出運行結果7.5函數的嵌套調用C語言的函數定義是互相平行、獨立的即函數不能嵌套定義但可以嵌套調用函數即調用一個函數的過程中,又可以調用另一個函數7.5函數的嵌套調用main函數①調用a函數⑨結束a函數③調用b函數⑦②⑧b函數⑤④⑥7.5函數的嵌套調用
例7.5輸入4個整數,找出其中最大的數。用函數的嵌套調用來處理。解題思路:main中調用max4函數,找4個數中最大者max4中再調用max2,找兩個數中的大者max4中多次調用max2,可找4個數中的大者,然后把它作為函數值返回main函數main函數中輸出結果#include<stdio.h>intmain(){intmax4(inta,intb,intc,intd);inta,b,c,d,max;printf(“4intergernumbers:");scanf("%d%d%d%d",&a,&b,&c,&d);max=max4(a,b,c,d);printf("max=%d\n",max);return0;}主函數對max4
函數聲明#include<stdio.h>intmain(){intmax4(inta,intb,intc,intd);inta,b,c,d,max;printf(“4intergernumbers:");scanf("%d%d%d%d",&a,&b,&c,&d);max=max4(a,b,c,d);printf("max=%d\n",max);return0;}主函數輸入4個整數#include<stdio.h>intmain(){intmax4(inta,intb,intc,intd);inta,b,c,d,max;printf(“4intergernumbers:");scanf("%d%d%d%d",&a,&b,&c,&d);max=max4(a,b,c,d);printf("max=%d\n",max);return0;}主函數調用后肯定是4個數中最大者輸出最大者intmax4(inta,intb,intc,intd){intmax2(inta,intb);intm;m=max2(a,b);m=max2(m,c);m=max2(m,d);return(m);}max4函數對max2
函數聲明intmax4(inta,intb,intc,intd){intmax2(inta,intb);intm;m=max2(a,b);m=max2(m,c);m=max2(m,d);return(m);}max4函數a,b中較大者a,b,c中較大者a,b,c,d中最大者intmax4(inta,intb,intc,intd){intmax2(inta,intb);intm;m=max2(a,b);m=max2(m,c);m=max2(m,d);return(m);}max4函數intmax2(inta,intb){if(a>=b)returna;elsereturnb;}max2函數找a,b中較大者intmax4(inta,intb,intc,intd){intmax2(inta,intb);intm;m=max2(a,b);m=max2(m,c);m=max2(m,d);return(m);}max4函數intmax2(inta,intb){if(a>=b)returna;elsereturnb;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CCIAS 012-2023川式火鍋底料
- T/CBMCA 047-2023環保電線電纜
- T/CAS 619-2022供熱用預制保溫球墨鑄鐵管、管件及附件
- 大數據中級java面試題及答案
- 博物館面試題及答案
- 窗口考試題庫及答案
- 護士政審面試題及答案
- 環保方面試題及答案
- 戴安全頭盔面試題及答案
- 花園機關面試題及答案
- 貨物破損回復函
- 3“貝”的故事 課件
- 消防防汛知識培訓課件
- Unit2 What time is it B let's talk and learn(說課稿)-2023-2024學年人教PEP版英語四年級下冊
- QC實驗室5S現場管理
- 管制刀具校園安全
- 2024年山東省濟南市中考英語試題卷(含答案解析)
- 技術保障管理制度
- 【MOOC】中西醫結合兒科學-河南中醫藥大學 中國大學慕課MOOC答案
- 2023年駕駛臺資源管理真題模擬匯編(共873題)
- 2025中考英語作文預測:19個熱點話題及范文
評論
0/150
提交評論