C程序設計_第一講:C語言基礎(一)_第1頁
C程序設計_第一講:C語言基礎(一)_第2頁
C程序設計_第一講:C語言基礎(一)_第3頁
C程序設計_第一講:C語言基礎(一)_第4頁
C程序設計_第一講:C語言基礎(一)_第5頁
已閱讀5頁,還剩131頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、高級語言程序設計(一)(C Programming)第一講:C語言基礎(一)C程序設計基礎2本章目標了解C語言的歷史及現狀;初步了解C程序的結構;掌握簡單的標準輸入/輸出;知道在某個操作系統環境下(Windows)一個C程序的編寫過程;掌握變量、常量、簡單數據類型、類型轉換、表達式及常用的C語言運算符;掌握運算符優先級及結合律;掌握選擇、循環等控制結構;掌握程序測試和調試方法。C程序設計基礎3為什么要學C程序設計C語言仍是目前廣泛使用的編程語言,主要特點:表達能力強,支持結構化程序設計;語言簡潔;代碼效率高: C編寫的程序僅比用匯編語言編寫的程序相差20%;可移植性好;特別適合編寫操作系統、編

2、譯程序、數據庫系統、嵌入式軟件及圖形/圖象處理等對性能要求高的軟件;C語言是目前廣泛流行的面向對象語言C+、C#及Java的基礎C程序設計基礎4C語言歷史C語言的產生與UNIX操作系統是密不可分的:UNIX由Bell Lab的K.Thompson和D.M.Ritchie最先在1969年開發的O.S.(它的前身是MIT和AE開發的Multies)。1970年,V1,V2版在PDP-7機上用匯編語言實現1971年V3 PDP11/23 ; 1972年V4 PDP11/451972年,D.M.Ritchie開發出新語言C。(C B BCPL CPL單數據型語言)1973年,Ritchie和Thomp

3、son用C改寫了UNIX核心(90%)即V5C程序設計基礎5C語言歷史(續)C語言的發展經歷三個階段:第一階段:78年以前,C稱為UNIX C,即C被看成UNIX的一部分。第二階段:78年D.Ritchie的C程序設計語言出版到88年ANSI C(標準C)標準出現。此C又稱為K&R C。第三階段:88年ANSI C標準(89年3月批準)。CPL1968 C.StracheyBCPL1969 M.RichardsB1970 K.ThompsonC1972 D.M.RitchieC+1988 B.Stroustrup小測試本課程的名稱?A.C語言B.C語言程序設計C.高級程序設計語言D. 高級語言

4、程序設計C程序設計基礎6C程序設計基礎7一個簡單的C程序:在屏幕上顯示一行正文例/* file: hello.c */ #include main( )printf(“hello, worldn”);#include為一條預處理指令,當程序中用到輸入/輸出函數時,應在文件開始處加上該指令。 main為一函數名。 由 括起來的部分為函數體。 函數名為一標識符。 printf為一條輸出語句,在C語言中分號(;)為語句的結束符。 printf為標準I/O庫中標準輸出函數。 “” 為一字符串常量。 n為C語言轉義字符,表示回車。/* */ 為注釋,不可嵌套例 更標準的格式/* file: hello.

5、c */ #include int main( )printf(“hello, worldn”);return 0;C程序設計基礎8C程序結構一個C程序由一系列外部說明和函數組成;一個C程序可由一個或多個函數組成,但其中必有一個(也只能有一個)命名為main(主函數),其它函數可由用戶任取名字。程序運行時必須從main開始,但main函數在程序中的前后位置沒有關系 ;一個函數由局部變量說明及語句序列組成;組成C程序的各個函數可在一個源文件上,也可以分放在多個文件上(函數不能跨文件),每個源文件可單獨編譯。C源文件必須以.c作后綴(.h為C程序的頭文件) ;9C程序的編輯、編譯和運行編輯源程序語

6、法錯誤?運行無有否結果正確?結束是編譯/鏈接可執行文件開始C程序設計基礎10在Windows下使用VC編寫及運行C程序C程序設計基礎11項目名程序存儲位置,注意:不要使用默認的存儲位置,否則很難找到寫的程序!Console模式C程序設計基礎12C程序設計基礎13C程序設計基礎14給出C源文件名C程序設計基礎15編輯C程序C程序設計基礎16C程序設計基礎17編譯Compile編譯及連接Build編譯及連接信息運行ExecuteC程序設計基礎18運行結果:顯示在控制臺窗口內實驗:上述步驟需要多作幾次練習:1、在不同位置創建項目;2、查看創建后自動生成幾個文件;3、試著修改顯示的文字.CodeBlo

