| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1262 人关注过本帖
标题:作业上遇到的一个问题,望帮忙看一下
只看楼主 加入收藏
别说我帅
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2004-10-14
收藏
 问题点数:0 回复次数:12 
作业上遇到的一个问题,望帮忙看一下

题目: 用 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'); } ===================================== 望朋友们帮帮忙!~先谢谢了!

搜索更多相关主题的帖子: 作业 
2004-10-14 00:05
xueer
Rank: 1
等 级:新手上路
威 望:1
帖 子:511
专家分:0
注 册:2004-10-8
收藏
得分:0 

子函数也不对  for循环下是for(……) {sum=sum+i;i++;}


2004-10-14 15:45
心若在
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2004-9-21
收藏
得分:0 

# 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(); }

仅供参考~~~


我知道我菜 但我会尽我最大的努力去帮助别人!
2004-10-14 18:18
别说我帅
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2004-10-14
收藏
得分:0 

goto a ; 这句话,什么意思啊!~

我好象没学过

2004-10-14 19:46
别说我帅
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2004-10-14
收藏
得分:0 
他输出要求这样的:1/2+1/4+1/6+1/8+1/10+...+1/100=2.250
输入什么数字,就到那里停止!
2004-10-14 20:00
别说我帅
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2004-10-14
收藏
得分:0 
我重新写了一下:
#include &lt;stdio.h&gt;
float addOdd(int n)
{
    float Oddsum=0;
 for (int i=1;i&lt;=n;i+=2)
     Oddsum=Oddsum+1/n;
 return Oddsum;
}
float addEven(int n)
{
     float Evensum=0;
  for (int i=2;i&lt;=n;i+=2)
   Evensum=Evensum+1/n;
  return Evensum;
}
void main()
{   int num;
    char ctr;
    do
 {
    printf("请输入一个正整数:");
    scanf("%d",&amp;num);
    if (num%2==0)
    {
     printf("%.3f\n",addOdd(num));
    }
       else
    {
     printf("%.3f\n",addEven(num));
    }   
       printf("是否继续输入(y/n)?");
    scanf(" %c",&amp;ctr);
 }while(ctr=='y' || ctr=='Y');
}
但是每次不管输入什么数字,每次结果都是输出0.000
帮忙看看问题出在那了!~
2004-10-14 20:17
别说我帅
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2004-10-14
收藏
得分:0 
输出结果就是达不到他的要求:按要求打印出最后的结果:输出加法的公式,加数最多显示前五项和最后一项,中间如果有省略要加用“...”连接;并且结果保留 3 位小数。如输入 100 时,输出结果是:
1/2+1/4+1/6+1/8+1/10+...+1/100=2.250
2004-10-14 20:25
心若在
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2004-9-21
收藏
得分:0 

or (int i=1;i<=n;i+=2) i应该是float 型 不然得的结果当然是0.000。(为什么会得0.000自己好好想想)

多看点书 然后多想点 学起来就容易点

最后祝你成功!!!


我知道我菜 但我会尽我最大的努力去帮助别人!
2004-10-15 16:37
别说我帅
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2004-10-14
收藏
得分:0 
谢谢楼上的这位朋友!~
但是i 改了float 型,结果还是输出是:0.000
还有要按他要求这样输出,我没办法实现啊!~麻烦你再解释一下好吗?
2004-10-15 21:03
mingyue
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2004-5-13
收藏
得分:0 

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


2004-10-15 22:28
快速回复:作业上遇到的一个问题,望帮忙看一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024693 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved