版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《C語(yǔ)言程序設(shè)計(jì)》是大部分計(jì)算機(jī)類專業(yè)的必修課程,也是很多非計(jì)算機(jī)專業(yè)開設(shè)的程序設(shè)計(jì)基礎(chǔ)課程。作為計(jì)算機(jī)類的專業(yè)基礎(chǔ)課,目的是使學(xué)生掌握程序設(shè)計(jì)的基本方法并逐步形成正確的程序設(shè)計(jì)思想,能夠熟練地使用C語(yǔ)言進(jìn)行程序設(shè)計(jì)并具備調(diào)試程序的能力,為后續(xù)課程及其他程序設(shè)計(jì)課程的學(xué)習(xí)和應(yīng)用打下基礎(chǔ)。對(duì)于非計(jì)算機(jī)專業(yè)來(lái)說(shuō),該課程有實(shí)際應(yīng)用價(jià)值,為用計(jì)算機(jī)解決實(shí)際問(wèn)題提供了方法,是后續(xù)理論和實(shí)踐教學(xué)的基礎(chǔ)和重要工具,同時(shí)也是計(jì)算機(jī)二級(jí)考試所要求的課程之一。作為一門計(jì)算機(jī)語(yǔ)言,對(duì)于初學(xué)者來(lái)說(shuō)在思維方式上需要跨越心理上和思維方式上的障礙,需要逐步理解程序設(shè)計(jì)思想。如果象其它課程按照常規(guī)方法進(jìn)行教學(xué),隨著課程的不斷深入,大量的規(guī)則、定義、要求和機(jī)械的格式出現(xiàn)后,很容易使學(xué)生產(chǎn)生枯燥無(wú)味的感覺。而從本質(zhì)上來(lái)說(shuō),計(jì)算機(jī)語(yǔ)言就是一個(gè)利用計(jì)算機(jī)去解決問(wèn)題的工具,這就像我們?cè)趯W(xué)如何使用螺絲刀時(shí)需要掌握的是如何去用螺絲刀擰螺絲,而不是學(xué)習(xí)螺絲刀的制作方法、研究螺絲刀的形狀結(jié)構(gòu)以及螺絲刀的制作材料等。我們培養(yǎng)學(xué)生的主要目的是使學(xué)生掌握C語(yǔ)言的使用方法,讓學(xué)生真正具有利用C語(yǔ)言解決實(shí)際問(wèn)題的能力,而不是讓學(xué)生了解很多C語(yǔ)言的細(xì)節(jié)和原理,這一點(diǎn)對(duì)于高職高專學(xué)生尤其重要,培養(yǎng)學(xué)生自主學(xué)習(xí)和應(yīng)用C語(yǔ)言解決實(shí)際問(wèn)題比讓學(xué)生掌握精通C語(yǔ)言語(yǔ)法重要得多。因此,“淡化語(yǔ)法,強(qiáng)調(diào)應(yīng)用”是我們堅(jiān)持的一個(gè)原則,但是考慮到本課程的適用范圍,很多教師多年來(lái)的傳統(tǒng)教學(xué)思想和習(xí)慣不一定能夠很快適應(yīng)新的教學(xué)方法,在編寫過(guò)程中充分分析了這一點(diǎn),盡量適合不同風(fēng)格的教學(xué)方法。所以本課程注入了新的教學(xué)思想和方法,力爭(zhēng)改變過(guò)去先給出定義和規(guī)則的講授辦法,從具體問(wèn)題入手,努力把枯燥無(wú)味的語(yǔ)言講得生動(dòng)、活潑。讓學(xué)生明白如何分析并解決實(shí)際問(wèn)題,逐漸培養(yǎng)學(xué)生程序設(shè)計(jì)的正確思維模式。在每一章中都加入了“導(dǎo)學(xué)”,其目的除了為教師提示教學(xué)思想和方法之外,更重要的是,在學(xué)習(xí)新知識(shí)之前,引導(dǎo)學(xué)生認(rèn)識(shí)學(xué)習(xí)的目的、學(xué)習(xí)的重點(diǎn),并通過(guò)實(shí)例讓他們對(duì)新知識(shí)的功能、方法和程序運(yùn)行結(jié)果有一個(gè)感性認(rèn)識(shí)(在閱讀導(dǎo)學(xué)時(shí),其中的實(shí)例只需感受不需理解和掌握),使學(xué)習(xí)目標(biāo)更明確,學(xué)習(xí)更有針對(duì)性,更高效地掌握知識(shí),培養(yǎng)解決問(wèn)題的能力?!皩?dǎo)學(xué)”可以很好地指導(dǎo)學(xué)生進(jìn)行課前自學(xué)。由于大部分學(xué)生是第一次接受計(jì)算機(jī)語(yǔ)言,教材注重“通俗性、可接受性”的原則。沒(méi)有把重點(diǎn)放在語(yǔ)法規(guī)則的敘述上,而是放在程序設(shè)計(jì)方法上,通常由例題引出一種語(yǔ)法規(guī)則,通過(guò)一些求解具體問(wèn)題的程序來(lái)分析算法,介紹程序設(shè)計(jì)的基本方法和技巧,既注重教材的系統(tǒng)性、科學(xué)性,又注重易讀性和啟發(fā)性。從最簡(jiǎn)單的問(wèn)題入手,一開始就介紹程序,通過(guò)編寫、運(yùn)行程序來(lái)掌握語(yǔ)言的規(guī)定和程序設(shè)計(jì)的方法,然后再分析一些語(yǔ)法細(xì)節(jié)。在選擇例題時(shí)也是由簡(jiǎn)到難逐步呈現(xiàn)給學(xué)生。由于不同學(xué)校、不同專業(yè)的教學(xué)目標(biāo)不同,課程開設(shè)的學(xué)時(shí)數(shù)區(qū)別較大,本課程分為入門篇、基礎(chǔ)篇和提高篇三個(gè)部分,這樣便于教師在教學(xué)過(guò)程中把握教學(xué)內(nèi)容及課時(shí)的分配,入門篇可以使學(xué)生掌握最基本的程序設(shè)計(jì)方法,能夠編寫簡(jiǎn)單的應(yīng)用程序,為了讓學(xué)生編寫比較完整的程序,在入門篇中介紹了最基本的選擇結(jié)構(gòu)的使用方法?;A(chǔ)篇的內(nèi)容體現(xiàn)了一門高級(jí)語(yǔ)言的絕大部分知識(shí),基本上可以使學(xué)生了解和把握一門高級(jí)語(yǔ)言的大部分知識(shí)點(diǎn),如果不使用C語(yǔ)言進(jìn)行較深入的程序設(shè)計(jì),單從高級(jí)語(yǔ)言知識(shí)的角度和編寫一般的應(yīng)用程序來(lái)看內(nèi)容已經(jīng)基本夠用了。提高篇重點(diǎn)講解有關(guān)C語(yǔ)言的高級(jí)應(yīng)用,內(nèi)容偏難,教師可針對(duì)需要對(duì)內(nèi)容適度增減。第一部分入門篇要想掌握C語(yǔ)言程序設(shè)計(jì)方法,入門是非常關(guān)鍵的,從易到難,由淺入深是快速掌握C語(yǔ)言程序設(shè)計(jì)的捷徑。編寫C語(yǔ)言源程序必須遵循C語(yǔ)言的規(guī)則,各種不同的詞法符號(hào)構(gòu)成了C語(yǔ)言程序。因此即使要編寫最簡(jiǎn)單的C語(yǔ)言程序,也要遵循規(guī)則,但C語(yǔ)言的規(guī)則非常繁雜,如果學(xué)習(xí)完規(guī)則、語(yǔ)法后在編寫程序,那么就會(huì)非??菰铮瑫?huì)破壞人們學(xué)習(xí)語(yǔ)言的心情,這就和學(xué)習(xí)英語(yǔ)意思相同,如果邊學(xué)邊用,邊用邊學(xué),從學(xué)中用,從用中學(xué),既可以提高學(xué)習(xí)興趣,同時(shí)又可以大大提高學(xué)習(xí)效率,所以,在這一部分中,首先講解編寫簡(jiǎn)單C語(yǔ)言程序的必要知識(shí)和語(yǔ)法,然后在此基礎(chǔ)上編寫程序,重點(diǎn)不在語(yǔ)法,而在學(xué)生程序設(shè)計(jì)的方法和思想,在程序的編寫和調(diào)試過(guò)程中逐步理解相關(guān)知識(shí)。第1章C語(yǔ)言概述導(dǎo)學(xué)1.問(wèn)題的提出你會(huì)操作計(jì)算機(jī)嗎?你會(huì)使用軟件嗎?是什么能使計(jì)算機(jī)提供如此豐富的軟件和強(qiáng)大的功能?是程序,程序是用計(jì)算機(jī)語(yǔ)言編寫的。C語(yǔ)言就是世界上最流行的程序設(shè)計(jì)語(yǔ)言之一。如果您還想成為一名高水平的軟件工程師,或者去編寫操作硬件的控制程序,那么C語(yǔ)言程序設(shè)計(jì)是非常重要的基礎(chǔ)。在計(jì)算機(jī)編程領(lǐng)域中,自從計(jì)算機(jī)高級(jí)語(yǔ)言C語(yǔ)言誕生后,它深受廣大編程者的厚愛。人們把C語(yǔ)言稱為程序員設(shè)計(jì)語(yǔ)言。第一個(gè)用C語(yǔ)言編寫的UNIX操作系統(tǒng),在世界范圍內(nèi)得到了廣泛的應(yīng)用,它的設(shè)計(jì)者因此于1983年獲得了計(jì)算機(jī)科學(xué)的最高獎(jiǎng)——圖靈獎(jiǎng)。正因?yàn)镃語(yǔ)言是一種高效的程序設(shè)計(jì)語(yǔ)言,在當(dāng)今應(yīng)用很廣泛。它既可作為系統(tǒng)描述語(yǔ)言編寫系統(tǒng)軟件,也可以編寫應(yīng)用軟件。2.本章任務(wù)鑒于C語(yǔ)言是世界上優(yōu)秀的編程語(yǔ)言之一和其廣泛的應(yīng)用,本章主要任務(wù)有:(1)C語(yǔ)言的發(fā)展歷史。(2)認(rèn)識(shí)簡(jiǎn)單的C程序。(3)編輯、編譯、連接、運(yùn)行和調(diào)試一個(gè)C語(yǔ)言程序。(4)熟悉VisualC++6.0集成環(huán)境,并使用其編寫C語(yǔ)言程序的一般步驟。第2章C語(yǔ)言基礎(chǔ)知識(shí)導(dǎo)學(xué)1.問(wèn)題的提出C語(yǔ)言是一種程序設(shè)計(jì)語(yǔ)言,編寫C語(yǔ)言源程序必須遵循C語(yǔ)言的規(guī)則。由各種不同的詞法符號(hào)構(gòu)成了C語(yǔ)言程序。那么,編寫C語(yǔ)言程序前,需要掌握哪些C語(yǔ)言基礎(chǔ)知識(shí)呢?2.簡(jiǎn)單實(shí)例【例2.1】簡(jiǎn)單的C語(yǔ)言程序,功能是輸入三角形的底和高,求三角形的面積。#include<stdio.h>voidmain(){ inta,b,c; scanf("%d%d",&a,&b); c=0.5*(a*b); printf("三角形的面積為:%d\n",c);}程序運(yùn)行的結(jié)果為:EnterTwoNumbers:45↙三角形的面積為:10可以看出:C語(yǔ)言有特定的詞法規(guī)則。其中,int,include,scanf和printf是關(guān)鍵字;int是基本數(shù)據(jù)類型之一——整型;0.5是常數(shù);a、b、c是變量;“EnterTwoNumbers:”和“三角形的面積為:”是字符串常量;*是運(yùn)算符;()和,為分隔符。3.本章任務(wù)編寫一個(gè)C語(yǔ)言程序,就必須遵循C語(yǔ)言詞法規(guī)則,掌握C語(yǔ)言的基礎(chǔ)知識(shí)。本章的主要任務(wù)有:(1)C語(yǔ)言的詞法符號(hào)。(2)數(shù)據(jù)類型。(3)常量和變量。(4)算數(shù)運(yùn)算符和表達(dá)式及其運(yùn)算符的優(yōu)先級(jí)。(5)變量初始化和賦值語(yǔ)句。(6)熟悉C語(yǔ)言基礎(chǔ)知識(shí),編寫簡(jiǎn)單的C程序。4.?dāng)?shù)據(jù)輸出函數(shù)使用說(shuō)明在本章中為了是例題更加具體生動(dòng),使用了數(shù)據(jù)輸出函數(shù)的簡(jiǎn)單形式,此部分知識(shí)在第三章中介紹,同學(xué)們可參考3.2。第3章簡(jiǎn)單程序設(shè)計(jì)導(dǎo)學(xué)1.問(wèn)題的提出上一章介紹了常量、變量、運(yùn)算符、表達(dá)式等,它們都是構(gòu)成程序的基本成分。C語(yǔ)言沒(méi)有專門的輸入輸出語(yǔ)句,是通過(guò)函數(shù)來(lái)實(shí)現(xiàn)的,所以函數(shù)也是C語(yǔ)言程序的基本構(gòu)成單位。前兩章中涉及的簡(jiǎn)單C語(yǔ)言程序,都是順序結(jié)構(gòu)的程序。順序結(jié)構(gòu)程序的執(zhí)行流程是按語(yǔ)句的書寫順序自上而下依次執(zhí)行,是三大結(jié)構(gòu)化程序設(shè)計(jì)之一。那么順序結(jié)構(gòu)程序的組成包括哪些,又如何來(lái)實(shí)現(xiàn)呢?順序程序結(jié)構(gòu)只能完成一些簡(jiǎn)單的運(yùn)算和操作。但是,人們經(jīng)常會(huì)遇到復(fù)雜的問(wèn)題,例如,要求計(jì)算機(jī)根據(jù)給定的條件,判斷條件是否成立,并根據(jù)不同的判斷結(jié)果讓計(jì)算機(jī)執(zhí)行不同的操作,這就屬于選擇結(jié)構(gòu)。本章講的if語(yǔ)句就是一種選擇結(jié)構(gòu)。到本章結(jié)束,程序設(shè)計(jì)的入門篇就結(jié)束了,即將進(jìn)入到基礎(chǔ)篇,希望同學(xué)們?cè)趯W(xué)習(xí)完本章之后,能夠完成下面程序的設(shè)計(jì)制作,體現(xiàn)出具備了設(shè)計(jì)簡(jiǎn)單軟件的能力。制作數(shù)學(xué)工具軟件,如下圖所示。將上述案例進(jìn)行任務(wù)分解,并依次解決,當(dāng)所有任務(wù)都解決了,上述案例的程序也就完成了。(1)顯示菜單項(xiàng)。(2)輸入菜單選擇項(xiàng),并顯示輸出所選菜單項(xiàng),如果輸入值為5,則顯示“退出軟件.”。(3)如果輸入值為1-4,則要輸入半徑的值,并根據(jù)輸入的值計(jì)算并輸出相應(yīng)結(jié)果。此部分程序的答案將在本章后面的綜合應(yīng)用實(shí)例中給出。2.簡(jiǎn)單實(shí)例1.從鍵盤上輸入某學(xué)生3門課程的成績(jī),計(jì)算平均成績(jī)。執(zhí)行順序執(zhí)行順序#include<stdio.h>voidmain(){ floatscore1,score2,score3,sum,aver; scanf("%f%f%f",&score1,&score2,&score3); sum=score1+score2+score3; aver=sum/3; printf("該學(xué)生3門課程的平均值為:%.2f\n",aver);}程序運(yùn)行的結(jié)果為:83.57390.5該學(xué)生3門課程的平均值為:83.00其中第4行和第7行是函數(shù)調(diào)用語(yǔ)句,scanf函數(shù)和printf函數(shù)分別為數(shù)據(jù)輸入函數(shù)和輸出函數(shù),“%f”為格式控制字符,“%.2f”表示以浮點(diǎn)型數(shù)輸出,保留兩位小數(shù)。第5行和第6行為賦值語(yǔ)句。包含在“{}”之間的為復(fù)合語(yǔ)句,是主函數(shù)的函數(shù)體,完成特定的功能。該程序的執(zhí)行過(guò)程是按照書寫的順序自上而下一步一步的執(zhí)行,直到程序的結(jié)束。這種結(jié)構(gòu)屬于順序結(jié)構(gòu)。2.從鍵盤上輸入兩整數(shù),編程實(shí)現(xiàn)輸出其中的較大的數(shù)。#include<stdio.h>voidmain(){ inta,b,max;scanf("%d%d",&a,&b);if(a>b)max=a;elsemax=b;/*這里的if-else語(yǔ)句也可使用條件表達(dá)式a>b?a:b;*/ printf("max=%d",max);}程序運(yùn)行的結(jié)果為:6992max=92這種結(jié)構(gòu)屬于選擇結(jié)構(gòu)。3.本章任務(wù)是本章學(xué)習(xí)的主要任務(wù):(1)表達(dá)式語(yǔ)句。(2)函數(shù)調(diào)用語(yǔ)句,數(shù)據(jù)的輸入和數(shù)據(jù)的輸出。(3)復(fù)合語(yǔ)句。(4)空語(yǔ)句。(5)簡(jiǎn)單控制語(yǔ)句。(6)關(guān)系和邏輯表達(dá)式。(7)程序流程圖。(8)if語(yǔ)句。第二部分基礎(chǔ)篇第4章if語(yǔ)句的嵌套及多分支程序設(shè)計(jì)導(dǎo)學(xué)1.問(wèn)題的提出上一章講述了if語(yǔ)句的使用方法,這是最基本的選擇結(jié)構(gòu)。而在解決實(shí)際問(wèn)題時(shí),遇到的情況可能要復(fù)雜的多,就像行軍一樣,有可能遇到岔道,需要選擇一個(gè),也有可能遇到丁字路口,還有可能遇到十字路口,甚至選擇一個(gè)方向之后還有更復(fù)雜的選擇。那么,怎樣編寫復(fù)雜的選擇結(jié)構(gòu)程序呢?本章學(xué)習(xí)之后,希望能夠?qū)Φ谌聦?dǎo)學(xué)中提到的“數(shù)學(xué)工具軟件”進(jìn)行改進(jìn)。2.簡(jiǎn)單實(shí)例如比較兩個(gè)數(shù)的大小相等關(guān)系,此例中兩個(gè)數(shù)有大于、小于、等于三種關(guān)系,所以只是簡(jiǎn)單的if語(yǔ)句不能實(shí)現(xiàn)完整的功能,需要分支之中有分支,此程序?qū)⒃诶}中講解。3.本章任務(wù)復(fù)雜的選擇結(jié)構(gòu)程序設(shè)計(jì),使用的流程控制語(yǔ)句有if語(yǔ)句和switch語(yǔ)句。本章學(xué)習(xí)的主要任務(wù)有:(1)if語(yǔ)句嵌套。(2)swich語(yǔ)句。第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)導(dǎo)學(xué)1.問(wèn)題的提出在順序結(jié)構(gòu)程序設(shè)計(jì)中,可以利用printf函數(shù)輸出“hello”,每一個(gè)printf(“hello!\n”)只能輸出一個(gè)“hello”,如果想要輸出更多的“hello”則需要編寫更多的printf(“hello!\n”),輸出100個(gè)“hello”需要編寫100句printf(“hello!\n”)。著名數(shù)學(xué)家高斯在小學(xué)的時(shí)候就會(huì)巧算自然數(shù)列1、2、3、……、99、100之和,對(duì)于這樣的問(wèn)題,如果我們采用計(jì)算機(jī)編寫程序如何實(shí)現(xiàn)呢?按照以前所學(xué)過(guò)的知識(shí)我們可以采用如下語(yǔ)句:intsum;sum=1+2+3+4……+100;這樣就可以得到1到100之間所有自然數(shù)的和。但是如果對(duì)于一個(gè)不確定的n來(lái)說(shuō),我們就無(wú)法通過(guò)上述辦法得到∑n。也許你會(huì)說(shuō)直接使用等差數(shù)列求和公式(1+n)*n/2算出結(jié)果,這樣當(dāng)然可以,但并不是每個(gè)程序設(shè)計(jì)者都知道這些公式,并且有些類似的問(wèn)題,比如n!、∑n!等不一定能通過(guò)一個(gè)合適的公式計(jì)算出來(lái)。像這種具有某種邏輯特征的運(yùn)算,如何利用C語(yǔ)言實(shí)現(xiàn)呢?能不能用簡(jiǎn)單的方法、用少量的語(yǔ)句實(shí)現(xiàn)程序的多次重復(fù)呢?C語(yǔ)言是用循環(huán)來(lái)解決這個(gè)問(wèn)題的。思路最簡(jiǎn)單的循環(huán)是計(jì)數(shù)循環(huán),也就是說(shuō)在循環(huán)之前知道循環(huán)多少次,比如在運(yùn)動(dòng)會(huì)中400米需要跑一圈,800米需要跑兩圈,10000米需要跑25圈。此外對(duì)第三章導(dǎo)學(xué)中提到的“數(shù)學(xué)工具軟件”能否不必每計(jì)算一個(gè)結(jié)果運(yùn)行一遍程序呢?2.問(wèn)題的分析實(shí)際上要解決上述問(wèn)題也不難,用for語(yǔ)句可以實(shí)現(xiàn)計(jì)數(shù)循環(huán),輸出100個(gè)“hello”的程序如下:#include<stdio.h>voidmain(){inti;for(i=1;i<=100;i++)printf(“hello!\n”);}要計(jì)算1+2+3+……+(n-1)+n的結(jié)果,可以在通過(guò)scanf語(yǔ)句得到一個(gè)n值之后,然后按下述思路處理: 1)先定義兩個(gè)變量:inti=1; /*遞增變量,1~n*/intsum=0; /*存放計(jì)算求和結(jié)果變量*/ 2)在i<=n的條件下反復(fù)執(zhí)行如下兩條語(yǔ)句:sum=sum+i; /*累加當(dāng)前i的值*/ i++; /*遞增變量自加1*/ 經(jīng)過(guò)這樣的處理,對(duì)于一個(gè)不確定的n,就可以計(jì)算出∑n。同理,也可以通過(guò)分析規(guī)律對(duì)n!、∑n!等運(yùn)算進(jìn)行程序設(shè)計(jì)。象這樣,在某種條件下,規(guī)律性的執(zhí)行一些重復(fù)性語(yǔ)句的操作程序?qū)嶋H上就是C語(yǔ)言中的循環(huán)結(jié)構(gòu)。人們?cè)谇箅A乘、迭代、累加等運(yùn)算時(shí)會(huì)經(jīng)常用到循環(huán)結(jié)構(gòu)。熟練掌握循環(huán)結(jié)構(gòu)的概念及使用是程序設(shè)計(jì)的基本要求。3.本章的任務(wù)(1)深刻理解循環(huán)結(jié)構(gòu)的概念;(2)熟練掌握循環(huán)結(jié)構(gòu)的不同表達(dá)形式,各表達(dá)形式之間的差異和應(yīng)用;(3)熟練掌握循環(huán)的中斷控制。第6章數(shù)組導(dǎo)學(xué)1.問(wèn)題的提出現(xiàn)實(shí)生活中我們會(huì)遇到如下問(wèn)題:從鍵盤上順序輸入n個(gè)數(shù)字,然后再把這幾個(gè)數(shù)字倒序輸出,比如順序輸入123456,倒序輸出結(jié)果為654321,通過(guò)前面基本的數(shù)據(jù)類型象整型、字符型、浮點(diǎn)型再結(jié)合順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)的學(xué)習(xí)我們能解決這樣的問(wèn)題嗎?答案是不能,我們只有方法一:順序輸入順序輸出,或者方法二:通過(guò)定義多個(gè)變量的方法順序輸入倒序輸出。具體實(shí)現(xiàn)時(shí)先定義n個(gè)變量n1,n2,n3…n,然后給這n個(gè)變量逐一賦值,最后按照輸入的次序的逆序輸出。方法一:順序輸入順序輸出#include<stdio.h>voidmain(){intn,i,a;scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&a);printf("%d\n",a);}}方法二:通過(guò)定義多個(gè)變量的方法順序輸入倒序輸出#include<stdio.h>voidmain(){intn1,n2,n3,n4,n5,n6;scanf("%d%d%d%d%d%d",&n1,&n2,&n3,&n4,&n5,&n6);printf("%d%d%d%d%d%d\n",n6,n5,n4,n3,n2,n1);}但是這兩個(gè)方法都有不可取之處:方法一只能實(shí)現(xiàn)順序輸入順序輸出,而且程序中使用了一個(gè)變量沒(méi)辦法記錄各個(gè)輸入數(shù)字的值,自然只能是順序輸入順序輸出。方法二也不好,定義了多個(gè)變量,通過(guò)輸入語(yǔ)句給變量賦值,再通過(guò)輸出語(yǔ)句倒序輸出,這樣對(duì)于變量個(gè)數(shù)比較少的時(shí)候還適用,一但變量個(gè)數(shù)要是的多的時(shí)候,給書寫和閱讀帶來(lái)不便,該方法就顯得麻煩,那有沒(méi)有好的解決辦法呢?2.問(wèn)題的分析要想解決上述問(wèn)題就要用到C語(yǔ)言程序設(shè)計(jì)上的一種新的數(shù)據(jù)類型---數(shù)組。上述這個(gè)問(wèn)題如果采用數(shù)組來(lái)解決就簡(jiǎn)單多了。#include<stdio.h>voidmain(){inti,a[6];for(i=0;i<6;i++)scanf("%d",&a[i]);for(i=5;i>=0;i--)printf("%3d",a[i]);}用戶可以根據(jù)需要調(diào)整數(shù)組的長(zhǎng)度,程序也很簡(jiǎn)潔??梢姅?shù)組在表示和處理同類型、有規(guī)律的數(shù)據(jù)時(shí)要比使用基本數(shù)據(jù)類型簡(jiǎn)單和方便的多。3.本章的任務(wù)(1)熟練掌握數(shù)組的概念、定義形式、數(shù)組中元素的引用(2)熟練掌握一維數(shù)組、二維數(shù)組、字符數(shù)組的應(yīng)用第7章函數(shù)導(dǎo)學(xué)1.問(wèn)題的提出在前面的學(xué)習(xí)中,我們稱main為主函數(shù),稱printf、scanf為庫(kù)函數(shù),這是我們對(duì)函數(shù)的初步印象。C語(yǔ)言提供了大量的庫(kù)函數(shù)以完成相應(yīng)的功能,但是在實(shí)際的程序設(shè)計(jì)中,有些具有通用性的功能在C語(yǔ)言中并沒(méi)有提供相應(yīng)的庫(kù)函數(shù),比如排序、求極值、求階乘、計(jì)算數(shù)學(xué)公式等。象這些具有通用性的功能如果能單獨(dú)定義成一個(gè)函數(shù),以備需要時(shí)調(diào)用,則會(huì)為我們的程序設(shè)計(jì)提供很大的方便,同時(shí)也增強(qiáng)了程序代碼的重用性,提高程序設(shè)計(jì)效率。那么C語(yǔ)言是否允許用戶根據(jù)需要自定義函數(shù),如果可以的話如何實(shí)現(xiàn)呢?2.問(wèn)題的分析 在現(xiàn)實(shí)生活中我們會(huì)遇到一些復(fù)雜問(wèn)題,解決的時(shí)候都是把復(fù)雜問(wèn)題分解成若干個(gè)簡(jiǎn)單問(wèn)題,只要把這些簡(jiǎn)單問(wèn)題一一解決,復(fù)雜問(wèn)題自然也就解決了。其實(shí)C語(yǔ)言也遵循了這一思想,在為程序設(shè)計(jì)者提供了大量庫(kù)函數(shù)的同時(shí),允許用戶自定義函數(shù)。 下面以求n!為例,來(lái)了解一下用戶自定義函數(shù)的簡(jiǎn)單應(yīng)用。 longfac(intn) /*自定義函數(shù)fac,其功能是求n!*/{inti;longtemp=1;for(
i=1;i<=n;i++) /*求n!*/temp*=i;return
temp; /*返回結(jié)果*/} voidmain() {intn; scanf("%d",&n); /*輸入n值*/ printf("%ld",fac(n)); /*利用fac()函數(shù)求n!并輸出*/ }如輸入5,其運(yùn)行結(jié)果為:120。 上面程序中,主函數(shù)main是我們所熟悉的,而對(duì)于自定義函數(shù)fac(),我們?cè)囍治鲆幌隆Mㄟ^(guò)上面程序代碼的觀察,我們會(huì)發(fā)現(xiàn)用戶自定義函數(shù)的形式與主函數(shù)在外觀上相似,函數(shù)的第一行描述著函數(shù)的名稱,而其后的{}內(nèi)描述著函數(shù)具體執(zhí)行的程序代碼。這里,fac是自定義函數(shù),其功能是對(duì)于給定的n值求得n!,其中n值在主函數(shù)中通過(guò)fac(n)調(diào)用時(shí)給定,計(jì)算后將結(jié)果通過(guò)returntemp返回給主函數(shù),這樣主函數(shù)就利用了函數(shù)fac(n)求得了n!,并通過(guò)printf語(yǔ)句將計(jì)算結(jié)果輸出了。 通過(guò)上面的分析我們對(duì)于用戶自定義函數(shù)的應(yīng)用有了大概的認(rèn)識(shí)。其實(shí)函數(shù)就是把復(fù)雜問(wèn)題模塊化,各個(gè)模塊負(fù)責(zé)處理本模塊的任務(wù),再通過(guò)main函數(shù)再把各個(gè)模塊連起來(lái),從而完成用戶需求。C語(yǔ)言程序鼓勵(lì)和提倡人們把一個(gè)大問(wèn)題劃分成一個(gè)個(gè)子問(wèn)題,對(duì)應(yīng)于解決一個(gè)子問(wèn)題編制一個(gè)函數(shù),因此,C語(yǔ)言程序一般是由大量的小函數(shù)構(gòu)成而不是由少量大函數(shù)構(gòu)成的,即所謂"小函數(shù)構(gòu)成大程序"。這樣的好處是讓各部分相互充分獨(dú)立,并且任務(wù)單一。因而這些充分獨(dú)立的小模塊也可以作為一種固定規(guī)格的小“構(gòu)件”,用來(lái)構(gòu)成新的大程序。3.本章的任務(wù)(1)掌握函數(shù)的定義、函數(shù)調(diào)用及函數(shù)說(shuō)明的方法(2)掌握函數(shù)的參數(shù)的傳遞方法和變量的作用范圍第三部分提高篇第8章指針導(dǎo)學(xué)1.問(wèn)題的提出在第二章介紹“變量”時(shí)曾提出,一個(gè)變量實(shí)質(zhì)上是代表了“內(nèi)存中的某個(gè)存儲(chǔ)單元”,也就是說(shuō)定義變量時(shí),系統(tǒng)會(huì)為變量開辟相應(yīng)數(shù)量的內(nèi)存單元存儲(chǔ)數(shù)據(jù),此時(shí)變量是對(duì)程序中數(shù)據(jù)存儲(chǔ)空間的抽象,當(dāng)我們對(duì)變量進(jìn)行存取操作時(shí),可以通過(guò)“變量名”進(jìn)行。其實(shí)內(nèi)存單元是有地址的,每個(gè)存儲(chǔ)單元會(huì)有一個(gè)內(nèi)存地址與其對(duì)應(yīng),如圖8-1所示,其中各變量類型均為整型。如變量i的值為3,存儲(chǔ)單元地址為2000,變量j的值為6,存儲(chǔ)單元地址為2004。既然每個(gè)存儲(chǔ)單元會(huì)有一個(gè)內(nèi)存地址與其對(duì)應(yīng),我們?cè)趯?duì)變量的訪問(wèn)時(shí),是否可以通過(guò)變量所在的存儲(chǔ)單元對(duì)應(yīng)的內(nèi)存地址來(lái)訪問(wèn)該變量呢?如果可以的話,如何來(lái)實(shí)現(xiàn)呢?圖8-1變量在內(nèi)存中的存儲(chǔ)情況圖8-2通過(guò)指針變量p間接訪問(wèn)變量i2.問(wèn)題的分析計(jì)算機(jī)的內(nèi)存是以字節(jié)為單位的一片連續(xù)的存儲(chǔ)空間,每一個(gè)字節(jié)都有一個(gè)編號(hào),這個(gè)編號(hào)就是內(nèi)存地址。若在程序中定義了一個(gè)變量,C編譯系統(tǒng)就會(huì)根據(jù)定義中變量的類型,在內(nèi)存用戶數(shù)據(jù)區(qū)為其分配一定字節(jié)數(shù)的內(nèi)存空間(如:整型占2個(gè)字節(jié),字符型占1個(gè)字節(jié)),此后,這個(gè)變量的內(nèi)存地址就確定了,每個(gè)變量的地址是指該變量所占存儲(chǔ)單元的第一個(gè)字節(jié)的地址。如圖8-1中的整型變量i、j、k和整型數(shù)組。以前對(duì)于變量的訪問(wèn)操作都是直接通過(guò)“變量名”來(lái)實(shí)現(xiàn),而無(wú)須知道這個(gè)變量在內(nèi)存中的具體地址。例如:inti=3; printf("%d",i);這種對(duì)變量訪問(wèn)的方式稱之為“直接訪問(wèn)”,現(xiàn)在我們把對(duì)變量i的訪問(wèn)方式按下述思路做一下改變: (1)將變量i的內(nèi)存地址存放在另一個(gè)變量p中; (2)然后通過(guò)p對(duì)變量i的“指向”關(guān)系去訪問(wèn)i。這樣我們就可以通過(guò)p所存儲(chǔ)的內(nèi)存地址來(lái)訪問(wèn)變量i了。這里通過(guò)p訪問(wèn)i的方式,稱之為“間接訪問(wèn)”。如圖8-2所示。 對(duì)應(yīng)的C語(yǔ)言描述如下: p=&i;printf("%d",*p); 這里符號(hào)“&”用來(lái)獲取變量i的內(nèi)存單元地址,“*”用來(lái)代表指向關(guān)系,即指向p值所指向的地址,所以上述語(yǔ)句輸出i的值。這種間接訪問(wèn)的方式實(shí)際上就是指針應(yīng)用的體現(xiàn),而所應(yīng)用到的指向變量i的變量p就是指針變量。在指針的應(yīng)用中,符號(hào)“&”和“*”是很重要的兩個(gè)運(yùn)算符,其中“&”是地址運(yùn)算符,“*”是指針運(yùn)算符。從上面可以看到,用指針來(lái)訪問(wèn)變量比直接訪問(wèn)變量更麻煩,但為什么要用指針呢?理由有三:(1)指針的使用為函數(shù)修改其調(diào)用參數(shù)提供方便;(2)C語(yǔ)言中的動(dòng)態(tài)分配內(nèi)存空間的實(shí)現(xiàn)需要指針的支持;(3)使用指針可以提高某些程序的效率。同時(shí),使用指針也存在很多問(wèn)題:(1)指針可能包含任何地址,即所謂指針可能指向內(nèi)存中的任何地方,如果一旦指針指向發(fā)生錯(cuò)誤,如指向系統(tǒng)指令區(qū),將會(huì)導(dǎo)致許多不可預(yù)知的錯(cuò)誤發(fā)生;(2)指針是間接調(diào)用數(shù)據(jù),發(fā)生錯(cuò)誤時(shí)檢查更困難;(3)指針使用復(fù)雜,靈活,難于掌握,也容易發(fā)生錯(cuò)誤。所以說(shuō),指針是一個(gè)好壞參半的東西,用好了,是個(gè)好東西,用不好,就是一個(gè)壞東西。通過(guò)本章的學(xué)習(xí)大家會(huì)慢慢體會(huì)到。3.本章的任務(wù)本章主要講解指針的相關(guān)概念,以及與指針相關(guān)的程序設(shè)計(jì)的具體實(shí)現(xiàn)。(1)指針變量的定義及基本使用;(2)函數(shù)的指針以及指向函數(shù)的指針變量的使用;(3)數(shù)組的指針以及利用指針訪問(wèn)數(shù)組的操作;(4)指針對(duì)字符串的操作;(5)指針數(shù)組和指向指針的指針變量的使用。第9章編譯預(yù)處理導(dǎo)學(xué)1.問(wèn)題的提出在前面的例程中出現(xiàn)過(guò)這樣的語(yǔ)句: #include<stdio.h> #definePRICE100我們?cè)?jīng)說(shuō)這些語(yǔ)句屬于C語(yǔ)言中的編譯預(yù)處理命令,那么什么是編譯預(yù)處理?C語(yǔ)言中有哪些編譯預(yù)理命令,這些命令如何使用、如何執(zhí)行呢?預(yù)處理命令對(duì)于C程序的設(shè)計(jì)有哪些好處呢?2.問(wèn)題的分析所謂編譯預(yù)處理是指在編譯前對(duì)源程序做一下預(yù)處理。也就是對(duì)源程序進(jìn)行編譯的第一遍掃描(詞法掃描和語(yǔ)法分析)之前所作的工作。 前面提到C語(yǔ)言源程序從編輯到運(yùn)行要經(jīng)過(guò)如下環(huán)節(jié): *.c—編譯—>*.obj—連接—>*.exe 實(shí)際上更確切的描述應(yīng)為: *.c—預(yù)處理—>編譯—>*.obj—連接—>*.exe預(yù)處理是C語(yǔ)言的一個(gè)重要功能,它由預(yù)處理程序負(fù)責(zé)完成。當(dāng)對(duì)一個(gè)源文件進(jìn)行編譯時(shí),系統(tǒng)將自動(dòng)引用預(yù)處理程序?qū)υ闯绦蛑械念A(yù)處理部分作處理,處理完畢自動(dòng)進(jìn)入對(duì)源程序的編譯工作。對(duì)于前面各章中,已多次使用過(guò)以“#”號(hào)開頭的預(yù)處理命令。如頭文件包含命令#include和宏定義命令#define等。在源程序中這些命令都放在函數(shù)之外,而且一般都放在源文件的前面,它們稱為預(yù)處理部分。C語(yǔ)言提供了多種預(yù)處理功能,如宏定義、文件包含、條件編譯等。合理地使用預(yù)處理功能編寫的程序便于閱讀、修改、移植和調(diào)試,也有利于模塊化程序設(shè)計(jì)。3.簡(jiǎn)單應(yīng)用及說(shuō)明 以下程序的功能為求圓的面積。#include<math.h> /*數(shù)學(xué)庫(kù)函數(shù)頭文件math.h*/#definePI3.14 /*宏定義符號(hào)π*/voidmain(){floatr,area; /*定義變量,半徑r和面積area*/ printf(″\nr=″); scanf(″%f″,&r); /*輸入半徑值*/ area=PI*pow(r,2); /*計(jì)算面積值,其中函數(shù)pow(r,2)用來(lái)計(jì)算r2,此函數(shù)說(shuō)明在頭文件math.h中*/ printf(″\nArea=%f″,area);}上述程序中用到了預(yù)處理命令中的頭文件包含命令#include和宏定義命令#define。預(yù)處理命令行以“#”開頭,其位置通常置于程序開頭,預(yù)處理命令不是C語(yǔ)句,其行末不加分號(hào)。4.本章的任務(wù)預(yù)處理指令主要包括:#define #include #error #if #else #elif #endif #ifdef #ifndef #undef #line #pragma本章的任務(wù)主要是講解宏定義、頭文件包含、條件編譯等預(yù)處理命令的使用方法。第10章位運(yùn)算導(dǎo)學(xué)與硬件檢測(cè)或硬件控制相關(guān)的程序設(shè)計(jì)中,常常涉及到對(duì)硬件進(jìn)行編程,在系統(tǒng)軟件中,也常常要處理二進(jìn)制位的問(wèn)題。例如,將一個(gè)內(nèi)存單元中的數(shù)據(jù)按二進(jìn)制左移或者右移一位,兩個(gè)數(shù)按位進(jìn)行異或處理等。這些處理是對(duì)數(shù)據(jù)按二進(jìn)制位進(jìn)行的運(yùn)算操作,稱之為位運(yùn)算。C和其它高級(jí)語(yǔ)言不同的是它完全支持按位運(yùn)算,這也是C語(yǔ)言的重要特色和優(yōu)越性所在。那么基本位運(yùn)算有哪些,怎么樣理解和使用位運(yùn)算呢?這也是本章的主要學(xué)習(xí)任務(wù)。第11章結(jié)構(gòu)體、共用體和用戶自定義類型導(dǎo)學(xué)1.問(wèn)題的提出前面已經(jīng)介紹了基本數(shù)據(jù)類型──整型、浮點(diǎn)型、字符型,也介紹了一種構(gòu)造類型──數(shù)組,數(shù)組中各元素是屬于同一種類型的。在實(shí)際問(wèn)題中,一組數(shù)據(jù)往往具有不同的數(shù)據(jù)類型。例如,在學(xué)生登記表中,包括一個(gè)學(xué)生的學(xué)號(hào)、姓名、性別、年齡、成績(jī)、家庭地址等信息,各項(xiàng)的數(shù)據(jù)類型并不相同:學(xué)號(hào)可為整型或字符型數(shù)組,姓名為字符型數(shù)組,性別為字符型,年齡為整型,成績(jī)?yōu)檎突驅(qū)嵭?,家庭住址為字符型?shù)組。如下表所示:numnamesexagescoreaddr10010LiFanm1888Chengde10011MaLinf1990Baoding……象這樣的數(shù)據(jù)處理通常以行為單位來(lái)進(jìn)行的,但我們顯然不能用數(shù)組來(lái)存放一行數(shù)據(jù),因?yàn)閿?shù)組中各元素的類
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版人力資源服務(wù)戰(zhàn)略框架協(xié)議
- 2024年藝術(shù)品買賣合同:真品性與價(jià)值評(píng)估
- 2024年預(yù)制件加工與裝配式建筑構(gòu)件物流配送合同3篇
- 《子女撫養(yǎng)權(quán)與財(cái)產(chǎn)分割合同》版B版
- 2 我們的班規(guī)我們訂(說(shuō)課稿)2024-2025學(xué)年統(tǒng)編版道德與法治四年級(jí)上冊(cè)
- 2024渣土外運(yùn)過(guò)程中環(huán)境保護(hù)合同
- 2024年網(wǎng)絡(luò)安全與風(fēng)險(xiǎn)管理協(xié)議
- 專用燒烤制品買賣協(xié)議(2024版)版A版
- 培訓(xùn)咨詢服務(wù)協(xié)議書(2篇)
- 2024年航天器研發(fā)與發(fā)射合同
- 保險(xiǎn)公司廉政風(fēng)險(xiǎn)防控制度
- 2024年職工職業(yè)技能大賽數(shù)控銑工賽項(xiàng)理論考試題庫(kù)-下(多選、判斷題)
- DB34T4868-2024智慧醫(yī)院醫(yī)用耗材院內(nèi)物流規(guī)范
- 防高墜安全警示培訓(xùn)
- 初二數(shù)學(xué)幾何試題(含答案)
- 人教部編版七年級(jí)語(yǔ)文上冊(cè)《閱讀綜合實(shí)踐》示范課教學(xué)設(shè)計(jì)
- 2024年浙江嘉興市眾業(yè)供電服務(wù)限公司招聘38人高頻500題難、易錯(cuò)點(diǎn)模擬試題附帶答案詳解
- 初中英語(yǔ)聽課記錄全集
- 課堂小游戲教學(xué)游戲互動(dòng)砸金蛋
- 孤殘兒童護(hù)理員技能鑒定考試題庫(kù)(含答案)
- ISO∕TR 56004-2019創(chuàng)新管理評(píng)估-指南(雷澤佳譯-2024)
評(píng)論
0/150
提交評(píng)論