7、cks編程環境使用指南C程序設計基礎19創建Project:選擇FileNewProject在彈出的對話框中選擇控制臺模式(Console application),然后點擊Go按鈕繼續。在隨后彈出的對話框中選擇Next按鈕繼續。在該對話框中先選擇C,然后點擊Next繼續。第一個編輯框中輸入Project的名字,第二個編輯框中輸入Project保存的硬盤位置(該位置可以通過點擊右側的按鈕在彈出的對話框中選擇),最下面的兩個編輯框隨著上述兩個輸入自動變化,最后點擊Next繼續。保證Compiler是GCC Compiler,其它選項默認,點擊Finish創建Project。創建完畢后的窗口:點擊

8、左側Projects下Sources前的+號,可以打開該Project下的文件。右側為程序編輯區域,已經自動生成了最簡單的C程序框架。點擊BuildBuild菜單選項編譯、鏈接生成程序(也可點擊齒輪狀的快捷按鍵編譯鏈接)。在窗口下方顯示編輯鏈接信息:如果程序有錯,則在Build messages頁面中顯示出錯信息,并且會自動定位出錯信息:編譯鏈接沒有錯誤,便可以點擊綠色快捷按鈕運行程序(也可以點擊主菜單BuildRun選項)。下面是程序運行后的交互界面,程序運行完畢后按任意鍵關閉窗口。C程序設計基礎32在UNIX(Linux)下編寫及運行一個C程序cc -o執行文件名 c 文件名 o :指定執

9、行文件名,缺省為a.out c :產生.o文件如:s1.c, s2.c s3.c組成一個C程序, 則有:cc c s1.ccc c s2.c cc o s s1.o s2.o s3.cC程序設計基礎33程序設計與程序設計語言程序設計語言(Programming Language): 用來表達程序的計算機能夠執行的人工語言。如,Fortran, C, C+, Java, C#等。程序設計(Programming): 為計算機解決問題所需的分析、設計、編寫及調試程序過程。(The process of planning, writing, testing, and correcting the s

10、teps required for a computer to solve a problem or perform an operation.)C程序設計基礎34另一個簡單的C程序:整數求和 int 為整數數據類型說明符,其為一個 關鍵字。 a,b,c,sum為變量,其為 標識符。例#include int main( ) /* c1_2.c */int a, b, c, sum;a =1; b = 2;scanf(“%d”, &c);/*注意不能省略&*/sum = a + b + c;printf(“Sum = %dn”, sum);return 0;a = 1;為賦值語句,其中1為數字

11、常量,=為賦值運算符。 scanf為標準輸入函數,在此從鍵盤上讀入一個整數存入變量c中。 在此,printf將變量sum內容顯示到屏幕上。+為算術運算符。return返回一個值給操作系統。通常程序正常結束返回一個0值。 C程序設計基礎35標識符在C語言中標識符定義為:由字母( 或_ )開頭的字母( 或_ )數字串。標識符在C語言中可作為變量名、常量名、函數名、參數名、類型名、枚舉名和標號等。C程序設計基礎36判斷下面哪些是非法的標識符?BeijingC_Programminga8673 8a673 _1024sin(25)numnum_of_stdudenta1C程序設計基礎37C語言對字母大

12、小寫敏感name NameNAME是互不相同的3個標識符C程序設計基礎38關鍵字int autogotoiffloatstaticreturnelsecharexternbreakwhileshortregistercontinueforlongdounsignedswitchdoublecasestructdefaultunionvoidenumtypedefsizeofconstsigned已經被系統使用的標識符,具有預先定義好的特殊意義,不能作為普通名字。C程序設計基礎39define, undef, include, ifdef, ifndef, endif, 及line,雖不是關鍵字

13、,但是最好把它們看作關鍵字,它們主要用于C預處理程序中。關鍵字(續)C程序設計基礎40數據類型注意:在C語言中,沒有Bool(布爾)類型,它用非0值表示真(True),用0表示假(False)。整型短整型長整型無符號整型單精度浮點型雙精度浮點型字符型C程序設計基礎41變量與變量說明用來存儲程序運行中的數據。在C中,所有變量必須先說明(定義)后使用;說明方式: 存貯類型 數據類型 變量(列)表;例:int lower, upper, step;char c, line100;double x;double pi = 3.1415926;C程序設計基礎42變量屬性double salary = 1

