标题:C Primer Plus中的 一道题求解
只看楼主
砍一刀
Rank: 1
等 级:新手上路
帖 子:36
专家分:3
注 册:2010-6-6
结帖率:0
 问题点数:0 回复次数:9 
C Primer Plus中的 一道题求解
完整题目如下:
编写一个程序,该程序要求用户输入一个华氏温度。程序以Double类型读入温度值,并将它作为一个参数传递给用户提供的函数Temperature()。该函数将计算相应的摄氏温度和绝对温度,并以小数点右边有两位数字的精度显示这三种温度。它应该用每个值所代表的温度刻度来标识这3个值。下面是将华氏温度转换成摄氏温度的方程:
Celsius = 1.8 *Fahrenheit + 32.0.
下面是将摄氏温度转换成绝对温度的方程:
Kelvin = Celsius + 273.16
Temperature()函数使用const来创建代表该转换里的3个常量符号。main()函数将使用一个循环来允许用户重复地输入温度,当用户输入q或其他非数字值时,循环结束。
搜索更多相关主题的帖子: Primer Plus 求解 
2010-06-24 12:48
砍一刀
Rank: 1
等 级:新手上路
帖 子:36
专家分:3
注 册:2010-6-6
得分:0 
我写的程序如下

#include <stdio.h>
void Tem(double x);
const float a=1.8;
const float b=32.0;
const float s=273.16;
int main(void)
{
double f;

printf("pleas give me a Fahreheit :");
scanf("%lf",&f);
while (f!='q')
{
Tem(f);
printf("pleas give me a Fahreheit :");
scanf("%lf",&f);
}
printf("bye.\n");
return 0;
}
void Tem(double x)
{
double c,k;
c=a*x+b;
k=c+s;
printf("Fahrenheit is %.3lf,Celsius is %.3lf,Kelvin is %.3lf.\n",x,c,k);
}
2010-06-24 12:48
砍一刀
Rank: 1
等 级:新手上路
帖 子:36
专家分:3
注 册:2010-6-6
得分:0 
现在遇到的问题是
输入温度 都能正常使用
但是一输入 字母 就陷入死循环。
这是何解?
请教大家
2010-06-24 12:49
砍一刀
Rank: 1
等 级:新手上路
帖 子:36
专家分:3
注 册:2010-6-6
得分:0 
怎么会陷入死循环呢?我百思不得其解。。。
2010-06-24 13:01
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
得分:0 
可以写成这样:

while((scanf("%lf",&f))==1)
{
    ……
    ……
}

2010-06-24 14:15
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
得分:0 
我的理解:

    scanf 是以空字符结束输入的,而你输入字符时,由于是 %ld ,所以无法读取,字符就暂存在键盘缓冲区中;而循环一次后再从缓冲区中读取字符,又会一样的效果。所以就会造成无限循环。
2010-06-24 14:19
yl_524
Rank: 2
等 级:论坛游民
帖 子:35
专家分:43
注 册:2010-3-17
得分:0 
问题应该出在实型数据跟字符型数据比较上 :while (f!='q')
2010-06-24 15:21
砍一刀
Rank: 1
等 级:新手上路
帖 子:36
专家分:3
注 册:2010-6-6
得分:0 
谢谢楼上的朋友们 热心帮助
理解了 我改了一下  没问题了

#include <stdio.h>

int main(void)
{
    long num;
    long sum=0l;
    int status;

    printf("Please enter an intger to be summed. ");
    printf("(q to quit):");
    status=scanf("%ld",&num);
    while(status==1)
    {
    sum=sum+num;
    printf("please enter next intger(q to quit): ");
    status=scanf("%ld",&num);
    }
    printf("Those intger sum to %ld.\n",sum);
    return 0;
}
2010-06-24 16:26
yl_524
Rank: 2
等 级:论坛游民
帖 子:35
专家分:43
注 册:2010-3-17
得分:0 
开始还不知道怎么改,现在也明白了。共同进步!
#include <stdio.h>
void Tem(double x);
const float a=1.8;
const float b=32.0;
const float s=273.16;
int main(void)
{
double f;
int flag;
printf("pleas give me a Fahreheit :");
flag=scanf("%lf",&f);
while (flag==1)
{
Tem(f);
printf("pleas give me a Fahreheit :");
flag=scanf("%lf",&f);
}
printf("bye.\n");
return 0;
}
void Tem(double x)
{
double c,k;
c=a*x+b;
k=c+s;
printf("Fahrenheit is %.3lf,Celsius is %.3lf,Kelvin is %.3lf.\n",x,c,k);
}
2010-06-24 16:50
砍一刀
Rank: 1
等 级:新手上路
帖 子:36
专家分:3
注 册:2010-6-6
得分:0 
呵呵 楼上握手
利用返回值来判定输入 这个很有用啊
我们都要记住
2010-06-24 17:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-311123-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.577402 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved