




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
2023/2/5云南師范大學數學學院1課程介紹
一、課本說明
二、課程要求
1、課堂
2、上機
3、作業
4、參考書
5、考試
三、學習目的1、徐金吾等《TurboC使用大全》北京科海培訓中心19902、《C高級實用程序設計》王士元編著清華大學出版社19953、《C陷阱與缺陷》AndrewKoenig著高巍譯人民郵電出版社4、《C程序設計教程》(美)H.M.Deitel,P.J.Deitel著薛萬鵬等譯機械工業出版社5、《C語言上機實踐指導與水平測試》(美)EricRoberts著翁惠玉張冬茉等譯機械工業出版社平時作業和實驗報告占20%,期中上機考試占10%,期末考試成績占70%,總成績滿分100分,60分即可獲得該課程學分即2學分。1、觸類旁通2、掌握編程思想3、良好的程序設計風格4、解決實際問題5、熟悉上機環境2023/2/5云南師范大學數學學院2
注:提交作業方式
四、復習計算機系統
1、包括:硬件和軟件
2、硬件和軟件共同完成以下4個主要操作:輸入
處理
輸出
存儲
lwshida@數據進入計算機系統。組織數據、檢查數據的正確性、數據的運算。數據處理后,結果要傳遞給人,以便觀察、解釋和使用。常需要把輸出信息存儲在存儲設備2023/2/5云南師范大學數學學院3
五、計算機編程語言語言有管理其單詞使用和標點符號的規則——語法,除此還有語義。VisualBasic、Pascal、COBOL、C#、C++、Java、Fortran、C等
六、如何學好C語言——理論+實踐1、認真體會所有概念(如運算符和運算順序),并注意前后反復和貫穿。2、學好C語言的三種程序控制結構+模塊化。3、掌握一些簡單的算法4、讀程序:看經典案例,善于閱讀和分析程序;與別人交流5、多實踐:上機前想好解題思路,寫好算法;上機過程中,讀懂出錯信息,總結經驗6、提高學習數據結構和算法方面的內容(其它課程)2023/2/5云南師范大學數學學院4七、為什么要學習程序設計
計算機的本質是“程序的機器”,只有懂得程序設計,才能進一步懂得計算機,真正了解計算機是怎樣工作的,掌握用計算機處理問題的方法;培養分析問題和解決問題的能力。即使將來不是計算機專業人員,由于學過程序設計理解軟件生產的特點和生產過程,就能與程序開發人員個更好的溝通與合作,開展本領域中的計算機應用,開發與本領域有關的應用程序。2023/2/5云南師范大學數學學院5八、為什么選擇C語言
進行程序設計,必須用一種計算機語言作為工具,否則只是紙上談兵。可選擇的語言很多,各有特點和應用領域。而C語言的代碼量小:同樣功能的軟件用C語言編寫容量很小。Wps與office,界面功能基本類似,但是wps只有23.3M,但是微軟office就有千兆左右。Wps的內核代碼就是用C語言寫的。以及我們的主板驅動、顯卡驅動、攝像頭驅動等都是用c語言。以及數據庫DB2,oracle等都是用c語言和c++來寫的。ACDSee、photoshop、2D(cs)、3D游戲等應用軟件也是用C語言來編寫的。速度快:windows內核是c語言外核是c++、unix和linux都是用c語言編寫的。功能強大:c語言可訪問我們的硬件,c語言中有指針可訪問我們的內存等硬件。
C++是為處理大規模的程序開發而研制的大型語言,比C語言復雜難學。C語言是更為基本的,最基礎的。在它基礎上學習java和c#更容易。C語言是當前程序員共同的語言。2023/2/5云南師范大學數學學院6參考書1、《零基礎學C語言》,康莉編,機械工業出版社。本書詳細而透徹地講述了C語言各個語句的語法規則,通過典型的簡單的例題,將初學者引入C語言的編程世界。2、《C語言程序(第四版)學習指導》,譚浩強編,清華大學出版社。與《C程序設計(第四版)》教材配套的上機指導。3、《TurboC實用大全》,徐金梧楊德斌徐科編寫,機械工業出版社。此書詳細介紹了C語言庫函數,是一本適合已掌握C語言基礎之后使用的參考書。4、《C語言常用算法與子程序》,尹彥芝編著,清華大學出版社。是一本較系統地提供C語言算法,提供各種C語言常用程序的書籍,凡是用C語言編寫程序的人,相信都會從這本書中得到啟發。5、《C語言程序設計習題集(第二版)》,陳朔鷹陳英主編,人民郵電出版社。匯集近千道不同難度、不同層次、不同類型的習題,簡單的題目適合初學者進階和進行基本概念自測,復雜的題目足可以讓你研究上十幾天,使讀者能真正感受到暢游C語言世界的樂趣。2023/2/5云南師范大學數學學院7教材、參考書6、《C語言趣味程序百例精解》,陳朔鷹陳英主編,北京理工大學出版社。匯集100道從易到難的趣味編程題目,可以通過對這些問題的求解過程,進一步掌握程序設計的基本方法和解題思路。7、《C語言程序設計輔導與習題集》,田淑清等,中國鐵道出版社。一本典型的與全國計算機等級考試題型類似的習題集。整本書的習題難易適中。也適合于C語言程序設計的進階學習。
8、《C語言編程常見問題解答》,[美]PaulS.R.Chishohm等著,張芳妮呂波譯,清華大學出版社。是一本以問答方式書寫的參考書,在按照章節回答問題的過程中,讀者可以明確清楚地體會到C語言的精髓。2023/2/5云南師范大學數學學院8教材、參考書9、《TheCProgrammingLanguage》,byBrianW.KernighanandDennisM.Ritchie.,PubilishedbyPrentice-Hallin1988。著名的原版C語言教材,讀者如果有時間的話可以讀讀它,來感受感受世界著名的教材的風范。10、《全國計算機等級考試二級教程(C語言程序設計)》教育部考試中心編,高等教育出版社。課程要求:課前請做好預習保持課堂安靜,頭腦清醒,思維活躍認真、獨立、按時完成并提交作業重視上機實踐,有效利用寶貴的上機時間2023/2/5云南師范大學數學學院9學習網站(1)
清華大學《計算機語言與程序設計》0/jpkcgc/aao_57/index.jsp(2)
浙江大學《C程序設計基礎及實驗》
/crs/ccxsj/index.htm(3)
C語言寶典,/(4)
TurboC編程寶典,/~junl/learning/TC(5)
二級C語言,/proedu/jsjkj/c.htm(6)
C語言教程,/c.htm(7)
唯C世界,/(8)
C語言編程網,/(9)
C語言編程寶典,/turboc/index.html(10)C語言程序基礎,/c/(11)鵬程C語言教學網站,/(12)經典C,/SoftView/SoftView_24.html
(13)C語言編程電子書,/down/pc/cbible.htmlC程序設計(第四版)
譚浩強著云南師范大學數學學院2023/2/5云南師范大學數學學院11目錄程序設計和C語言算法——程序的靈魂最簡單的C程序設計——順序程序設計選擇結構程序設計循環結構程序設計利用數組處理批量數據利用函數實現模塊化程序設計善于利用指針用戶自己建立數據類型對文件的輸入輸出常見錯誤分析2023/2/5云南師范大學數學學院12第一章程序設計和C語言2023/2/5云南師范大學數學學院13
本章要點什么是計算機程序什么是計算機語言C語言的發展及其特點運行C程序的步驟與方法最簡單的C語言程序程序設計的任務2023/2/5云南師范大學數學學院141、什么是計算機程序
計算機是萬能的嗎?---計算機的每一個操作都是根據人們事先指定的指令進行的。為了使計算機執行一系列的操作,必須事先編好一條條指令,輸入到計算機。
程序:就是一組計算機能識別和執行的指令。每一條指令使計算機執行特定的操作。為了使計算機系統能實現各種功能,需要成千上萬個程序。
總之,計算機的一切操作都是由程序控制的,離開程序計算機將一事無成。所以,計算機的本質是程序的機器,只有懂得程序設計,才能真正了解計算機是怎樣工作的,才能更深入的使用計算機。2023/2/5云南師范大學數學學院152、什么是計算機語言
計算機能識別的語言,就是計算機語言。發展階段:機器語言--匯編語言—高級語言計算機是不能直接識別高級語言編寫的程序,要進行“翻譯”。用一種稱為編譯程序的軟件把高級語言寫的程序(稱為源程序)轉換為機器指令的程序(稱為目標程序),然后讓計算機執行機器指令程序,最后得到結果2023/2/5云南師范大學數學學院16#include<stdio.h>intmain()//一個簡單的C語言程序{printf("ThisisaCprogram.\n");return0;}高級語言源程序機器語言目標程序程序執行結果編譯程序運行程序2023/2/5云南師范大學數學學院173.C語言發展及其特點C語言是國際上廣泛流行的高級語言。C語言是在B語言的基礎上發展起來的。B(BCPL)語言是1970年由美國貝爾實驗室設計的,并用于編寫了第一個UNIX操作系統,在PDP7上實現。優點:精練,接近硬件,缺點:過于簡單,數據無類型。1973年貝爾實驗室的D.M.Ritchie在B語言的基礎上設計出了C語言,對B取長補短,并用之改寫了原來用匯編編寫的UNIX,(即UNIX第5版),但僅在貝爾實驗室使用。2023/2/5云南師范大學數學學院18C語言出現的歷史背景1975年UNIX第6版發布,C優點突出引起關注。1977年出現了《可移植C語言編譯程序》,推動了UNIX在各種機器上實現,C語言也得到推廣,其發展相輔相成。1978年影響深遠的名著《TheCProgrammingLanguage》由BrianW.Kernighan和DennisM.Ritchie合著,被稱為標準C。之后,C語言先后移植到大、中、小、微型計算機上,已獨立于UNIX和PDP,風靡世界,成為最廣泛的幾種計算機語言之一。2023/2/5云南師范大學數學學院19C語言出現的歷史背景1983年,美國國家標準化協會(ANSI)根據C語言各種版本對C的發展和擴充,制定了新的標準ANSIC,比標準C有了很大的發展。1988年K&R按照ANSIC修改了他們的《TheCProgrammingLanguage》。1989年,ANSI公布了一個完整的c語言標準——ANSIC或C89。1990年,國際標準化組織接受了C89為ISOC的標準(ISO9899—1990)。1995年,ISO又修訂了C語言標準。1999年,ISO有對C語言標準進行修訂在基本保留原來的c語言特征的基礎上,針對應用的需要又增加一些功能。命名ISO/IEC9899:19992001和2004年先后進行兩次技術修正(TC1、TC2)ISO/IEC9899:1999及其技術修正被稱為C99。講課依據c99標準。2023/2/5云南師范大學數學學院20說明:不同版本的C編譯系統所實現的語言功能和語法規則又略有差別,因此我們應了解所用的C語言編譯系統的特點(可以參閱網上相關資料)。我們使用的是二級語言考試的編譯程序VisiuaC++6.0.2023/2/5云南師范大學數學學院21C語言的特點(1)語言簡潔、緊湊,使用方便、靈活。37個關鍵字、9種控制語句,程序形式自由,主要用小寫字母表示,壓縮而一切不必要的成分。(2)運算符豐富。34種運算符,把括號、復制和強制類型轉化等都作為運算符處理,從而使C語言的運算類型機極其豐富,表達式類型多樣化,靈活使用各種運算符。(3)數據類型豐富,具有現代語言的各種數據結構。整型、浮點型、字符型、數組類型、指針類型、結構體類型和共用體類型,C99擴充了復數浮點類型、超長整型和布爾類型。(4)具有結構化的控制語句,是完全模塊化和結構化的語言。(5)語法限制不太嚴格,程序設計自由度大。例如對數組越界不進行檢查,由程序編寫者自己保證程序的正確,對變量的類型使用比較靈活。c語言允許程序編寫者有較大的自由度,放寬了語法檢查。一般的高級語言語法檢查比較嚴。
2023/2/5云南師范大學數學學院2237個關鍵字autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifinlineintlongregisterrestrictreturnshortsignedsizeofstaicstructswitchtypedefunionunsignedvoidvolatilewhile_bool_Complex_Imaginary
2023/2/5云南師范大學數學學院23C語言的特點(6)允許直接訪問物理地址,能進行位操作,能實現匯編語言的大部分功能,可直接對硬件進行操作。兼有高級和低級語言的特點。既是成功的系統描述語言,有時通用的程序設計語言。(7)目標代碼質量高,程序執行效率高。只比匯編程序生成的目標代碼效率低10%-20%。(8)程序可移植性好(與匯編語言比)。基本上不做修改就能用于各種型號的計算機和各種操作系統。2023/2/5云南師范大學數學學院24
1.4簡單的C語言程序#include<stdio.h>void
main(){
printf("ThisisaCprogram.\n");}//文件包含/*主函數*///函數體開始//輸出語句//函數體結束說明:main-主函數名,void-函數類型每個C程序必須有一個主函數main{}是函數開始和結束的標志,不可省每個C語句以分號結束使用標準庫函數時應在程序開頭一行寫:
#include<stdio.h>說明:
本程序的作用是輸出一行信息:ThisisaCprogram.2023/2/5云南師范大學數學學院25例1.2求兩數之和
#include<stdio.h>
voidmain()//求兩數之和
{
inta,b,sum;//聲明,定義變量為整型
/*以下3行為C語句*/
a=123;b=456;
sum=a+b;
printf(″sumis%d\n″,sum);
}說明:
//……與/*……*/表示注釋。注釋只是給人看的,對編譯和運行不起作用。所以可以用漢字或英文字符表示,可以出現在一行中的最右側,也可以單獨成為一行。說明:
輸出一行信息:sumis5792023/2/5云南師范大學數學學院26例1.3求2個數中較大者。
#include<stdio.h>
voidmain()//主函數
{
intmax(intx,inty);//對被調用函數max的聲明
inta,b,c;//定義變量a、b、c
scanf(″%d,%d″,&a,&b);//輸入變量a和b的值
c=max(a,b);//調用max函數,將得到的值賦給c
printf(″max=%d\n″,c);//輸出c的值
}程序運行情況如下:8,5↙(輸入8和5賦給a和b)max=8(輸出c的值)intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}max(int
x,
int
y)
max(a,b);
說明:本程序包括main和被調用函數max兩個函數。max函數的作用是將x和y中較大者的值賦給變量z。return語句將z的值返回給主調函數main。2023/2/5云南師范大學數學學院27C程序:(1)C程序是由函數構成的。這使得程序容易實現模塊化。
(2)一個函數由兩部分組成:
函數的首部:例1.3中的max函數首部
intmax(intx,inty)
函數體:花括號內的部分。若一個函數有多個花括號,則最外層的一對花括號為函數體的范圍。函數體包括兩部分:聲明部分:inta,b,c;可缺省執行部分:由若干個語句組成。可缺省2023/2/5云南師范大學數學學院28注意:函數的聲明部分和執行部分都可缺省,例如:voiddump(){}
這是一個空函數,什么也不做,但是合法的函數。
2023/2/5云南師范大學數學學院29小結:(3)C程序總是從main函數開始執行的,與main函數的位置無關。(4)C程序書寫格式自由,一行內可以寫幾個語句,一個語句可以分寫在多行上,C程序沒有行號。(5)每個語句和數據聲明的最后必須有一個分號。分號是C語句的必要組成部分。即使是程序中最后一個語句也應包含分號。2023/2/5云南師范大學數學學院30小結:(6)C語言本身沒有輸入輸出語句。輸入和輸出的操作是由庫函數scanf和printf等函數來完成的。C對輸入輸出實行“函數化”。(7)可以用/*……*/或//……對C程序中的任何一行或數行做注釋。一個好的、有使用價值的源程序都應當加上必要的注釋,以增加程序的可讀性。2023/2/5云南師范大學數學學院311.5運行C程序的步驟和方法1.5.1運行C程序的步驟上機輸入與編輯源程序對源程序進行編譯與庫函數連接運行目標程序2023/2/5云南師范大學數學學院321.5運行C程序的步驟和方法
1.5.2上機運行C程序的方法目前使用的大多數C編譯系統都是集成環境(IDE)的。可以用不同的編譯系統對C程序進行操作常用的有TurboC2.0、TurboC++3.0、VisualC++6.0等前一段時間,TurboC2.0用得比較多,但TurboC2.0是用于DOS環境的,不能用鼠標進行操作,很不方便,所以今年來不少人改為用TurboC++3.0或VisualC++6.0對C程序進行編譯
2023/2/5云南師范大學數學學院33例:VC++6.0的使用1.安裝VC++6.0和進入VC++6.0集成環境
(1)VisualC++6.0適用于Windows環境。首先在所用的計算機上安裝VisualC++6.0系統。安裝完后,雙擊VisualC++6.0圖標,就能進入VC++6.0集成環境。2023/2/5云南師范大學數學學院34(2)在VC++主窗口的頂部是VC++的主菜單欄。其中包含9個項∶FileEditViewInsertProjectBuildToolswindowsHelp;主窗口的左側是項目工作區窗口(用來顯示所設定的工作區的信息),右側是程序編輯窗口(用來輸入和編輯源程序)。2023/2/5云南師范大學數學學院352.輸入和編輯源程序(1)新建一個源程序
①在VC++主窗口的主菜單欄中選擇“File”
,然后選擇“New”
2023/2/5云南師范大學數學學院36單擊屏幕上出現的“New”對話框上方的“Files”,在其下拉菜單中選擇“C++SourceFile”項;然后在對話框右半“Location”文本框中輸入準備編輯的源程序文件的存儲路徑(假定為D:\cc);在其上方的File(文件)文本框中輸入準備編輯的源程序文件的名字(輸入c1-1.c)。2023/2/5云南師范大學數學學院37②輸入和編輯源程序單擊“OK”
按鈕后,回到VC++主窗口程序,編輯窗口已激活,即可輸入和編輯源程序。在輸入過程中如發現有錯誤,可以利用全屏幕編輯方法進行修改編輯。
2023/2/5云南師范大學數學學院38③源程序的保存檢查無誤后,在主菜單欄中選擇“File”(文件),并在其下拉菜單中選擇“Save”(保存)項
說明:
VC++6.0可以編譯后綴為.c的C源程序,也可以編譯后綴為.cpp的C++源程序。
2023/2/5云南師范大學數學學院39
(2)打開一個已有的程序
①在“我的電腦”中按路徑找到已有的C程序名;
②雙擊此文件名,則進入了VC++集成環境,并打開了該文件,程序已顯示在編輯窗口中;
③修改后選擇“File”(文件)→“Save”(保存),保存在原來的文件中;
(3)通過已有的程序建立一個新程序
①打開任何一個已有的源文件2023/2/5云南師范大學數學學院403.程序的編譯單擊主菜單欄中的“Build”,在其下拉菜單中選擇“Compliec1-1.c”項。
在單擊編譯命令后,屏幕上出現一個是否同意建立一個默認的項目工作區的對話框單擊“Yes”(是)按鈕后開始編譯。也可以不用選擇菜單的方法,而用“Ctrl+F7”來完成編譯。編譯完成后,調試窗口出現編譯信息,如果無錯生成目標文件c1-1.obj,否則指出錯誤位置和性質。2023/2/5云南師范大學數學學院414.程序的連接
生成目標文件后,把程序和系統提供的資源(如函數據庫、頭文件)建立連接。選擇“Build”→“Buildtest.exe”
。
2023/2/5云南師范大學數學學院42執行連接后,在調試輸出窗口中顯示連接時的信息,生成可執行文件c1-1.exe。說明:
選擇菜“Build”→“Build”(
或按“F7”鍵)一次完成編譯與連接。但提倡初學者分步進行編譯和鏈接,因為程序出錯的機會較多,最好等到上一步完全正確后才進行下一步2023/2/5云南師范大學數學學院435程序的執行執行c1-1.exe文件,選擇“Build”→“!Executec1-1.exe”2023/2/5云南師范大學數學學院44程序執行后,屏幕切換到輸出結果的窗口,顯示輸出結果。第1行:程序的輸出第2行:是VC++在輸出完運行結果后由VC++6.0系統自動加上的一行信息,通知用戶∶“按任何一鍵以便繼續”。2023/2/5云南師范大學數學學院45運行一個C語言程序的一般過程:(1)啟動VC++,進入VC++集成環境。(2)編輯(或修改)源程序。
(3)保存文件(3)編譯、連接、運行。如果有錯,則修改源程序,再重新編譯、連接和運行,直至程序正確。(4)退出VC++集成環境,結束本次程序運行。2023/2/5云南師范大學數學學院461.6程序設計的任務問題分析設計算法編寫程序對源程序進行編輯、編譯和連接運行程序,分析結果(調試、測試)編寫程序文檔第二章算法--程序的靈魂
主要內容2.1算法的概念2.2簡單算法舉例2.3算法的特性2.4怎樣表示一個算法2.5結構化程序設計方法2023/2/5云南師范大學數學學院49一個程序應包括兩個方面的內容:對數據的描述即在程序中指定數據的類型和數據的組織形式:數據結構(datastructure)對操作的描述即操作步驟:算法(algorithm)著名計算機科學家沃思提出一個公式:數據結構+算法=程序數據結構+算法+程序設計方法+語言工具完整的程序設計應該是:2023/2/5云南師范大學數學學院502.1什么是算法
廣義地說,為解決一個問題而采取的方法和步驟,就稱為“算法”。方法1:1+2,+3,+4,一直加到100加99次方法2:100+(1+99)+(2+98)+…+(49+51)+50=100+49×100+50加51次對同一個問題,可有不同的解題方法和步驟例:求2023/2/5云南師范大學數學學院51§2.1算法的概念
為了有效地進行解題,不僅需要保證算法正確,還要考慮算法的質量,選擇合適的算法。希望方法簡單,運算步驟少。計算機算法可分為兩大類別:數值運算算法:求數值解,例如求方程的根、求函數的定積分等。非數值運算:包括的面十分廣泛,最常見的是用于事務管理領域,例如圖書檢索、人事管理、行車調度管理等。計算機算法分為數值運算算法、非數值運算算法2023/2/5云南師范大學數學學院522.2簡單算法舉例例2.1:求1×2×3×4×5步驟1:先求1×2,得到結果2步驟2:將步驟1得到的乘積2再乘以3,得到結果6步驟3:將6再乘以4,得24步驟4:將24再乘以5,得120太繁瑣如果要求1×2×…×1000,則要寫999個步驟2023/2/5云南師范大學數學學院532.2簡單算法舉例例2.1求12345=5!Step1:1pStep2:2iStep3:pipStep4:i+1iStep5:若i<=5,返回Step3;否則,結束。求1357911Step1:1pStep2:3iStep3:pipStep4:i+2iStep5:若i<=11,返回Step3;否則,結束。關鍵:抽象、提煉出解決問題的一般步驟1.記錄每一步的結果及最終結果(p)每一步處理的數據(i)2.初始狀態及動態過程算法具有一般性、通用性和靈活性便于執行循環等操作2023/2/5云南師范大學數學學院542.2簡單算法舉例例2.2有50個學生,要求將他們之中成績在80分以上者的學號和成績打印出來。第i個學生的學號為ni,成績為gi。Step1:1iStep2:若gi>=80,則打印ni和gi;否則不打印。Step3:i+1iStep4:若i<=50,返回Step2;否則,結束。
2023/2/5云南師范大學數學學院552.2簡單算法舉例例2.3判定2000—2500年中的每一年是否閏年,將結果輸出閏年的條件:能被4整除但不能被100整除的年份是閏年;能被400整除的年份是閏年。設year為被檢測的年份,算法如下:S1:2000yS2:若year不能被4整除,則輸出year“不是閏年”,然后轉到S6S3:若year能被4整除,不能被100整除,則輸出year“是閏年”,然后轉到S6S4:若year能被400整除,則輸出year“是閏年”,然后轉到S6S5:輸出year“不是閏年”S6:year+1yearS7:若year<=2500,返回S2繼續執行;否則,結束。2023/2/5云南師范大學數學學院562.2簡單算法舉例例2.4求算法如下:S1:sign=1S2:sum=1S3:deno=2S4:sign=(1)×signS5:term=sign×(1/deno)S6:sum=sum+termS7:deno=deno+1S8:若deno<=100返回S4;否則算法結束。……2023/2/5云南師范大學數學學院572.2簡單算法舉例例2.4對于一個大于或等于3的正整數,判斷是否為素數算法如下:S1:輸入n的值S2:i=2(i作為除數)S3:n被i除,得余數rS4:如果r=0,表示n能被i整除,打印n“不是素數”,算法結束;否則執行S5S5:i+1iS6:若i<=n1返回S3;否則打印n“是素數”,然后結束。S6步驟可改為:S6:若i<=返回S3;否則打印n“是素數”,然后結束。2023/2/5云南師范大學數學學院582.3算法的特性1.有窮性(要考慮合理的范圍內)2.確定性3.有零個或多個輸入4.有一個或多個輸出5.有效性2023/2/5云南師范大學數學學院592.4怎樣表示一個算法自然語言傳統流程圖結構化流程圖偽代碼2023/2/5云南師范大學數學學院602.4.2用流程圖表示算法常用的流程圖符號起止框輸入輸出框判斷框處理框流程線連接點注釋框X>=0?打印x打印–xYN
2023/2/5云南師范大學數學學院612.4.2用流程圖表示算法例2.6將例2.1求5!的算法用流程圖表示如下。開始1t2ititi+1ii>5?打印t結束NY2023/2/5云南師范大學數學學院622.4.2用流程圖表示算法例2.7將例2.2的算法用流程圖表示如下。開始1ii+1igi80?打印ni,gi結束Ni>50?YNY2023/2/5云南師范大學數學學院632.4.2用流程圖表示算法例2.8將例2.3的算法用流程圖表示如下。開始2000yy+1yy不能被4整除打印y“是閏年”結束Y>2500?y不能被100整除y不能被400整除打印y“不是閏年”打印y“是閏年”打印y“不是閏年”YYNNYNYN2023/2/5云南師范大學數學學院642.4.2用流程圖表示算法例2.10將例2.5的算法用流程圖表示如下。i>
?開始i+1ir=0?打印n“是素數”結束2in/i的余數r打印n“不是素數”YNNY輸入n2023/2/5云南師范大學數學學院652.4.3三種基本結構和改進的流程圖1.傳統流程圖的弊端
BS型算法:aBowlofSpaghetti.例圖2.13。2.三種基本結構(1966年,Bohra&Jacopini)(1)順序結構(2)選擇結構(3)循環結構
ABabABbp成立不成立Abp成立不成立aaAbp成立不成立aAbp不成立成立a當型While型直到型Until型2023/2/5云南師范大學數學學院662.4.3三種基本結構和改進的流程圖(3)循環結構
Abp成立不成立a當型While型Abp不成立成立a直到型Until型0xx<5?x+1x打印x值0xx>=5?x+1
x打印x值NYNY2023/2/5云南師范大學數學學院672.4.3三種基本結構和改進的流程圖三種基本結構的共同特點:(1)只有一個入口(2)只有一個出口(3)結構內的每一部分都有機會被執行(4)結構內不存在“死循環”ABabABbp成立不成立Abp成立不成立aaAB死循環三種基本結構可解決任何復雜的問題2023/2/5云南師范大學數學學院682.4.4用N-S流程圖表示算法N-S(I.Nassi&B.Shneiderman)流程圖的基本符號其中A或B框可以是簡單操作,也可以是三種結構之一ABA當p1成立A直到p1成立ABp成立不成立順序結構選擇結構當型循環結構直到型循環結構p(1+r)p當n<=10r=0.08P>=100成立不成立r=0.06AB2023/2/5云南師范大學數學學院692.4.4用N-S流程圖表示算法例2.111t2ititi+1i直到i>5打印t例2.121i打印ni,gii+1i直到i>50gi80是否2023/2/5云南師范大學數學學院702.4.4用N-S流程圖表示算法2000y
y/4的余數為0y/100的余數
不為0
是否打印y“是閏年”y/400的余數為0打印y“是閏年”打印y“不是閏年”打印y“非閏年”y+1y直到y>2500是否是否例2.132023/2/5云南師范大學數學學院712.4.4用N-S流程圖表示算法例2.15開始i+1ir=0?打印n“是素數”結束2in/i的余數ri>
?打印n“不是素數”YNNY輸入n開始i+1ir=0?
輸出n“是素數”結束0w
2in/i的余數ri和
w=0YNYN輸入n1ww=0
輸出n“不是素數”YN2023/2/5云南師范大學數學學院722.4.4用N-S流程圖表示算法例2.15開始i+1ir=0?
輸出n“是素數”結束0w
2in/i的余數ri和
w=0YNYN輸入n1ww=0
輸出n“不是素數”YN輸出n“是素數”1w輸入n0ww=02in/i的余數rr=0是否i+1i直到i>或w0輸出n“不是素數”是否2023/2/5云南師范大學數學學院732.4.5用偽代碼表示算法2.4.6用計算機語言表示算法#include<stdio.h>intmain(){inti,t;t=1;i=2;while(i<=5){t=t*i;i=i+1;}printf("%d",t);return0;}#include<stdio.h>intmain(){intsign=1;doubledeno=2.0,sum=1.0,term;while(deno<=100){sign=-sign;term=sign/deno;sum=sum+term;deno=deno+1;}printf("%f",sum);return0;}2023/2/5云南師范大學數學學院742.5結構化程序設計方法(1)自頂向下;(2)逐步細化(3)模塊化設計;(4)結構化編碼工作報告當前問題前一階段工作對策工廠概況………………………………………………………………頂層設計第二層設計第三層設計2023/2/5云南師范大學數學學院75第3章最簡單的C程序設計
——順序程序設計3.1順序程序設計舉例P37_383.2數據的表現形式及其運算3.2.1常量和變量1.常量在程序運行過程中,其值不能被改變的量。(1)整型常量(2)實型常量(3)字符常量(4)字符串常量(5)符號常量2023/2/5云南師范大學數學學院761.常量(1)整型常量十進制整數。八進制整數。以0開頭。如0123、–011。十六進制整數。以0x開頭。如0x123、–0x12。(2)實型常量十進制小數形式指數形式形式:12.34e3、-1.23E-72023/2/5云南師范大學數學學院771.常量(3)字符常量普通字符,用單撇號括起來的字符。如'a','D','1','?','$'。此為源程序級的表示,例如c='a';若在計算機中表示,則為其ASCII碼的二進制。注意ASCII表的規律,空字符、空格字符轉義字符:以字符\開頭的字符序列。例如'\n'2023/2/5云南師范大學數學學院78轉義字符字符形式\n\t\b\r\f\\\'\"\ooo\xhh含義換行水平制表退格回車換頁字符\字符'字符"1~3位8進制所代表的字符1~2位16進制所代表的字符ASCII代碼109813129239342023/2/5云南師范大學數學學院79利用\ddd和\xhh可表示任何字符(只要已知其ASCII碼)例如'\101'等同于'A','\012'等同于'\n‘;'\0'、'\000'為空字符。
例轉義字符的應用。#include<stdio.h>intmain(){printf("abc\tde\rf\tg\n");printf("h\ti\b\bjk");return0;}輸出:abcdefabcgdehihj
ikhj
kfgde2023/2/5云南師范大學數學學院80(4)字符串常量字符串常量是一對雙引號括起來的字符序列。例如:"Howdoyoudo","abc","a""a"與'a'的不同。字符串常量在內存中的存放。例如"CHINA"CHINA\02023/2/5云南師范大學數學學院81(5)符號常量例符號常量的使用
#definePRICE30intmain(){intnum,total;num=10;total=num*PRICE;printf("Total=%d",total);return0;}符號常量的作用:(1)含義清楚(2)便于修改intmain(){intnum,total;num=10;total=num*30;printf("Total=%d",total);return0;}2023/2/5云南師范大學數學學院822.變量其值可以改變的量稱為變量。源程序中變量有一個名字。程序運行時對應內存相應的存儲單元(地址)。C語言中變量:“先定義,后使用”。便于保證(1)變量使用的正確性;(2)為其分配合適的單元;(3)變量進行運算的正確性。a123變量名變量值對應單元地址存儲單元2023/2/5云南師范大學數學學院833.常變量constinta=3;在該變量存在期間其值不能改變。與變量的異同?與常量的異同?與符號常量的異同?2023/2/5云南師范大學數學學院844.標識符標識符(identifier):用來標識變量名、符號常量名、函數名、數組名、類型名、文件名的有效字符序列。有效標識符:只能由字母、數字、下劃線組成,且第一個字符必須為字母或下劃線。注1:C語言中大、小寫字母是有區別的。注2:標識符的長度(各個C編譯系統自己的規定)。注3:形象的標識符。2023/2/5云南師范大學數學學院853.2.2數據類型所謂類型,就是對數據分配存儲單元的安排,包括存儲單元的長度以及數據的存儲形式。數據類型基本類型整型(int)字符型(char)實型(浮點型)枚舉類型單精度型(float)雙精度型(double)指針類型空類型構造類型數組類型結構體類型共用體類型2023/2/5云南師范大學數學學院863.2.3整型數據1.整型數據的分類(1)基本整型
inti;//int型數據單元為2個字節或4個字節
i=10;數值是以補碼表示的。例如
–10的補碼。0000000000001010i20002001i的地址為2000000000000000101010的原碼1111111111110101按位取反1111111111110110再加12023/2/5云南師范大學數學學院871.整型數據的分類基本整型:int短整型:shortint或short長整型:longint或
long雙長整型:longlongintsizeof(short)≤sizeof(int)≤sizeof(long)≤sizeof(longlong)2.整型變量的符號屬性表3.2ANSI標準定義的整數類型[signed]intunsignedint[signed]short[int]unsignedshort[int][signed]long[int]unsignedlong[int]比特數161632321616類型最小取值范圍–32768~32767即–215~(215–1)0~4294967275即0~(232–1)–2147483648~2147483647即–231~(231–1)–32768~32767即–215~(215–1)0~65535即0~(216–1)0~65535即0~(216–1)2023/2/5云南師范大學數學學院883.2.3整型數據整型變量的溢出#include<stdio.h>intmain(){inta,b;a=32767;b=a+1;printf("%d,%d",a,b);return0;}運行結果為:32767,-32768說明:(2)用%u格式輸出無符號數據。01111111111111111000000000000000ab2023/2/5云南師范大學數學學院893.2.4字符型數據1.字符與字符代碼字符按ASCII碼形式存儲字符'1'與整數1的不同:1+1=?'1'+'1'=?2023/2/5云南師范大學數學學院903.2.4字符型數據2.字符變量charc1,c2;c1='a';c2='b';字符數據在內存中的存儲形式及其使用方法字符在內存中以二進制形式存放其對應的ASCII碼!例向字符變量賦以整數。main(){charc1,c2;c1=97;c2=98;//等價于c1='a';c2='b';printf("%c%c\n",c1,c2);printf("%d%d\n",c1,c2);}97c198c201100001c101100010c22023/2/5云南師范大學數學學院91例大小寫字母的轉換main(){charc1,c2;c1='a';c2='b';c1=c1–32;
c2=c2–32;
printf("%c%c\n",c1,c2);}字符數據與整型數據可以互相賦值。charc=130;printf("%c,%d",c,c);2023/2/5云南師范大學數學學院923.2.5浮點型數據實型數據在內存中的存放形式——是以指數形式存放在存儲單元中的。指數形式:123e3、123E3規范化的指數形式:1.23e5、1.23000e+05例:將5.25在內存存放。5.25=(101.01)2=1.010122.實型變量的分類+.0101+00000010系數部分數符系數部分小數指數類型floatdoublelongdouble比特數3264128有效數字61519數值范圍(±)1.2×
1038~3.4×
1038(±)
2.3×
10308~1.7×
10308(±)
3.4×
104932~1.1×
1049322023/2/5云南師范大學數學學院933.2.6怎樣確定常量的類型(1)整型常量在某類型的取值范圍內即可。或:可在整數的末尾加L或l。(2)浮點型常量實型常量都是雙精度浮點型常量。或:可在實數的末尾加F或f,L或l。例:floatf=3.14159;floatf=3.14159f;longdoublea=1.23L;2023/2/5云南師范大學數學學院943.2.7運算符和表達式1.基本的算術運算符+、–、*、/、%注意:(1)兩個整數相除的結果為整數。若至少有一個運算數為實數,則算術運算的結果為雙精度實數。例:1/2為0,1.0/2等于0.5(2)+、–還可為單目運算符。3.算術表達式和運算符的優先級與結合性2023/2/5云南師范大學數學學院952.自增自減運算符++i,––ii++,i––j=++i;j=i++;注1.自增自減運算符,只能作用于變量,而不能用于常量或表達式。5++、(a+b)++不合法。注2.自增自減運算符的結合方向“自右至左”例如(1)–i++(參見TurboC程序)
(2)i=3;j=(++i)+(++i)+(++i);2023/2/5云南師范大學數學學院962023/2/5云南師范大學數學學院974.各類數值型數據間的混合運算10+'a'+1.5-8765.1234*'b'(系統自動進行轉換)5.強制類型轉換運算符:
(類型)(表達式)(int)3.14、(float)1doublefloatlongunsignedintchar,short高低2023/2/5云南師范大學數學學院986.C運算符(1)算術運算符(+—*/%++––)
(2)關系運算符(><==>=<=!=)
(3)邏輯運算符(!&&||)
(4)位運算符(<<>>~|^&)
(5)賦值運算符(=及其擴展賦值運算符)
(6)條件運算符(?:)
(7)逗號運算符(,)
(8)指針運算符(*和&)
(9)求字節數運算符(sizeof)
(10)強制類型轉換運算符((類型))
(11)成員運算符(.—>)
(12)下標運算符([])
(13)其他(如函數調用運算符())2023/2/5云南師范大學數學學院993.3C語句3.3.1C語句的作用和分類源程序文件1C程序局部變量聲明源程序文件2源程序文件n預處理命令全局變量聲明函數1函數首部函數n函數體執行語句…………2023/2/5云南師范大學數學學院1003.3.1C語句的作用和分類(1)控制語句if()…else…(條件語句)for()…(循環語句)while()…(循環語句)do…while()(循環語句)continue(結束本次循環語句)break(終止執行switch或循環語句)switch(多分支選擇語句)return(從函數返回語句)goto(轉向語句)2023/2/5云南師范大學數學學院1013.3.1C語句的作用和分類(2)函數調用語句
printf("ThisisaCstatement.");(3)表達式語句
a=3;x+y;(4)空語句;(5)復合語句
{……}2023/2/5云南師范大學數學學院1023.3.2最基本的語句——賦值語句例3.4給出三角形的三邊長,求三角形面積。解題思路、編寫程序、程序分析(略)。注意數學函數及'\t'的應用。賦值運算符:=例如:a=3;k=i*j;其作用?2.復合的賦值運算符:+=、*=、%=、……a+=3等價于a=a+3x*=y+8等價于x=x*(y+8)x%=3等價于x=x%3一般地:v=vopexp(此處v為變量,exp為表達式,op為運算符)等價于vop=exp目的:簡化程序提高效率2023/2/5云南師范大學數學學院1033.3.2最基本的語句——賦值語句3.賦值表達式:
整個作為一個表達式有此概念后,就可以理解并實現:a=b=c=5a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/c=2)a+=a–=a*a(若a的初值為12)printf("%d",a=b)變量=表達式2023/2/5云南師范大學數學學院1044.賦值過程中的類型轉換賦值運算符兩側的數據類型不一致時,賦值運算符右端的表達式計算結果要轉換為賦值運算符左端變量的類型。注意:表達式的值是否超過變量所屬類型的取值范圍。
實型數據整型變量取整數部分,但注意范圍(1)實型變量整型數據以浮點形式存儲(2)double數據float變量取7位有效數字,但注意范圍(3)double變量float數據有效位數擴展char數據整型變量字符數據送到整型變量低8位但注意符號擴展(4)char變量整型數據取低8位(5)2023/2/5云南師范大學數學學院1056.變量賦初值inta=3;floatf=3.56;charc='a';inta,b,c=5;相當于inta,b,c;c=5;2023/2/5云南師范大學數學學院1063.4數據的輸入輸出標準輸入輸出函數:putchar()、getchar()、printf()、scanf()、puts()、gets()#include<stdio.h>2023/2/5云南師范大學數學學院1073.4.1字符數據的輸入輸出1.putchar函數(字符輸出函數)putchar函數的功能是向終端輸出一個字符。一般形式:putchar(表達式)先計算表達式之值,然后在終端輸出其ASCII碼為該值的字符。例如:chara='B';putchar(a);putchar('O');putchar('Y');putchar('\n');putchar('A');putchar('A'+1);此時在屏幕上輸出:BOYAB2023/2/5云南師范大學數學學院1083.4.1字符數據的輸入輸出2.getchar函數(字符輸入函數)getchar函數的功能是從終端(實際上是從輸入緩沖區)讀入一個字符。一般形式:getchar()例3.9從鍵盤輸入BOY3個字符,然后把它們輸出到屏幕。#include<stdio.h>intmain(){chara,b,c;a=getchar();b=getchar();c=getchar();putchar(a);putchar(b);putchar(c);putchar('\n');return0;}注意程序運行過程中的輸入。2023/2/5云南師范大學數學學院1093.4.1字符數據的輸入輸出2.getchar函數(字符輸入函數)getchar函數的功能是從終端(實際上是從輸入緩沖區)讀入一個字符。getchar()將輸入緩沖區下一個可讀字符的字符值作為函數值返回。注1.getchar()從輸入緩沖區讀入下一個可讀字符后(例如右圖中b),再下一個字符成為下一個可讀字符(右圖中c)注2.若當前輸入緩沖區可讀字符為空(例如程序開始時,或輸入緩沖區字符被讀完后——例如上圖讀完換行符后),getchar將等待用戶從鍵盤向緩沖區輸入數據,直到輸入一行字符(鍵入后),才開始讀輸入緩沖區(此時剛輸入的第一個字符為下一個可讀字符)。剛輸入的一行字符同時顯示在屏幕上。abc123下一個可讀字符輸入緩沖區2023/2/5云南師范大學數學學院1103.4.1字符數據的輸入輸出2.getchar函數(字符輸入函數)補充1:getch()函數——直接讀鍵盤(而不是讀輸入緩沖區,也就不必理會輸入緩沖區是否為空),此時該函數等待用戶從鍵盤輸入一個字符,當用戶按任一鍵后(不必為),getch()將該字符作為函數值返回。注意:為執行getch()函數而在鍵盤上鍵入的字符不顯示在屏幕上。該函數常常用來響應用戶是否敲擊鍵盤。補充2:getche()函數,基本同getch();只是為執行getche()函數而在鍵盤上鍵入的字符顯示在屏幕上。2023/2/5云南師范大學數學學院1113.4.2格式輸入輸出1.printf函數(格式輸出函數)printf()的功能是向終端輸出若干個任意類型(格式)的數據。一般形式:printf(參數1,參數2,參數3…
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 薪酬保密與員工職業規劃及發展路徑管理協議
- 新能源汽車代理獨家補充合作協議
- 律師事務所特殊合伙人法律援助基金管理合同
- 2025年中國岸電系統行業市場現狀及未來發展趨勢研究報告
- 網絡文學作品改編成虛擬現實體驗獨家許可協議
- 離婚時房產分割與產權轉移全程服務合同
- 紙杯代加工協議書
- 石子場承包合同范本
- 幫忙還貸款協議書
- 翻圍墻安全協議書
- 安徽省合肥市45中學2025屆七年級數學第二學期期末監測模擬試題含解析
- 初中化學教師招聘考試試題及參考答案
- 山塘租賃合同協議書
- 2025-2030年中國聚脲涂料行業市場現狀供需分析及投資評估規劃分析研究報告
- 地七年級下冊全冊知識要點總復習-2024-2025學年七年級地理教學課件(人教版2024)
- 2025年教育行業工會工作計劃
- 小兒靜脈輸液安全管理
- 梗阻性肥厚型心肌病的臨床護理
- 合規管理考試試題及答案
- 施工現場安全作業流程考題
- 焊工初級測試試題及答案
評論
0/150
提交評論