14、500.23;變量的類型變量的名字變量的值變量的存儲位置(地址)例如: 0 x00222000C程序設計基礎43變量賦值C語言用賦值運算符為變量賦值賦值運算符用等于符號“=”表示double r;r = 3.2;double r = 3.2;賦值語句變量的初始化C程序設計基礎44常量(文字量、字面量)1)整型常量(缺省為int 類型,十進制、八進制、十六進制、long整型常量)2)浮點常量(缺省是double類型)如:23.15 3. -8E-3 -125e+4 6.7f 十進制八進制十六進制long整型常量127501270 x19a, 0 xABD123l, 89LC程序設計基礎453)字

15、符常量(char類型)用一對單引號括起來單個字符稱為字符常量,如:A, b, ? , 一個字符常量的值是該字符在機器字符集(通常是ASCII字符集)中的編碼值, 它是一個整數值。如上,在ASCII字符集中A的值為65,b的值為98,?的值為63。轉義字符:換行符n水平制表符t反斜線符退格符b垂直制表符v換頁符f響鈴符a回車符r問號?單引號雙引號”C程序設計基礎464)字符串常量 用一對雙引號括起來的字符串稱為字符串常量,如:“The C Programming Language” 注意:所有字符串均以0結束(編碼值為0的字符),因此,“x”和x不同,末尾的0由編譯程序自動添加。“x” x 字符

16、串中可以有轉移字符: printf(“Welcome nto nBeijing!n”);x0 xC程序設計基礎47簡單的C程序:整數求和 例#include main( ) /* c1_2.c */int a, b, c, sum;a =1; b = 2;scanf(“%d”, &c);/*注意不能省略&*/sum = a + b + c;printf(“Sum = %dn”, sum);C程序設計基礎48標準輸入、標準輸出標準輸入(stdin):通常指鍵盤標準輸出(stdout):通常指顯示器在Windows等圖形界面的操作系統中,輸入、輸出信息一般被顯示在一個窗口中,在VC的Console

17、編程模式下,顯示標準輸入、輸出信息的窗口為控制臺窗口。C程序設計基礎49標準輸出函數:printf ( 格式描述串, 其他參數1,其他參數k);格式描述串是一字符串,其中的轉換控制字符(以%開始)決定了其他參數的輸出格式和個數;其它字符原樣輸出。轉換控制字符實現的轉換對應參數類型%d按十進制整數形式輸出int%c輸出一個字符char%s輸出一個字符串字符串%f按帶小數點形式輸出浮點型%e按科學計數法形式輸出浮點型C程序設計基礎50例:double x = 3.5;double y = 4.5;double sum;sum = x+y;printf (“Sum: %f”, sum );print

18、f(“%fn%fn%f”,x, y, sum);在控制字符前還可以加數字,如:%4d :輸出最小域寬為4個字符的整數。%6.2f :輸出最小域寬為6個字符的浮點數,并且小數點占兩位。標準輸入/輸出:常見問題(續)輸出域寬和實際輸出長度輸入格式:%6.2f輸出數據:3.14159屏幕顯示域寬為六個字符,輸出數據若小于輸出域寬,則右對齊輸出,其它部分填空格;若輸出數據長度多于給定域寬,則按實際數據輸出。 3. 14C程序設計基礎52標準輸入函數:scanf ( 格式描述串, 其他參數1,其他參數k);格式描述串是一字符串,其中的轉換控制字符(以%開始)決定了其他參數的個數和輸出格式;其它字符要必須

19、原樣輸入。轉換控制字符要求輸入形式對應參數類型%d十進制整數形式int%c一個字符char%s一個字符串字符串%f小數形式float%lf小數形式doubleC程序設計基礎53例:輸入一整數:int n;scanf( “%d”, &n );若不帶&符:scanf( “%d”, n ); ?程序崩潰!標準輸入/輸出:常見問題如何輸出多個數據?int x=2;int y=3;printf ( “%d + %d = %d ”, x, y, x+y );輸出結果: 2+3=5如何輸入多個數據?int n;float r;scanf( “%d%f”, &n, &r );輸入多個數據時,用空格或回車換行分

20、隔這些數據,但在格式字符串中不用給出空格或回車換行符。實驗!C程序設計基礎55標準輸入/輸出:常見問題float r;scanf( “r=%f”,&r );必須原樣輸入非轉換字符double r;scanf( “r=%f”,&r );scanf( “r=%lf”,&r );一個輸入例子:r=3.14(3.14將被讀入到變量 r中)double r;scanf( “r=%lf”,&r );printf( “%f n”, r );標準輸入/輸出:常見問題(續)輸入格式控制串末尾含有空白字符(如空格或n)例:int a,b;scanf(“%d%dn”,&a,&b);或:scanf(“%d%d ”,&

21、a,&b);What happened?回車換行符無法讀入!建議格式串的末尾不要有n或空格符。實驗:實驗一:練習程序的編輯、編譯、運行過程;實驗二:實驗前面所有的程序;實驗三:下面的輸出會出現什么情況:int a=5;double b=2.5;printf (“%f”, a );printf ( “%d” , b );C程序設計基礎57C程序設計基礎58一個例子:計算圓的面積及周長例#include main()double radius, area, perimeter;scanf(“%lf”, &radius);area = 3.14159 * radius * radius;perime

