1. 程式人生 > >【C語言】for語句

【C語言】for語句

1、迴圈語句可以讓一組語句反覆多次執行

2、for關鍵字可以用來編寫迴圈

3、for迴圈裡可以讓一個變數依次代表一組數字,然後使用一組語句處理這個變數代表的每個數字

4、這個變數叫做迴圈變數

5、採用如下格式描述迴圈變數的變化過程

for(把開始數字賦值給迴圈變數; 用邏輯表示式表示迴圈變數在變化過程中和結束數字的關係; 迴圈變數每次變化的規律)


6、如果一個問題可以採用一組數字的變化過程描述並且這組數字之間符合某種規律就可以採用for迴圈解決這個問題

7、假設有如下的for迴圈(1,2,3,4代表一句程式)

for (1;2;3) {
4
}

它會按照以下方式分組執行 [1,2][4,3,2][4,3,2]…[4,3,2]
第一組和其他組都不一樣正常情況下for迴圈一定在兩組之間結束 如果某一組最後編號為2的邏輯表示式結果為真就啟動下一組,否則結束迴圈

8、如果迴圈語句正常結束則迴圈變數一定落在指定範圍之外

for( I = 1; I <= 5; i++);正常結束的話最後I = 6

9、for迴圈有可能不執行大括號裡面的語句

10、for迴圈小括號裡的每部分都可以省略

11、如果省略小括號中間的邏輯表示式就表示邏輯表示式永遠為真,這種迴圈不能正常結束,這種迴圈叫做死迴圈

12、for迴圈小括號裡前後兩部分可以是用逗號連線的多條語句

13、C99規範裡允許在for迴圈的小括號裡臨時宣告迴圈變數這種迴圈變數只能在迴圈裡使用,迴圈結束之後就不存在了

14、可以在迴圈裡使用break;語句立刻結束迴圈的執行,一旦執行了break;語句則迴圈裡的一切語句都不再執行,包括迴圈變數也不再變化

15、使用break;語句結束迴圈後迴圈變數的數值一定在指定數字範圍內

16、如果編寫迴圈的時候不容易描述迴圈的結束條件就可以編寫一個死迴圈,然後在迴圈裡用break;語句結束它

17、可以在迴圈裡使用continue;語句直接跳到迴圈大括號的末尾,中間的語句這次迴圈就不執行了

/*
 * for語句練習
 * */
