美文网首页
C程序设计语言 1.2 变量与算术表达式

C程序设计语言 1.2 变量与算术表达式

作者: dongwenbo | 来源:发表于2016-09-02 22:53 被阅读19次

我们来看一个程序,使用公式℃=(5/9)(°F-32)打印下列华氏温度和摄氏温度对照表:

1            -17
20           -6
40            4
60            15
80            26
100           37
120           48
140           60
160           71
180           82
200           93
220           104
240           115
260           126
280           137
300           148

程序如下:

#include <stdio.h>
/* 当 fahr=0,20,… ,300 时,
分别打印华氏温度与摄氏温度对照表 */
int main()
{
  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;
}

在例程中/**/之间的内容称为注释,注释用来解释说明程序,使程序更易于理解。/**/用于注释多行程序,//用于注释单行程序,通过上面的例程,想必不难理解。

在C语言中,所有变量必须先声明后使用,声明用于说明变量的属性,由类型名和变量表组成,例如:

int fahr, celsius;
int lower, upper, step;

int表示其后所列变量为整数型,int类型的取值范围取决于具体的机器,一般来说为4个字节,32位。除int类型外,C语言还提供了其他一些基本数据类型,如char字符型,short短整形,long长整形,double 双精度浮点型,float单精度浮点型。这些数据类型对象的大小也取决于具体的实现。

lower = 0;
upper = 300;
step = 20;
fahr = lower;

这些语句为变量设置初值,以分号结束。=为赋值运算符,意为将右侧数值赋值给左侧变量。

温度转换各行计算方式相同,因此可以用循环语句 while,例程中的while用法:

  while (fahr <= upper) {
    celsius = 5 * (fahr32)/ 9;
    printf("%d\t%d\n", fahr, celsius);
    fahr = fahr + step;
  }

while语句的执行方式为:先测试小括号()中的条件,如果为真,执行大括号中的语句,执行完毕后,再次测试()的条件,如果为真,再次执行大括号内的语句。如果为假,终止循环。条件为真时,执行大括号内的语句,如果没有大括号,则执行while后的单条语句

我们看计算赋值语句:

 celsius = 5 * (fahr - 32)/ 9;

用于将华氏温度转换为设置温度,并将结果赋值给celsius,之所以写成 5 * (fahr - 32)/ 9,而不是5/9*(fahr - 32),是因为5/9为0,整数的除法只能整除,结果为商。

printf("%d\t%d\n", fahr, celsius);

%d为占位符,表示这个位置的值为整数,\t为制表符,打印时对齐用,\n为换行符,当fahr为1,celsius为-17时,此时打印:0 -17

我们看:

printf("%3d%6d\n", fahr, celsius);

%3d,表示fahr占3个字宽,%6d,表示celsius占6个字宽,此时打印:空格空格0空格空格空格-17

我们的程序目前很不精确,因为所有的变量都声明为int,在用/操作符会舍弃掉小数部分,让我们对程序做个改造:

#include <stdio.h>
/* print FahrenheitCelsius
table
for fahr = 0, 20, ..., 300; floatingpoint
version */ 
int main()
{
  float fahr, celsius;
  float lower, upper, step;
  lower = 0; /* lower limit of temperatuire scale */
  upper = 300; /* upper limit */
  step = 20; /* step size */
  fahr = lower;
  while (fahr <= upper) {
    celsius = (5.0/9.0) * (fahr - 32.0);
    printf("%3.0f %6.1f\n", fahr, celsius);
    fahr = fahr + step;
  }
}

我们将int类型换成了float类型,计算公式换为celsius = (5.0/9.0) * (fahr - 32.0);5.0/9.0是两个浮点数相除,结果将保留小数。

如果一个运算符的操作数均为整数,则执行整数运算。如果一个浮点数和一个整数运算,则在开始运算之前,整数型操作数将会自动转换为浮点数。在一个小类型和一个大类型做运算时,小类型会先转换成大类型再开始运算。不过即使这样,在书写时最好还是显示加上一个小数点,这样可以强调浮点性质,便于阅读。

  printf("%3.0f %6.1f\n", fahr, celsius);

%3.0f表示浮点数fahr在打印时占3个字宽,不保留小数部分。%6.1f表示浮点数celsius在打印时占6个字宽,小数部分占1个字宽,不足的用空格或0补齐。
格式说明可以省略宽度和精度,例如,%6f表示待打印的浮点数整数部分至少有6个字宽,不足用0补齐;%.2f指定待打印的浮点数的小数部分有两位小数,但宽度没有限制

%d 按照十进制整形数打印
%6d 按照十进制整形数数打印,至少6个字宽,不足用空格补齐
%f 打印浮点数
%6f 打印浮点数,至少6个字符宽
%.2f 打印浮点数,小数点后有两位小数
%6.2f 打印浮点数,至少6个字符宽,小数后有两位小数

%o表示八进制数,%x表示十六进制数%c表示字符%s表示字符串,%%表示%自身。

相关文章

网友评论

      本文标题:C程序设计语言 1.2 变量与算术表达式

      本文链接:https://www.haomeiwen.com/subject/jixkettx.html