C語言授課講義_第1頁
C語言授課講義_第2頁
C語言授課講義_第3頁
C語言授課講義_第4頁
免費預覽已結束,剩余47頁可下載查看

下載本文檔

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

文檔簡介

C語言授課講義《編程解決問題之程序設計語言(C語言)》張海峰孫然課程內(nèi)容介紹:本課程主要是介紹如何利用C程序設計語言,編寫程序,解決實際問題。目的是提高學生利用計算機快速、高效、智能地解決問題的能力,培養(yǎng)學生解決實際問題的綜合素養(yǎng)。該書既可以作為信息技術課程內(nèi)容的補充,也可以作為編程愛好者的自學用書,還可以作為信息學奧賽的輔導用書。本書內(nèi)容共分十章和一個附錄,前八章是學習的重點,后幾章是對學有余力的同學的知識的擴充,教師授課時或者學生自學時,使用者可以酌情處理。目錄:TOC\o"1-5"\h\z第一章初識編程 3k為什么要編程 3ー個簡單的c語言程序 33、程序的編制 4上機實踐 5第二章順序結構程序設計 51、變量定義 5賦值操作 6輸出語句 6輸入語句 7應用實例 7上機實踐 9第三章分支控制語句——if語句 9關系運算符及其優(yōu)先級 9if語句的語法 9if語句應用實例 10上機實踐 12第四章分支控制語句——switch語句 124.1,switch。語句語法 124.2switch。應用實例 13上機實踐 16第五章循環(huán)控制語句1——for語句 16、for語句語法 16for循環(huán)的應用 17上機實踐 20第六章循環(huán)控制語句2——while語句 20while語句語法 20應用實例 21上機實踐: 22第七章數(shù)組的定義與引用 221,數(shù)組的定義 23數(shù)組的應用 23上機實踐: 25第ハ章函數(shù)的定義與使用 261、函數(shù)的定義 26函數(shù)的引用 27上機實踐: 29第九章?字符串處理 291字符串處理 29 19.2,應用實例 31第十章?文件讀寫操作 33文件讀寫操作的一般格式 33實例應用 33附錄?綜合實例——學生成績查詢系統(tǒng) 341,程序的功能: 342,使用說明: 343,程序代碼 35思考問題: 385,程序的功能擴展: 38參考書目 382第一章初識編程為什么要編程在信息技術教材(上交、必修本)中,我們曾經(jīng)了解到——計算機具有強大的功能,利用軟件,計算機可以高效地解決各種問題。不過,有的軟件已經(jīng)存在了,有的可能還沒有,對于后者這種情況,我們就需要自己動手編寫程序,制作軟件。這就是我們信息技術教材上所提到的“自己編制計算機程序,讓計算機為自己服務”。ー個簡單的c語言程序要編程,我們先要學習ー種程序設計語言,比如c語言,basic語言,pascal語言等,了解其語法規(guī)范,程序結構以及如何利用相應的編譯軟件生成程序這ー系列的過程。下面,我們先來看ー個簡單c程序語言的實例,了解程序的一般結構組成和c語言的簡單的語法規(guī)范。這段程序的功能是:根據(jù)輸入的半徑r,計算圓的周長c和面積s。C語言程序代碼如下:4include<stdio.h>^include<stdlib.h>main(){floatr,p,c,s;p=3.14;printf(*intputR:\n");scanf&r);c=2*p*r;s=p*r*r;printf("c=%f,s二%f\n”,c,s);system("pause");)程序解讀:按照語句的功能,程序可以解讀如下:1)語句a、b、c、k、1構成了程序的基本框架,為程序的順利執(zhí)行提供必要的功能準備。stdio.h和stdlib.h稱為庫文件,里邊包含了程序所需的?些函數(shù)命令。輸出命令printf()、3輸入命令scanf()包含在stdio.h文件庫中:屏幕停留命令system("pause")包含在stdlib.h文件庫中,它使輸出屏幕短暫停留,方便查看輸出結果。main。{}是程序主體,每個程序只能有一個主函數(shù)。問題求解過程就放在大括號內(nèi)。2)語句d、e、f、g、h、i、j是問題的處理過程。用程序解決問題可以分為如下四個階段:定義變量:語句d定義四個變量,分別存儲程序運行中的半徑r、兀、周長c和面積個變量數(shù)據(jù)。程序中所用到的數(shù)據(jù)(包括臨時數(shù)據(jù)),必須事先定義變量,且先定義后使用。數(shù)據(jù)輸入:語句f是提示用戶輸入,語句g是獲得用戶的輸入數(shù)據(jù)。數(shù)據(jù)處理:語句e是給n的變量p賦初識值,語句h、i利用公式計算周長和面積。數(shù)據(jù)輸出:語句j是將計算結果輸出到屏幕上。程序的編制在對程序有了一個簡單的認識后,我們再來了解一下如何通過編譯軟件將這段代碼生成在我們計算機系統(tǒng)中可以直接運行的可執(zhí)行程序。在此,我們介紹實例程序在全國信息學奧賽中指定的c語言編譯環(huán)境(該軟件可以直接從官方網(wǎng)站下載)中編制的過程。步驟1:打開devc軟件,窗口組成如下:

