中國大學MOOC《程序設計入門-C語言》學習(三):判斷與循環

判斷

問題描述:給定兩個時間,計算其時間差,輸出形式爲x小時y分。

代碼

#include <stdio.h>

int main()
{
	int hour1, minute1;
	int hour2, minute2;
	//輸入兩個時間
	scanf("%d %d", &hour1, &minute1);
	scanf("%d %d", &hour2, &minute2);
	//計算時間差
	int t1 = hour1 * 60 + minute1;
	int t2 = hour2 * 60 + minute2;
	int t = t2 - t1;
	
	printf("時間差是%d小時%d分。\n", t/60, t%60); 
	return 0;
}

這裏考慮到會有從小時位借位的情況,因此:

  • hour1*60+minute1–>轉換爲分鐘爲單位;
  • t/60–>小時部分;t%60–>分鐘部分。

我們可以在這裏用if語句判斷是否需要借位,改動後的代碼爲:

#include <stdio.h>

int main()
{
	int hour1, minute1;
	int hour2, minute2;
	//輸入兩個時間
	scanf("%d %d", &hour1, &minute1);
	scanf("%d %d", &hour2, &minute2);
	//計算時間差
	int ih = hour2 - hour1;
	int im = minute2 - minute1;
	if (im < 0){
		im += 60;
		ih --;
	}
	
	printf("時間差是%d小時%d分。\n", ih, im); 
	return 0;
}

Tips:

  • else總是與最近的那個if匹配;
  • 在if或else後面總是用{};
  • 即使只有一條語句的時候;

循環

問題描述:給定一個任意位數的整數,數出它的位數。

代碼

#include <stdio.h>

int main()
{
	//輸入一個正整數 
	int x;
	int n = 0;
	scanf("%d", &x);
	//數位數 
	n ++;
	x /= 10;
	while(x > 0){
		n ++;
		x /= 10;
	}
	
	printf("%d\n", n); 
	return 0;
}

while和do_while

我們發現n ++;x /= 10;這一段代碼在循環前後重複出現,而循環有while、do_while和for三種。其中while和do_while的區別爲:

  • while先做判斷再做循環體內的內容,循環次數可以爲0;
  • do_while先做循環再做判斷,循環次數至少爲1。

這個例子裏無論循環條件成立與否都要先執行一次,因此應該用do_while循環。
改動後的代碼爲:

#include <stdio.h>

int main()
{
	//輸入一個正整數 
	int x;
	int n = 0;
	scanf("%d", &x);
	//數位數 
	do{
		n ++;
		x /= 10;
	}while(x > 0);
	
	printf("%d\n", n); 
	return 0;
}

for語句

for語句一般在循環次數已知的情況下使用,形式爲for(count=10;count>0;count --),可以讀爲“對於一開始的count=10,當count>0時,重複做循環體,每一輪循環在做完循環體內語句後,使得count --。”
下面舉例說明:
問題描述:給定一個整數n,計算得到該數的階乘n!。

while語句的代碼

#include <stdio.h>

int main()
{
	//輸入一個正整數 
	int n;
	scanf("%d", &n);
	int fact = 1;
	//計算階乘 
	int i = 1;
	while(i <= n){
		fact *= i;
		i++; 
	}
	
	printf("%d!=%d\n", n,fact); 
	return 0;
}

for語句的代碼


#include <stdio.h>

int main()
{
	//輸入一個正整數 
	int n;
	scanf("%d", &n);
	int fact = 1;
	//計算階乘 
	int i = 1;
	for(i=1;i <= n;i++){
		fact *= i;
	}
	
	printf("%d!=%d\n", n,fact); 
	return 0;
}

從上面的例子可以看出,while語句和for語句是可以相互替換的,一般在循環次數已知的情況下用for語句,循環次數未知的情況下用while語句。在本例子裏,循環次數已知,爲n次,因此使用for語句要好一些。

Tips for loops:

  • 如果有固定次數,用for;
  • 如果必須執行一次,用do_while;
  • 其他情況用while。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章