c语言习题:华氏度摄氏度比照表

 这是《C程序设计语言》第二版中1.2的练习题,要求根据Celsius = (5 / 9) * (Fahr - 32)的公式实现一个比照表的打印输出。 (运算符号两侧最好用空格与其他内容分隔开,这样可以提高代码的可读性)

这道练习题看似简单,但其实藏着一个很容易被忽视的坑,那就是C语言中,整数除法操作会自动执行舍位,结果中的任何小数部分都会被舍弃。由于5和9都是整数,相除结果为0,因此这样计算求得的所有摄氏度都将为0。对此我们采用5 * (Fahr - 32) / 9的运算方式来进行运算下面是成功的例子

#include 
main(){
//整数型华氏度摄氏度比照表成功案例 
	int Fahr,Celsius;
	int max,min,step;
	
	max = 300;//最大值
	min = 0;//最小值
	step = 20;//步长(间距)
	
	Fahr = min;
	printf("Fahr\tCelsius\n");//打印标题
	while(Fahr <= max){
//while循环语句,循环将Fahr换算为Celsius
		Celsius = 5*(Fahr - 32) / 9;
		printf("%d\t%d\n",Fahr,Celsius);
//%d\t和%d\n整体上作为printf语句的第一个参数,分别对第二和第三个参数的格式进行设置
//%d表示按照整数打印,
//%.1f表示按照整数打印,小数点后有一位小数 
//%9f表示按照整数打印,至少9个字符宽 
//%9.1f表示则是在上述基础上,小数点后有一位小数
//\t和\n是换码序列,\t表示制表符(9个空格)\n表示换行输出
		Fahr = Fahr + step;
	}
}

使用整数型的变量有较大的不足,计算得到的摄氏度不太精确,例如华氏度0应对应摄氏度-17.8,计算得到的结果却为-17,这点在下面的程序中能得到解决。

由于已经用float声明了变量为浮点型,因此在=的赋值运算中,等号右侧的字面量(数据)会自动转换为小数 ,但最好还是将字面量(数据)写为小数的形式,这样可以强调其浮点性,增强代码可读性。 

#include 
main(){
	float Fahr,Celsius;
	float Upper,Lower,Step;
	
	Upper = 300;
	Lower = 0.0;
	Step = 20.0;
	//由于已经用float声明了变量为浮点型,
	//因此在=的赋值运算中,等号右侧的字面量(数据)会自动转换为小数 
	//但最好还是将字面量(数据)写为小数的形式,这样可以强调其浮点性,增强代码可读性。 
	Fahr = Lower;
	printf("Fahr\tCelsius\n"); 
	while(Fahr <= Upper){
		Celsius = 5 * (Fahr - 32) / 9;
		printf("%3.0f %9.1f\n",Fahr,Celsius);
		//%f表示按照浮点数打印,
		//%.1f表示按照浮点数打印,小数点后有一位小数 
		//%9f表示按照浮点数打印,至少9个字符宽 
		//%9.1f表示按照则是在上述基础上,小数点后有一位小数 
		Fahr = Fahr + Step;
	}
}

%f表示按照浮点数打印,
%.1f表示按照浮点数打印,小数点后有一位小数 
%9f表示按照浮点数打印,至少9个字符宽 
%9.1f表示按照则是在上述基础上,小数点后有一位小数 

你可能感兴趣的:(c语言)