这次的程序将完成华氏度到摄氏度的转换,通过公式 C = (5/9)(F – 32)。我们从0F到300F 每隔20F输出它对应的摄氏度。
程序的源代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include <stdio.h> /*显示华氏度 摄氏度表 华氏度是0 20 。。。 300*/ int main(void) { int fahr, celsius; int lower, upper, step; lower = 0; upper = 300; step = 20; fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr - 32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } return 0; } |
注释
/*显示华氏度 摄氏度表
华氏度是0 20 。。。 300*/
这是程序的注释,他只是为了给人阅读带来方便,/*和*/之间的内容在编译的时候被忽略。注释可以出现在任何空白、换行 可以出现的地方。还有一种单行注释 // 。
变量
c语言中,使用变量前必须先声明变量。通常声明在函数的最前面,在具体的表达式之前。变量的声明包含了变量的类型和变量的名字。例如
1 2 |
int fahr, celsius; int lower, upper, step; |
int说明变量的类型是整形数字。相对的还有浮点数(float),浮点数有小数部分。这两个类型表示的数的范围取决于你的机器。比如16为的int类型表示的范围是-32768到+32767 。float类型一般是32位的,它可以表示10^-38 到10^38范围内的数。
c语言还有一些其他的类型,比如字符型char 短整型short 长整形 long 双精度浮点型 double。他们的大小也是与机器有关。c标准规定,short的大小不大于int,而 long的大小不小于int 。
除此之外,c语言中还有数组 结构体 联合体,他们包含了一些基本结构的类型,还有上面各种类型的指针类型,还有返回各种类型的函数。
给变量赋初始值
温度转换的计算是这样开始的
1 2 3 4 5 |
lower = 0; upper = 300; step = 20; fahr = lower; |
这些语句给变量一个初始的值。分号;表示一个语句的结束。
循环
每一行的输出都是类似的,因此我们用一个循环。叫做while循环。
1 2 3 4 |
while (fahr <= upper) { ... } |
while循环的执行过程如下:判断while后面括号里的表达式,如果为真true 就执行循环体(也就是{}里的语句),之后再次测试括号里的表达式 。 当括号里的表达式是假false的时候,循环结束,继续执行后面的语句。
循环体可以是一条语句,也可以是大括号里的许多条语句。只有一条语句的时候可以不写{}。但是为了方便人的阅读,我们建议都写在{}里。
while()后面的{ 可以紧跟在括号后面,也可以另起一行,两种方式都可以。
计算
本程序里的计算时下面语句实现的
1 |
celsius = 5 * (fahr - 32) / 9; |
注意这里没有吧5/9写在一起,因为在c语言里,两个整形相除结果还是整形,因此5/9的结果是0
printf
下面一个语句
1 |
printf("%d\t%d\n", fahr, celsius); |
可以看出 printf的第一个参数是一个字符串,里面有一些%跟字母表示的占位符,他被按顺序替换为后面的参数。%d说明是整数类型。这里的类型和后面的参数的类型必须一致,不然就会出错。
顺便提一下,printf并不是c语言内置的功能,他是一个函数。只不过是库函数,它是由ANSi标准定义的。与printf相对的是scanf 它用来输入。
为了使输出更整齐,可以设置输出的长度,比如
1 |
printf("%3d\t%6d\n", fahr, celsius); |
这表示第一个整数占3位,第二个有6位
float
这个程序还有一个缺陷,它的结果是整数 不精确。我们可以把结果改为浮点数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <stdio.h> int main(void) { float fahr, celsius; int lower, upper, step; lower = 0; upper = 300; step = 20; fahr = lower; while (fahr <= upper) { celsius = (5.0 / 9.0) * (fahr - 32.0); printf("%3.0f%6.1f\n", fahr, celsius); fahr = fahr + step; } return 0; } |
这个程序把华氏度和摄氏度定义为浮点型。
我们把5/9换成5.0/9.0 这样他们都是浮点数,就不会得到0
如果浮点数和整数进行计算,整数会自动转换成浮点数、
printf里的 %3.0f表示的是显示3位,其中有0位小数。%6.1f表示至少显示6位,小数点显示1位。
除此之外,printf还支持%o八进制 %x十六进制 %c字符 %s字符串 %%表示%本身