练习2-12 输出华氏-摄氏温度转换表 (15分)

2021-03-16 12:18:40 浏览数 (1)

一、题目描述

输入2个正整数lower和upper(lower≤upper≤100),请输出一张取值范围为[lower,upper]、且每次增加2华氏度的华氏-摄氏温度转换表。

温度转换的计算公式:C=5×(F−32)/9,其中:C表示摄氏温度,F表示华氏温度。

输入格式:

在一行中输入2个整数,分别表示lower和upper的值,中间用空格分开。

输出格式:

第一行输出:"fahr celsius"

接着每行输出一个华氏温度fahr(整型)与一个摄氏温度celsius(占据6个字符宽度,靠右对齐,保留1位小数)。

若输入的范围不合法,则输出"Invalid."。

输入样例1:

32 35

输出样例1:

fahr celsius 32 0.0 34 1.1

输入样例2:

40 30

输出样例2:

Invalid.

二、思路分析

本题目也是非常简单,主要考察 scanf 函数、printf 函数和循环结构。scanf 和 printf 在前面的章节中已经做了介绍。这里只对循环结构做说明。

C 语言提供了 whiledo...whilefor 几种循环类型。各循环具体说明如下:

while 循环

给定条件为真时,重复语句或语句组,它会在执行循环主体之前测试条件。

while 循环的语法:

代码语言:javascript复制
while(condition)
{
   statement(s);
}

在这里,statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。

condition 可以是任意的表达式,当为任意非零值时都为 true。当条件为 true 时执行循环。当条件为 false 时,退出循环,程序流将继续执行紧接着循环的下一条语句。

while 循环的流程图:

在这里,while 循环的关键点是循环可能一次都不会执行。当条件为 false 时,会跳过循环主体,直接执行紧接着 while 循环的下一条语句。

do...while 循环

不像 for 和 while 循环,它们是在循环头部测试循环条件。在 C 语言中,do...while 循环是在循环的尾部检查它的条件。

do...while 循环与 while 循环类似,但是 do...while 循环会确保至少执行一次循环。

do...while 循环的语法:

代码语言:javascript复制
do
{
   statement(s);

}while( condition );

请注意,条件表达式出现在循环的尾部,所以循环中的 statement(s) 会在条件被测试之前至少执行一次。

如果条件为真,控制流会跳转回上面的 do,然后重新执行循环中的 statement(s)。这个过程会不断重复,直到给定条件变为假为止。

do...while 循环的流程图:

for 循环

多次执行一个语句序列,简化管理循环变量的代码。

for 循环的语法:

代码语言:javascript复制
for ( init; condition; increment )
{
   statement(s);
}

for 循环的控制流:

  1. init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。
  2. 接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
  3. 在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
  4. 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止。

for 循环的流程图:

以上内容来自:菜鸟教程

有了上面的基础,本题目可以分成以下几个步骤完成:

  1. 输入区间[lower,upper]。
  2. 判断输入的范围是否合法。
  3. 若输入范围合法,使用 for 循环逐条计算打印[lower,upper]区间内的华氏-摄氏温度转换表。若输入范围不合法,打印 Invalid.
  4. 结束程序。

三、参考代码

根据以上分析,给出参考代码如下:

代码语言:javascript复制
#include<stdio.h>
int main()
{
  int lower,upper;
  int i;
  scanf("%d %d",&lower,&upper);
  if(lower<=upper)
    {
      printf("fahr celsiusn");
      for(i=lower;i<=upper;i =2)
      {
        printf("%d%6.1lfn",i,(double)(5.0*(i-32)/9.0));
      }

    }
    else printf("Invalid.n");
  return 0;
}

0 人点赞