語言程序設計_第1頁
語言程序設計_第2頁
語言程序設計_第3頁
語言程序設計_第4頁
語言程序設計_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C第四章

語句和控制流目錄4.1C語句概述4.2結構化程序設計4.3程序的三種基本結構4.4簡單的輸入輸出語句4.5順序結構程序設計舉例4.1C語句概述一個C程序可以由多個源程序文件構成。所有這些源程序文件經(jīng)過分別編譯后形成各自的目標文件,經(jīng)連接程序LINK后形成一個EXE文件一個源程序文件由若干函數(shù)和“預編譯命令”構成函數(shù)包括數(shù)據(jù)定義部分(變量定義)和執(zhí)行部分,執(zhí)行部分是C語言語句,完成對數(shù)據(jù)的操作說明C語句的分類C語句有以下五類:1、控制語句,完成程序流程控制if()~else~條件語句for()~循環(huán)語句while()~循環(huán)語句do~while()循環(huán)語句continue結束本次循環(huán)語句break中止switch或循環(huán)語句switch多分支選擇語句goto轉向語句return從函數(shù)返回語句()表示條件,~表示內(nèi)嵌的語句。2、函數(shù)調用語句 例:printf("ThisisaCprogram.");

/*該語句調用函數(shù)printf()*/C語句的分類3、表達式語句:在表達式后面加分號構成 例:

a=3 /*后面無分號,是表達式*/ a=3; /*后面有分號,是語句*/ i++; /*語句*/ x+y; /*語句*/C語句的分類4、空語句:僅包含一個分號的語句 例:;5、復合語句:由大括號{}括起來的語句序列 例:

{

z=x+y;

t=z/100;

printf("%f",t); }

結構化程序設計一詞,首先由荷蘭人EdsgerwDijkstra提出有關數(shù)學理論,則通過美國人CorradoBohrm及意大利人Jaconipi證明了任何程序均可以用簡單的邏輯結構來表示任何邏輯線路,不管它如何復雜,均可由AND、OR、NOT三種邏輯所構成4.2結構化程序設計設計思路:1、自頂向下、逐步求精;2、程序結構是按功能劃分若干個基本模塊;3、各模塊之間的關系盡可能的簡單,在功能上相對獨立;4、每一模塊內(nèi)部均是由順序、選擇和循環(huán)三種基本結構組成;5、模塊化的實現(xiàn)方法是使用子程序。面向過程(結構化)的程序設計方法程序子程序1子程序2子程序3子程序4結構化程序設計示意圖程序按功能模塊劃分為若干基本模塊(子過程),每個子過程具有一定的功能,這些過程通過參數(shù)傳遞數(shù)據(jù)。數(shù)據(jù)和過程是分離為相對獨立的實體。如下圖:過程1過程2過程3數(shù)據(jù)1數(shù)據(jù)2數(shù)據(jù)3數(shù)據(jù)4面向過程的程序設計認為,每一個程序都完成一些特定的功能。每一功能的實現(xiàn)是通過對數(shù)據(jù)進行一系列的加工而實現(xiàn)的。因而程序設計包括組織數(shù)據(jù)---設計數(shù)據(jù)結構,以及設計對數(shù)據(jù)結構進行加工的過程---設計算法兩個部分。即:

程序=數(shù)據(jù)結構+算法統(tǒng)一使用三種基本邏輯結構(順序、IF_THEN、WHILE_DO等)故只有一個出口,邏輯極為清楚易于除錯及后續(xù)修改維護理論上可以不用GOTO使用縮進方式編寫程序,故易于了解與閱讀,可減少錯誤可配合自頂向下(TOP—DOWN)程序開發(fā)方法提高程序設計者的生產(chǎn)力結構化程序的優(yōu)點結構化程序設計方法:在程序設計中,使用結構清晰、便于閱讀的程序結構。有三種程序的基本結構:1、順序結構。4.3程序的三種基本結構2、選擇結構:根據(jù)條件p選擇執(zhí)行程序的某部分,但無論選擇哪部分,程序均將匯集到同一個出口。程序的三種基本結構3、循環(huán)結構:兩種。(1)當型循環(huán)結構。當條件p成立(“真”)時,反復執(zhí)行A操作,直到p為“假”時才停止循環(huán)。先判斷條件,若條件滿足,則執(zhí)行A。在第一次判別條件時,若條件不滿足,則A一次也不執(zhí)行。程序的三種基本結構當型循環(huán)結構程序的三種基本結構(2)直到型循環(huán)結構。先執(zhí)行A操作,再判別條件p是否為“假”,若為“假”,再執(zhí)行A,如此反復,直到p為“真”為止。先執(zhí)行A再判條件,若條件滿足再執(zhí)行AA至少被執(zhí)行一次。選擇結構可以派生出“多分支選擇結構”:根據(jù)k的值(k1、k2、...、kn)不同而執(zhí)行A1、A2、...、An之一。程序的三種基本結構三種基本結構可以處理任何復雜的問題。例如,下圖的程序結構可以分解為順序結構(A和B)及當型循環(huán)結構(B)。程序的三種基本結構輸入輸出的基本概念輸入:從外部向輸入設備輸入數(shù)據(jù)輸出:從計算機向外部輸出設備輸出數(shù)據(jù)4.4簡單的輸入輸出語句