22、ter = 2 * radius * 3.14159;printf(“Radius = %6.2f Area = %6.2f Perimeter = %6.2f”, radius,area,perimeter);C程序設計基礎59表達式與運算符在C語言中,由運算符(operators)及運算對象(operands)構成的式子稱為表達式(expression),如:x + y *z在C語言中,一個表達式后跟一個分號可構成一條語句:; 稱為表達式語句如:a = b+c;n = 5;x+;C程序設計基礎60算術運算符算術運算符: +, - , * , / , %在算術運算時,注意整除問題,如:dou

23、ble f;f = 3 / 2;f = ?f 值為 1.0 而不是1.5, 若要f為1.5,則應寫為:f = (double)3 / 2;或者:f = 3.0/2;f = 3/2.0; 實驗98%10 = 898/10 = 9C程序設計基礎61類型轉換 C語言類型轉換通常是自動的- 隱式(自動)類型轉換:如果一個運算符,有不同類型的運算對象,那么“較低”類型會自動轉換成“較高”類型。 1)自動轉換方向:如,n+1.5結果將為double類型賦值運算符右邊表達式的類型會自動轉換為賦值運算符左邊變量類型,如:int x;x = 2.5;函數調用的自動類型轉換類型轉換(續)實驗int a=5;dou

24、ble b=2.5;printf (“%f”, a );printf ( “%d” , b );不屬于自動轉換,輸出情況未知,標準C未定義C程序設計基礎63類型轉換(續)強制類型轉換(cast)- 顯式類型轉換()如:int x;x = (double) 5 / 2;發生了幾次類型轉換?一元運算符:優先級高于二元運算符3次!實驗C程序設計基礎64類型轉換(續)不同數據類型之間的轉換1)浮點數與整數的相互轉換:2)無符號整數與整數的相互轉換:一般整數(int)和無符號整數(unsigned)混合使用,則簡單整數轉換成無符號整數。3)字符與整數的相互轉換:可以用整數的地方就可以用字符。而整數轉換成

25、字符時,超出8位就將高位丟掉。浮點數整數截去小數部分小數點后加0實驗字符與整數注意:1、字符實際上是一特殊的整型,因此字符經常與整型進行混合運算。char ch= a;int x ;x=ch +1;2、字符的ASCII編碼規則:az AZ 09都是依次按照升序編碼的。例如:a編碼為:97b編碼為:98 z編碼為:122A編碼為:65B編碼為:66 Z編碼為:900編碼為:48 9編碼為:57區分:11int類型, 值為1char類型, 值為49字符與整數:舉例問題描述:從標準輸入讀入一字母,輸出其對應的ASCII值。輸入樣例:b輸出樣例:98問題分析:輸入?大寫或小寫字母輸入的若不是字母,怎么

26、辦?輸出?對應的ASCII值 char ch;題目沒說明,不考慮 int ascii;字符與整數:舉例#include int main()char ch;int ascii;scanf ( “%c”, &ch );ascii = ch;printf ( “%d”, ascii );return 0;#include int main()char ch;scanf ( “%c”, &ch );printf ( “%d”, ch );return 0;?實驗!C程序設計基礎68增(減)量運算符增(減)量運算符:+,-依據運算符與運算對象間的位置,分為前置和后置運算前置運算是先進行增減量,再取其值

27、。后置運算是先取其值,再進行增減量運算。如:n = 5;n = 5;x = +n;x = n+;結果:? 結果:?x: 6, n: 6x: 5, n: 6像+,-這類只要求一個運算對象的運算符又稱為單目運算符(unary operators)。+,-運算符在有些書中稱為自增(減)運算符。實驗C程序設計基礎69賦值運算符賦值運算符: = , += , -= , /= , %= , *= , = , b_back += 2;編譯程序產生效率高(其用一個運算符完成其它語言中須多個運算符才能完成的功能。如:x += n只有一個運算符,而x = x+n則有兩個運算符)注意:y *= n+1; 等價于 y

