1. 程式人生 > >c/c++迴圈語句總結

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;

	}