第六章迴圈控制結構
一、知識
1.條件控制的迴圈(特別地:標誌變數控制的迴圈)
計數控制的迴圈
2.用於結構化程式設計的三種基本結構
①順序結構 ②選擇結構 ③迴圈結構
其中迴圈結構分為當型迴圈結構和直到型迴圈結構
3.for語句:
更適合於計數控制的迴圈
*需要注意兩個分隔符";"不可缺少
for( ; ; )後加上分號,起延時的作用
逗號表示式:
迴圈變數可以超過乙個eg. for(i=1,j=n;i=j;i++,j- -)
4.while語句:
更適合於迴圈次數未知、條件控制的迴圈
*注意while( )後加上分號可導致死迴圈
while中的計數變數控制要注意是
i++還是++i;
特別注意需要用while解決的問題很多需要反著找
(逆向思維
)5.do-while語句:直到型迴圈
在迴圈底部進行迴圈條件測試,迴圈至少執行一次。(這說明在第一次判斷為假的情況下do-while與while不等價)
適合於迴圈次數未知、條件控制的迴圈
6.區域性變數與復合語句
區域性變數在迴圈語句中定義的變數,只能在迴圈語句中使用,一般在迴圈內賦值或緊靠迴圈
賦值迴圈中常用復合語句
來執行多個工作7.
一些新學的函式:
setw
():cout《在cpp的中//
其中的setw(x)的作用是控制輸出的a的寬度為x
//puts
():就是
printf(「...\n」) 中f
loor()/ceil()
:向下取整和向上取整
中exit
(code
):結束程式:
當code的值為0時,表示程式正常退出;當code的值為非0值時,表示程式出現某種錯誤後退出
/在cpp的
中rand( )
:偽隨機數
生成(具體為啥是假的我現在都沒搞懂233)
,產生[0,32767]之間的隨機數
在cpp的
中產生[0,b-1]之間的隨機數 magic=rand( )%b;
產生[a,a+b-1]之間的隨機數 magic=rand( )%b+a;
真正隨機需要設個種子需要加一條srand
(a);a
即是seed,任何數都可以
8.多組測試資料
有效輸入重複,無效輸入退出
while(scanf("%d",&x)!=eof)
while(scanf("%d",&x)!=1)//注意這裡是不等於輸入的變數個數//
while(cin>>x)
上述的三條語句中內涵了輸入語句,不需要在迴圈體中再寫入
9.流程的轉移控制
①goto語句:無條件轉移到標號
(label)
所標識的語句處去執行
1 label
命名同變數名2
goto
一般和if聯用3沒有特殊情況禁用
②break語句:用於退出switch或一層迴圈結構
(連跳可用goto)
③continue語句:用於結束本次迴圈、繼續執行下一次循
環10.標誌變數控制的迴圈eg.
bool find=0;
for(
i=1;!find;
i++)
//找到了//}二、
應用累加
累乘問題
/找最大最小
篩選同類/特殊資料並進行一定操作(eg.求
乙個整數含3的個數
)迴圈結構是解決遞迴
,遞推問題的主要手段之一
(特別是需要暴力的時候
)
fzu Problem 2129 子串行個數
accept 107 submit 334 time limit 2000 msec memory limit 32768 kb problem description 子串行的定義 對於乙個序列a a 1 a 2 a n 則非空序列a a p1 a p2 a pm 為a的乙個子串行,其中1 p1例...
FZU 2129 子串行個數
給乙個序列,裡面可能有相同元素,問能組成多少不同子串行。dp。一直想用dp i 表示到序列a1 ai的答案,一直想不出來,其實有更好的做法。我們可以用dp i 表示最後乙個元素為ai的子串行有多少,sum i 表示dp 1 dp i 的和。狀態轉移見 include include include ...
HZNUOJ2129這是壓軸題
給定兩個數a,b,輸出a b 有t組輸入 對於每組輸入有兩個非負整數a,b 10 210 對於每組資料輸出a b input copy 2 1 1 2 2 output copy 2 4注意此題的資料範圍,所以不可以用int 或者long long int 直接相加 此題要運用到字串來完成相加 將各...