28、 = y*(n+1);,而不是y = y*n+1;C程序設計基礎71運算符優先級及結合律C程序設計基礎72運算符優先級及結合律(續)可以使用()運算符來改變表達式中運算符的計算次序。如:(x+y) / 12if( (x = n) 0)while( (c = getchar() ) != EOF)風格建議:在由多個運算符組成的表達式中應使用( )來明確計算次序,這樣更加清晰,可讀性好,不易出錯。例如: a = b+ + +c; 與 a = ( b+ ) + ( +c );問題1.1問題描述:“判斷某學生成績是否及格(大于等于60為及格,否則不及格)”輸入形式:從控制臺(或標準輸入、鍵盤)輸入一個

29、整數,表示學生成績。輸出形式:在屏幕(或標準輸出)上輸出Pass或Fail,分別表示及格、不及格。樣例1:輸入樣例:36輸出樣例:Fail樣例2:輸入樣例:80輸出樣例:Pass樣例說明:從鍵盤輸入成績36,輸出Fail表示不及格;從鍵盤輸入80,輸出Pass表示及格。問題1.1:問題分析輸入:學生成績;類型:整型;功能:學生成績值與60進行比較,大于或等于60則及格,否則不及格;輸出:字符串“Pass”或“Fail”;問題1.1:解題步驟解決問題1.1的步驟可描述為:讀入學生成績值如果 該成績值大于或等于60 輸出信息“Pass”否則輸出信息“Fail”解題步驟表示解題步驟即可以用自然語言表

30、述(如前),也可用用半結構化語言表示,如:read 學生成績值if 成績值 = 60 print “Pass”elseprint“Fail”條件:關系運算符及邏輯運算符關系運算符:, =, = 3) | ( x = 5)(2 = 3) & ( x = 7)條件(續)一些常見的條件例子:判斷整形變量n的值為一個0到10之間的值:( 0 = n & n = 10)判斷字符變量c是字母:( a = c & c = z) | (A = c & c = Z)判斷某年是平年還是閏年(閏年為能被4整除但不能被100整除,或能被400整除):( ( y % 4 = 0 ) & ( y % 100 != 0 )

31、 ) | ( y % 400 = 0 )注意:條件表達式 “0 = n b) max=a;else max=b;if(ab) max=a; min=b;if(ab) max=a; min=b;實驗稱為:復合語句選擇結構:if語句(續)注意:在if嵌套中,省略else會產生二義性。如:if ( score = 60 ) if ( score 80 ) n+;else m+;即else與前面最接近的不帶else的if相對應。若要使上面的else與第一個if相匹配,可使用。如:if ( score = 60 ) if ( score 80 ) n+;else m+;實驗問題1.1:代碼實現與測試根據

32、其算法描述,我們很容易將問題“判斷學生成績是否及格”的解決轉換為相應的程序。例1-1/*判斷學生成績是否及格*/#include main( )int score;scanf(“%d”, &score);if( score = 60)printf(“Passn”);elseprintf(“Failn”); 程序程序設計的常用方法為首先給出問題的解題步驟(算法),然后將其編程序實現。read 學生成績值if 成績值 = 60 print “及格”else print“不及格”解題步驟if選擇(條件)語句如何判斷程序解決了相應問題?可用下面輸入數據來測試(檢驗):75(輸出應為“Pass”)30(

33、輸出應為“Fail”)60 (輸出應為“Pass”)- 特殊數據需要一個整型變量存儲成績值(數據結構)實驗條件運算符(?:)與條件表達式條件運算符(三目運算符):?:條件表達式: ? : 先計算表達式1,若其值為非零,則整個表達式結果為表達式2的值,否則就為表達式3的值。例:計算a和b的最大值if( a b)z = a;elsez = b;等價于:z = ( a b) ? a: b;例1-1a/*判斷學生成績是否及格*/#include main( )int score;scanf(“%d”, &score);( score = 60)?printf(“Passn”):printf(“Fail

34、n”); 實驗問題1.2問題: “判斷某學生成績對應的五級評分成績”問題分析:輸入:學生成績;類型:整型;輸出:A(優)、B(良)、C(中)、D(及格)、E(不及格);處理:學生成績值分別與90,80,70,60進行比較,以判斷其為優、良、中、及格和不及格中哪一等級;問題1.2:解題步驟解決該問題的步驟如下: 讀取學生成績值 如果該成績值大于或等于90 輸出信息“優” 否則 如果該成績值大于或等于80 輸出信息“良” 否則 如果該成績值大于或等于70 輸出信息“中” 否則 如果該成績值大于或等于60 輸出信息“及格” 否則 輸出信息“不及格”學生成績值優=90良中及格不及格=80=70=606