計算機

顯示屏打印機磁盤光盤繪圖儀鍵盤鼠標磁盤光盤掃描儀數(shù)碼相機C語言本身并不提供輸入和輸出語句,而是由開發(fā)系統(tǒng)提供的函數(shù)來完成輸入和輸出操作。在C的標準函數(shù)庫中(stdio.h)提供了一些輸入輸出函數(shù),例如,printf函數(shù)和scanf函數(shù)。C提供的函數(shù)以庫的形式存放在系統(tǒng)中,它們不是C語言文本中的組成部分。因此各函數(shù)的功能和名字,在各種不同的計算機系統(tǒng)中有所不同。不過,有些通用的函數(shù)(如printf和scanf等),各種計算機系統(tǒng)都提供,成為各種計算機系統(tǒng)的標準函數(shù)(標準輸入輸出庫stdio.h的一部分)。在程序編譯連接時,用戶程序與標準文件相連,所以在程序中可以直接使用printf和scanf函數(shù)。輸入輸出函數(shù)的原型(函數(shù)名、返回值類型、形式參數(shù))在文件stdio.h中定義,因此,使用輸入輸出函數(shù)時,應在源程序的開頭使用如下語句:

#include<stdio.h>

或 #include"stdio.h“#include是一個預編譯命令。stdio.h放在程序的開頭,因此稱為“頭文件”。最常用的頭文件:

stdio.h 定義輸入輸出函數(shù)

string.h 定義字符串操作函數(shù)

math.h 定義sin、cos等數(shù)學函數(shù)作用:向終端輸出一個字符用法:putchar(c);

/*c是字符變量或整型變量*/[例4.1] #include"stdio.h" main() { chara,b,c;

a='B';b='O';c='Y';

putchar(a);putchar(b);putchar(c); }

4.4.1putchar()函數(shù)程序輸出:BOY注意:若沒有#include“stdio.h”,出現(xiàn)錯誤信息LinkerError:Undefinedsymbol'_putchar'inmoduleE4_1.C

(E4_1.C是程序文件名)表示putchar符號(函數(shù)名前加下劃線)未定義,因為開發(fā)系統(tǒng)不知道putchar()的原型。程序中有了#include"stdio.h"后,開發(fā)系統(tǒng)把程序中出現(xiàn)的putchar()與stdio.h中的定義進行比較,它們是相同的,從而開發(fā)系統(tǒng)知道了putchar()的定義(原型)。

也可以輸出控制字符如putchar(’\n’)輸出一個換行符如果將例4.1程序最后一行改為putchar(a);putchar(‘\n’);putchar(b);putchar(’\n‘);putchar(c);則輸出結果為:

BOY

putchar()函數(shù)應用也可以輸出其它轉義字符,如:putchar('\101');

輸出字符'A'(八進制101=65=0x41)putchar('\'');

輸出單引號'putchar('\015');

輸出回車(八進制015=13=0x0D)putchar()函數(shù)應用作用

從外部設備輸入一個字符一般形式

intgetchar()無參數(shù),函數(shù)的值就是從輸入設備得到的字符[例4.2]#include"stdio.h"main(){charc;c=getchar();putchar(c);}4.4.2getchar()函數(shù)運行時,若從鍵盤輸入字符'a',屏幕顯示為:a↙a作用:格式化輸出任意數(shù)據(jù)列表

printf()的一般格式

printf(格式控制,輸出列表);例:

printf("i=%d,f=%f\n",i,f);

4.4.3printf()函數(shù)格式說明輸出表列原樣輸出的普通字符printf()是函數(shù),“格式控制”和“輸出列表”是其參數(shù)??梢员硎緸椋簆rintf(參數(shù)1,參數(shù)2,參數(shù)3,....,參數(shù)n);其中“參數(shù)1”表示“格式控制”;其余參數(shù)表示“輸出列表”。1、d格式符:按十進制格式輸出 用來輸出十進制整數(shù)(1)%d按整型數(shù)據(jù)的實際長度輸出(2)%mdm為指定的輸出字段的寬度。如果數(shù)據(jù)的位數(shù)小于m,則左端補以空格,若大于m,則按實際位數(shù)輸出,如

