鱼C论坛

 找回密码
 立即注册
查看: 4682|回复: 3

写了一个求1到N的所有奇数和的程序,但是出现了一个问题,请会的帮我看看

[复制链接]
发表于 2013-3-14 13:09:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 gj113669 于 2013-3-14 13:35 编辑

/*
----------------------------------------------------------
求1到N之间所有的奇数和、偶数和、奇数个数和奇数的平圴值
----------------------------------------------------------
*/
# include <stdio.h>
int main(void)
{

int i, sum = 0, osum = 0, cnt = 0, n;                           //cnt表是数量
float svg;                                                                    //SVG表示平均值
char a;                                                                        //定义一个存放字符型数据的变量
do
    {
      printf("请输入您需要计算的数值:");
      scanf("%d", &n);
      for (i=1; i<=n;i++)        
           {
               if (i%2==1)                                                                  //判断除以2余1的数(奇数)如果成立执行下面的表达式
                    {
                       sum = sum + i;                           
                       cnt = cnt + 1;                                                              /*计算奇数的个数,每循环一次CNT的值加1,
                                                                                                               从而得到了求奇数数量的目的*/
                     }
                if (i%2==0)
                     osum = osum + i;
             }
  svg = 1.0 * sum /cnt;                                                       //用得到的奇数和除以奇数的个数求出平均值
  
  printf ("奇数和是:%d\n偶数和是:%d\n奇数的个数是:%d\n平均值是:%f\n", sum, osum, cnt, svg);
  
  printf("如果继续请按Y否则按N退出:");                                   //人机交互提示语
  scanf (" %c", &a);                                                                    //字符型数据输入必需在%C前加空格
   }while (a=='Y'|| a=='y');                                                            //如果表达式成立,那从DO开始重新执行


return 0;

}
程序用do...while循环作人机交互,可是只有第一次运行时数据是正确的,到第二次时总是把上次的数据加上,是不是应该有一个把数据清零的语句。还有在先择Y/N实怎么才能实现只有按这两个字母才能实现继续或退出,我这个程序只能实现按Y继续,按非Y的退出。


小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-3-14 15:50:34 | 显示全部楼层
printf ("奇数和是:%d\n偶数和是:%d\n奇数的个数是:%d\n平均值是:%f\n", sum, osum, cnt, svg);
打印输出后
要在后面把累加值清零
sum = 0;
osum = 0;
cnt = 0;

所以这个地方应为
  svg = 1.0 * sum /cnt;                                                       //用得到的奇数和除以奇数的个数求出平均值
  
  printf ("奇数和是:%d\n偶数和是:%d\n奇数的个数是:%d\n平均值是:%f\n", sum, osum, cnt, svg);
sum = 0;      
  osum = 0;
  cnt = 0;
printf("如果继续请按Y否则按N退出:");                                   //人机交互提示语
  scanf (" %c", &a);   
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-3-14 16:21:30 | 显示全部楼层
sum = 0, osum = 0, cnt = 0可以把这3个初始化写在循环内部开头do
    {
      int sum = 0, osum = 0, cnt = 0
      printf("请输入您需要计算的数值:");
      scanf("%d", &n);
、、、、、、
     



小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-3-14 19:51:45 | 显示全部楼层
谢谢两位,我试了一下果然可以了
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-5 20:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表