习题9-3 平面向量加法
本题要求编写程序,计算两个二维平面向量的和向量。
输入格式:
输入在一行中按照“x1 y1 x2 y2”的格式给出两个二维平面向量v1=(x1,y1)和v2=(x2,y2)的分量。
输出格式:
在一行中按照
(x, y)
的格式输出和向量,坐标输出小数点后一位(注意不能输出−0.0)
第一眼看上去感觉这道题很简单,不理解为什么放在这么靠后的位置。
第一次代码实现如下:
#include <stdio.h>
int main(){
double x1,y1,x2,y2;
double res1,res2;
scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);
res1=x1+x2;
res2=y1+y2;
if(res1==0&&res2!=0){
printf("(%d, %.1f)",res1,res2);
}
if(res1!=0&&res2==0){
printf("(%.1f, %d)",res1,res2);
}
if(res1==0&&res2==0){
printf("(%d, %d)",res1,res2);
}
if(res1!=0&&res2!=0){
printf("(%.1f, %.1f)",res1,res2);//各种条件判断输出
}
}
最后果然答案错了。
错误提示如下
检查了一遍代码的四舍五入,发现四舍五入下当结果绝对值小于等于0.05,依然会输出-0.0,且一直为保留一位小数,只是不能有负号。
修改如下:
#include <stdio.h>
#include <math.h>
int main(){
double x1,y1,x2,y2;
double res1,res2;
scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);
res1=x1+x2;
res2=y1+y2;
if(fabs(res1)<0.05){
res1=0.0;//如果满足则置为零
}
if(fabs(res2)<0.05){
res1=0.0;
}
printf("(%.1f, %.1f)",res1,res2);
}
答案正确。