题目要求:文件f1.txt中有若干个实数,请分别读出,将每个实数按四舍五入取整后存入存入文件f2.txt中。试编写相应程序。
思路:
- 打开文件f1,
- 读入实数,
- 将实数的整数部分和小数部分拆开,
- 小数部分与0.5相比较,
- 整数部分作出对应调整并写入文件f2。
运行后文件内容:
| ![]() |
f1.txt(自行输入) | f2.txt(运行后系统生成) |
源程序:
#include<stdio.h>
#include<stdlib.h>
void splitfloat(double x,int *intpart,double *fracpart)
{
*intpart=(int)x;//强制转换为整型
*fracpart=x-*intpart;//直接减去整数部分可得小数部分
}
int main(void)
{
FILE *fp1,*fp2;
int intpart;//x=345.89,小数部分为0.890015
double z,fracpart,a;//x=123.456,小数部分会输出为0.456001
if((fp1=fopen("f1.txt","r"))==NULL){
printf("文件f1打开失败!");
exit(0);
}
if((fp2=fopen("f2.txt","w"))==NULL){
printf("文件f2打开失败!");
exit(0);
}
while(!feof(fp1)){
fscanf(fp1,"%lf",&z);//读取
if(z!=EOF){
splitfloat(z,&intpart,&fracpart);//拆分整数和小数部分
// printf("整数部分:%d\n小数部分:%lf\n",intpart,fracpart);//帮助检验
if(fracpart>=0.5){//小数部分 四舍五入
intpart=intpart+1;
// printf("整数部分:%d\n小数部分:%lf\n",intpart,fracpart);//帮助检验
}
fprintf(fp2,"%d\n",intpart);
}
}
return 0;
}
其中拆分实数的整数与小数部分原题目:
要求自定义一个函数 void splitfloat ( float x , int * intpart , float * fracpart ),其中 x 是被拆分的实数,* intpart 和* fracpart 分别是将实数 x 拆分出来的整数部分与小数部分。编写主函数,并在其中调用函数 splitfloat ()。
源程序:
#include<stdio.h>//习题8.1 拆分实数的整数与小数部分
void splitfloat(float x,int *intpart,float *fracpart)
{
*intpart=(int)x;//强制转换为整型
*fracpart=x-*intpart;//直接减去整数部分可得小数部分
}
main(void)
{
float x,fracpart;//x=123.456,小数部分会输出为0.456001
int intpart;//x=345.89,小数部分为0.890015
printf("Enter x:");
scanf("%f",&x);
splitfloat(x,&intpart,&fracpart);
printf("整数部分:%d\n小数部分:%lf",intpart,fracpart);
return 0;
}