c/c++迴圈語句總結
c/c++迴圈語句
迴圈語句可以重複執行大量相同語句,真正發揮了計算機計算的優勢,在學習的過程中,迴圈程式設計給了我極大的快感和成就感。
基本的知識點:
一、三種迴圈語句
1、for迴圈:基本格式:for(初始化;條件;調整)
當迴圈條件滿足時,執行相同的語句,然後進行調整(比如i++,i–)。
2、while迴圈:基本格式:while(條件){ 迴圈體 },先判斷條件,若滿足條件,執行迴圈體,若不滿足條件,跳出迴圈。
3、 do-while迴圈:基本格式:do{ 迴圈體 }while(條件),先執行迴圈,再判斷條件,條件滿足,繼續執行迴圈體,條件不滿足,跳出迴圈。
二、迴圈巢狀
這三種迴圈語句可以互相巢狀,巢狀的目的是在不同的維度上展開程式碼。以for巢狀為例,for{for{ 迴圈體1 }迴圈體2(可無) }的意義是先把迴圈體1執行完再執行迴圈體2。千萬切記,迴圈中的語句是一條一條執行的,巢狀是從裡到外執行的,先把最裡面的迴圈執行完,再執行外迴圈。
三、迴圈輔助語句
break:跳出離它最近的迴圈。
continue:忽略下面的語句,回到迴圈開始。
四、關於迴圈的一些細節
1、在迴圈裡面定義的變數,不可以拿到迴圈外使用,因為只是區域性變數。比如for(int i;;),這裡的i不能拿出此迴圈使用。
2、變數i定義在迴圈語句中,因此i在迴圈體內不可見。
3、暴力解法容易超時。
五、open judge迴圈題目分析
1、孫老師講授的《計算概論》這門課期中考試剛剛結束,他想知道考試中取得的最高分數。因為人數比較多,他覺得這件事情交給計算機來做比較方便。你能幫孫老師解決這個問題嗎?
輸入:
輸入兩行,第一行為整數n(1 <= n < 100),表示參加這次考試的人數.第二行是這n個學生的成績,相鄰兩個數之間用單個空格隔開。所有成績均為0到100之間的整數。
輸出:
輸出一個整數,即最高的成績。
樣例輸入
5
85 78 90 99 60
樣例輸出
99
我的程式碼
#include<iostream> using namespace std; int main() { int n,t,max=0,i; cin>>n; for(i=0;i<n;i++) {cin>>t; if(t>max) max=t; } cout<<max; return 0; }
2、描述
根據引數,畫出矩形。
輸入:
輸入一行,包括四個引數:前兩個引數為整數,依次代表矩形的高和寬(高不少於3行不多於10行,寬不少於5列不多於10列);第三個引數是一個字元,表示用來畫圖的矩形符號;第四個引數為1或0,0代表空心,1代表實心。
輸出:
輸出畫出的圖形。
樣例輸入
7 7 @ 0
樣例輸出
@@@@@@@
@ @
@ @
@ @
@ @
@ @
@@@@@@@
我的程式碼
#include <iostream> using namespace std; int main() { int h,d,x,i,j; char a; while(scanf("%d %d %c %d",&h,&d,&a,&x)!=EOF)//EOF的值為-1,這個式子的意義是,執行程式,直到輸入的值為-1時結束迴圈。 { if(x==1) { for(i=1;i<=h;i++) { for(j=1;j<=d;j++){ printf("%c",a); } printf("\n"); } } if(x==0){ for(i=1;i<=h;i++){ if(i==1||i==h){ for(j=1;j<=d;j++){ cout<<a; } cout<<endl; } else{ for(j=1;j<=d;j++){ if(j==1||j==d){ cout<<a; } else{ cout<<" "; } } cout<<endl; } } } } }
3、描述
輸出7和7的倍數,還有包含7的數字。例如(17,27,37…70,71,72,73…)
輸入
一個整數N。(N不大於30000)
輸出
從小到大排列的不大於N的與7有關的數字,每行一個。
樣例輸入
20
樣例輸出
7
14
17
我的程式碼
#include<iostream>
using namespace std;
int main()
{
int a;
cin>>a;
for(int b=1;b<=a;b++){
if(b%7==0)
cout<<b<<endl;
else for(int c=b;c>=7;c/=10)
{
if(c%10==7)
{
cout<<b<<endl;
break;
}
}
}
}
4、描述
給出一些整數對,它們表示一些平面上的座標點,給定一個點,求所有那些點到該點最短距離的點。結構為:第一個整數對為所給定的點,後面的整數對為所有其他的點。
輸入
第一個整數對為所給定的點,後面的整數對為所有其他的點。
輸出
到第一個點最短距離的點
樣例輸入
9 2
1 0
1 1
0 0
1 2
2 1
樣例輸入
2 1
我的程式碼
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int main ()
{
int a,b,c,d,f=999999999,g,h;
float e;
scanf("%d%d",&a,&b);
while(cin>>c>>d)
{
e=sqrt((a-c)*(a-c)+(b-d)*(b-d));
if(f>e)
{
f=e;
g=c;
h=d;
}
}
cout<<g<<" "<<h;
}
5、
描述
一個不多於5位的正整數a,要求:1.求出它是幾位數;2.分別打出每一位數字;3.按逆序打出各位數字,例如原數為321,應輸出123。
輸入
一行,不多於5位的正整數
輸出
三行
第一行,一個整數,表示整數a的位數
第二行,正序輸出整數a的每一位,每位間一個空格
第三行,逆序輸出整數a,如果a是321,則輸出123,如果a是100,則輸出1
樣例輸入
123
樣例輸出
3
1 2 3
321
我的程式碼
#include<iostream>
#include<cmath>
using namespace std;
int main()
{int a,b=0,c,d,q,v,s=0;
cin>>a;
c=a;
d=a;
while(a!=0)
{a/=10;
++b;}
cout<<b<<endl;
for(int i=1;i<=b;i++)
{q=pow(10,b-i);
v=c/q;
c=c-v*q;
cout<<v<<" ";}
cout<<endl;
do{s=s*10+d%10;
d/=10;}
while(d!=0);
{cout<<s;}
return 0;
}