C初级+编程练习题
我正在学习“C Primer Plus”,刚刚完成了编程练习,我在第五章的最后一节(运算符、表达式和语句)中遇到了困难 这项工作是: 编写一个程序,要求用户输入华氏温度。程序应以类型双精度数字读取温度,并将其作为参数传递给用户提供的名为Temperations()的函数。此函数应计算摄氏当量和开尔文当量,并以小数点右侧两位的精度显示所有三个温度。它应该用它所代表的温度标度来标识每个值。以下是将华氏温度转换为摄氏温度的公式: 摄氏=1.8*华氏+32.0度 科学中常用的开尔文标度是一种标度,其中0表示绝对零,即可能温度的下限。以下是将摄氏度转换为开尔文的公式: 开尔文=摄氏度+273.16 函数应该使用const来创建转换中出现的三个常量的符号表示。main()函数应该使用一个循环,允许用户重复输入温度,在输入q或其他非数值时停止 我的代码是:C初级+编程练习题,c,C,我正在学习“C Primer Plus”,刚刚完成了编程练习,我在第五章的最后一节(运算符、表达式和语句)中遇到了困难 这项工作是: 编写一个程序,要求用户输入华氏温度。程序应以类型双精度数字读取温度,并将其作为参数传递给用户提供的名为Temperations()的函数。此函数应计算摄氏当量和开尔文当量,并以小数点右侧两位的精度显示所有三个温度。它应该用它所代表的温度标度来标识每个值。以下是将华氏温度转换为摄氏温度的公式: 摄氏=1.8*华氏+32.0度 科学中常用的开尔文标度是一种标度,其中0
#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;//注意我必须