2020年11月7日
今日题目为“求以下三数的和,保留2位小数 1~a之和 1~b的平方和 1~c的倒数和”
最终以最复杂的程序完成了结果,程序如下
#include <stdio.h>
int main(void)
{
int a,b,c,sum1=0,sum2=0,i,j;
float sum3=0.0,k;
printf("please write 3 number\n");
scanf("%d%d%d",&a,&b,&c);
for(i=1;i<=a;i++)
{
sum1 +=i;
}
printf("%d\n",sum1);
for(j=1;j<=b;j++)
{
sum2=sum2+j*j;
}
printf("%d\n",sum2);
for(k=1.0;k<=c;k++)
{
sum3+=1/k;
}
printf("%f\n",sum3);
printf("%f\n",sum1+sum2+sum3);
return 0;
}
可以看出程序的复杂,完全可以进行精简。
其中犯的错误有如下几点,
错误一:
scanf(“%d,%d,%d”,&a,&b,&c);
其中最好不要用“,”将%d隔开,因在输入是容易出错 直接放入三个
scanf(“%d%d%d”,&a,&b,&c);
输入时按空格即可分开赋值的数了。

错误2
在进行sum3的加法时出现
sum3+=1/k;
的因为我开始定义的k为整型,1/k永远是0,因为是整型,所以1/k为取小数点前的整数,所以一直无法求出答案,因此可将k定义成浮点型,或者将1/k改为1.0/k这样更加精简。
我们可以通过修改将k定义为整型,将1/k改为1.0/k依旧得到正确的答案

代码也可以精简成如下方案
方案1
#include <stdio.h>
int main (void)
{
int num[3],a,b,c,i;
float sum[3]={0.0},t,j;
printf("please write 3 num\n");
scanf("%d%d%d",&num[0],&num[1],&num[2]);
//sum[3]={a,b,c};
for(i=0;i<=2;i++)
{
for(j=1;j<=num[i];j++)
{
if(i==0)
t=j;
else if(i==1)
t=j*j;
else if(i==2)
t=1.0/j;
printf("%f\n",t);
sum[i]+=t;
}
}
printf("%d\n",sum[0]);
printf("%d\n",sum[1]);
printf("%f\n",sum[2]);
printf("%f\n",sum[0]+sum[1]+sum[2]);
}
大家有什么好的想法可以相互交流,有问题大家指出,谢谢