c语言小白学习c primerplus

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);

输入时按空格即可分开赋值的数了。

c语言小白学习cprimerplus

错误2

在进行sum3的加法时出现

sum3+=1/k;

的因为我开始定义的k为整型,1/k永远是0,因为是整型,所以1/k为取小数点前的整数,所以一直无法求出答案,因此可将k定义成浮点型,或者将1/k改为1.0/k这样更加精简。

我们可以通过修改将k定义为整型,将1/k改为1.0/k依旧得到正确的答案

c语言小白学习cprimerplus

代码也可以精简成如下方案

方案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]);

}

大家有什么好的想法可以相互交流,有问题大家指出,谢谢