c语言-请帮忙运行一下这段C代码,请教一下为什么会出现这种现象,帮忙分析一下缺陷

问题描述

请帮忙运行一下这段C代码,请教一下为什么会出现这种现象,帮忙分析一下缺陷

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

void Temperature (double fah);
int main(void)
{
double fah;

printf("Please input an fahrenheit temperaturen");

while (scanf("%f",&fah)==1)
{
    Temperature(fah);
    printf("Please input an fahrenheit temperaturen");
}
return 0;

}
void Temperature (double fah)
{
const float FAH_CEL_1=1.8,FAH_CEL_2=32.0,CEL_KEL=273.16;

printf("Fahrenheit = %.2fn",fah);
printf("Celsius = %.2fn",fah*FAH_CEL_1+FAH_CEL_2);
printf("Kelvin = %.2fn",fah*FAH_CEL_1+FAH_CEL_2+CEL_KEL);

}
/*我的运行结果:
Please input an fahrenheit temperature
123.3
Fahrenheit = 0.00
Celsius = 32.00
Kelvin = 305.16
Please input an fahrenheit temperature
123.2
Fahrenheit = 0.00
Celsius = 32.00
Kelvin = 305.16
Please input an fahrenheit temperature

所有结果都是一样的,无论输入什么值
*/

解决方案

你将参数fah定义为double,但是在指定scanf的格式时用的却是“%f”,实际上double对应的格式符应该是"%lf"。

我在自己机器上把参数类型double改为了float编译了一下,运行正常(不过感觉你把换算公式搞反了,这里就不改了):

 #include <stdio.h>

void Temperature(float fah);

int main(){
        float fah;
        printf("Please input an fahrenheit temperaturen:");
        while(scanf("%f",&fah)==1){
                Temperature(fah);
                printf("Please input an fahrenheit temperaturen:");
        }
return 0;
}

void Temperature(float fah){
        const float FAH_CEL_1=1.8,FAH_CEL_2=32.0,CEL_KEL=273.16;
        printf("Fahrenheit = %.2fn",fah);
        printf("Celsius = %.2fn",fah*FAH_CEL_1+FAH_CEL_2);
        printf("Kelvin = %.2fn",fah*FAH_CEL_1+FAH_CEL_2+CEL_KEL);
}

Please input an fahrenheit temperature
:123.3
Fahrenheit = 123.30
Celsius = 253.94
Kelvin = 527.10
Please input an fahrenheit temperature
:123.2
Fahrenheit = 123.20
Celsius = 253.76
Kelvin = 526.92

欢迎指正

解决方案二:

#include "stdafx.h"
#include
#include

void Temperature (double fah);

int main(int argc, char* argv[])
{
double fah;

while (1)

{

 printf("Please input an fahrenheit temperaturen"); 

 char  szBuf[255]="";

 scanf("%s",szBuf);

 char *pTemp =szBuf;

 if(NULL!=pTemp)
 {

     while(*pTemp!='')
     {

       if(*pTemp!='.'&&(*pTemp>'9'||*pTemp<'0'))
       {
           printf("循环结束!n");
           exit(0);

       }

       pTemp++;

     }

 }

  pTemp =szBuf;
  fah =atof(pTemp);
  Temperature(fah);

}

return 0;

}

void Temperature (double fah)
{

const float FAH_CEL_1=1.8,FAH_CEL_2=32.0,CEL_KEL=273.16;

printf("Fahrenheit = %.2fn",fah);

printf("Celsius = %.2fn",fah*FAH_CEL_1+FAH_CEL_2);

printf("Kelvin = %.2fn",fah*FAH_CEL_1+FAH_CEL_2+CEL_KEL);
}

解决方案三:

#include

void temperatures(const double n);
int main()
{
double i;
printf("please shu ru temperatures:");
scanf("%lf",&i);
while( 1)
{
temperatures(i);
printf("shu ru or q tuichu");
scanf("%lf",&i);
}
return 0;
}
void temperatures(const double n)
{
const double i = 1.8*n + 32.0;
const double j = n + 273.6;
printf("%.2lfn %.2lfn %.2lfn",i,n,j);
}

解决方案四:

#include

void temperatures(const double n);
int main()
{
double i;
printf("please shu ru temperatures:");
scanf("%lf",&i);
while( 1)
{
temperatures(i);
printf("shu ru or q tuichu");
scanf("%lf",&i);
}
return 0;
}
void temperatures(const double n)
{
const double i = 1.8*n + 32.0;
const double j = n + 273.6;
printf("%.2lfn %.2lfn %.2lfn",i,n,j);
}

时间: 2025-01-19 08:23:49

c语言-请帮忙运行一下这段C代码,请教一下为什么会出现这种现象,帮忙分析一下缺陷的相关文章