printf(“%4d,%4d”,a,b) 若a=123,b=12345, 則輸出結果為:□123,12345(□表示空格)

d格式字符

(3)%ld,輸出長整型數(shù)據(jù)。如

longa=135790;printf(”%ld”,a);如果用%d輸出,就會發(fā)生錯誤,對long型數(shù)據(jù)應當用%ld格式輸出。對長整型數(shù)據(jù)也可以指定字段寬度,如將上面printf函數(shù)中的“%ld”改為“%8ld”則輸出為

□□1357908列一個int型數(shù)據(jù)可以用%d或%ld格式輸出。d格式字符注:%后面的m(位數(shù)控制)、0(位數(shù)不足補0)對于其他格式符也適用。d格式字符%d輸出數(shù)字長度為變量數(shù)值的實際長度%md輸出m位(不足補空格,大于m位時按實際長度輸出)%ld%mldl(小寫字母L)表示輸出“長整型”數(shù)據(jù)%0md%0mld0(數(shù)字0)表示位數(shù)不足m時補0例:inti=123;longj=123456;printf("%d□%5d□%05d,□%ld□%8ld□ %08ld",i,i,i,j,j,j);輸出結果123□□□123□00123,□123456□□□123456□00123456d格式字符2、o(字母)格式符:按八進制格式輸出。(不會出現(xiàn)負數(shù)格式)

%o

%mo%lo%mlo3、x格式符:按十六進制格式輸出。(不會出現(xiàn)負數(shù)格式)

%x

%mx%lx%mlx4、u格式符:用于輸出unsigned類型數(shù)據(jù)。

%u

