迴圈語句
迴圈語句可以反覆多次執行同一組語句,for關鍵字可以用來編寫迴圈;可以在for迴圈裡讓一個變數依次代表一組數字,然後使用同一組語句處理這個變數代表的每個數字。這個變數叫做迴圈變數,按照統一的規律從第一個數字開始把每個數字都計算出來並讓迴圈變數代表它,以下格式用來描述迴圈變數的變化過程。(把開始數字賦值給迴圈變數;用邏輯表示式描述迴圈變數和結束數字之間的關係;根據前一個數字計算後一個數字的規則)
for( ; ;){
}
如果一個問題的解決過程中包含一組數字的變化過程,每個數字的處理方法又類似就可以使用迴圈解決這個問題。
練習:編寫程式在螢幕上顯示以下內容;每次顯示一行,for迴圈實現
1 x 9 =9
2 x 8 =16
3 x 7=21
4 x 6 =24
5 x 5 =25
點選檢視程式碼
/*
*
*每次先是一行,螢幕上顯示以下內容
*
*1x9=9
*2x8=16
*3x7=21
*4x6=24
*5x5=25
*
*
* */
#include<stdio.h>
int main(){
int num1 = 0,tmp =10;
for(num1 = 1;num1 < 6;num1 ++){
printf("%d x %d = %d\n ",num1,(tmp-num1),num1 * (tmp-num1));
}
return 0;
}
練習:編寫程式從鍵盤得到兩個整數;把他們之間所有的奇數的和計算出來並顯示在螢幕上
點選檢視程式碼
/*
*
* 求兩個整數之間的所有奇數和顯示在螢幕上
*
* */
#include<stdio.h>
int main(){
int max = 0,min = 0,tmp = 0,num = 0,sum = 0;
printf("請輸入兩個數字\n");
scanf("%d%d",&min,&max);
if (min >= max){
tmp = min;
min = max;
max = tmp;
}
for (num = min;num <= max;num ++){
if (num & 1){
sum += num;
}
}
printf("求和結果%d\n",sum);
return 0;
}
假設有以下的for迴圈
for(1;2;3){
4
}
他按照以下方式分組執行:[1,2] [4,3,2] [4,3,2] ……[4,3,2]。第一組和其他所有組都不同,正常情況下for迴圈一定在兩組之間結束;如果某一組最後一組編號為2的邏輯表示式結果為真就啟動下一組,否則結束迴圈。如果for迴圈正常結束則迴圈結束後迴圈變數落在指定數字範圍之外,for迴圈有可能不執行大括號裡的語句,for迴圈小括號裡每條語句都可以省略,for迴圈小括號裡中間的邏輯表示式如果省略就表示邏輯表示式永遠為真,這種迴圈不能正常結束,他們叫做死迴圈
for(;;)
for迴圈裡 小括號裡前面和後面的部分可以是用逗號連線的多條語句,C99規範裡允許在for迴圈的小括號裡臨時宣告迴圈變數,這種迴圈變數只能在迴圈裡使用就,迴圈結束後就不能用了(不支援使用)。
練習:雞兔同籠;40個頭,100只腳。編寫程式計算兔子和雞各有多少隻
點選檢視程式碼
/*
*雞兔同籠
*頭=40
*腳=100
*求各有多少隻
*
* */
#include<stdio.h>
int main (){
int num = 0;
for (num = 0; num <=40;num ++){
if (4 * num + 2 * (40-num) == 100){
printf("兔子有%d只,雞有%d\n",num ,40-num);
break;
}
}
printf("num = %d\n",num);
return 0;
}
break語句
可以在迴圈裡使用break;語句立即結束迴圈的執行,一旦執行了break語句,則迴圈裡的一切語句都不再執行,包括迴圈變數也不再變化,如果迴圈採用break;語句結束則結束後迴圈變數一定在指定數字範圍之內,如果編寫迴圈的時候不知道迴圈要重複執行多少次就可以編寫一個死迴圈然後用break;語句結束它。
continue語句
可以在迴圈大括號裡使用continue;語句直接跳到大括號的末尾,中間的所有語句這次迴圈都不執行
隨機數
無法預知的數字叫隨機數;rand標準函式可以用來獲得隨機數,為了使用這個標準函式需要包含stdlib.h這個標頭檔案,srand標準函式用來設定隨機數種子,這個函式需要一個整數作為種子使用,不同的種子得到的隨機數不同,為了使用這個標準函式需要包含stdlib.h標頭檔案,任何程式只需要設定一次隨機數種子,time標準函式可以用來獲得當前時間,這個函式用一個整數表示獲得的時間;同一秒之內獲得的代表時間的整數不會變化。為了使用這個標準函式需要包含time.h標頭檔案。
練習:編寫猜數遊戲
點選檢視程式碼
/*
*
*
*猜數遊戲
*
*
*
* */
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main (){
int num = 0,guess=0;
srand(time(0));
num = rand() % 100;
while (1){
printf("請輸入猜測的數字\n");
scanf("%d",&guess);
if (guess > num){
printf("大了\n");
}
else if (guess < num){
printf("小了\n");
}
else {
printf("對了\n");
break;
}
}
return 0;
}
程式首先獲得一個0到99之間的隨機數,然後讓使用者猜這個數字,每次猜完給出相應提示(猜大了.猜小了,猜對了),直到猜對程式結束
分支和迴圈都是流程控制語句,他們可以讓程式裡的語句不在從上到下順序執行。
goto語句
goto語句也是流程控制語句,它可以把程式中任何一條語句指定成下一條語句,儘量不要使用goto語句。
練習:在螢幕上顯示以下五行內容
54321
5432
543
54
5
每次只能顯示一個個位數
點選檢視程式碼
/*
*
*54321
*5432
*543
*54
*5
*每次顯示一個個位數
*
* */
#include<stdio.h>
int main (){
int num = 0,num1 = 0;
for (num = 1;num <= 5;num ++){
for (num1 = 5;num1 >= num;num1 --){
printf("%d",num1);
}
printf("\n");
}
return 0;
}
多重迴圈
如果一個問題的解決過程中包含多組數字的變化過程並且他們的變化過程互相關聯就可以採用多重迴圈解決,多重迴圈裡外部迴圈的迴圈變數負責代表變化慢的數字,內部迴圈的迴圈變數負責代表變化快的數字。
練習:假設一種貨幣包含三種面值,分別是1元,2元,和5元
編寫程式找到10元的所有可能的組合並都顯示在螢幕上
點選檢視程式碼
/*
*
*貨幣組合顯示
*
*
* */
#include<stdio.h>
int main (){
int num = 0, num1 = 0;
for (num = 0;num <= 2;num ++){
for (num1 = 0;num1 <= 5;num1 ++){
if (5 * num + 2 * num1 <= 10){
printf("5元有%d張,2元有%d張,1元有%d張\n",num,num1,10 - 5 * num -2 *num1);
}
}
}
return 0;
}
while關鍵字
while關鍵字也可以用來編寫迴圈,不容易用for關鍵字實現的迴圈就可以考慮用while關鍵字實現,while迴圈格式如下
while (邏輯表示式){
反覆執行的語句
}
這個結構表示反覆執行大括號裡面的語句直到邏輯表示式結果為假,如果while迴圈的邏輯表示式永遠為真就成為了死迴圈,while迴圈裡也可以使用break;和continue;語句;while迴圈會交替執行邏輯表示式的計算和大括號裡面的語句,while迴圈第一步首先計算邏輯表示式的結果,如果這個時候邏輯表示式結果假就直接結束,while迴圈有可能不執行大括號裡面的語句。
do...while
do...while格式也可以用來編寫迴圈,do...while迴圈格式如下
do {
反覆執行的語句
} while (邏輯表示式);
do...while迴圈小括號後面必須要用分號結束,do...while迴圈也是交替執行邏輯表示式的計算和大括號裡面的語句,do...while迴圈首先執行大括號裡的語句,do...while迴圈可以保證大括號裡裡面的語句至少執行一次。
練習:編寫程式從鍵盤得到兩個非負整數;計算他們的最大公約數並把結果顯示在螢幕上。