当前位置:嗨网首页>书籍在线阅读

26-示例程序

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

5.7 示例程序

程序清单5.16演示了本章介绍的几个概念,这个程序对某些人很有用。程序看起来很长,但是所有的计算都在程序的后面几行中。我们尽量使用大量的注释,让程序看上去清晰明了。请通读该程序,稍后我们会分析几处要点。

程序清单5.16  running.c 程序

// running.c -- A useful program for runners
#include <stdio.h>
const int S_PER_M = 60;              // 1分钟的秒数
const int S_PER_H = 3600;            // 1小时的秒数
const double M_PER_K = 0.62137;      // 1公里的英里数
int main(void)
{
     double distk, distm;    // 跑过的距离(分别以公里和英里为单位)
     double rate;            // 平均速度(以英里/小时为单位)
     int min, sec;           // 跑步用时(以分钟和秒为单位)
     int time;               // 跑步用时(以秒为单位)
     double mtime;           // 跑1英里需要的时间,以秒为单位
     int mmin, msec;         // 跑1英里需要的时间,以分钟和秒为单位
     printf("This program converts your time for a metric race\n");
     printf("to a time for running a mile and to your average\n");
     printf("speed in miles per hour.\n");
     printf("Please enter, in kilometers, the distance run.\n");
     scanf("%lf", &distk);            // %lf表示读取一个double类型的值
     printf("Next enter the time in minutes and seconds.\n");
     printf("Begin by entering the minutes.\n");
     scanf("%d", &min);
     printf("Now enter the seconds.\n");
     scanf("%d", &sec);
     time = S_PER_M * min + sec;       // 把时间转换成秒    
     distm = M_PER_K * distk;          // 把公里转换成英里    
     rate = distm / time * S_PER_H;    // 英里/秒×秒/小时 = 英里/小时    
     mtime = (double) time / distm;    // 时间/距离 = 跑1英里所用的时间
     mmin = (int) mtime / S_PER_M;     // 求出分钟数
     msec = (int) mtime % S_PER_M;     // 求出剩余的秒数
     printf("You ran %1.2f km (%1.2f miles) in %d min, %d sec.\n",
               distk, distm, min, sec);
     printf("That pace corresponds to running a mile in %d min, ",
               mmin);
     printf("%d sec.\nYour average speed was %1.2f mph.\n", msec,
              rate);
     return 0;
}

程序清单5.16使用了 min _ sec 程序(程序清单5.9)中的方法把时间转换成分钟和秒,除此之外还使用了类型转换。为什么要进行类型转换?因为程序在秒转换成分钟的部分需要整型参数,但是在公里转换成英里的部分需要浮点运算。我们使用强制类型转换运算符进行了显式转换。

实际上,我们曾经利用自动类型转换编写这个程序,即使用 int 类型的 mtime 来强制时间计算转换成整数形式。但是,在测试的11个系统中,这个版本的程序在1个系统上无法运行,这是由于编译器(版本比较老)没有遵循C规则。而使用强制类型转换就没有问题。对读者而言,强制类型转换强调了转换类型的意图,对编译器而言也是如此。

下面是程序清单5.16的输出示例:

This program converts your time for a metric race
to a time for running a mile and to your average
speed in miles per hour.
Please enter, in kilometers, the distance run.
10.0
Next enter the time in minutes and seconds.
Begin by entering the minutes.
36
Now enter the seconds.
23
You ran 10.00 km (6.21 miles) in 36 min, 23 sec.
That pace corresponds to running a mile in 5 min, 51 sec.
Your average speed was 10.25 mph.