热心网友
回答时间:2024-10-26 22:01
/*读入三个双精度数,求它们的平均值并保留此平均值小数点后一位数,对小数点后第二位数进行四舍五入,最后输出结果。*/
#include <stdio.h>
#include <string.h>
void main()
{
double a,b,c,d,e;
int g,h1,h2;
char f[20];
printf("请输入三个双精型\n");
scanf("%lf %lf %lf",&a,&b,&c);
d=(a+b+c)/3;
printf("原来未按要求执行返回的双精型\n");
printf("%lf\n",d);
e=d-(int)d; /*求小数部分*/
sprintf(f,"%f",e);/* 将小数转换成字符串*/
printf("转换成字符串之后的小数部分\n");
printf("%s\n",f);/*这一步是用来检测字符串是怎样的*/
g=strlen(f); /*计算字符串长度*/
printf("字符串长度:%d\n",g);
if(g>=3)
{
printf("处理好之后的平均值是\n");
h2=(int)f[3]; /* f[3]是字符型数据,强行取整之后,编程ASC值*/
if(h2>52) /*判断ASC码 4*/
{
h2=(int)f[2];
if(h2>56)
{
h2=48; /*进位直接写0的ASC码*/
h1=(int)d;
h1=h1+1;
}
else
{
h2=h2+1;
h1=(int)d;
}
/*转换成字符串之后一个个字符输出,好笨的办法,求大神精辟*/
printf("%d",h1);/*这里是取双精型的整,不用输出字符*/
printf("%c",f[1]);
printf("%c",h2); /*h2是取ASC码的值,所以要输出字符型数据*/
}
else{
printf("%d",h1=(int)d);
printf("%c",f[1]);
printf("%c",f[2]);}
printf("\n");
}
else{
printf("处理好之后的平均值是\n");
printf("%g\n",d);
}
}
收起
热心网友
回答时间:2024-10-26 22:01
#include "stdio.h"
#include "string.h"
int main()
{
double num1=0,num2=0,num3=0,ave=0;
char temp[20] = {0};
printf("please input number:");
scanf("%lf%lf%lf",&num1,&num2,&num3);
ave = (num1+num2+num3)/3; //现在的结果还没做四舍五入运算
sprintf(temp,"%c",ave-(int)ave); //把小数部分都格式化到一个字符数组里
/*字符数组一定是0.xx,那么第二位小数是temp[3],所以判断它是否大于5,
因为它是字符,所以判断是否大于'5'
*/
if(temp[3] > '5') ave += 0.1;
printf("ave=%.1f",ave);
return 0;
}
收起
热心网友
回答时间:2024-10-26 21:55
他写的C++的,我写个C的:
#include<stdio.h>
main()
{
double a, b, c, d;
printf("输入三个双精度数\n");
scanf("%lf%lf%lf", &a, &b, &c);
d = ( a + b + c) / 3;
printf("%.1f\n", d);
}
收起