中国大学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。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章