常用工具欄步驟2:在編輯區(qū),書寫程序代碼,注意字符區(qū)分大小寫,每條語句以英文“;”結尾。4步驟3:點編譯按鈕調(diào)試程序。如果在代碼中出現(xiàn)錯誤,調(diào)試區(qū)會有出錯提示,及時修正,再次編譯調(diào)試,直至成功。編譯過程中會生成可執(zhí)行程序。步驟4:點擊運行按鈕,運行可執(zhí)行程序。(調(diào)試和運行也可以一次點擊編譯運行按鈕完成)通過以上的過程,我們就制作了一個軟件。以上,是我們對編程過程的ー個簡單認識,隨著我們對編程語言學習的深入,我們會對編程有一個更深入和更全面的了解,進而掌握這種解決問題的方法,提高我們解決問題的效率和能力。上機實踐在devc軟件中調(diào)試運行示例程序。第二章順序結構程序設計程序從控制流程的角度來看,可以分為三種基本結構:順序結構、分支結構和循環(huán)結構,其它復雜程序都可以用這三種結構實現(xiàn)。上一章,我們所接觸的實例程序就是ー個典型的順序結構的程序。對編程語言的學習,我們就先從順序結構開始。2.1、變量定義在程序中,如果涉及到了數(shù)據(jù)處理,就需要事先定義變量,確定數(shù)據(jù)的類型和所需存儲空間的大小。在C語言中,有如下幾種數(shù)據(jù)變量的定義形式,它們也被稱為C語言的基本數(shù)據(jù)類型?;緮?shù)據(jù)類型表示的數(shù)據(jù)范圍變量定義標識符變量定義示例輸入輸出格式標識符整型-32768—32767intinta,b...%d實數(shù)-10貝—1ザfloatfloatal%f雙精度?研)8Tザ8doubledoubled2%lf字符型單個字符charcharch%c其它數(shù)據(jù)類型:shortint,longint,unsignedint,string1.2、運算符C語言包括了“+(加)、ー(減)、?(乘)、/(除)、%(取余)、自加1(++)、自減1(一)”等多種運算符,可以實現(xiàn)相關運算操作。此處,需要注意,如果兩個運算數(shù)a、b都是整數(shù)(int類型),/是指整除,%是指取余數(shù)。示例:inta,b,c;a=6;b=4;a++ノ/a的值自加1,變成7,b一;〃b的值自減1變?yōu)?;c=a/b;〃此處為整除,c的結果為2c=a%b:〃此處為取余數(shù),c的結果為1此示例,同學們可以加入輸出語句,驗證運算的結果。賦值就是將數(shù)值賦值給相應的變量,操作由“=”完成。示例1:示例2:inta,b;charchi,ch2;a=8;chl='a';ch2='A'b=10000;輸出語句C語言經(jīng)常用到的一條輸出語句是printf()語句,其又被稱為格式化輸出函數(shù),即可以按照規(guī)定的格式輸出內(nèi)容。具體語法如下:printf(“格式控制字符串”,輸岀表列)其中格式控制字符串中包含以%開頭的格式字符,和以非%開頭的原樣輸出字符兩種。以%開頭的格式字符是輸出列表中的各變量依次對應的格式字符,如%d、%c等。示例1:printf("Hellocworld!\n");功能:在屏幕上直接輸出“Hell。cworld!",“\n”表示內(nèi)容輸出后,輸出光標換到下一行。示例2:inta=48;charb='A*;printf(“變量a的內(nèi)容為%d,變量c的內(nèi)容為%c!”,a,b);功能:在屏幕上輸出“變量a的內(nèi)容為48,變量c的內(nèi)容為A!”,刎用變量a的內(nèi)容48替換,猊用變量b的內(nèi)容A替換。此處,格式字符必須與輸出列表的數(shù)據(jù)類型相對應,否則,輸出內(nèi)容可能不會是預期結果,甚至可能是錯的。示例3:inta=50;floatd=3.14;printf("a=%f,d=%d\n”,a,d);6輸出的可能結果是:“a=2680,d=1074339512”,也有可能是其它結果,不過都不正確。另外,格式字符串中也可以加入加入相應的整數(shù),來控制變量輸出的位置。示例4:inta=50;floatd=3.14;printf(*a-%8d,d=%6.3f\n”,a,d);輸出結果為:輸入語句C語言中的常用輸出語句是scanf()語句,其被被稱為格式輸入函數(shù),即可以按用戶指定的格式從鍵盤上把輸入數(shù)據(jù)讀入到指定的變量中。scanf函數(shù)的一般形式為:scanf(“格式控制字符串”,地址表列);其中,格式控制字符串的作用與printf函數(shù)相同,但不能顯示非格式字符串,也就是不能顯示提示字符串。地址表列中給岀各變量的地址,即變量名前加取地址符“&”〇示例4:inta,b,c;printf(inputa,b,c\n");scanf(*%d%d%d*,&a,&b,&c);printf("a=%d,b=%d,c=%d”,a,b,c);在scanf。語句中,如果變量是整型,或者是實型時,屏幕輸入的數(shù)據(jù)間用空格隔開;如果是字符型,要注意,輸入時空格和換行也被看作是ー個字符。這兩條,初學者要注應用實例實例2.1:awelcomtoCworld!”ttinclude<stdio.h>#include<stdlib.h>main(){printf(MWeicomtoCworld!\nv);system("pause");實例2.2、用給定的字符在屏幕上輸出三角形#include<stdio.h>;tfinclude<stdlib.h>;7main(){charch;printfCintputachar:\n/z);scanf("%c",&ch);printf("%20c\n",ch);printf("%17c%6c\n”,ch,ch);//printf("%14c%12c\n”,ch,ch);printfCz%llc%3c%3c%3c%3c%3c%3c\n”,ch,ch,ch,ch,ch,ch,ch);system("pause");}實例2.3、輸入四個整數(shù)(-5000——5000)計算他們的和ttinclude"stdio.h"#include<stdlib.h>main(){inta,b,c,d,s;printf("pleaseinput4number:\n");scanf("%d%d%d%d〃,&a,&b,&c,&d);s=a+b+c+d;printf("sum=a+b+c+d=%d\n',s);system("pause");}實例2.4、已知圓的半徑,編程求解圓的周長和面積。#include<stdio.h>;ttinclude<stdlib.h>;main(){floatr,c,s,p;p=3.14;printf("intputR:\n");scanf("%f",&r);//c=2*p*r;s=p*r*r;printf("c=%f,s=%f\n",c,s);system("pause");}知識擴展:本章的相關內(nèi)容,可以參考參考書目1中的第三、四章,在這些章節(jié)中關于各變量、運算有更深入的描述,另外還有其它的ー些輸入輸出語句的介紹。同學們,可以深入閱讀,加深認識和理解。8上機實踐練習實例2.1-2.4〇第三章分支控制語句——if語句在實際編程中,常會遇到ー些需要先判斷再求結果的問題,這時就要用到分支結構。C語言常用的分支結構控制語句有if語句(二分支控制語句)和switch語句(多分支控制語句)。本章,我們先來學習if語句。1,關系運算符及其優(yōu)先級程序中做判斷時,經(jīng)常需要列出ー些由關系運算符組成的關系表達式,C語言中常用的關系運算符有以下幾種:<小于<=小于或等于>大于>=大于或等于5)==等于6)!=不等于關系運算符都是雙目運算符(即需要兩個操作數(shù)的運算符),優(yōu)先級均低于算術運算符,高于賦值運算符。在六個關系運算符中,く,<=,>,>=的優(yōu)先級相同,高于==和!=,==和!=的優(yōu)先級相同,除了關系運算符外,C語言還提供了三種輔助判斷的邏輯運算符:&&與運算,即兩個關系表達式同為真時,結果オ為真,否則為假。||或運算,即兩個關系表達式有一個為真,結果就為真,否則為假。!非運算,即關系表示為真時,運算后結果為假;關系為假時,運算結果為真。關系運算符可以構成各種關系表達式,邏輯運算符可以組合關系表達式為復合表達式,這樣程序處理問題的能力就被大大的增強。、if語句的語法if(表達式)語句1;else語句2;9說明:1、語意:如果表達式的值為真,則執(zhí)行語句1,否則執(zhí)行語句2。語句1、語句2都可以是多條合法的c語言語句,如果語句是多條時,用大括號擴起這些語句。表達式可以是復合表達式,即多條表達式的組合。2、有時不需要列出else所要表達的內(nèi)容,else語句就可以直接省略。3、如果語句1,或語句2又包含了if語句,則稱為if語句的嵌套。示例1:if(a>b)printf("max二%d\n”,a);elseprintf("max=%d\n",b);功能:如果a>b,輸出a的內(nèi)容,否則輸出b的內(nèi)容,即輸出a、b中較大的數(shù)。示例2:if(a==b)printf("A=B\n");elseif(a>b)printf("A>B\n");elseprintf("A<B\n");功能:根據(jù)a與b的數(shù)值,輸出他們之間的大小關系。這里就用到了if語句的嵌套。示例3:charch;scanf("%c",&c);If((chア〇')&&(chく’9'))printf("輸入的字符是數(shù)字字符'n〃);功能:該語句根據(jù)輸入字符的ASCR碼值來判別輸入符號的類型是不是數(shù)字字符。if語句應用實例實例3.1:輸入?個整數(shù)a,判斷是否為偶數(shù)。(是輸出"yes!"否則輸出"no!〃)。^include<stdio.h>#include<stdlib.h>main(){inta;scanf("%d",&a);if(a%2=0)printf("yes!");elseprintf("no!");system("pause");)實例3.2:計算一元二次方程的根:輸入方程的三個系數(shù)a,b,c,根據(jù)delt=b*b-4*a*c計算方程的10根。ttinclude<stdio.h>#include<stdlib.h>ttinclude<math.h>〃包含開方函數(shù)sqrt()的庫文件,此處括號內(nèi)的內(nèi)容為注釋.main(){floata,b,c,delt;floatxl,x2;printf("Pleaseinputa,b,c:");scanf("%f%f%f",&a,&b,&c);delt二b*b-4*a*c;if(delt==0){xl=-b/(2*a);printf("方程有兩個相等實根xl=x2=%f.\n",xl);}elseif(delt>0){xl=(-b+sqrt(delt))/(2*a);x2=(-b-sqrt(delt))/(2*a);printf(〃方程有兩個實根xl=%f,x2=%f.\n\xl,x2);else{printf("方程沒有實根!、n");}system("pause");)實例3.3:判斷閏年,根據(jù)輸入的年份判斷它是否是閏年。ttinclude<stdio.h>;#include<stdlib.h>main(){intfl,f2,f3,year;printf("判斷閏年:〃);printf("請輸入年份:“);scanf("%d",&year);if(((year%4)==0&&(year%100)!=0)||((year%400)==0))printf("%d是閏年'n",year);elseprintf("%d不是閏年\n",year);system("pause");)11知識擴展:本章的內(nèi)容,可以參考參考書目1中的第五章,在這一章節(jié)中關于條件運算符(表達式1?表達式2:表達式3)在編程中也經(jīng)常會被用到,感興趣的同學可以閱讀相關內(nèi)容。上機實踐練習實例3.1-3.3。第四章分支控制語句 switch語句C語言中的swtichO語句是ー種多分支控制語句,它會根據(jù)判斷結果允許有多種(2種以上)輸出。4.1>switch。語句語法switch(表達式){case常量表達式1:語句1;case常量表達式2:語句2;case常量表達式n:語句n;default:語句n+1;}說明:1、語義是:計算表達式的值,并逐個與其后的常量表達式的值相比較,當表達式的值與某個常量表達式的值相等時,即執(zhí)行其后的語句,然后不再進行判斷,繼續(xù)執(zhí)行后面所有case后的語句。如表達式的值與所有case后的常量表達式均不相同時,則執(zhí)行default后的語句。2、若某條case語句被執(zhí)行后,其后的其它case語句不需要被執(zhí)行,可以在該case語句對應的執(zhí)行語句后,加入break語句。Break語句在此表示跳出整個swtichO語句,繼續(xù)執(zhí)行swtichO語句后面的語句。3、表達式的值必須是可數(shù)的數(shù)據(jù)類型,即是整數(shù),或者是字符,而實數(shù)不允許。示例1:成績查詢,根據(jù)輸入的考號,輸出其相應的成績。intnum;scanf1%a,&num);switch(num){12printf(線d號考生的成績是75分、n",num);break;printf("%d號考生的成績是85分、n",num);break;printf("%d號考生的成績是95分、n”,num);break;printf(*%d號考生的成績是65分、n”,num);break;printf("%d號考生的成績是55分、n”,num);break;printf("%d號考生的成績是100分、n”,num);break;default:printf(*%d號考生不存在、n",num);break;}4.2switch。應用實例實例4.1>參照示例1.ttinclude<stdio.h>;#include<stdlib.h>main(){intnum;scanf(〃%d”,&num);switch(num){printf("%d號考生的成績是75分、n”,num);break;printf(/z%d號考生的成績是85分、n”,num);break;printf("%d號考生的成績是95分、n”,num);break;printf(〃%d號考生的成績是65分、n”,num);break;printf("%d號考生的成績是55分、n”,num);break;printf("%d號考生的成績是100分、n〃,num);break;default:printf(*%d號考生不存在、n”,num);break;system("pause");實例4.2、計算表達式的值,輸入表達式aFb,F為“+、ー、?、/”之一,計算表達式的值。ttinclude<stdio.h>;ttinclude<stdlib.h>main(){floata,b;13charf;printfCinputexpression:a+(-,*,/)b\n");scanf &a,&f,&b);switch(f){case':printf(’%f\n”,a+b);break;case'-':printf(“賦、n",a-b);break;case':printf("%f\n",a*b);break;case'/':printf("%f\n",a/b);break;default:printf(zinputerror\n");}system("pause");}實例4.3、劃分等級:根據(jù)輸入的成績劃分等級。0—59為不及格,60——79為合格,80——89為良好,90——100為優(yōu)秀。#include<stdio.h>;ttinclude<stdlib.h>main(){ints,n;scanf("%d",&s);n=s/10;switch(n){〃此處,可以用n而不能用s,同學們,可以思14考這是為什么?case10:case9:printf("%d分等級為優(yōu)秀、n”,s);break;case8:printf("%d分等級為良好\n,s);break;case7:case6:printf("%d分等級為合格、n”,s);break;default:printf(*%d、n,s);break;}system("pause");}實例4.4、編程輸出某年某月有幾天。ttinclude<stdio.h>#include<stdlib.h>main(){intday,month,year;print—pleaseinputyearandmonth:、n);scanf("%d%d”,&year,&month);switch(month){case1:case3:case5:case10:case12:day=31;break;case4:case6:15分等級為不及格case9:case11:day=30;break;case2:if((year%4==0)&&(year%100!=0)(year%400==0))day=29;elseday-28;break;default:printflinputerror!");)printf("thereare%ddaysin%d,%d.\n",day,year,month);system("pause");)知識擴展:本章內(nèi)容,同學們可以參考參考書目1的第五章。關于break語句的用法,同學們可以在參考書目1的第六章找到,請同學們自行閱讀,了解其完整的功能。上機實踐練習實例例1-4.4。第五章循環(huán)控制語句1——for語句在編程時,有些問題可以通過一些重復的處理過程來完成,這時就用到了循環(huán)結構。循環(huán)結構不但可以大大減少源代碼的書寫工作量,而且也可以最大化地利用了計算機運算速度快的特長,是一種重要的控制結構。C語言為了提高循環(huán)控制能力,提供了多種循環(huán)語句,如for語句、while語句、do-while語句等。它們的共同特點是:在給定的條件成立時,反復執(zhí)行指定的程序段,直至條件不成立時為止。給定的條件稱為循環(huán)條件,反復執(zhí)行的程序段稱為循環(huán)體。本章,我們先來學習for語句。5.1、for語句語法它的一般形式為:for(表達式1;表達式2;表達式3)語句說明:161、它的執(zhí)行過程如下:1)先求解表達式1的值,然后判斷表達式2是否成立,如果成立執(zhí)行指定的內(nèi)嵌語句,否則執(zhí)行for語句后面的語句。2)在表達式2成立時,每執(zhí)行一次內(nèi)嵌語句,就計算ー次表達式3的值,并再次確認表達式2是否成立,如果成立就重復執(zhí)行這ー過程,達到循環(huán)的目的,如果不成立,就終止循環(huán)。2、表達式1的值通常稱為for循環(huán)的初始值,表達式3的值通常稱為循環(huán)的進階語句,或稱循環(huán)步長,表達式2通常稱為循環(huán)終止條件。各表達式可以是用逗號隔開的多個表達式的組合。3、內(nèi)嵌語句是多條語句,要用大括號擴起,表示重復過程是所有的這些語句。。4、for循環(huán)中也可以套用for循環(huán),這時稱為for循環(huán)的嵌套。5、有時,根據(jù)需要,或者特殊設計,三個表達式也可以部分省略,或者都省略。不過對于初學者,建議書寫標準格式,這樣更有利于理解整個循環(huán)過程。示例1:標準格式inti,sum=0;for(i=0;i<=10;i++)sum=sum+i;功能:計算1+2+3+…+10的和。示例2:省略表達式3inti,sumニ〇;for(i=l;i<=100;){sum=sum+i;i++;)功能:同示例1。示例3:表達式是由逗號隔開的兩個表達式inti,sum;for(sum=O,i=l;i<=100;i++)sum=sum+i;功能:同示例1。2for循環(huán)的應用實例5.1、計算1+2+3+…+n的和。ttinclude<stdio.h>#include<stdlib.h>main(){intn,i,sum=0;printf(''inputn:\n〃);17scanf("%d",&n);for(i=l;i<=n;i++)sum=sum+i;printf("1+2+3+…+n的和為%d\n",sum);system("pause");}參考該題實現(xiàn)n階乘(n!=l*2*3*---*n)的計算程序。實例5.2、計算斐波那契序列,已知:打二1ば2=1;計算后二行ー1+行ー2ハ>=3。(數(shù)列形式為:1、1、2、3、5、8、13、21、34、55、89、144、233,,,,)#include<stdio.h>#include<stdlib.h>main(){intn,i,x=l,y=l,z;printf(*inputn:\n");scanf("%d",&n);for(i=3;i<=n;i++){z=x+y;x=y;y=z;}printf("序列的第%d項為%d\n”,n,z);system("pause");}實例5.3、在輸入的n個數(shù)中尋找最大數(shù),并輸出。ttinclude<stdio.h>ttinclude<stdlib.h>main(){intn,i,max,x;scanf("%d",&n);〃讀入輸入數(shù)的個數(shù)scanf("%d",&max);〃將第一個數(shù)暫時看作是最大數(shù)for(i=2;iく=n;i++)scanf("%d",&x);if(x>max)max=x;printf("max=%d!\n”,max);system("pause");)18實例5.4、計算水仙花數(shù)。(形如153這樣的三位數(shù),它滿足如下規(guī)律:153=1*1*1+5*5*5+3*3*3。)源程序1:ttinclude<stdio.h>#include<stdlib.h>main(){inti,a,b,c;for(i=100;i<1000;i-H-){a=i/100;c=i%10;b=(i/10)%10;if(i==a*a*a+b*b*b+c*c*c)printf("%di);}printf("\n");system("pause");}源程序2:#include<stdio.h>#include<stdlib.h>main(){inti,j,k,c;for(i=l;iく=9;i++)for(j=0;j<=9;j++)for(k=0;k<=9;k++){c=i*100+j*10+k;if(c==i*i*i+j*j*j+k*k*k)printf(*%d*,c);}printf(〃\n");system("pause");}實例5.5?、判斷m是否是素數(shù)。#include<stdio.h>#include<stdlib.h>#includeくmath.h>main(){intm,i,k;scanf("%d",&m);k=sqrt(m);for(i=2;i<=k;i++)19if(m%i==0)break;if(i>=k+1)printf("%d是素數(shù)!\n",m);elseprintf(*%d不是素數(shù)!\n”,m);system("pause");)知識擴展:本章內(nèi)容,同學們可以參考參考書目1的第六章。For循環(huán)在程序中經(jīng)常被使用,尤其是內(nèi)層循環(huán)與外層循環(huán)有關的嵌套循環(huán),更是同學們學習的難點,希望同學們通過更多的練習掌握這種處理問題的方式。上機實踐:練習實例5.1-5.4.第六章循環(huán)控制語句2while語句循環(huán)控制的另一中重要的循環(huán)是while循環(huán),通常情況下,for循環(huán)能完成的功能while循環(huán)也能實現(xiàn)。一般在循環(huán)次數(shù)丄知的情況下,使用for循環(huán),循環(huán)次數(shù)不確定時使用while循環(huán)。1、while語句語法while語句的一般形式為:while(表達式)語句說明:1、語意是:如果表達式的值為真(即表達式成立),則執(zhí)行循環(huán)體語句,否則執(zhí)行while下面的語句。2、如果循環(huán)語句為多條,需要將這些語句用大括號擴起,表示在表達式成立時,這些語句要都要執(zhí)行。示例1:inti=l,sum=0,n;scanf("%d",&n);while(i<=n)20sum=sum+i;i++;功能:實現(xiàn)1+2+3+…+n的和。示例2:統(tǒng)計從鍵盤輸入一行字符的個數(shù),輸入字符以“ザ’結束。intn=O;charch;scanf(^%c",ch);while(ch!二’#'){n++;scanf(w%c",ch);}6.2、應用實例實例6.1、計算1+2+3+…+n的和。#include<stdio.h>ttinclude<stdlib.h>main(){inti=l,sum=O,n;scanf("%d",&n);while(i<=n){sum=sum+i;i++;}printf(zzsum=%d\n,sum);system("pause");}實例6.2、統(tǒng)計從鍵盤輸入一行字符的個數(shù),輸入字符以“#"結束。#include<stdio.h>#include<stdlib.h>main(){intnニ〇;charch;scanf("%c”,&ch);while(ch!=* )in++;scanf("%c”,&ch);21}printf("字符總個數(shù)為%ゼい”,n);system(z/pause");}實例6.3、輸入一行字符以‘結尾,統(tǒng)計其中大些字母和小寫字母的各自個數(shù)。ftinclude<stdio.h>ttinclude<stdlib.h>main(){intnl=0,n2=0;charch;scanf("%c",&ch);while(ch!='#')if(ch>='A'&&chくニ'Z')nl++;if(ch>=,a"&&ch<='z)n2++;scanf("%c”,&ch);printf("大寫字符總個數(shù)為刎,小寫字母的個數(shù)為%d\n”,nl,n2);system("pause");知識擴展:本章內(nèi)容,同學們可以參考參考書目1的第六章。在本章中do-while循環(huán),,break語句和continue語句在編程時也經(jīng)常會用到,同學們可以自行閱讀學習增強處理問題的能力。上機實踐:練習實例6.1-6.3。第七章數(shù)組的定義與引用在編程時,如果需要定義的數(shù)據(jù)變量很多,而逐個定義這些變量又會給編程帶來很大的工作量,這時就可以通過定義數(shù)組來解決這ー問題。比如,在編程處理學生成績的時候,我們可以通過定義ー個ー維數(shù)組來表示某個學生的成績,形式如下:intscore[20];這里就定義了20個整型變量,他們的具體名稱依次是score[〇]、scored]、score[2]、…score[19],注意這里的變量是從score[0]開始的,這些變量就可以用來存儲該學生的不同學科的成績。22如果需要表示一個班級不同學生的成績,我們可以定義二維數(shù)組來表示,形式如下:intscore[60][20];這里就定義了60*20個整型變量,他們的具體名稱依次是score[〇][〇]、score[0][1],score[0][2]、…score[59][19],注意這里的變量是從score[〇][〇]開始的。我們可以用score[〇][〇]…score[〇][19]來表示第一個學生的各科成績,用score[i][〇]…scpre[i][19]表示第i個學生的各科成績。同樣,我們可以定義三維數(shù)組來表示一個學年不同班級的不同學生的成績,也可以定義四維數(shù)組表示一個學校不同學年不同班級不同學生的成績,依此類推,我們可以使用更高維的數(shù)組。這樣定義變量既有實際意義,又給編程帶來的便利,尤其是數(shù)據(jù)量更大的時候,如1000,10000,100000等更多的情況。數(shù)組的定義數(shù)組定義的?般形式:類型說明符數(shù)組名[常量表達式i"常量表達式2n常量表達式3][…]:說明:1、類型說明符標明數(shù)組中數(shù)據(jù)元素的數(shù)據(jù)類型,數(shù)組名是為這ー組變量取的共同的名字,方括號中若果有一個常量表達式表明是ー維數(shù)組,兩個常量表達式表明的是二維數(shù)組,依次是更高維的數(shù)組。各常量表達式的值代表了數(shù)組該維上的下標總長度,具體下標從〇開始。2、數(shù)組元素的表示依次是數(shù)組名+ロロ[…],中括號內(nèi)是從〇開始的具體的整數(shù),該整數(shù)稱為該數(shù)組該維上的下標。3、數(shù)組必須先定義然后才能使用,使用中數(shù)據(jù)元素允許有空余。示例1:intsl[100],s2[100][100],s3[50][50][50];charfl[80],f2[50][10],f3[100][50][10];si中數(shù)組的元素依次是si[〇]、si[1]、…si[99],s2中的數(shù)組元素依次是s2[〇][〇]、s2[〇][1]、…s2[99][99],s3中的數(shù)組元素依次是s3[〇][〇][〇]、S3[〇][〇][1]、…S3[49][49][49]。數(shù)組fl、f2、f3中的數(shù)組元素依次類推。數(shù)組的應用實例7.1、讀入一組數(shù)(不超過10個),并將它們反向輸出。Sinclude<stdio.h>#include<stdlib.h>main(){23intn,i,a[10];scanf("%d",&n);for(i=0;i<n;i++)scanf&a[i]);for(i=n-l;i>=0;i—)printf(*%d",a[i]);system("pause");)實例7.2:計算某個班級期中考試每名學生的總成績,并將全部成績連同總成績ー起打印輸出。輸入輸出數(shù)據(jù)樣例:輸入:35〃該班級有3名學生,期中考試考了5科8170809077〃第一名學生的5科成績8579908572〃第二名學生的5科成績8868849478〃第三名學生的5科成績輸出:8170809077398〃第一名學生的5科成績及總成績8579908572411〃第二名學生的5科成績及總成績8868849478412〃第三名學生的5科成績及總成績源程序:ttinclude<stdio.h>ttinclude<stdlib.h>main(){inti,j,n,m,sum;intscore[20][10];scanf("%d%d”,&n,&m);for(i=0;i<n;i++){sumニ〇;for(j=0;j<m;j++)(scanf&score[i][j]);sum=sum+score[i][j];}score[i][j]=sum;}for(i=0;i<n;i++){for(j=0;j<=m;j++)printf(*%d score[i][j]);24printf("\n");}system("pause");}實例7.3、對輸入的n個整數(shù)進行從小到大的排序。?include<stdio.h>ttinclude<stdlib.h>main(){intn,i,j,a[10],maxi,temp;scanf(*%d",&n);for(i=0;iくn;i++)//讀入數(shù)據(jù)scanf("%d”,&a[i]);for(i=n-l;i>0;i—)〃數(shù)據(jù)排序maxi=O;for(j=l;j<=i;j++)if(a[j]>a[maxi])maxi=j;temp=a[i];〃以下三行用來將a[i]與a[maxi]進行交換a[i]=a[maxi];a[maxi]=temp;)for(i=0;i<n:i++)〃輸出排序后的數(shù)據(jù)printf(*%d*,a[i]);printf("\n");system("pause");)知識擴展:本章內(nèi)容,同學們可以參考參考書目1的第七章。數(shù)組的初始化、字符數(shù)組可以作為同學們本章的學習擴展內(nèi)容。上機實踐:練習實例7.1-7.3〇25第ハ章函數(shù)的定義與使用在編程時,如果程序的代碼量很大,我們可以按照功能將程序分塊:提取出相應的程序代碼,加入必要成分形成一個主程序的子程序,這個子程序通常又就被稱為函數(shù)。我們在主程序里可以像調(diào)用其它已知函數(shù)一樣,調(diào)用該子程序。這樣做,既可以減少重復利用該功能書寫代碼的工作量,方便多次調(diào)用,又可以為程序惘錯時查找錯誤帶來便利。對于規(guī)模很大的程序而言,程序按模塊設計,既便于程序員間的分工合作,又有利于程序后期的調(diào)試和維護,是軟件開發(fā)設計中的ー個很重要的設計思想。函數(shù)的定義函數(shù)的定義就是按照需要,將原來主程序中的部分代碼提取出來,補充出ー些輔助內(nèi)容,使之形成一個子程序的過程。函數(shù)定義的一般形式:類型標識符函數(shù)名(){聲明部分語句)說明:1、類型表示符可以是任何ー種數(shù)據(jù)類型,標明函數(shù)返回值的數(shù)據(jù)類型,也可以直接放置“void”標識符,標明函數(shù)不需要返回任何數(shù)據(jù)類型的函數(shù)值。2、函數(shù)名就是為這段代碼給子程序定義的名字,函數(shù)名后邊的括號內(nèi)可以放置函數(shù)被調(diào)用時所需的別要參數(shù)。3、函數(shù)的主體部分,就是函數(shù)所要完成的功能,以及必要的變量定義等程序必備的內(nèi)容。4、函數(shù)也可以作為ー個主體調(diào)用其它函數(shù),ー個函數(shù)調(diào)用另外一個函數(shù)稱為嵌套,一個函數(shù)調(diào)用自己(形式上是自己,執(zhí)行的初始參數(shù)會有所不同)稱為遞歸。示例1、求最大值函數(shù)intmax(inta,intb)Iif(a>b)returna;elsereturnb;}功能:求兩個數(shù)中的最大值的函數(shù),return向調(diào)用函數(shù)返回最大值。示例2,在函數(shù)中求1+2+3+…+n的和,并直接輸出。Voidsum(intn){inti=0,s=0;for(i=l;i<=n;i++)26s=s+i;printf("sum二%d\n”,s);)示例3、求四個數(shù)中的最大值。intmaxi(inta,intb)(if(a>b)returna;elsereturnb;}intmax4(){inta,b,c,d,xl,x2;scanf(〃%d%d%d%d〃,&a,&b,&c,&d);xl=maxi(a,b);x2=maxl(c,d);printf("max4二%d\n”,maxi(xl,x2));}示例4*、求1+2+3+…+n的和,遞歸實現(xiàn)。!ntsum(intn){ints;if(n==l)s=l;elses=sum(nT)+n;returns;}函數(shù)的引用實例8.1、求四個數(shù)中的最大值。tinclude<stdio.h>#include<stdlib.h>intmaxi(inta,intb){if(a>b)returna;elsereturnb;}intmax4(){inta,b,c,d,xl,x2;scanfC%d%d%d%d",&a,&b,&c,&d);27xl=maxl(a,b);x2=maxl(c,d);printf("Zmax4:z%d\n,/,maxi(xl,x2));}main(){max4();system("pause");}實例8.2、求組合數(shù)C(n,m)=n!/((m!)*(n-m)!)^include<stdio.h>#includeくstdlib.h>intp(intk){inti,jch=l;for(i=2;i<=k;i++)jch=jch*i;return(jch);}voidc(intn,intm){intresult;result=p(n)/(p(n-m)*p(m));printf("P(n,m)=%d\n”,result);}mainO{intn,m;printf(z,Inputn,m:");scanf("%d%d”,&n,&m);c(n,m);system("pause");}實例8.3?、漢諾塔游戲,有A,B,C三根柱子,A柱子上套有若干由小到大(小的在上)不同的圓環(huán),要求,.每次移動?個圓環(huán),小的只能疊在大的上面,把所有圓環(huán)從A柱子經(jīng)過B柱子全部移到C柱子上。#include<stdio.h>#include<stdlib.h>voidhanuo(intn,chara,charb,charc){if(n=l)printf("1一%c--%c\n",a,c);else{28hanuo(n-l,a,c,b);printf("%d--%c--%c\n”,n,a,c);hanuo(n-l,b,a,c);mainO{intn;printf(*Inputn:*);scanf&n);hanuo(n,*A*,*B*,*C*);system("pause");)知識擴展:本章內(nèi)容,同學們可以參考參考書目1的第八章。除了本章所述內(nèi)容外,參數(shù)傳遞、全局變量和局部變量的等相關內(nèi)容,同學們也可以在本章找到,這些內(nèi)容對于熟練使用函數(shù)都是非常有幫助的內(nèi)容。上機實踐:練習實例8.1、8.2,8.3選作。第九章?字符串處理9.1字符串處理字符串是指多個單個字符組合在ー起表達一定的意義,比如人的姓名就是由多個單字符組成的一個整體,指代具體的某個人。在C語言中沒有專門的字符串變量,通常用ー?個字符數(shù)組來存放ー個字符串,與字符數(shù)組不同的是在表示字符串時,數(shù)組在存儲完所有的字符后又加入了一個特殊字符‘、0’,表示這是ー個字符串,而不是普通的字符數(shù)組。例如:charchi[20]={'C',,し,p,,,r,,,〇,,,g,,,r,,,a,,,m,};charch2[]="Cprogram";前者定義的是ー個字符數(shù)組(利用定義時直接賦初值的方式),后者定義的是ー個字符串(也是29利用定義時直接賦初值的方式)。兩者都是字符數(shù)組,唯一不同的是存儲時,后者在存儲的末尾加了一個特殊標識‘、〇’。具體形式如下:Chi的存儲方式如下:cpr0gramCh2的存儲方式如下:cpr0graID\0??????在處理字符串時,c語言提供了庫string/,里面包含了一些可以直接調(diào)用的字符串處理函數(shù),比如strlen(strl)(求字符串strl的長度),strcat(strl,str2)合并字符串等。下面把常用的幾個字符串處理函數(shù)簡述如下:strcat(strl,str2):將字符串strl與str2合并并存入到strl中,示例略strlen(strl);求字符串strl的長度如:intn;charsiロ={"Thisisatest!"}:n=strlen(sl);運行結果是n=15strncpy(strl,str2,n);將字符串str2中的前n個字符復制到字符串strl中如:charstrl[];charstr2[8]={"thisis");srcnpy(strl,str2,4);運行結果是strl="this”strcmp(strl,str2);對兩個字符串從左到右按單個字符的ASCII值進行逐一比較,直到不同為止,或者某ー個字符結束。返回值為3種:0,代表相等;整數(shù),代表字符串strl大于后者;負數(shù),代表前者小于后者。字符串的比較通常就用這種方式。如:n=strcmp("is","is")i〃返回值為〇;n=strcmp("this","is");〃返回值為1;n=strcmp("is","this"):〃返回值為T;st門wr(strl);將str!中的大寫字符轉化成小寫字母;strupr(strl);將strl中的小寫字母轉化成大寫字母;部分示例:#include<stdio.h>#include<stdlib.h>ttinclude<string.h>main(){charch,strl[10],str2[10];inti,j,n;scanf(*%s%s*,strl,str2);strcat(strl,"");strcat(strl,str2);//strcat(strl,str2),將字符串strl與str2合并并存入到strl中printfC%s\n",strl);n=strlen(strl)+strlen(str2)+1;for(i=。;i<n;i++)printf("%c”,strl[i]);systemC'pause");30}應用實例實例9.1、期末考試結束之后,老師給出了不及格學生的名單,請編程查找某個學生的姓名是否在這個名單里,如果在打印輸出“yes”,否則輸出“no”。ttinclude<stdio.h>ttinclude<stdlib.h>mainO{charstrlL1OJL1OJ=(william,sean,tom,john,jone,Jim,brown,white,alice","peter"};charstr2[10];inti,j,n;printf("輸入人名:〃);scanf(*%s*,str2);for(i=0;i<10;i++){if(strcmp(strl[i],str2)==0){printf("已經(jīng)找到,位置是%d\n”,i+1);break;)}if(i>=10)printf("沒有找到、n");system("pause");)實例9.2、在期末,老師將班級內(nèi)所有學生的所有學科考試成績的數(shù)據(jù)都放在了?個文件里,請編程幫助老師查找出總成績最高的學生,并將其名字和成績?起輸出。輸入輸出數(shù)據(jù)樣例:輸入:34〃第一行兩個數(shù)n,m分別表示班級人數(shù)和考試科冃總數(shù)Wangzhaojiang〃第二行表示班級同學的姓名,全是字母9010211287〃余下n行,m列分別表示上述各位學生同學的各科成績1001121209812011512297輸出:前n行為各科成績及總分,第n+1行為最高分學生姓名90102112873913110011212098430120110120100450Jiang源程序:^include<stdio.h>#include<stdlib.h>ttinclude<string.h>main(){charsname[50][10];//charsname[10];inti,j,n,m,smax=0,sum,snum=0;intscore[50][50];scanf("%d%d”,&n,&m);for(i=0;i<n;i++)scanf('%s”,sname[i]);for(i=0;iくn;i++){sumニ〇;for(j=0;j<m;j++)!scanf(〃%d”,&score[i][j]);sum=sum+scorefi][j];}score[i][j]=sum;if(sum>smax)snum=i;}for(i=0;i<n;i++){for(j=0;j<=m;j++)printf(*%d*,score[i][j]);printf("\n");)printf(*%s\n*,sname[snum]);printf("ヽn\n");system("pause");)32第十章?文件讀寫操作我們前面所介紹的輸入輸出方式都是在屏幕上進行的,如果數(shù)據(jù)輸入,或者數(shù)據(jù)輸出需要操作文件,那就用到了本章要介紹的文件讀寫操作。在此,只介紹文本文件的操作方式,其它內(nèi)容請同學們參閱參考書目1的第十三章。10」、文件讀寫操作的一般格式FILE*fpl,*fp2;〃定義文件變量,變量名可以根據(jù)需要自行定義,但必須加“*”fpl=fopen(“文件名1“,“r”);〃用fp!代替輸入文件,文件名1是輸入文件的文件名fp2=fopen(“文件名2“,“w”);;〃用fp2代替輸出文件,文件名2是輸出文件的件名fscanf(fpl,n…”,…);〃從輸入文件中讀入數(shù)據(jù)fprintf(fp2,”…);〃向輸出文件中輸出數(shù)據(jù)fclose(fpl);〃關閉輸入文件fclose(fp2);〃關閉輸出文件注意:文件在程序結束時,必須關閉。10.2、實例應用實例10.1、從文件data,txt中讀入n個數(shù)并求和,將和輸出到文件data,txt中(兩個文件均是文本文件,且與源程序放置在同一目錄下)ttinclude<stdio.h>main(){FILE*fpl,*fp2;fpl=fopen("data,in","r");fp2=fopen("data,out","w");inta[20],i,n,s=0;;fscanf(fpl,"%d",&n);for(i=l;i<=n;i++){fscanf(fpl,"%d”,&a[i]);s=s+a[i];}fprintf(fp2,"%d\n",s);fclose(fpl);33fclose(fp2);}附錄?綜合實例——學生成績查詢系統(tǒng)這是ー個用c語言編寫的小軟件——學生成績查詢系統(tǒng),同學們可以將其作為ー個綜合實例,對其進行仔細的閱讀和研究,體驗編程處理問題的過程,加深對編程語言的理解,提高處理問題的綜合能力。1、程序的功能:1)可以根據(jù)用戶輸入的輸入、輸出文件名,讀入學生成績,完成數(shù)據(jù)的初始化。2)可以查詢指定學生的成績,可以是指定科目的成績,也可以是全部科目的成績。

3)友好退出。2-I使用說明:1)將輸入文件放到指定的目錄下(即../studentハ輸入文件(文本文件類型,名字可?以自定)輸入文件(文本文件類型,名字可?以自定)圖12)啟動管理程序student,exe3)在程序的使用界面,首先輸入輸入文件名和輸出文件名,完成程序的初始化,操作如下圖所示34圖2然后,按照按照提示,輸入學生姓名和需要程序的成績(此軟件暫時只設置了五成成績,同學們可以按照需要擴展)科目代碼,也可以輸入查詢所有成績的代碼。程序成績,如下圖所示

圖34)輸入代碼“q”退出程序。3、程序代碼ttinclude<stdio.h>#include<stdlib.h>ttinclude<string.h>35charfilel[20],file2[20],name[200][20],namel[15];intn,m,data[200][10];voidinit(){inti,j;charch='';printf("%20c歡迎使用班級成績管理系統(tǒng)ゝn\n”,ch);printf(〃請輸入輸入和輸出文件名(中間用ー個空格隔開):\n〃);scanf(*%s%s*,filel,f

溫馨提示

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

評論

0/150

提交評論