一、题目描述
输入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 语言提供了 while 、do...while 、for 几种循环类型。各循环具体说明如下:
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 循环的控制流:
- init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。
- 接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
- 在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
- 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止。
for 循环的流程图:
以上内容来自:菜鸟教程
有了上面的基础,本题目可以分成以下几个步骤完成:
- 输入区间[lower,upper]。
- 判断输入的范围是否合法。
- 若输入范围合法,使用 for 循环逐条计算打印[lower,upper]区间内的华氏-摄氏温度转换表。若输入范围不合法,打印 Invalid. 。
- 结束程序。
三、参考代码
根据以上分析,给出参考代码如下:
代码语言: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;
}