题目: 用 C 语言编写一个程序,完成以下功能:
接收一个正整数 n,当 n 为偶数时,计算 1/2+1/4+...+1/n 的值;当 n 为奇数时,计算 1/1+1/3+...+1/n 的值(上述两个计算过程通过自定义函数完成);并将结果通过屏幕输出。
具体要求如下: 1、在主程序中,先给出如下提示:“请输入一个正整数:”,按照要求输入一个正整数。 断这个正整数是奇数还是偶数,若是奇数则调用函数 addOdd 求和,若是偶数则调用函数 addEven 求和. 2、定义并编写 float addOdd(int n) 函数和 float addEven(int n) 函数; 编写 addOdd 函数实现计算“1/1+1/3+...+1/n”并返回结果; 编写 addEven 函数实现计算“1/2+1/4+...+1/n”并返回结果。 3、按要求打印出最后的结果:输出加法的公式,加数最多显示前五项和最后一项,中间如果有省略要加用“...”连接;并且结果保留 3 位小数。如输入 100 时,输出结果是: 1/2+1/4+1/6+1/8+1/10+...+1/100=2.250 4、程序提示“是否继续输入(y/n)?”,若输入的是 y 或 Y 则继续输入下一个正整数,重复上述操作,否则退出程序 5、在实现功能的同时,要求注意编程规范,程序逻辑分明,书写有缩进,对程序进行有效的注释 ============================================= 我写的代码: #include <stdio.h> float addOdd(int n) { float sum=0; for (int i=1;i<=n;i++) sum=sum+1; i++; return sum; } float addEven(int n) { float sum=0; for (int i=0;i<=n;i++) sum=sum+n; i++; return sum; } void main() { int num,ctr; do { printf("请输入一个正整数:"); scanf("%d",&num); if (num%2==0) { //这里不会 } else { //这里不会 } printf("是否继续输入(y/n)?"); scanf(" %c",&ctr); }while(ctr=='y' || ctr=='Y'); } ===================================== 望朋友们帮帮忙!~先谢谢了!
----------------解决方案--------------------------------------------------------
子函数也不对 for循环下是for(……) {sum=sum+i;i++;}
----------------解决方案--------------------------------------------------------
# include "stdio.h" float addodd(int n) { float osum=0 ; float i ; for(i=2;i<=n;i+=2) osum+=1/i ; return(osum); }
float addEven(int n) { float qsum=0 ; float i ; for(i=1;i<=n;i+=2) qsum+=1/i ; return(qsum); }
main() { int n,f ; char d ; a : printf("intput:"); scanf("%d",&n); if(!(n>=0)) { printf("error,please continue\n"); getch(); goto a ; } if(n%2==0) printf("%7.3f\n",addodd(n)); else printf("%7.3f\n",addEven(n)); printf("y/n\n"); scanf("%c",&d); if(d=='y') goto a ; getch(); }
仅供参考~~~
----------------解决方案--------------------------------------------------------
goto a ; 这句话,什么意思啊!~
我好象没学过
----------------解决方案--------------------------------------------------------
他输出要求这样的:1/2+1/4+1/6+1/8+1/10+...+1/100=2.250
输入什么数字,就到那里停止!
----------------解决方案--------------------------------------------------------
我重新写了一下:
#include <stdio.h>
float addOdd(int n)
{
float Oddsum=0;
for (int i=1;i<=n;i+=2)
Oddsum=Oddsum+1/n;
return Oddsum;
}
float addEven(int n)
{
float Evensum=0;
for (int i=2;i<=n;i+=2)
Evensum=Evensum+1/n;
return Evensum;
}
void main()
{ int num;
char ctr;
do
{
printf("请输入一个正整数:");
scanf("%d",&num);
if (num%2==0)
{
printf("%.3f\n",addOdd(num));
}
else
{
printf("%.3f\n",addEven(num));
}
printf("是否继续输入(y/n)?");
scanf(" %c",&ctr);
}while(ctr=='y' || ctr=='Y');
}
但是每次不管输入什么数字,每次结果都是输出0.000
帮忙看看问题出在那了!~
----------------解决方案--------------------------------------------------------
输出结果就是达不到他的要求:按要求打印出最后的结果:输出加法的公式,加数最多显示前五项和最后一项,中间如果有省略要加用“...”连接;并且结果保留 3 位小数。如输入 100 时,输出结果是:
1/2+1/4+1/6+1/8+1/10+...+1/100=2.250
----------------解决方案--------------------------------------------------------
or (int i=1;i<=n;i+=2) i应该是float 型 不然得的结果当然是0.000。(为什么会得0.000自己好好想想)
多看点书 然后多想点 学起来就容易点
最后祝你成功!!!
----------------解决方案--------------------------------------------------------
谢谢楼上的这位朋友!~
但是i 改了float 型,结果还是输出是:0.000
还有要按他要求这样输出,我没办法实现啊!~麻烦你再解释一下好吗?
----------------解决方案--------------------------------------------------------
i不能定义成float型,因为作为循环次数的变量不能用float型。 但是在计算式中要用到1/i,这时i要显式类型转换成float型,才能得到小数。否则不管i是什么数结果都是0
帮你改了一下,应该符合你的输出要求了
#include<stdio.h>
float addOdd(int n) { int i; float Oddsum=0; for (i=1;i<=n;i+=2) Oddsum=Oddsum+1/(float)i; /*注意这里,不是1/n*/ return Oddsum; } float addEven(int n) { int i; float Evensum=0; for (i=2;i<=n;i+=2) Evensum=Evensum+1/(float)i; /**/ return Evensum; } void main() { int num; char ctr; do { printf("请输入一个正整数:"); scanf("%d",&num); if (num%2==0) { switch(num) { case 2: printf("1/2=%.3f\n",addEven(num));break; case 4: printf("1/2+1/4=%.3f\n",addEven(num));break; case 6: printf("1/2+1/4+1/6=%.3f\n",addEven(num));break; default: printf("1/2+1/4+1/6+...+1/%d=%.3f\n",num,addEven(num)); } }
else { switch(num) { case 1: printf("1/1=%.3f\n",addOdd(num));break; case 3: printf("1/1+1/3=%.3f\n",addOdd(num));break; case 5: printf("1/+1/3+1/5=%.3f\n",addOdd(num));break; default: printf("1/1+1/3+1/5+...+1/%d=%.3f\n",num,addOdd(num)); } } printf("是否继续输入(y/n)?"); scanf(" %c",&ctr); }while(ctr=='y' || ctr=='Y'); }
----------------解决方案--------------------------------------------------------