| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1560 人关注过本帖
标题:C Primer Plus中的 另一道题求解~
只看楼主 加入收藏
coffeefcy
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-9-28
收藏
 问题点数:0 回复次数:12 
C Primer Plus中的 另一道题求解~
Primer Plus中的一道题求解~

本菜鸟又来问题啦~望诸位大侠解决一下!

完整题目如下:
编写一个程序,该程序要求用户输入一个华氏温度。程序以Double类型读入温度值,并将它作为一个参数传递给用户提供的函数Temperature()。该函数将计算相应的摄氏温度和绝对温度,并以小数点右边有两位数字的精度显示这三种温度。它应该用每个值所代表的温度刻度来标识这3个值。下面是将华氏温度转换成摄氏温度的方程:
Celsius = 1.8 *Fahrenheit + 32.0.
下面是将摄氏温度转换成绝对温度的方程:
Kelvin = Celsius + 273.16
Temperature()函数使用const来创建代表该转换里的3个常量符号。main()函数将使用一个循环来允许用户重复地输入温度,当用户输入q或其他非数字值时,循环结束。

我不太会做这个题,不过尽我所能做了做,我的程序如下:
#include<stdio.h>
int Temperautre(double Fahrenheit);
int main(void)
{
    double Fahrenheit;
    printf("Please enter a fahr:\n");
    scanf("%f",&Fahrenheit);
    Temperautre(Fahrenheit);
    while(Fahrenheit != 'q')
    {
                     printf("Please enter another value:");
                     scanf("%f",&Fahrenheit);
                     Temperautre(Fahrenheit);
                     }
    return 0;
}
int Temperautre(double Fahrenheit)
{
     const double Celsius = 1.8 * Fahrenheit + 32.0;
     const double Kelvin = Celsius + 273.16;
     printf("%.2f fahrenheit is %.2f celsius or %.2f kelvin\n",Fahrenheit,Celsius,Kelvin);
     }
不过我不管输入什么值,得到的Fahrenheit 都是0.00,Celsius都是32.00,Kelvin都是305.16
应该是Fahrenheit参数传递不正确~不过我不会改。
还有就是“当用户输入q或其他非数字值时,循环结束。”这个在While循环里如何实现?
搜索更多相关主题的帖子: Primer Plus 求解 
2008-09-30 09:35
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 
float Fahrenheit;
改一下...

2008-09-30 09:51
coffeefcy
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-9-28
收藏
得分:0 
谢谢LS~!
好厉害!改一下就好了~
不过...double为啥不行啊?
题目中不是说“程序以Double类型读入温度值”,所以用了double...
还有就是“当用户输入q或其他非数字值时,循环结束。”这个在While循环里如何实现?
循环这个条件我不会,嘿嘿~
各位大虾们帮帮忙。
2008-09-30 18:06
守鹤
Rank: 4
来 自:山東臨沂
等 级:贵宾
威 望:12
帖 子:337
专家分:0
注 册:2008-6-20
收藏
得分:0 
scanf("%f",&Fahrenheit);
这样你读入的是float类型的数据,应改成scanf("%lf",&Fahrenheit);就可以了

你所说的while 循环是用于连续读入多个温度数据的,但是你做的条件不合理,
要求输入的数据是浮点型的数据,当输入了其它字符或是不满足条件表达式,自然会
结束循环,我认为应作以下处理

加上一个输入字符的语句,若输入为q,则退出(quite).

while(getchar()!='q')
{  printf("Please enter another double value:");
   scanf("%lf",&Fahrenheit);
   Temperautre(Fahrenheit);
}

多少个日日夜夜想起你,只希望有缘再次相见
2008-09-30 18:20
coffeefcy
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-9-28
收藏
得分:0 
嗯,谢谢LS
刚才试了一下,又出现了两个问题:
1.第二次输入数值的时候又产生了之前的问题,我不管输入什么值,得到的Fahrenheit 都是0.00,Celsius都是32.00,Kelvin都是305.16。
2.题目中说的是:“当用户输入q或其他非数字值时,循环结束。”现在这个循环只是说输入q退出吧,那么“其他非数字值”如何解决呢?

~Wind Song~
2008-09-30 18:30
victorwyc
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-9-28
收藏
得分:0 
试试这,行不行
#include<stdio.h>
#include"ctype.h"
void Temperautre(const double Fahrenheit);
int main(void)
{
    const double Fahrenheit = 0;
    while(1)
        {
            printf("Please enter a fahr:\n");
             scanf("%lf",&Fahrenheit);
            
            if(isdigit((int)Fahrenheit))
             Temperautre(Fahrenheit);

             else
             {
                  printf("error");
                  break;
             }
        }
    
    return 0;
}

void Temperautre(const double Fahrenheit)
{
     const double Celsius = 1.8 * Fahrenheit + 32.0;
     const double Kelvin = Celsius + 273.16;
     printf("%.2f fahrenheit is %.2f celsius or %.2f kelvin\n",Fahrenheit,Celsius,Kelvin);
     }

今天不走,明天要跑!
2008-09-30 21:27
小小熊宝宝
Rank: 2
来 自:江苏无锡
等 级:论坛游民
威 望:2
帖 子:183
专家分:38
注 册:2008-8-12
收藏
得分:0 
不行

欢迎加入C语言交流群:43287755
2008-09-30 21:48
victorwyc
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-9-28
收藏
得分:0 
看看这,但也不完全符合题
#include<stdio.h>
#include"ctype.h"
void Temperautre(const double Fahrenheit);
int main(void)
{
    const double Fahrenheit = 0;
    while(1)
        {
            printf("Please enter a fahr:\n");
             scanf("%lf",&Fahrenheit);
            
            if(!isalpha((int)Fahrenheit))
             Temperautre(Fahrenheit);

             else
             {
                  printf("error");
                  break;
             }
        }
    
    return 0;
}

void Temperautre(const double Fahrenheit)
{
     const double Celsius = 1.8 * Fahrenheit + 32.0;
     const double Kelvin = Celsius + 273.16;
     printf("%.2f fahrenheit is %.2f celsius or %.2f kelvin\n",Fahrenheit,Celsius,Kelvin);
     }

今天不走,明天要跑!
2008-09-30 22:25
victorwyc
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-9-28
收藏
得分:0 
看看这,但也不完全符合题
#include<stdio.h>
#include"ctype.h"
void Temperautre(const double Fahrenheit);
int main(void)
{
    const double Fahrenheit = 0;
    while(1)
        {
            printf("Please enter a fahr:\n");
             scanf("%lf",&Fahrenheit);
            
            if(!isalpha((int)Fahrenheit))
             Temperautre(Fahrenheit);

             else
             {
                  printf("error");
                  break;
             }
        }
    
    return 0;
}

void Temperautre(const double Fahrenheit)
{
     const double Celsius = 1.8 * Fahrenheit + 32.0;
     const double Kelvin = Celsius + 273.16;
     printf("%.2f fahrenheit is %.2f celsius or %.2f kelvin\n",Fahrenheit,Celsius,Kelvin);
     }

今天不走,明天要跑!
2008-09-30 22:27
小小熊宝宝
Rank: 2
来 自:江苏无锡
等 级:论坛游民
威 望:2
帖 子:183
专家分:38
注 册:2008-8-12
收藏
得分:0 
不行,任意非数值输入后就无限循环了,我用的VC6

欢迎加入C语言交流群:43287755
2008-09-30 23:04
快速回复:C Primer Plus中的 另一道题求解~
数据加载中...
 
   



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

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