35、0多路選擇變量定義:需要一個整型變量用于存放輸入的學生成績。問題1.2:代碼實現與測試讀取學生成績值如果該成績值大于或等于90 輸出信息“優”否則 如果該成績值大于或等于80 輸出信息“良”否則 如果該成績值大于或等于70 輸出信息“中” 否則 如果該成績值大于或等于60 輸出信息“及格” 否則 輸出信息“不及格”步驟例1-2/*判斷學生成績對應的五級評分*/#include main( ) int score; scanf(“%d”, &score); if( score = 90) printf(“An”); else if( score = 80) printf(“Bn”); else

36、if(score = 70) printf(“Cn”); else if(score = 60) printf(“Dn”); else printf(“Fn”); 嵌套if結構測試數據為:95 9085 8075 70 65 6055實驗多路選擇:if_else if例1-2a/*判斷學生成績對應的五級評分*/#include main( ) int score; scanf(“%d”, &score); if( score = 90) printf(“An”); else if( score = 80) printf(“Bn”); else if(score = 70) printf(“Cn

37、”); else if(score = 60) printf(“Dn”); else printf(“Fn”); 一種更好的風格!實驗多路選擇:if_else if(續) 注意:不當的判斷順序可能造成程序錯誤的執行結果,如:#include main( ) int score; scanf(“%d”, &score); if( score = 60) printf(“Dn”); else if( score = 70) printf(“Bn”); else if(score = 80) printf(“Cn”); else if(score = 90) printf(“An”); else p

38、rintf(“Fn”); 下面程序功能與1-2a相同,但效率要低。#include int main( ) int score; scanf(“%d”, &score); if( score = 90 & score = 80 & score = 70 & score = 60 & score 70) printf(“Dn”); if(score 60) printf(“Fn”); return 0; 實驗程序員常犯如下三類語法錯誤使用未定義變量名;遺漏語句結束符(“;”)遺漏塊語句結束符(“”)下面通過示例來說明如何利用編譯信息判斷及定位語法錯誤。程序設計實踐:編譯(語法)錯誤及定位在VC下

39、,編譯錯誤提示信息為:“error C2065: xxx : undeclared identifier”在VC下,編譯錯誤提示信息為:“error C2146: syntax error : missing ; before identifier printf”如,遺漏最后函數結束符,在VC下,編譯錯誤提示信息為:“fatal error C1004: unexpected end of file found”程序設計實踐:編譯(語法)錯誤及定位(續)編譯結果程序設計實踐:編譯(語法)錯誤及定位(續)光標定位到錯誤行,然后根據英文錯誤提示修改錯誤。雙擊某個錯誤信息遺漏分號錯誤!程序設計實踐:

40、編譯(語法)錯誤及定位(續)標識符未定義錯誤!程序設計實踐:編譯(語法)錯誤及定位(續)錯誤信息提示并不完全準確,所以不能完全依賴信息提示遺漏花括號錯誤!問題1.3問題: 從n個整數中找到最小的整數并輸出。輸入形式:先從控制臺輸入整數個數,然后在下一行上輸入整數,以空格隔開;輸出形式:向控制臺輸出最小的整數。樣例輸入:589 56 -12 0 128樣例輸出:-12設整數個數為n;設最小整數為x;設當前讀入的整數為data;讀入data;若x大于datax=data;若沒有結束,則:否則:輸出x;問題1.3:解題步驟細化設整數個數為n;設最小整數為x;設當前讀入的整數為data;讀入data;

41、若x大于datax=data;若沒有結束,則:否則:輸出x;設整數個數為n;設最小整數為x;設當前讀入的整數為data;設計數器m,表示已經讀入的整數個數;m初始化為0;讀取n;x初始化為讀入的第一個整數;如果mn:讀入data;若x大于datax=data;m+;否則:輸出x;C程序設計基礎96C程序設計基礎96設整數個數為n;設最小整數為x;設當前讀入的整數為data;設已經讀入m個整數;m初始化為0;讀取n;x初始化為讀入的第一個整數;如果mn:讀入data;若x大于datax=data;m+;否則:輸出x;設整數個數為n;設最小整數為x;設當前讀入的整數為data;設已經讀入m個整數;

42、m初始化為0;讀取n;讀取第一個data,并賦給x;m+;如果mn:讀入data;若x大于datax=data;m+;否則:輸出x;問題1.3:解題步驟繼續細化方法1C程序設計基礎97設整數個數為n;設最小整數為x;設當前讀入的整數為data;設已經讀入m個整數;m初始化為0;讀取n;x初始化為讀入的第一個整數;如果mn:讀入data;若x大于datax=data;m+;否則:輸出x;設整數個數為n;設最小整數為x;設當前讀入的整數為data;設已經讀入m個整數;m初始化為0;讀取n;如果mn:讀入data;若m=0,則:x=data;若x大于datax=data;m+;否則:輸出x;問題1.