%mu%lu%mluo、x、u格式字符[例4.3]main(){unsignedinta=65535;intb=-2;printf("a=%d,%o,%x,%u\n",a,a,a,a);printf(“b=%d,%o,%x,%u\n",b,b,b,b);}

輸出結果

a=-1,177777,ffff,65535 b=-2,177776,fffe,65534格式字符應用5、c格式符:以字符形式輸出。例:

charc; printf("%c",c);一個整數(shù),若其值在0~255范圍內(nèi),也可以用字符形式輸出,在輸出前,將該整數(shù)轉換為對應的ASCII字符。反之,一個字符數(shù)據(jù)也可以用整數(shù)形式輸出。

c格式字符[例4.4] main() { charc='a';inti=97; printf("%c,%d\n",c,c);

printf("%c,%d\n",i,i); }

運行結果為:

a,97

a,97c格式字符6、s格式符:以字符串格式輸出s格式字符%s例、printf("%s","CHINA");%msm指定寬度(不足時左補空格,大于時按實際寬度輸出)%-ms左對齊,不足m時右補空格%m.ns輸出占m個字符位置,其中字符數(shù)最多n個,左補空格%-m.ns同上,右補空格7、f格式符:按實數(shù)格式輸出f格式字符%f按實數(shù)格式輸出,整數(shù)部分按實際位數(shù)輸出,6位小數(shù)%m.nf總位數(shù)m(含小數(shù)點),其中n位小數(shù)%-m.nf同上,左對齊[例4.5] main() { floatx,y; x=111111.111;y=222222.222; printf("%f",x+y); }程序輸出:

333333.328152

(實數(shù)運算中誤差不可避免)f格式字符[例4.6]main(){doublex,y;doublex2,y2;x=1111111111111.111111111;y=2222222222222.222222222;x2=1111111111111.111;y2=2222222222222.222;printf("%f%f",x+y,x2+y2);/*13位整數(shù),9位小數(shù)*/}程序輸出:3333333333333.3330103333333333333.333010f格式字符從[例4.5]和[例4.6]可以看出:(1)實數(shù)運算中誤差不可避免。(2)double比float精度高。(3)float實數(shù)(單精度)的有效位數(shù)是7位,double實數(shù)(雙精度)的有效位數(shù)是16位,超過有效位數(shù)的輸出和輸入均無意義。f格式字符[例4.7]main(){floatf=123.456;printf("%f□□%10f□□%10.2f□□%.2f□□%-10.2f",f,f,f,f,f);}輸出結果:123.455994□□123.455994□□□□□□123.46□□123.46□□123.46□□□□8、e格式符:以指數(shù)形式輸出實數(shù)。e格式字符%e輸出13位,其中:1位整數(shù),1位小數(shù)點,6位小數(shù),5位指數(shù)(含字符e和指數(shù)的符號)%m.ne%-m.ne9、g格式符:根據(jù)數(shù)值大小,自動選擇f或e格式輸出。輸出占寬度較小的一種不輸出無意義的零g格式字符以上介紹了9種格式符,歸納如表格式字符說明

d以帶符號的十進制形式輸出整數(shù)(正數(shù)不輸出符號)。

o以8進制無符號形式輸出整數(shù)(不輸出前導符0)。

x以16進制無符號形式輸出整數(shù)(不輸出前導符0x)。

u以無符號10進制形式輸出整數(shù)

c以字符形式輸出,只輸出一個字符。

s輸出字符串。

f以小數(shù)形式輸出單、雙精度數(shù),隱含輸出6位小數(shù)。

e以標準指數(shù)形式輸出單、雙精度數(shù),數(shù)字部分小數(shù)位數(shù)為6位。

g選用%f或%e格式中輸出寬度較短的一種格式,不輸出無意義的0。4.4.4scanf()函數(shù)作用:按規(guī)定格式輸入數(shù)據(jù)

scanf()的一般格式

intscanf(格式控制,地址列表);"地址列表"是輸入信息存放地址的列表,一般是變量地址。返回值等于成功輸入的項數(shù)

scanf()函數(shù)[例4.8] #include"stdio.h" main() { inta,b,c;

scanf("%d%d%d",&a,&b,&c);

printf("%d,%d,%d\n",a,b,c); }

運行時按如下方式輸入三個值:3□4□5↙(輸入a,b,c的值)3,4,5(printf輸出的a,b,c的值)

&a、&b、&c中的&是地址運算符,分別獲得這三個變量的內(nèi)存地址。

"%d%d%d"是按十進值格式輸入三個數(shù)值。輸入時,在兩個數(shù)據(jù)之間可以用一個或多個空格、tab鍵、回車鍵分隔。格式字符說明d用于輸入十進制數(shù)o(字母)用于輸入八進制數(shù)(無前導0)x用于輸入十六進制數(shù)(無前導0x)c用于輸入單個字符s輸入字符串,以非空字符開始,遇第一個空白字符結束f用于輸入實數(shù)(小數(shù)或指數(shù)均可)e,E,g,G與f相同(e可與f,g互換)格式的附加說明符字符說明l(字母)用于長整型數(shù)(%ld、%lo、%lx)或double型實數(shù)(%lf、%le)h用于短整型數(shù)(%hd、%ho、%hx)域寬指定輸入所占列寬(一個正整數(shù))*表示對應輸入量不賦給一個變量說明:1、scanf()中不使用%u說明符。對unsigned型數(shù)據(jù),以%d、%o、%x格式輸入。2、可以指定輸入數(shù)據(jù)的列數(shù),系統(tǒng)自動按它截取所需數(shù)據(jù)。例、

scanf("%3d%3d",&a,&b);

輸入123456↙

系統(tǒng)自動將123賦給a,456賦給b。說明:3、*格式用于跳過一個數(shù)據(jù)域,例、

scanf("%2d□%*3d□%2d",&a,&b);

輸入:12□345□67↙ 12→a,345被跳過,67→b。 *主要用于利用現(xiàn)有數(shù)據(jù)時,跳過某些數(shù)據(jù)項4、輸入實數(shù)不能規(guī)定精度,如、

scanf(“%7.2f”,&a);錯誤使用scanf()函數(shù)的注意事項1.sacnf()中的變量必須使用地址。

inta,b; scanf("%d,%d",a,b);錯誤

scanf("%d,%d",&a,&b);2.scanf()的“格式控制中”,可以使用其它字符,但在輸入時必須輸入這些相同的字符。例、scanf("%d,%d",&a,&b);

輸入:3,4↙

例、

scanf("%d□□%d",&a,&b);

輸入:3□□4↙(兩個或以上空格)使用scanf()函數(shù)的注意事項3.在用"%c"輸入時,空格和“轉義字符”作為有效字符。例、 scanf("%c%c%c",&c1,&c2,&c3); 輸入:a□b□c↙ 結果:a→c1,□→c2,b→c3(其余被丟棄)4.輸入數(shù)據(jù)時,遇以下情況結束一個數(shù)據(jù)的輸入:(不是結束該scanf函數(shù),scanf函數(shù)僅在每一個數(shù)據(jù)域均有數(shù)據(jù),并按回車后結束)。 ①遇空格、“回車”、“跳格”鍵。 ②遇寬度結束。 ③遇非法輸入。#include<stdio.h>main(){ inta,b; printf("Pleaseinputaandb:"); scanf("%2d%*2d%2d",&a,&b); printf("a=%d,b=%d,a+b=%d\n",a,b,a+b);}Pleaseinputaandb:a=12,b=56,a+b=68123456↙[例4.9]#include<stdio.h>main(){ inta,b; printf("Pleaseinputaandb:"); scanf("%2d%*2d%2d",&a,&b); printf("a=%d,b=%d,a+b=%d\n",a,b,a+b);}Pleaseinputaandb:a=12,b=5,a+b=1712345a↙[例4.9]#include<stdio.h>main(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);}問題1:當要求程序輸出結果為

a=12,b=34時,用戶應該如何輸入數(shù)據(jù)?1234↙[例4.10]—格式控制#include<stdio.h>main(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);}問題2:當限定用戶輸入數(shù)據(jù)以逗號為分隔符,即輸入數(shù)據(jù)格式為:12,34↙時,應修改程序中的哪條語句?怎樣修改?scanf("%d,%d",&a,&b);

[例4.10]—格式控制#include<stdio.h>main(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);}問題3:語句scanf("%d%d",&a,&b);修改為scanf("a=%d,b=%d",&a,&b);時,用戶應該如何輸入數(shù)據(jù)?a=12,b=34↙[例4.10]—格式控制#include<stdio.h>main(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);}問題4:限定用戶輸入數(shù)據(jù)為以下格式為

1234↙

同時要求程序輸出結果為a=12,b=34scanf("%2d%2d",&a,&b);[例4.10]—格式控制#include<stdio.h>main(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);}

問題5:限定用戶輸入數(shù)據(jù)為以下格式為12↙34↙

同時要求程序輸出結果為a="12",b="34"scanf("%d%d",&a,&b);printf("a=\"%d\",b=\"%d\"\n",a,b);[例4.10]—格式控制#include<stdio.h>main(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);}問題6:設計程序使得用戶可以以任意字符(回車、空格、制表符、逗號、其它)作為分隔符進行數(shù)據(jù)的輸入scanf("%d%*c%d",&a,&b);

[例4.10]—格式控制#include<stdio.h>main(){ intdata1,data2,sum; charop;

printf("Pleaseentertheexpression data1+data2\n"); scanf("%d%c%d",&data1,&op,&data2); printf("%d%c%d=%d\n",data1,op,data2,data1+data2);}Pleaseentertheexpressiondata1+data2第1次測試12+3↙123129=3141[例4.11]—C格式應用#include<stdio.h>main(){ intdata1,data2,sum; charop;

