版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
3單元順序結(jié)構(gòu)程序設(shè)計C語言程序設(shè)計任務(wù)驅(qū)動式在日常生活中,需要“按部就班、依次執(zhí)行”處理和操作的問題隨處可見,每年一度的迎新大會、年終總結(jié)大會等都是這樣一種順序結(jié)構(gòu)。順序結(jié)構(gòu)是C程序中最簡單、最基本、最常用的一種程序結(jié)構(gòu),也是進(jìn)行復(fù)雜程序設(shè)計的基礎(chǔ)。因此熟練掌握順序結(jié)構(gòu)進(jìn)行程序設(shè)計是我們必須具備的能力。在順序結(jié)構(gòu)中,程序的流程是固定的,不能跳轉(zhuǎn),只能按照書寫的先后順序逐條逐句地執(zhí)行。賦值操作和輸入輸出操作是順序結(jié)構(gòu)中最典型的操作。本單元從3個典型任務(wù)入手,介紹C語言的各類語句,包括控制語句、表達(dá)式語句等;對格式輸出函數(shù)printf和格式輸入函數(shù)scanf等函數(shù)的一般格式進(jìn)行說明,以加深大家對C語言程序開發(fā)設(shè)計過程的感性認(rèn)識,強(qiáng)化編程思維,為進(jìn)一步進(jìn)行C語言程序設(shè)計,成為符合國家需要的合格的軟件開發(fā)和設(shè)計人才打下基礎(chǔ)。問題引入QuestionIntroduction目錄導(dǎo)航任務(wù)1菜單設(shè)計—算法與程序基本結(jié)構(gòu)任務(wù)2小寫字母轉(zhuǎn)換為大寫字母—字符輸入輸出函數(shù)思考與訓(xùn)練單元小結(jié)任務(wù)3輸出學(xué)生個人信息—格式化輸入輸出函數(shù)任務(wù)1菜單設(shè)計—算法與程序基本結(jié)構(gòu)小明和小康到飯館就餐,剛剛落座,服務(wù)員拿出一本菜單,讓兩人點餐。小明和小康想到自己正在學(xué)習(xí)C語言,心想能否用C語言中的printf語句來制作菜單?工作任務(wù)任務(wù)1菜單設(shè)計—算法與程序基本結(jié)構(gòu)思路指導(dǎo)在日常生活中,餐廳菜單是顧客選擇菜品的重要參考。如果我們用C語言來編寫一個餐廳菜單程序,不僅可以鍛煉編程技能,還能通過這個過程理解如何更好地為用戶(在這里是餐廳顧客)提供清晰、直觀的信息。對于菜單的設(shè)計,需要考慮的最主要的問題就是確定菜單顯示在屏幕上的位置,應(yīng)該思考如何使菜單界面整齊,看起來自然美觀、賞心悅目以及使用方便。(一)如何描述算法1.算法的概念相關(guān)知識著名的計算機(jī)科學(xué)家NiklausWirth在他的驚世之作中提出了一個著名的公式:
程序=算法+數(shù)據(jù)結(jié)構(gòu)所謂算法,就是一個有窮規(guī)則的集合,其中的規(guī)則確定了一個解決某個特定類型問題的運算序列。簡單地說,就是解決一個具體問題而采取的確定的、有限的操作步驟。這里所說的算法僅指計算機(jī)算法,即計算機(jī)能夠執(zhí)行的算法。(一)如何描述算法算法有兩大要素,操作和控制結(jié)構(gòu)。每一個算法都是由一系列的操作組成的,同一操作序列,按不同的順序執(zhí)行,就會得出不同的結(jié)果,執(zhí)行的效率也會有所不同??刂平Y(jié)構(gòu)即如何控制組成算法的各操作的執(zhí)行順序。結(jié)構(gòu)化程序設(shè)計方法要求一個程序只能由3種基本結(jié)構(gòu)組成。這3種基本結(jié)構(gòu)分別是:順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。(一)如何描述算法設(shè)計好一個算法后,怎樣衡量它的正確性呢?可以用以下特征來衡量。(1)有窮性(2)確定性(3)有效性(4)有零個或多個輸入(5)有一個或多個輸出(一)如何描述算法2.如何描述算法(1)流程圖。圖3-1常用的流程圖符號圖3-2兩數(shù)中取大數(shù)的流程圖(一)如何描述算法(2)N-S圖(框圖)。1966年Bobra和Jacopini提出了3種基本結(jié)構(gòu),即順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。這3種結(jié)構(gòu)有以下幾個特點。①只有一個入口。②只有一個出口。③結(jié)構(gòu)內(nèi)的每個部分都有可能被執(zhí)行到。④結(jié)構(gòu)內(nèi)沒有死循環(huán)。(一)如何描述算法圖3-3順序結(jié)構(gòu)圖3-4選擇結(jié)構(gòu)圖3-5循環(huán)結(jié)構(gòu)(3)偽代碼。偽代碼是用一種介于自然語言和計算機(jī)語言之間的文字和符號來描述算法,它是一種混雜語言。(二)無格式的輸出1.語法格式printf("輸出字符串");2.基本功能將雙引號中的輸出內(nèi)容原樣輸出。任務(wù)1菜單設(shè)計—算法與程序基本結(jié)構(gòu)任務(wù)實施#include<stdio.h>voidmain(){printf("歡迎光臨四川酒家\n");printf("油燜大蝦48元/份\n");printf("干煸豆角20元/份\n");printf("水煮魚38元/份\n");printf("麻婆豆腐15元/份\n");}運行結(jié)果如圖3-6所示。圖3-6任務(wù)1運行結(jié)果(一)你了解程序設(shè)計語言嗎拓展與提高1.低級語言(1)機(jī)器語言機(jī)器語言就是計算機(jī)能夠直接識別和執(zhí)行的指令集合。由于計算機(jī)只能識別“0”和“1”兩種狀態(tài),所以機(jī)器語言指令都是二進(jìn)制指令。(2)匯編語言匯編語言是一種符號語言,它是用一些助記符號來代替那些冗長的二進(jìn)制指令。例如,可以用ADD表示加法,SUB表示減法等。(一)你了解程序設(shè)計語言嗎2.高級語言20世紀(jì)50年代出現(xiàn)了FORTRAN語言,20世紀(jì)60年代先后出現(xiàn)了COBOL、ALGOL60、BASIC等語言,后來又出現(xiàn)了Pascal、C、C++、Java、Python等。這些語言的特點是:用一種接近自然語言和數(shù)學(xué)語言的專用語言來表示算法,而且與具體的計算機(jī)無關(guān),即用它所寫的程序可以在任何一種計算機(jī)上運行。高級語言的出現(xiàn)大大提高了程序設(shè)計的效率,使人們能更方便地使用計算機(jī)。(二)程序設(shè)計方法簡介建立數(shù)學(xué)模型是程序設(shè)計中最復(fù)雜、最困難的一步,好的數(shù)學(xué)模型本身就是一個定律,它要通過大量的觀察、分析、推理、驗證等工作才可以得到。但這是數(shù)學(xué)范疇的工作,計算機(jī)工作人員雖然一般不用完成這部分的研究工作,但也應(yīng)該對其基本知識有一定了解。在進(jìn)行程序設(shè)計時往往都是利用已有的基本數(shù)學(xué)模型去構(gòu)造出問題的模型。各種數(shù)學(xué),如微積分、運籌學(xué)、圖論、高等數(shù)學(xué)等都是不同的基本數(shù)學(xué)模型。算法是解決問題的方法與步驟。設(shè)計算法也是一件非常困難的工作,經(jīng)常采用的算法設(shè)計技術(shù)主要有迭代法、窮舉搜索法、遞推法等。另外,解決一個問題往往有多種算法,算法的好壞直接影響到程序的質(zhì)量。2.選定算法,并用適當(dāng)?shù)墓ぞ呙枋?.建立數(shù)學(xué)模型(二)程序設(shè)計方法簡介每種語言都有自己的特點,為一個特定的項目選擇語言時通常可以考慮以下因素。3.編寫程序(1)應(yīng)用領(lǐng)域。(2)算法和計算的復(fù)雜性。(3)軟件運行的環(huán)境。(4)用戶需求。(5)數(shù)據(jù)結(jié)構(gòu)的復(fù)雜性。(6)開發(fā)人員的水平(二)程序設(shè)計方法簡介選擇語言以后,還要靈活運用高級語言的特性來解決顯示問題。在程序設(shè)計中要特別注意以下3點。①語法。③語用。每種語言都有自己的語法規(guī)則,這些規(guī)則是非常嚴(yán)格的。在進(jìn)行編譯時,系統(tǒng)會按語法規(guī)則嚴(yán)格檢查程序,如有不符合語法規(guī)則的地方,計算機(jī)會顯示語法有錯誤信息。即某一語法成分的含義。即正確使用語言。要善于利用語法規(guī)則中的有關(guān)規(guī)定和語法成分的含義有效組成程序,以達(dá)到特定的目的。②語義。(二)程序設(shè)計方法簡介編程完成后,首先應(yīng)該靜態(tài)審查程序,即由人工“代替”或“模擬”計算機(jī),仔細(xì)檢查程序,然后將高級語言源程序輸入計算機(jī),經(jīng)過編譯、連接,然后運行。在編譯、連接及運行時,如果在某一步發(fā)現(xiàn)錯誤,就必須找到錯誤并改正,然后再重新編譯運行,直到得到正確結(jié)果為止。程序測試的目的是盡可能多地發(fā)現(xiàn)程序中的錯誤和缺陷。要進(jìn)行測試,除了要有測試數(shù)據(jù)外,還應(yīng)同時給出該組測試數(shù)據(jù)應(yīng)該得到怎樣的輸出結(jié)果。在測試時,將實際的輸出結(jié)果與預(yù)期結(jié)果比較,若不同則表示發(fā)現(xiàn)了錯誤。對非法的和非預(yù)期的輸入數(shù)據(jù)也要像合法的和預(yù)期的輸入數(shù)據(jù)一樣進(jìn)行測試。另外,還要檢查程序是否做了不應(yīng)該做的事。4.測試與調(diào)試(三)結(jié)構(gòu)化程序設(shè)計要設(shè)計出結(jié)構(gòu)化的程序,應(yīng)該采用以下方法。(1)自頂向下。(2)逐步細(xì)化。(3)模塊化。所謂“自頂向下,逐步細(xì)化”,是指一種先整體后局部的設(shè)計方法,對一個較復(fù)雜的問題,一般不能立即寫出詳細(xì)的算法或程序,但可以很容易寫出一級算法,即求解問題的輪廓,然后對這個算法逐步求精,把它的某些步驟擴(kuò)展成更詳細(xì)的步驟,在細(xì)化過程中,一方面加入詳細(xì)算法,另一方面明確數(shù)據(jù),直到根據(jù)這個算法可以寫出程序為止。(四)了解C語言的語句類型1.C語言中的語句分類表達(dá)式語句由表達(dá)式加上分號“;”組成。其一般形式為表達(dá)式;執(zhí)行表達(dá)式語句就是計算表達(dá)式的值。事實上,C語言中有使用價值的表達(dá)式語句主要有3種:賦值語句、由自加自減運算符構(gòu)成的表達(dá)式語句、逗號表達(dá)式語句。例如:x=y+z; /*賦值語句*/y+z,a+b; /*逗號運算語句,但計算結(jié)果不能保留,無實際意義*/i++; /*自增1語句,i值增1*/i--; /*自減1語句,i值減1*/(1)表達(dá)式語句。(四)了解C語言的語句類型控制語句用于控制程序的流程,以實現(xiàn)程序的各種結(jié)構(gòu)方式。它們由特定的語句定義符組成。C語言有9種控制語句,可分成3類:條件判斷語句、循環(huán)執(zhí)行語句、轉(zhuǎn)向語句。(3)控制語句。把多個語句用括號{}括起來組成的一個語句稱為復(fù)合語句。在程序中應(yīng)把復(fù)合語句看成是單條語句,而不是多條語句,例如:
{x=y+z;a=b+c;printf("%d%d",x,a);}是一條復(fù)合語句。復(fù)合語句內(nèi)的各條語句都必須以分號“;”結(jié)尾,在括號“}”外不能加分號。(4)復(fù)合語句。(四)了解C語言的語句類型只有分號“;”的語句稱為空語句??照Z句是什么也不執(zhí)行的語句。在程序中空語句可用來做空循環(huán)體。例如:while(getchar()!='\n');本語句的功能是,只要從鍵盤輸入的字符不是回車符就重新輸入。這里的循環(huán)體為空語句。(5)空語句。(二)常量和變量賦值語句是由賦值表達(dá)式再加上分號構(gòu)成的表達(dá)式語句。其一般形式為變量=表達(dá)式; 賦值語句的功能和特點都與賦值表達(dá)式相同。它是程序中使用最多的語句之一。2.最簡單的C語言語句—賦值語句任務(wù)1菜單設(shè)計—算法與程序基本結(jié)構(gòu)特別提示(1)首先要用合適的描述工具描述處理問題的步驟,然后再編寫程序。給變量賦初值是變量說明的一部分,賦初值后的變量與其后的其他同類變量之間仍必須用逗號間隔,而賦值語句必須用分號結(jié)尾。(2)編寫程序時,不僅要保證程序正確,而且要保證程序的質(zhì)量。(3)注意在變量說明中給變量賦初值和賦值語句的區(qū)別。(4)在變量說明中,不允許連續(xù)給多個變量賦初值。如下述說明是錯誤的。inta=b=c=5;必須寫為:inta=5,b=5,c=5;而賦值語句允許連續(xù)賦值。
任務(wù)1菜單設(shè)計—算法與程序基本結(jié)構(gòu)(5)賦值表達(dá)式和賦值語句的區(qū)別。賦值表達(dá)式是一種表達(dá)式,它可以出現(xiàn)在任何允許表達(dá)式出現(xiàn)的地方,而賦值語句則不能。例如,下述語句是合法的。
if((x=y+5)>0)z=x;/*語句的功能是,若表達(dá)式x=y+5大于0則z=x*/下述語句是非法的。if((x=y+5;)>0)z=x;/*因為x=y+5;是語句,所以不能出現(xiàn)在表達(dá)式中*/目錄導(dǎo)航任務(wù)1菜單設(shè)計—算法與程序基本結(jié)構(gòu)任務(wù)2小寫字母轉(zhuǎn)換為大寫字母—字符輸入輸出函數(shù)思考與訓(xùn)練單元小結(jié)任務(wù)3輸出學(xué)生個人信息—格式化輸入輸出函數(shù)任務(wù)2小寫字母轉(zhuǎn)換為大寫字母—字符輸入輸出函數(shù)曉偉和明寬兩個小朋友剛剛學(xué)習(xí)了英文中的26個英文字母,為了加強(qiáng)練習(xí),曉偉寫出大寫字母,明寬寫出與之對應(yīng)的小寫字母,請編寫一個C語言程序,模擬上述過程。工作任務(wù)任務(wù)2小寫字母轉(zhuǎn)換為大寫字母—字符輸入輸出函數(shù)思路指導(dǎo)輸入:輸入的小寫字母存儲到變量ch中。處理:大寫字母和小寫字母的ASCII值相差32。例如,大寫字母A的ASCII值為65,而小寫字母a的ASCII值是97。因此,小寫字母減32變?yōu)榇髮懽帜?。輸出:ch-32對應(yīng)的字符。(一)數(shù)據(jù)的輸入和輸出相關(guān)知識輸入和輸出是以計算機(jī)主機(jī)為主體而言的。從計算機(jī)向外部輸出設(shè)備(如顯示器、打印機(jī)、磁盤等)輸出數(shù)據(jù)稱為“輸出”,從輸入設(shè)備(如鍵盤、磁盤、光盤、掃描儀等)向計算機(jī)輸入數(shù)據(jù)稱為“輸入”。在C語言中,所有的數(shù)據(jù)輸入/輸出都是由庫函數(shù)完成的,因此都是函數(shù)調(diào)用語句。(二)字符輸出函數(shù)(putchar函數(shù))putchar函數(shù)是字符輸出函數(shù),其功能是在顯示器上輸出單個字符。其一般形式為putchar(字符變量)例如:putchar('A');//輸出大寫字母Aputchar(x);//輸出字符變量X的值putchar('\n');//換行。對控制字符則執(zhí)行控制功能,不在屏幕上顯示。使用本函數(shù)前必須用文件包含命令:#include<stdio.h>(二)字符輸出函數(shù)(putchar函數(shù))例3.1輸出字符型數(shù)據(jù)—putchar()函數(shù)的應(yīng)用
#include<stdio.h>voidmain(){chara='B',b='o',c='k';putchar(a);putchar(b);putchar(b);putchar(c);putchar('\t');putchar(a);putchar(b);putchar('\n');putchar(b);putchar(c);}(三)字符輸入函數(shù)(getchar函數(shù))getchar函數(shù)的功能是從鍵盤上輸入一個字符。其一般形式為getchar();通常把輸入的字符賦予一個字符變量,構(gòu)成賦值語句。例3.2輸入一個字符—getchar函數(shù)的應(yīng)用格式#include<stdio.h>voidmain(){charc;printf("inputacharacter\n");c=getchar();putchar(c);}任務(wù)2小寫字母轉(zhuǎn)換為大寫字母—字符輸入輸出函數(shù)任務(wù)實施#include<stdio.h>voidmain(){chara;printf("請輸入一個小寫字母:");a=getchar();//通過鍵盤輸入一個小寫字母
printf("該字母對應(yīng)的大寫字母是:%c\n",a-32);}運行結(jié)果如圖3-7所示任務(wù)2小寫字母轉(zhuǎn)換為大寫字母—字符輸入輸出函數(shù)特別提示(1)getchar函數(shù)只能接受單個字符,輸入數(shù)字也按字符處理。輸入多于一個字符時,只接收第一個字符。(2)使用本函數(shù)前必須包含文件<stdio.h>。目錄導(dǎo)航任務(wù)1菜單設(shè)計—算法與程序基本結(jié)構(gòu)任務(wù)2小寫字母轉(zhuǎn)換為大寫字母—字符輸入輸出函數(shù)思考與訓(xùn)練單元小結(jié)任務(wù)3輸出學(xué)生個人信息—格式化輸入輸出函數(shù)任務(wù)3輸出學(xué)生個人信息—格式化輸入輸出函數(shù)為了方便學(xué)生管理,班主任王老師安排學(xué)習(xí)委員張雪輸出一張學(xué)生個人信息表,表的格式如下。工作任務(wù)姓名性別年齡數(shù)學(xué)英語C語言張雪女188987.567.5…………任務(wù)3輸出學(xué)生個人信息—格式化輸入輸出函數(shù)思路指導(dǎo)輸入:數(shù)據(jù)的輸入用輸入函數(shù)scanf("格式控制字符串",地址表列),年齡存儲到變量age中,數(shù)學(xué)成績存儲到變量math中,英語成績存儲到變量english中,C語言成績存儲到變量c中。輸出如下。(1)表頭的輸出用無格式的輸出函數(shù)printf("字符串");。(2)對具體內(nèi)容的輸出用帶格式的printf("格式控制字符串",輸出項表列);。(一)格式化的輸出函數(shù)printf相關(guān)知識printf函數(shù)是一個標(biāo)準(zhǔn)庫函數(shù),它的函數(shù)原型在頭文件“stdio.h”中。但作為一個特例,不要求在使用printf函數(shù)之前必須包含stdio.h文件。printf函數(shù)調(diào)用的一般形式如下。
printf("格式控制字符串",輸出項列表);1.printf函數(shù)調(diào)用的一般形式按照格式控制字符串指定的格式,將“輸出項列表”中的各輸出項輸出到標(biāo)準(zhǔn)輸出設(shè)備。2.函數(shù)功能(一)格式化的輸出函數(shù)printf(1)格式控制字符串可以包括“格式轉(zhuǎn)換說明符”,用于規(guī)定相應(yīng)輸出項內(nèi)容的輸出格式,格式控制字符串是以%開頭的字符串,在%后面跟有各種格式字符,以說明輸出數(shù)據(jù)的類型、形式、長度、小數(shù)位數(shù)等。3.有關(guān)說明格式控制字符串含義%d輸出十進(jìn)制整數(shù)%o輸出八進(jìn)制整數(shù)%x或%X輸出十六進(jìn)制整數(shù)%u輸出無符號十進(jìn)制整數(shù)%f或%e輸出實型數(shù)(用小數(shù)形式或指數(shù)形式)%c輸出單個字符%s輸出字符串%e或%E以指數(shù)形式輸出浮點數(shù)%%輸出字符%(一)格式化的輸出函數(shù)printf(2)輸出項列表。輸出項列表中給出了各個輸出項,可以是變量和表達(dá)式,輸出項之間用逗號分隔。要求格式控制字符串和各輸出項在數(shù)量和類型上一一對應(yīng)。例3.3格式控制字符串的使用voidmain(){inta=88,b=89;printf("%d,%d\n",a,b);printf("%d,%d\n",a,b);printf("%c,%c\n",a,b);printf("a=%d,b=%d",a,b);}(一)格式化的輸出函數(shù)printf例3.3中輸出了4次a,b的值,但由于格式控制字符串不同,輸出的結(jié)果也不相同。因為在第1個輸出語句格式控制字符串中,兩格式控制字符串%d之間加了一個空格(非格式字符),所以輸出的a,b值之間有一個空格。第2個printf語句格式控制字符串中加入的是非格式控制字符逗號,因此輸出的a,b值之間加了一個逗號。第3個格式控制字符串要求按字符型輸出a,b值。第4個為了提示輸出結(jié)果又增加了非格式控制字符串。(一)格式化的輸出函數(shù)printf一般情況下,每個格式說明都是以字符%開始,以轉(zhuǎn)換字符結(jié)束,在%和轉(zhuǎn)換字符之間可以有如下符號。4.格式轉(zhuǎn)換說明符(1)減號?。(2)數(shù)字0。(3)正整數(shù)m(數(shù)據(jù)寬度)。(4)英文句號。(5)正整數(shù)n(精度)。(6)長度修飾符l(字母l)。(二)數(shù)據(jù)輸入函數(shù)scanfscanf函數(shù)是一個標(biāo)準(zhǔn)庫函數(shù),它的函數(shù)原型在頭文件“stdio.h”中,與printf函數(shù)相同,C語言也允許在使用scanf函數(shù)之前不必包含stdio.h文件。scanf函數(shù)的一般形式如下。scanf("格式控制字符串",地址列表);(1)scanf函數(shù)的一般形式。其中,格式控制字符串的作用與printf函數(shù)相同,但不能顯示非格式字符串,也就是不能顯示提示字符串。地址列表中給出了各變量的地址。地址是由地址運算符“&”后跟變量名組成的。例如,&a,&b分別表示變量a和變量b的地址。這個地址就是編譯系統(tǒng)在內(nèi)存中給a,b變量分配的地址。在C語言中,使用了地址這個概念,這是與其他語言不同的。(二)數(shù)據(jù)輸入函數(shù)scanf注意在賦值表達(dá)式中給變量賦值,賦值號左邊是變量名,不能寫地址,而scanf函數(shù)在本質(zhì)上也是給變量賦值,但要求寫變量的地址,如&a。這兩者在形式上是不同的。&是一個取地址運算符,&a是一個表達(dá)式,其功能是求變量的地址。如例3.4所示,注意其中&的用法。例3.4
scanf()的格式示例#inlude<stdio.h>voidmain(){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);}(二)數(shù)據(jù)輸入函數(shù)scanf在例3.4中,由于scanf函數(shù)本身不能顯示提示串,故先用printf語句在屏幕上輸出提示,請用戶輸入a、b、c的值。執(zhí)行scanf語句時,等待用戶輸入。用戶輸入7、8、9后按下回車鍵,則把7、8、9分別賦給變量a、b、c。在scanf語句的格式串中由于沒有非格式字符在“%d%d%d”之間做輸入時的間隔,因此在輸入時要用一個以上的空格或回車鍵作為每兩個輸入數(shù)之間的間隔。例如:789或789(二)數(shù)據(jù)輸入函數(shù)scanf格式字符串的一般形式如下。
%[*][輸入數(shù)據(jù)寬度][長度]類型其中有方括號[]的項為任選項。各項的意義如下。①類型。表示輸入數(shù)據(jù)的類型,其格式控制字符串的含義如表所示。(2)格式字符串。格式控制字符串含義%d輸入十進(jìn)制整數(shù)%o輸入八進(jìn)制整數(shù)%x輸入十六進(jìn)制整數(shù)%u輸入無符號十進(jìn)制整數(shù)%f或%e輸入實型數(shù)(用小數(shù)形式或指數(shù)形式)%c輸入單個字符%s
輸入字符串(二)數(shù)據(jù)輸入函數(shù)scanf②“*”符。用于表示該輸入項讀入后不賦予相應(yīng)的變量,即跳過該輸入值,如scanf("%d%*d%d",&a,&b);。當(dāng)輸入為123時,把1賦予a,2被跳過,3賦予b。③寬度。用十進(jìn)制整數(shù)指定輸入的寬度(即字符數(shù)),如scanf("%5d",&a);。輸入12345678時,只把12345賦予變量a,其余部分被截去。又如,scanf("%4d%4d",&a,&b);。輸入12345678時,將把1234賦予a,而把5678賦予b。④長度。長度格式符為l和h,l表示輸入長整型數(shù)據(jù)(如%ld)和雙精度浮點數(shù)(如%lf),h表示輸入短整型數(shù)據(jù)。任務(wù)3輸出學(xué)生個人信息—格式化輸入輸出函數(shù)任務(wù)實施#include<stdio.h>voidmain(){intage;intmath,english,c;printf("請輸入學(xué)生基本信息:");scanf("%d",&age);scanf("%d%d%d",&math,&english,&c);printf("姓名\t性別\t年齡\t數(shù)學(xué)\t英語\tC語言\n");printf("張雪\t女\t");printf("%d\t",age);printf("%d\t%d\t%d\n",math,english,c);}圖3-8
任務(wù)運行結(jié)果(二)數(shù)據(jù)輸入函數(shù)scanf拓展與提高(1)%d。%d用于指定輸出十進(jìn)制整數(shù),對應(yīng)的輸出項內(nèi)容可以是整數(shù),也可以是字符,當(dāng)輸出內(nèi)容為字符時,輸出的將是該字符的ASCII值。常用的形式為“%d”“%md”“%ld”和“%mld”。例3.5分析以下程序main(){inta=101;longb=202;charc="a";printf("%d\n",a);printf("%4d\n",a);printf("%2d\n",a);printf("%ld\n",b);printf("%6ld\n",b);printf("%d\n",c);}(二)數(shù)據(jù)輸入函數(shù)scanf(2)%o。%o用于指定輸出八進(jìn)制整數(shù),且該整數(shù)不帶符號,即輸出的是一個無符號整數(shù),不會是負(fù)數(shù)。常用的格式有“%o”“%mo”“%lo”和“%mlo”。例3.6分析以下程序main(){inta=-1;longb=11111;printf("%d\n",a);printf("%o\n",a);printf("%4o\n",a);printf("%ld\n",b);printf("%lo\n",b);printf("%6lo\n",b);}(二)數(shù)據(jù)輸入函數(shù)scanf(3)%x。%x用于指定輸出十六進(jìn)制整數(shù),且該整數(shù)不帶符號。常用的格式有“%x”“%mx”“%lx”和“%mlx”。例3.7分析以下程序main(){inta=-1;longb=11111;printf("%d\n",a);printf("%x\n",a);printf("%6x\n",a);printf("%ld\n",b);printf("%lx\n",b);printf("%6lx\n",b);}(二)數(shù)據(jù)輸入函數(shù)scanf(4)%u。%u用于指定以十進(jìn)制形式輸出整數(shù),且該整數(shù)不帶符號,即輸出unsigned型數(shù)據(jù)。unsigned型數(shù)據(jù)也可以用“%d”“%o”或“%u”形式輸出。常用的形式為“%u”和“%mu”。例3.8分析以下程序main(){intunsigneda=65535;Intb=-2;printf("%d\n",a);printf("%u\n",a);printf("%6u\n",a);printf("%d\n",b);printf("%u\n",b);printf("%6u\n",b);}(二)數(shù)據(jù)輸入函數(shù)scanf(5)%c。%c用于輸出一個字符,對應(yīng)輸出項的內(nèi)容可以是字符,也可以是0~255的整數(shù)(ASCII值)。當(dāng)輸出項內(nèi)容是整數(shù)時,輸出的將是該整數(shù)對應(yīng)ASCII值的字符。常用的形式為“%c”和“%mc”。例3.9分析以下程序main(){inta=65;Charb="a";printf("%d\n",a);printf("%c\n",a);printf("%d\n",b);printf("%c\n",b);printf("%4c\n",b);}(二)數(shù)據(jù)輸入函數(shù)scanf(6)%s。%s用于輸出一個字符串,常用的形式為“%s”“%ms”“%-ms”“%m.ns”和“%-m.ns”。m表示輸出的字符串占m位,若字符串長度大于m,則按實際長度輸出;若字符串長度小于m,則不足位置補(bǔ)空格。n表示只取字符串左端n個字符,當(dāng)m<n時,m自動取n值,以保證n個字符的正確輸出。例3.10分析以下程序main(){printf("%s\n","Welcome");printf("%4s\n","Welcome");printf("%8s\n","Welcome");printf("%-8s\n","Welcome");printf("%5.3s\n","Welcome");printf("%-5.3s\n","Welcome");printf("%.4s\n","Welcome");printf("%2.5s\n","Welcome");}(二)數(shù)據(jù)輸入函數(shù)scanf(7)%f。%f用于以小數(shù)形式輸出實數(shù)(包括單精度數(shù)和雙精度數(shù)),常用的形式為“%f”“%m.nf”和“%-m.nf”。m.n表示輸出的數(shù)據(jù)共占m位(包括小數(shù)點所占的位數(shù)),小數(shù)點部分為n位,若數(shù)值長度小于m,則不足位置補(bǔ)空格。以“%f”格式輸出的數(shù)據(jù)若不指出寬度m和小數(shù)位數(shù)n,則整數(shù)部分全部輸出,小數(shù)部分輸出6位。值得注意的是,以“%f”格式輸出的數(shù)據(jù)并非都是有效數(shù)字。一般來說,單精度的有效數(shù)位為7,雙精度實數(shù)的有效數(shù)位為16(根據(jù)機(jī)器字長的不同而不同)。例3.11分析以下程序main(){floatf,g,a,b;doubled,e,x,y;(二)數(shù)據(jù)輸入函數(shù)scanff=111.111;g=222.222;a=1111.1111;b=2222.2222;d=1234567891.1111;e=2222222222.2222;x=123456789123.111111;y=222222222222.222222;printf("%f\n",f);printf("%f\n",f+g);printf("%8.3f\n",f);printf("%08.3f\n",f);printf("%-8.3f\n",f);printf("%0.2f\n",f);printf("%2.5f\n",f);printf("%f\n",a);printf("%f\n",b);printf("%f\n",a+b);printf("%8.4f\n",a);printf("%lf\n",d);printf("%lf\n",d+e);printf("%lf\n",x);printf("%lf\n",y);printf("%lf\n",x+y);}通過分析可以看出,單精度數(shù)據(jù)輸出只有7位有效數(shù)字,超出7位有效數(shù)字的數(shù)據(jù)不準(zhǔn)確。避免的辦法就是采用“%m.nf”格式輸出;同樣的,雙精度數(shù)據(jù)的輸出只有16位有效數(shù)字,超過16位的數(shù)據(jù)也不準(zhǔn)確。所以,用“%f”格式輸出時,如果數(shù)字位數(shù)超過規(guī)定的數(shù)字位數(shù),則輸出的最后幾位有可能不準(zhǔn)確。(二)數(shù)據(jù)輸入函數(shù)scanf(8)%e。%e用于以指數(shù)形式輸出實數(shù)(包括單精度數(shù)和雙精度數(shù)),常用的形式為“%e”“%m.ne”和“%-m.ne”。m.n表示輸出的數(shù)據(jù)共占m位,數(shù)字的數(shù)據(jù)部分(又稱尾數(shù))小數(shù)位數(shù)為n。若不指定寬度m和小數(shù)位數(shù)n,則規(guī)定給出6位小數(shù),指數(shù)部分占5位(如e+003),其中指數(shù)占3位(注:不同系統(tǒng)的規(guī)定會略有不同)。數(shù)值按標(biāo)準(zhǔn)化指數(shù)形式輸出(即小數(shù)點前必須有且只有一位非0數(shù)字)。(9)%g?!?g”格式用得較少,是用于輸出實數(shù)的,輸出時根據(jù)數(shù)值的大小,自動選擇“%f”格式或“%e”格式(選擇輸出時占輸出寬度較小的一種),且不輸出無意義的0。(二)數(shù)據(jù)輸入函數(shù)scanf3.scanf()函數(shù)的使用說明(1)scanf函數(shù)中沒有精度控制,例如,scanf("%5.2f",&a);是非法的。不能用此語句輸入小數(shù)為2位的實數(shù)。(2)scanf中要求給出變量地址,如給出變量名則會出錯。例如,scanf("%d",a);是非法的,應(yīng)改為scnaf("%d",&a);。(3)在輸入多個數(shù)值數(shù)據(jù)時,若格式控制字符串中沒有非格式字符作輸入數(shù)據(jù)之間的間隔,則可用空格、Tab或回車符作為間隔。C編譯在碰到空格、Tab、回車符或非法數(shù)據(jù)(如對“%d”輸入“12A”時,A即為非法數(shù)據(jù))時,即認(rèn)為該數(shù)據(jù)結(jié)束。2.其他說明(1)除了%x、%e、%g以外,其他格式字符必須用小寫字母。(2)可以在“格式控制字符串”內(nèi)使用“轉(zhuǎn)義字符”,如“\n”“\t”“\b”“\377”等。(二)數(shù)據(jù)輸入函數(shù)scanf(4)在輸入字符數(shù)據(jù)時,若格式控制字符串中無非格式字符,則認(rèn)為所有輸入的字符均為有效字符。例如:scanf("%c%c%c",&a,&b,&c);輸入為def則把'd'賦予a,''賦予b,'e'賦予c。只有當(dāng)輸入為def時,才能把'd'賦予a,'e'賦予b,'f'賦予c。如果在格式控制字符串中加入空格作為間隔,如scanf("%c%c%c",&a,&b,&c);,則輸入時各數(shù)據(jù)之間可加空格。(二)數(shù)據(jù)輸入函數(shù)scanf例3.12分析下列程序的運行結(jié)果voidmain(){chara,b;printf("inputcharactera,b\n");scanf("%c%c",&a,&b);printf("%c%c\n",a,b);}由于scanf函數(shù)"%c%c"中沒有空格,輸入MN,結(jié)果輸出只有M。而輸入改為MN時,可輸出MN兩字符。(二)數(shù)據(jù)輸入函數(shù)scanf例3.13
scanf()函數(shù)的輸入格式voidmain(){chara,b;printf("inputcharactera,b\n");scanf("%c%c",&a,&b);printf("\n%c%c\n",a,b);}例3.13表示scanf格式控制字符串"%c%c"之間有空格時,輸入的數(shù)據(jù)之間必須有空格間隔。(二)數(shù)據(jù)輸入函數(shù)scanf(5)如果格式控制字符串中有非格式字符,則輸入時也要輸入該非格式字符。例如,scanf("%d,%d,%d",&a,&b,&c);,其中用非格式符“,”作間隔符,故輸入時應(yīng)為5,6,7又如,scanf("a=%d,b=%d,c=%d",&a,&b,&c);,則輸入應(yīng)為a=5,b=6,c=7(二)數(shù)據(jù)輸入函數(shù)scanf例3.14輸入數(shù)據(jù)的類型與輸出數(shù)據(jù)的類型要一致的程序voidmain(){longa;printf("inputalonginteger\n");scanf("%ld",&a);printf("%ld",a);}(6)一般情況下,輸入數(shù)據(jù)的類型要與輸出數(shù)據(jù)的類型一致任務(wù)3輸出學(xué)生個人信息—格式化輸入輸出函數(shù)特別提示(1)格式控制字符串要用雙引號引起來。(2)輸入項和輸出項的個數(shù)、順序和類型要與格式控制符的個數(shù)、順序和類型嚴(yán)格一致,否則會出現(xiàn)異常。目錄導(dǎo)航任務(wù)1菜單設(shè)計—算法與程序基本結(jié)構(gòu)任務(wù)2小寫字母轉(zhuǎn)換為大寫字母—字符輸入輸出函數(shù)思考與訓(xùn)練單元小結(jié)任務(wù)3輸出學(xué)生個人信息—格式化輸入輸出函數(shù)單元小結(jié)Summary本單元首先介紹了程序和算法的基本概念,然后重點講解了C程序輸入和輸出操作是由函數(shù)printf()、putchar()、scanf()、getchar()來實現(xiàn)的。C語言格式輸入輸出的規(guī)定比較麻煩,應(yīng)用不對就得不到預(yù)期的結(jié)果,而輸入輸出又是最基本的操作,幾乎每一個程序都包括輸入輸出。不少讀者由于掌握不好而浪費了大量調(diào)試程序的時間。雖然在本單元中做了詳細(xì)的介紹,但是在學(xué)習(xí)過程中沒有必要去掌握每個細(xì)節(jié),重點掌握最常用的一些使用即可。目錄導(dǎo)航任務(wù)1菜單設(shè)計—算法與程序基本結(jié)構(gòu)任務(wù)2小寫字母轉(zhuǎn)換為大寫字母—字符輸入輸出函數(shù)思考與訓(xùn)練單元小結(jié)任務(wù)3輸出學(xué)生個人信息—格式化輸入輸出函數(shù)思考與訓(xùn)練
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 古代冷知識教學(xué)課件
- 2025年延長縣幼兒園教師招教考試備考題庫附答案解析(奪冠)
- 2026年北京北大方正軟件職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫附答案解析
- 2024年湖南工程學(xué)院應(yīng)用技術(shù)學(xué)院馬克思主義基本原理概論期末考試題含答案解析(奪冠)
- 2025年新干縣招教考試備考題庫附答案解析(奪冠)
- 2025年蘇州高博職業(yè)學(xué)院馬克思主義基本原理概論期末考試模擬題附答案解析
- 2025年漯河職業(yè)技術(shù)學(xué)院馬克思主義基本原理概論期末考試模擬題帶答案解析(必刷)
- 2024年芷江侗族自治縣幼兒園教師招教考試備考題庫含答案解析(必刷)
- 2025年清原滿族自治縣幼兒園教師招教考試備考題庫帶答案解析(必刷)
- 2025年陸河縣幼兒園教師招教考試備考題庫含答案解析(必刷)
- 2026 年初中英語《狀語從句》專項練習(xí)與答案 (100 題)
- 2026年遼寧省盤錦市高職單招語文真題及參考答案
- 農(nóng)投集團(tuán)安全生產(chǎn)制度
- 近五年貴州中考物理真題及答案2025
- 第二屆全國技能大賽江蘇省選拔賽焊接項目評分表
- 糖尿病護(hù)士年終總結(jié)
- 第20課 《美麗的小興安嶺》 三年級語文上冊同步課件(統(tǒng)編版)
- 糖尿病基礎(chǔ)知識培訓(xùn)2
- 研學(xué)旅行概論第六章
- GB/T 22176-2023二甲戊靈乳油
- 根據(jù)信用證制作商業(yè)發(fā)票、裝箱單、裝船通知
評論
0/150
提交評論