目錄
3.1 算法的組成要素
1. 算法的特徵
有窮性,確定性,有0個或多個輸入,有1個或多個輸出,有效性;
算法的組成要素=操作+結構控制。
三種基本結構=順序結構+選擇結構+循環結構
3.1.2 算法的表示方法
自然語言表示算法;流程圖表示算法,N-S流程圖表示算法,僞代碼表示算法
1. 流程圖:起止框(開始/結束)+處理框(處理步驟)+判斷框(判斷條件,一入兩出)+輸出輸入框+流程線
整個算法的結構是由上而下地將各個基本結構順序排列起來
特點:只有一個入口,不能從結構外隨意轉入結構中某點;
只有一個出口,不能從結構內某位置隨意轉出(跳出);
結構中每一部分都有機會被執行到(無死語句);
結構內部不存在死循環
2. N-S流程圖:
當型循環:當條件P成立是,反覆執行A操作,直到P條件不成立才結束。先做判斷,再決定是否執行循環體,在條件P一次都不滿足時,循環體A一次都不執行。
直到型循環:當條件P不成立時,反覆執行A操作,直到P條件成立才結束。先執行循環體,再判斷條件P,循環體至少被執行一次。
3.1.3 自頂向下、逐步細化的設計過程
自頂向下、逐步細化的設計過程,包括如下方面:
將一個複雜的問題的解法分解和細化由若干個模塊組成的層次結構;將一個模塊的功能逐步分解細化爲一系列的處理步驟,直到某種程序設計語言的語句和某種機器指令。
優點:提高設計效率;層次結構清晰。
例:在3個數中取最大數算法。
例:百錢百雞的問題
3.2 C語句概述
C語句分爲控制語句、表達式語句、複合語句
3.2.1 控制語句
9種控制語句,用於控制程序流程。
條件語句:if-else
循環語句:for、while、do-while、
結束本次循環語句:continue
終止執行switch或循環語句:break
多分支選擇語句:switch
轉向語句:goto
函數返回語句:return
3.2.2 表達式語句
最後加上一個;所組成的語句。
表達式與表達式語句的區別:
常見的語句形式:
賦值語句、函數調用語句、空語句、複合語句
3.3 數據的輸入和輸出
3.3.1 數據的輸出函數
數據的輸出函數:
格式輸出函數基本形式:
① 原樣輸出格式
printf("要輸出的字符串");
② 輸出變量的值
按格式控制字符串輸出表列的值,調用的一般形式,
printf("格式控制字符串",輸出表列);
輸出表列:輸出的變量、常量、表達式等,個數是1個到若干個;前後須匹配。
格式控制字符串:
非格式字符:原樣輸出
格式說明符:由%和轉換字符組成,如%d、%f等,將輸出的數據轉換爲指定的格式輸出。
1)%d格式字符:
① %d:整數的實際位數輸出一個整數
② %md:在m列的位置上以數據右對齊的方式輸出一個整數,m大於整數的寬度時,多餘的位數空格留在數據前面,小於整數的寬度時m不起作用
③ %-md:左對齊輸出一個整數,m大於整數的寬度時多餘位數的空格留在數據後面,m小於整數的寬度時m不起作用
④ %0md:左對齊輸出一個整數,m大於整數的寬度時多餘的位數在數據前面補0,m小於整數的寬度時m不起作用
2)%o格式字符:八進制整型數據格式
3)%x格式字符:十六進制整數型數據格式
4)%u格式字符:十進制無符號整數數據格式
5)%c格式字符:字符型數據格式
6)%s格式字符:字符串數據格式
① %s:原樣輸出
② %ms:按給定的寬度m輸出;小於m,則在左側用空格補足(右對齊);大於m則輸出全部
③ %-ms:給定寬度m輸出;小於m,則在右側用空格補足(左對齊輸出);大於m則輸出全部
④ %m.ns:在m列的位置上輸出一個字符串的前n個字符;
若m>n,則在左側用空格補足(右對齊輸出);
若m<n;則輸出n個字符;
若n大於字符串長度,則輸出整個字符串
⑤ %-m.ns:在m列的位置上輸出一個字符串的前n個字符;
若m>n,則在右側用空格補足(左對齊輸出);
若m<n,則輸出n個字符;
若n大於字符串長度,則輸出整個字符串
7)%f格式字符:實型數據(單精度和雙精度)格式
① %f:系統默認輸出,整數全部輸出,小數輸出6位;單精度7位有效數字,雙精度16位有效數字
② %m.nf:在m列的位置上輸出一個實數,保留n位小數,系統自動對數據進行四捨五入處理。
m>實數總寬度時,多餘的位數空格留在數據前面
m<實數總寬度時,m不起作用,系統正確輸出
③ %-m.nf:在m列的位置上輸出一個實數,保留n位小數,系統自動對數據進行四捨五入。
m>實數總寬度時,多餘的位數空格保留在數據後面;
m<實數總寬度時,m不起作用,系統正確輸出該數
例:
printf("%25f\n",x); 右對齊;
printf("%.2f\n",x); 兩位小數,左對齊
8)%e格式字符:實型數據指數形式格式
① %e:按規範的指數形式輸出,即小數點前1位非0數字,小數點後6位小數,指數部分佔5位,再加上小數點共13位,如1.123456e+007
② %m.ne:給定寬度m輸出,包括n位小數和5位指數;
數據長度小於指定寬度m,左側用空格補足
數據長度大於指定寬度m,實際長度輸出
③ %-m.ne:給定寬度m輸出,包括n位小數和5位指數
數據長度小於指定寬度,右側用空格補足;
數據長度大於指定寬度m,實際輸出
9)%g格式字符:以實型數形式輸出,根據數值大小自動選用%f或%e格式以來輸出寬段較小,且不輸出無意義的零
3.3.2 刷新輸出
printf()語句將輸出傳遞給一個被稱爲緩衝區的中介儲存區域,緩衝區中的內容再不斷地被傳遞給屏幕。
① 緩衝區滿
② 遇到換行符\n
③ 需要輸入的時候
3.3.3 scanf函數
用於輸入函數。按照格式參數的要求,從終端上把數據傳送到地址參數所指定的內存空間中。
scanf("格式控制參數",地址1,地址2);
1.地址參數
通過對變量名“求地址”運算得到,地址的運算符爲&,得到的是符號地址
&a、&b爲兩個符號地址
&a給出的是變量a四字節空間的首地址;&b給出的是變量b四字節空間的首地址
2.格式控制參數
scanf函數的個數參數有兩種成分:格式說明項、輸入分隔符
格式說明項:
① 格式字符與printf函數中的使用方式相同,輸入數據分爲整型、字符型、實型
② 整型與實型可再加長度修正說明符,短整型h,長整型l
③ m用以指定輸入數據的寬度
輸入分隔符:
① 根據格式字符的含義從輸入流中取得數據,當輸入流中數據類型與格式字符要求不符時,認定這一數據項結束。
② 根據格式項中指定的域寬分隔出數據項
③ 用分隔符。空格、跳空格('\t')、換行符('\n')
3. 抑制字符*:作用是在按格式說明讀入數據後不送給任何變量,即虛讀
1.scanf的停止與返回
停止情況:
格式參數中的格式項用完-正常結束;
發生格式項與輸入域不匹配時-非正常結束
2.scanf函數與輸入緩衝區
輸入數據時,實際上並不是輸入完一個數據項就被讀取給一個變量,而是在鍵入一行字符並按回車鍵之後才被輸入。先放在緩衝區中,再按scanf函數格式的要求從緩衝區中讀數據。
3.4 getchar函數與putchar函數
只對字符數據進行輸入輸出操作的函數putchar和getchar函數,該函數包含在stdio.h中。
1.字符輸出函數putchar()
一般調用格式putchar(ch);
ch爲字符型變量或整型變量
功能:將變量ch的值輸出到終端(顯示器)設備上。
2.字符輸入函數getchar()
調用格式:getchar();
該函數爲無參函數,功能:從終端(或指定輸入設備)獲取一個輸入字符。
執行getchar()函數,雖然是讀入一個字符,但並不是從鍵盤讀,而是輸入完後按回車鍵,將該行的字符輸入緩衝區中。
例:putchar(getchar()):讀入一個字符,將它輸出到終端
處理文字數據:輸入若干字符,只要輸入的字符不是#就執行指定的操作。
if((ch=getchar())!'#')
或
while((ch=getchar())!='#')
{…}