#include <stdio.h>
void exercise_1(); void exercise_2(); void exercise_3(); void exercise_4(); void exercise_5(); void exercise_6(); void exercise_7(); void exercise_8(); void exercise_9(); int main() { // exercise_1(); // exercise_2(); // exercise_3(); // exercise_4(); // exercise_5(); // exercise_6(); // exercise_7(); //? exercise_8(); exercise_9(); return 0; } /* * 5 4 3 2 1 * */ void exercise_1() { int i = 0; for( i = 1; i < 6; i++ ) { printf( "%d ",i );//在%d後面加空格,可以將空格輸出 } printf( "\n" );//在程式結束後再加\n可以分行 } /* * 543210 * 43210 * 3210 * 210 * 10 * 0 * */ void exercise_2() { int i = 0, j = 0; for( j = 5; j >= 0; j-- ) { for( i = j; i >= 0; i-- ) { printf( "%d ",i ); } printf( "\n" ); } } /* * 54321 * 5432 * 543 * 54 * 5 * */ void exercise_3() { int i = 0; for( i = 54321; i >= 5; i /= 10 ) { printf( "%d\n", i ); } } /* * 死迴圈 * 使用ctrl+c可以結束 * */ void exercise_4() { int i = 0; for( i = 1; ; i++ ) printf( "%d\n", i ); } /* * for迴圈中可以用都好進行多個變數變化 * */ void exercise_5() { int i = 0, j = 0; for( i = 1, j = 10; i <= 10, j >=0; i++, j-- ) printf( "%dX%d=%d\n", i, j, i * j ); } /* *現在有雞和兔子共40個頭 *有100只腳 *問各有幾隻 */ void exercise_6() { int i = 0, j = 0; for( i = 1; i < 40 ;i++ ) { for( j = 1; j < 40 ;j++ ) { if( 2 * i + 4 * j == 100 && i + j == 40) { printf( "雞有%d只,兔子有%d只\n", i, j ); } } } } void exercise_7() { int i = 0; for( i = 1; i <= 40; i++ ) { if( 4 * i + 2 * ( 40 - i ) == 100 ) { printf( "雞有%d只,兔子有%d只\n",40 - i, i ); break; } } } void exercise_8() { int i = 0; for( i = 1; i <= 5; i++ ) { printf("%d\n", i); if( i = 3 ) { continue; } printf("%d\n", i); } } /* *輸出和7無關的數 * */ void exercise_9() { int i = 0, j = 0; printf( "請輸入一個0-99的數字:"); scanf( "%d", &i ); printf( "和7無關的數有: \n" ); for( ; i < 100; i++ ) { if( i % 10 == 7 ) { continue; } if( i / 10 == 7 ) { continue; } if( i % 7 == 0 ) { continue; } printf( "%d ", i ); j++; if ( j == 5 ) { j = 0; printf( "\n" ); } } printf( "\n" ); }
/*
 * 多重迴圈
 * */
#include <stdio.h>
/*
 * 54321
 * 5432 
 * 543
 * 54
 * 5
 * */
void exercise_1()
{
    int i = 0, j = 0;
    for( i = 1; i <= 5; i++) { //代表行
        for( j = 5; j >= i; j--) {
            printf( "%d", j );
        }
        printf( "\n" );
    }
}
/*
 * 有3種面值的貨幣,1元,2元和5元的,組合為10的有哪些
 * */
void exercise_2()
{
    int i = 0, j = 0, z = 0;
    printf( "組成10元的可能有:\n" );
    for( i = 0; i <= 2; i++) {
        printf( "%d\n", i );
        for( j = 0; j <= 5; j++ ) { //這裡的迴圈在經過一次後,i,j,z的值已經發生了改變,下次不會從0開始,所以多重迴圈裡for裡面的第一部份的賦初值不能省略
        printf( "%d\n", j );
            for( z = 0; z <= 10; z++ ) {
                printf( "%d\n", z );
               if( 5 * i + 2 * j + z == 10 ) {
                    printf( "%d張5元 %d張2元 %d張1元\n", i, j, z );
                 }
            }
         }
    }
}
int main()
{
//    exercise_1();
    exercise_2();
    return 0;
}
/*
 * for迴圈練習
 * */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*
 * 產生7個不同的1到36的隨機數,並輸出
 * */
void exercise_1() {
    int arr[7] = {0};//?陣列非常大的時候賦初值得等很長時間
    int i = 0;
    srand( time(0) );
    printf("產生一張彩票:\n");
    for( i = 0; i < 7; i++ ) {
        arr[i] = rand() % 36 + 1;
        int j = 0;
        for( j = 0; j < i; j++ ) {//判斷是否有重複數字
            if( arr[j] == arr[i] ) {
     //           i--;
                break;
            }
        }
        if( i != j ){ //產生了重複數字的話需要將陣列下標減1,因為for迴圈是先加1後才進行大括號裡的
            i--;
        }
    }

    for( i = 0; i < 7; i++ ) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}
/*
 * 產生7個不同的1到36的隨機數,並輸出
 * 第2種判斷相同數字的方法
 */
void exercise_5() {
     int arr[7] = {0};
     int i = 0, tmp = 0, num = 0, cnt = 0;
     srand(time(0));
     do { 
         tmp = rand() % 36+1;
         for( num = 0; num <= cnt - 1; num++) {
            if( arr[num] == tmp) {//判斷是否相同
                break;
            }
         }
            if( num == cnt ) {//新數字可以使用
                arr[cnt] = tmp;
                cnt++;
            }

     }while( cnt < 7 );

     for( i = 0; i < 7; i++ ) {
         printf("%d ", arr[i]);
        }
    printf("\n");

}
/*
 * 產生7個不同的1到36的隨機數,並輸出,並判斷中了幾個數字
 */
void exercise_6() {
     int arr[7] = {0};
     int arr1[7] = {0};
     int i = 0, tmp = 0, num = 0, cnt = 0,z = 0,h = 0;
     srand(time(0));
     do { 
         tmp = rand() % 36+1;
         for( num = 0; num <= cnt - 1; num++) {
            if( arr[num] == tmp) {//判斷是否相同
                break;
            }
         }
            if( num == cnt ) {//新數字可以使用
                arr[cnt] = tmp;
                cnt++;
            }

     }while( cnt < 7 );
    printf("請輸入您購買的彩票號碼:\n");
     for( num = 0; num < 7; num++) {
        scanf("%d", &i);    
         int j;
        for( j = 0; j< num; j++) {
            if( i == arr[j] ) {
                z++;
                for( ; h < z; h++ ) {
                    arr1[h] = arr[j];
                }
            }
        }
     }
     if( z == 0 ) {
        printf("很抱歉,本次您未中獎\n");
     }
     else{
         printf("恭喜您有%d個數字中獎\n", z);
         printf("中獎號碼為:\n");
         for( h = 0; h < z; h++) {
            printf("%d\n", arr1[h]);
         }
     }
    printf("本次彩票號碼為:\n");
     for( i = 0; i < 7; i++ ) {
         printf("%d ", arr[i]);
        }
     printf("\n");
}
/*
 *有36塊磚,男人1次4塊,女人一次3塊,小孩1次2塊,正好一次搬完,每個人都搬了* *,問幾男幾女幾小孩。
 *自己寫的 
 * */
void exercise_2() {
    int i = 0, j = 0, z = 0;
    for( i = 1; i <= 36; i++ ) {
        for ( j = 1; j <= 36; j++ ) {
            for ( z = 1; z <= 36; z++ ) {
                 if( 4 * i + 3 * j + 2 * z == 36 ){
                    printf( "男人有%d個,女人有%d個,小孩有%d個\n", i, j, z );
                 }
            }
        }
    }
}
/*
 *有36塊磚,男人1次4塊,女人一次3塊,小孩1次2塊,正好一次搬完,每個人都搬了* *,問幾男幾女幾小孩。
 *老師寫的
 *運算量降低
 * */
void exercise_3() {
    int men, women, children;
    for (men = 1; men <= 36 / 4; men++)//注意這裡是從1開始的,保證了每個都有
        for (women = 1; women <= (36 - men * 4) / 3; women++)
            for(children = 1; children <= (36 - men * 4 - women * 3) / 2; children++)
                if (36 == men * 4 + women * 3 + children * 2)
                    printf ("男:%d, 女:%d, 小孩: %d\n", men, women, children);

}
/*
 * 列印1-200以內的所有質數
 * 質數是指只能被1和自身整除的數。
 * */
void exercise_4() {
    int i;
    for( i = 1; i <= 200; i++ ) { //一個一個數字判斷
        int j;
        for ( j = 2; j < i; j++ ) { //讓該數與每個數相與
            if ( i % j == 0 )
                break;
        }
        if ( j == i ) {
            printf("%d是質數\n", i); 

        }
    }
} 
int main() {
//   exercise_1();
//   exercise_2();
//   exercise_3();
//   exercise_4();
//   exercise_5();
//   exercise_6();
    return 0;
}