printf("Pleaseentertheexpression data1+data2\n"); scanf("%d%c%d",&data1,&op,&data2); printf("%d%c%d=%d\n",data1,op,data2,data1+data2);}Pleaseentertheexpressiondata1+data2

第2次測試123↙123=5[例4.11]—C格式應用#include<stdio.h>main(){ intdata1,data2,sum; charop;

printf("Pleaseentertheexpression data1+data2\n"); scanf("%d%c%d",&data1,&op,&data2); printf("%d%c%d=%d\n",data1,op,data2,data1+data2);}Pleaseentertheexpressiondata1+data2

第3次測試12+3↙12+3=15[例4.11]—C格式應用#include<stdio.h>main(){inta;charb;floatc;printf("Pleaseinputaninteger:");scanf("%d",&a);printf("integer:%d\n",a);printf("Pleaseinputacharacter:");scanf("%c",&b);printf("character:%c\n",b);printf("Pleaseinputafloatnumber:");scanf("%f",&c);printf("float:%f\n",c); }Pleaseinputaninteger:希望得到的運行結果12↙Pleaseinputancharacter

:a↙Pleaseinputafloatnumber:3.5↙integer:12character

:afloat:3.500000[例4.11]—C格式應用#include<stdio.h>main(){inta;charb;floatc;printf("Pleaseinputaninteger:");scanf("%d",&a);printf("integer:%d\n",a);printf("Pleaseinputacharacter:");scanf("%c",&b);printf("character:%c\n",b);printf("Pleaseinputafloatnumber:");scanf("%f",&c);printf("float:%f\n",c); }Pleaseinputaninteger:結果不對!12↙Pleaseinputancharacter

:character:Pleaseinputafloatnumber:3.5↙integer:12float:3.500000[例4.11]—C格式應用#include<stdio.h>main(){inta;charb;floatc;printf("Pleaseinputaninteger:");scanf("%d",&a);printf("integer:%d\n",a);printf("Pleaseinputacharacter:");scanf("%1s",&b);printf("character:%c\n",b);printf("Pleaseinputafloatnumber:");scanf("%f",&c);printf("float:%f\n",c); }Ple

溫馨提示

  • 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

提交評論