全部问题 > 当前问题

一: return (float)t/100; /*除以100,保留2位小数*/我们这边(float)就将long转成了float,这种做法在什么地方可以使用?二: t=(h*1000+5)/10; /*单精度数h乘以1000后再加5,相当于对h中的第三位小数进行四舍五入 , 除以10后将其赋给一个长整型数时就把第三位小数后的数全部截去*/,这句话该怎么理解?谢谢指导!!!

第11课 编程题真题

请编一个函数fun,函数的功能是使实型数保留2位小数,并对第三位进行四舍五入 (规定实型数为正数)。
例如:实型数为 1234.567, 则函数返回 1234.570000; 
          实型数为 1234.564, 则函数返回 1234.560000。
注意: 部分源程序存在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

#include <stdio.h>

float fun (float h )

{

  long t;

  t=(h*1000+5)/10;      /*单精度数h乘以1000后再加5,相当于对h中的第三位小数进行四舍五入

                        除以10后将其赋给一个长整型数时就把第三位小数后的数全部截去*/

  return (float)t/100;  /*除以100,保留2位小数*/

}

main( )

{   float  a;void NONO ();

    printf ("Enter  a:  "); scanf ( "%f", &a );

    printf ( "The original data is :   " );

    printf ( "%f \n\n", a );

    printf ( "The result :  %f\n", fun ( a ) );

    NONO( );

}


void NONO ()

{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,

    输出数据,关闭文件。 */

  int i ;

  float a ;

  FILE *rf, *wf ;


  rf = fopen("in.dat","r") ;

  wf = fopen("out.dat","w") ;

  for(i = 0 ; i < 20 ; i++) {

    fscanf(rf, "%f", &a) ;

    fprintf(wf, "%f\n", fun(a)) ;

  }

  fclose(rf) ;

  fclose(wf) ;

}


二级必过!!! 2015-9-12 16:25:53

共 1 个回答

最佳答案

祁老师 2015-9-12 16:38:00

这边举个例子来说明一下吧

首先是思路 保留2位小数四舍五入  那么我们就会看第三位小数上的数字 如果是>=5的话 那么第二位就需要进一位,否则 第二位保持不变 

题目中的1234.567  如果保留两位小数 四舍五入的话 应该是1234.57 对吧  我们看第三位小数是7  所以 第二位小数要进位 6要变成7  

我们将1234.567扩大1000倍 得到1234567 此时我们+5 就是对7进行判断看看是否>=5 如果>=5需要进位 否则就不变,然后除以10 是为了把最后一位舍去,此时我们得到的数应该是123457  然后再除以100 得到1234.57 就是题目的要求

问题来自: 编程题真题