43、3:解題步驟繼續細化方法2循環結構:while語句while(表達式) 語句簡單語句或復合語句可以是任何表達式,一般情況下是關系表達式表達式語句FT計算表達式語句結束問題1.3:代碼實現#includemain()int m,n,data,x;m=0;scanf(%d, &n);while(mdata)x=data;m+;printf(%d, x);while循環語句設整數個數為n;設最小整數為x;設當前讀入的整數為data;設已經讀入m個整數;m初始化為0;讀取n;如果m data | m = 0 )循環體中如果有多條語句,則必須用大括號括起來作為復合語句循環結構:while語句(續)例:從

44、鍵盤讀入字符后輸出,并最后輸出讀入字符的個數。輸入樣例:Hello!Welcome!輸出樣例:Hello!Welcome!16步驟分析:計數器初始化為0讀入一個字符輸出最新讀入的字符計數器加1;若 沒有結束若 結束輸出計數器結果字符輸入函數int getchar( );從標準輸入讀入并返回一字符int ch;ch = getchar( );通常定義一整型變量保存輸入的字符字符輸出函數putchar( int ch );例:putchar( A);int ch;ch = getchar( );putchar( ch );向標準輸出設備以字符形式輸出ch遇到結束時返回EOF 。EOF是標準庫中定義

45、的符號常量,一般為-1在新的一行輸入Ctrl+z后打回車鍵表示輸入結束循環結構:while語句(續)例:從鍵盤讀入字符后輸出,并輸出讀入字符的個數。#include main( )int ch,n=0;ch = getchar( )while( ch!= EOF ) putchar(ch); n+; ch = getchar( );printf(“n%d”,n);#include main( ) int ch,n=0;while( (ch=getchar() ) != EOF )putchar(ch); n+;printf(“n%d”,n);1)程序如何結束? Ctrz2)為何程序運行: he

46、llo hello實驗解題步驟:計數器初始化為0讀入一個字符ch;ch不等于EOF:輸出最新讀入的字符;計數器增1;讀入下一個字符;否則:輸出計數器。?#include main( )int ch=1,n=0;while( ch!= EOF ) ch = getchar(); putchar(ch); n+; printf(“n%d”,n);解題步驟:計數器初始化為0讀入一個字符輸出最新讀入的字符計數器加1;若 沒有結束若 結束輸出計數器結果多輸出了一個結束符!循環結構:for語句for(表達式1;表達式2;表達式3)語句其等價于:表達式1;while(表達式2)語句;表達式3;表達式2語句F

47、T計算表達式2語句結束計算表達式1計算表達式3通常用來初始化循環變量 循環的終止條件,通常根據循環變量是否滿足某個條件來終止循環。通常用來改變循環變量 循環結構:for語句(續)例1-3a#include main( ) int m,n,data,x; scanf(“%d”,&n); for (m=0; m data ) x = data; printf(“%d”, x ); 循環變量#includemain()int m,n,data,x;m=0;scanf(%d, &n);while(mdata) x=data;m+;printf(%d, x);實驗循環結構:for語句(續)for特別適合

