C初级+编程练习题

C初级+编程练习题,c,C,我正在学习“C Primer Plus”,刚刚完成了编程练习,我在第五章的最后一节(运算符、表达式和语句)中遇到了困难 这项工作是: 编写一个程序,要求用户输入华氏温度。程序应以类型双精度数字读取温度,并将其作为参数传递给用户提供的名为Temperations()的函数。此函数应计算摄氏当量和开尔文当量,并以小数点右侧两位的精度显示所有三个温度。它应该用它所代表的温度标度来标识每个值。以下是将华氏温度转换为摄氏温度的公式: 摄氏=1.8*华氏+32.0度 科学中常用的开尔文标度是一种标度,其中0

我正在学习“C Primer Plus”,刚刚完成了编程练习,我在第五章的最后一节(运算符、表达式和语句)中遇到了困难

这项工作是:

编写一个程序,要求用户输入华氏温度。程序应以类型双精度数字读取温度,并将其作为参数传递给用户提供的名为Temperations()的函数。此函数应计算摄氏当量和开尔文当量,并以小数点右侧两位的精度显示所有三个温度。它应该用它所代表的温度标度来标识每个值。以下是将华氏温度转换为摄氏温度的公式:

摄氏=1.8*华氏+32.0度

科学中常用的开尔文标度是一种标度,其中0表示绝对零,即可能温度的下限。以下是将摄氏度转换为开尔文的公式:

开尔文=摄氏度+273.16

函数应该使用const来创建转换中出现的三个常量的符号表示。main()函数应该使用一个循环,允许用户重复输入温度,在输入q或其他非数值时停止

我的代码是:

#include <stdio.h>
void Temperatures(double);
int main(void)
{
    double farh;
    printf("Enter a fahrenheit temperature: ");
    scanf("%f", &farh);
    printf("\n");
    Temperatures(farh);
return 0;

}

void Temperatures(double f)
{

    float c;
    float k;
    c = 1.8 * f + 32;
    k = c + 273.16;
    printf("Fahrenheit    Celcius    Kelvin\n");
    printf("%.2f    %.2f    %.2f\n", f, c, k);

}
#包括
空隙温度(双倍);
内部主(空)
{
双法尔;
printf(“输入华氏温度:”);
scanf(“%f”和“farh”);
printf(“\n”);
温度(farh);
返回0;
}
空隙温度(双f)
{
浮点数c;
浮动k;
c=1.8*f+32;
k=c+273.16;
printf(“华氏摄氏开尔文”);
printf(“%.2f%.2f%.2f\n”,f,c,k);
}

我哪里出错了o胡说八道。

您通过scanf请求一个浮点%f作为输入,但将其存储在一个double中。float和double的大小通常不同,如果是这样的话,当您试图将float存储在double中时,会收到垃圾。尝试改用%lf,或将“farh”改为float。

您要求通过scanf输入一个float%f,但将其存储在一个double中。float和double的大小通常不同,如果是这样的话,当您试图将float存储在double中时,会收到垃圾。尝试改用%lf,或者将“farh”改为float。

您使用scanf获取输入并将其转换为特定类型,在这种情况下,可以获得华氏温度的
float

scanf("%f", &farh);
但是,您正在将
farh
初始化为双精度