javascript-菜鸟求js大神帮忙!!为什么我这段js代码只有第一个元素绑定了事件

问题描述 菜鸟求js大神帮忙!!为什么我这段js代码只有第一个元素绑定了事件 <script> window.onload=function(){ var oParent=document.getElementById("aa"); var boxs=oParent.getElementsByClassName("box"); for(var i=0;i<boxs.length;i++){ var imgs=boxs[i].getElementsB

r语言-请大家看看我这段代码有啥问题,为什么会提示“更换参数长度为零”?

问题描述 请大家看看我这段代码有啥问题,为什么会提示"更换参数长度为零"? pse=rep(0,Iter) psa=rep(0,Iter) for (j in c(1:Iter)) { P=rep(0, T) for (i in c(1:T)) { n=rnorm(1,0,1) temp = exp(r-0.5*(s)^2 + s*n) if(i>=2) P= P[i-1] * temp if(i==1) P=initPrice*temp } pse[j]=P[T] psa[j]

语言-新手求帮忙看下这段代码的数据溢出问题,没有C币理解下(我是在CodeBlock10.05下运行的)

问题描述 新手求帮忙看下这段代码的数据溢出问题,没有C币理解下(我是在CodeBlock10.05下运行的) #include #include #include unsigned int Ex_secret[30]={11,4,120,75,170,204,90,59,78,49,//用0~255的数表示8位2进制,一共240位 148,248,190,137,0,9,17,91,174,105,45,124,177,205,57,97,194,155,120,36}; unsigned in

c语言问题-C语言请大神帮忙找BUG

问题描述 C语言请大神帮忙找BUG #include #define MAXIMUM 1000 //这段代码是要实现将一个字符串中的连续的空格用数 int getline(char line[]); //较少的指标符和空格代替,请指点,如其中有什么低等 main(){ //错误也请大神们指点,本人新手只懂皮毛,谢谢. int len; char line[MAXIMUM]; char newline[MAXIMUM]; int j; int k = 0; int ecount; int n; w

请大牛帮忙把一段php代码转为C#的,50分感激不尽。

问题描述 请大牛帮忙把一段php代码转为C#的,50分感激不尽.<?phpheader('Content-type:application/json');$s=!empty($_POST['s'])?$_POST['s']:null;$j=!empty($_POST['j'])?$_POST['j']:null;$pat=!empty($_POST['path'])?$_POST['path']:null;$patharr=explode('/',$pat);$patz='';for($i=0;

高分悬赏 请大神指导-超级长得SQL语句,看晕你的头,求大神帮忙看一下这段SQL错在哪里。

问题描述 超级长得SQL语句,看晕你的头,求大神帮忙看一下这段SQL错在哪里. DECLARE @SQL VARCHAR(8000) SET @SQL ='SELECT A.POINT, A.WZ, A.LC, A.PL1, A.PL2, A.XS1, CASE WHEN ISNULL(A.ZDZS,'''') <> '''' THEN A.ZDZS ELSE 0 END AS ZDZS, CASE WHEN ISNULL(A.PJZ,'''') <> '''' THEN A.PJ

请大家帮忙看一下,这段JS出了什么问题,琢磨好几天了,我就是看着没毛病,但就是实现不了功能!!!!急求JS高手解决一下吧!!!!!!!!

问题描述 我想要实现的功能是这样的:当select标签中的选项一改变,TextBox中被选择的文字就改变了,就加上了别的字符串,请看:看<HTML>代码是这样的:<selectname="zt"id="zt"onchange="javascript:zt()"><option>字体</option><option">黑体</option><option>

c语言-请问C语言是怎么运行的?

问题描述 请问C语言是怎么运行的? 大家好,请问C语言是怎么运行的呀?我 是菜鸟一个,想学C语言,哪个高手帮忙解决?需要什么编译器?怎么搭建环境? 解决方案 什么都不需要,打开codepad.org 左侧语言选择C 右侧写上一段代码 点提交,勾选运行代码 就可以看到输出结果了. 你甚至可以只使用一个能上网的手机也能写程序. 解决方案二: 装个ubuntu的系统.打开终端. vim test.c 编辑段代码. 然后 gcc test.c 会生成一个a.out文件. 输入./a.out就行了. 解决

c语言程序问题,求一段代码

问题描述 c语言程序问题,求一段代码 求一段c语言代码:有一个已排好序的数组,要求输入一个数后,按原来排序的规律将其插入数组中 解决方案 #include<iostream> #include<iomanip> using namespace std; int main() { int i; cout<<"原来数列为:"<<endl; int a[11]={1,2,3,5,6,7,8,9,10,11}; for(i=0;i<=8;i