48、于循環次數固定或有固定步長的循環,如下面是一個循環十次的循環:for( i=0; i10; i+) 當然也可以用于其它方面。循環結構:for語句(續)注意:從語法上講,表達式中任一個都允許省略,但分號不能省。如:for ( ; (c = getchar( )!= EOF ; )語句s;for ( ; ; )語句s;當表達式2不出現時,則認為條件為真,循環永遠下去(無窮循環)。因此,while(A)B;等價于for(; A; )B;實驗例:輸入m,求 的結果并輸出。問題分析: 輸入:輸入整數m 處理: 從1到m依次求出每個數的平方并相加 輸出:平方和的結果 =m12nn解題步驟:設上限值m,計數

49、器n,和sum1、輸入上限值m;2、初始化變量n和sum;3、若n小于等于m:3.1 求n的平方并累加到sum; 3.2 n增1;4、輸出結果sum。#include main( ) int m,n, sum; scanf(“%d”,&m); sum = 0; n = 1; while ( n=m ) sum = sum + n*n; n +; printf ( “Sum: %dn”, sum);解題步驟:設上限值m,計數器n,和sum1、輸入上限值m;2、初始化變量n和sum;3、若n小于等于m :3.1 求n的平方并累加到sum; 3.2 n增1;4、輸出結果sum。#include ma

50、in( ) int m,n, sum; scanf(“%d”,&m); for (sum = 0, n = 1; n=m; n+ ) sum = sum + n*n; printf ( “Sum: %dn”, sum);#include main( ) int m,n, sum; scanf(“%d”,&m); sum = 0; n = 1; while ( n=m ) sum = sum + n*n; n +; printf ( “Sum: %dn”, sum);實驗C程序設計基礎112循環結構:do_while語句do 語句while (表達式);作用類似于while,但do_while是

51、否終止,其判定條件是在循環體之后,即它總是先執行一次循環體,再判斷表達式的值是否為真。表達式語句FT計算表達式語句結束C程序設計基礎113循環結構:do_while語句(續)總的說來,while(for)循環是在頂上測試循環終止條件,而do_while是在每次通過循環體之后,在底部進行測試,所以循環體至少要進行一次。注意:do_while與Pascal語言中的Repeatuntill不同- 其布爾表達式為False時繼續循環,若為True時,終止循環。C程序設計基礎114問題1.3問題: 從n個整數中找到最小的整數并輸出。輸入形式:先從控制臺輸入整數個數,然后在下一行上輸入整數,以空格隔開;輸

52、出形式:向控制臺輸出最小的整數。樣例輸入:589 56 -12 0 128樣例輸出:-12#includemain()int m,n,data,x;m=0;scanf(%d, &n);doscanf(%d, &data);if(m=0 | xdata)x=data;m+;while(mn);printf(%d, x);設整數個數為n;設最小整數為x;設當前讀入的整數為data;設已經讀入m個整數;m初始化為0;讀取n;讀入data;若m=0,則:x=data;若x大于datax=data;m+;如果mn,則:否則:輸出x;實驗C程序設計基礎116循環結構三種循環主要的用途: for通常用于固定

53、步長的循環 while通常用于循環條件在頭部判斷的循環 do_while通常用于至少循環一次的循環問題1.4問題:“某班有n名學生,輸入學生個數以及每個學生成績,并判斷其成績是否及格,在判斷學生成績過程中,如果輸入的學生成績不合法(如大于100或為負數)則給出錯誤提示,并終止程序運行”。問題分析:首先要判斷所讀入的成績值是否非法,如果非法,則給出錯誤信息并退出處理;否則繼續處理。解題步驟:1.讀入學生人數n,初始化計算器變量m為02.while m小于n2.1 讀入一學生成績值到變量score中2.2 如果變量score值大于100或小于0:a.輸出錯誤信息b.退出循環2.3 判斷score值

54、,輸出“Pass”或“Fail”2.4 變量m加13.結束break和continue語句(續)break:迫使程序從包含它的最內層循環體或switch語句中跳出(循環只能跳出一層)。continue:迫使包含它的最內層循環體立即執行下一次循環(不管現在程序執行到何處)。while()break;while()continue;break和continue語句/*判斷某班學生成績對應的五級評分*/#include main( ) int m,n, score;scanf(“%d”,&n); for (m=0; m 100 | sorce = 60) printf(“Passn”); else

55、printf(“Failn”); 實驗break和continue語句(續)例:統計非數字字符數。main( )int count;char c;count = 0;while( c = getchar( ) != EOF)if( c = 0 & c = 9)continue;count+;printf(“non digital character: %dn”, count);不用continue語句同樣可以實現該程序:main( ) int count; char c; count = 0; while( c = getchar( ) != EOF) if( c 9) count+; pri

56、ntf(“non digital character: %dn”, count); 實驗控制結構計算機語言提供三種方式來控制算法的執行:順序(Sequence)、選擇(Selection)和循環(Loop)。語句1語句2語句n順序條件語句1語句2選擇真假條件語句真假循環語句C語言語句分成簡單語句和構造語句兩類。簡單語句1)表達式語句賦值表達式語句,如: x= z+3;其它表達式語句,如:+x; -y;函數調用語句等,如:printf(“%d”,x+y);2)轉移語句goto 標號;break;continue; return; return (表達式);3)空語句;語句(續)構造語句1)選擇(條件)語句if語句,if_else語句2)循環語句for語句while語句do_while語句3)開關語句switch語句(包括case語句)4)復合語句*注意:后沒有分號(;),這與單個語句不同。程序設計實踐:測試(Testing)如何驗證一個程序解決了問題(即實現了所要的功能),可分析每個輸入數據的范圍,然后對每個數據從下面幾個方面來考慮測試數據:正常數據(范圍內,如問題1.1中的75),以確定程序做了該做的事;邊界數據(范圍邊界,如問題1.1中的60),以確定程

溫馨提示

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

評論

0/150

提交評論