...
int main(void)
{
double farh;
...
将其更改为
float farh
并查看这是否有帮助

更新以回答以下评论中的问题

如果要采用双精度,而不是浮点数,则将扫描线更改为如下所示:

scanf("%lf", &farh);

您正在使用scanf获取输入并将其转换为特定类型,在本例中,您将获得华氏温度的
浮点值

scanf("%f", &farh);
但是,您正在将
farh
初始化为双精度

...
int main(void)
{
double farh;
...
将其更改为
float farh
并查看这是否有帮助

更新以回答以下评论中的问题

如果要采用双精度,而不是浮点数,则将扫描线更改为如下所示:

scanf("%lf", &farh);

计算华氏到摄氏度的公式是错误的。。而是

(°F  -  32)  x  5/9 = °C
aslo Exercise要求将f转换为开尔文,因此: 华氏至开尔文:

(5/9 * (Fahrenheit - 32) + 273 ).
不管怎样,有人可以帮助我们做到这一点:main()函数应该使用一个循环,允许用户重复输入温度,在输入q或其他非数值时停止。
thnks

计算华氏到摄氏度的公式是错误的。。而是

(°F  -  32)  x  5/9 = °C
aslo Exercise要求将f转换为开尔文,因此: 华氏至开尔文:

(5/9 * (Fahrenheit - 32) + 273 ).
不管怎样,有人可以帮助我们做到这一点:main()函数应该使用一个循环,允许用户重复输入温度,在输入q或其他非数值时停止。 thnks

完全工作的功能

void exc8(void){
    double Celtemp = 0;
    double Fartemp = 0;
    double Keltemp = 0;
    printf("enter the temperature in Fahrenheit: ___\b\b\b");

    while (scanf_s("%lf",&Fartemp)==1)
    {
        Celtemp = (1.8 * Fartemp) + 32.0;
        Keltemp = Celtemp + 273.16;
        printf("\nThe temp %4.3lf in Far is equal are %4.3lf in Celc and %4.3lf in Kelv\n", Fartemp, Celtemp, Keltemp);
        printf("Enter another one to convert or non number char for exit:___\b\b\b");

    }

}
充分发挥作用

void exc8(void){
    double Celtemp = 0;
    double Fartemp = 0;
    double Keltemp = 0;
    printf("enter the temperature in Fahrenheit: ___\b\b\b");

    while (scanf_s("%lf",&Fartemp)==1)
    {
        Celtemp = (1.8 * Fartemp) + 32.0;
        Keltemp = Celtemp + 273.16;
        printf("\nThe temp %4.3lf in Far is equal are %4.3lf in Celc and %4.3lf in Kelv\n", Fartemp, Celtemp, Keltemp);
        printf("Enter another one to convert or non number char for exit:___\b\b\b");

    }

}

超出练习范围的替代版本。这里,我想让函数返回值。但是,如果不进入更高级的主题、指针等,函数就不能返回两个值。因此,我们将把摄氏度和开尔文Calc分为两个单独的函数,并将它们返回到main()

我试图把这个例子讲得很清楚,注意这个例子中I和j的用法,因为它演示了这些变量是如何在函数本身中使用的,而不是在程序的主体中使用的。“fah”(表示华氏温度)是发送给函数的变量,我们告诉函数返回哪些变量。请注意,这些函数的工作原理与代数函数的工作原理相同,它们基于相同的思想。f(x)=(y)(z)。只有(y)(z)部分在主程序主体之外。在这个类比中,f(x)中的x是“传递”给函数的值。“f”可以是我们想要的任何东西。。。所以我当然选择了最明显的名字,塞尔修斯和开尔文,然后它们可以在程序的主体中被反复调用。将函数视为子例程

#include <stdio.h>
#include <stdlib.h>

double celcius (double i);
double kelvin (double j);

int main()
{
    double fah = 0.0;

    printf("Enter a Fahrenheit temperature (or 'q' to quit): ");

        while (scanf("%lf", &fah) == 1)
        {
            printf("Fahrenheit: \t%8.2lf", fah);
            printf("\n");
            printf("Celcius: \t%8.2lf", celcius(fah)); // 1st function call
            printf("\n");
            printf("Kelvin: \t%8.2lf", kelvin(fah)); // 2nd function call
            printf("\n");

            printf("Enter another Fahrenheit temperature: ");
        }

    printf("goodbye");

    return 0;

} 

double celcius (double i) // the value fah is "passed" to i.  weird, right?
{

    const double FRAC = (5.0 / 9.0);
    const double FREEZE = 32.0;
    double cel; // notice I have to define cel HERE, not in main.

    cel = FRAC * (i - FREEZE); // the only place we see i

    return cel; // here we tell the function which value to send back

}

double kelvin (double j)
{
    const double ADD = 273.16;
    double kel; // again, I must define the variable IN the function.

    kel = ADD + ((5.0 / 9.0) * (j - 32.0));

    return kel;
}
#包括
#包括
双塞尔西乌斯(双一);
双开尔文(双j);
int main()
{
双fah=0.0;
printf(“输入华氏温度(或'q'退出):”;
而(扫描频率(“%lf”,&fah)==1)
{
printf(“华氏:\t%8.2lf”,华氏度);
printf(“\n”);
printf(“Celcius:\t%8.2lf”,Celcius(fah));//第一次函数调用
printf(“\n”);
printf(“开尔文:\t%8.2lf”,开尔文(fah));//第二次函数调用
printf(“\n”);
printf(“输入另一华氏温度:”);
}
printf(“再见”);
返回0;
} 
double celcius(double i)//值fah“传递”给i。奇怪吧?
{
常数双分形=(5.0/9.0);
常数双冻结=32.0;
double cel;//注意我必须