标题:请高手帮忙看看这个简单的求圆周和面积的程序
只看楼主
fred_99
Rank: 1
等 级:新手上路
帖 子:8
专家分:2
注 册:2013-5-12
结帖率:0
已结贴  问题点数:20 回复次数:11 
请高手帮忙看看这个简单的求圆周和面积的程序
以下是一个简单的求圆面积和圆周的程序,具体的要求是:
1. 按照输入的半径来计算面积和圆周;
2. 输入的半径必须大于0,否侧,系统会要求重新输入有效半径值;
3. 当输入-1为半径值的时候,系统结束计算。并且结束之后统计输入有效半径次数和一共输入的有效半径的总和。

现在遇到的难题是:关于计算和统计都没有问题,只是在输入-1来结束程序的时候,程序总是要先计算-1为半径的圆周和面积,再进行总体的统计。

怎样才能让系统跳过计算半径为-1的圆周和面积?

我刚开始学C语言不到2周,实在是没法解决这个问题。请高手帮忙解惑。先谢过了。

#include "stdafx.h"
#include "stdio.h"
#define PI 3.14159265
int _tmain(int argc, _TCHAR* argv[])
{
    double radius=0.0;
    double circumference =0.0;
    double area = 0.0;
    int calculation_counted = -1; // adjustment because of the circule which has the radius=-1 (to end) will be counted
    double sum_radiuses= 1.0; // adjustment because of the radius=-1 will be entered to end

    while (radius != -1)
    {   
        printf ("Please enter a radius value (-1 to end): ");
        scanf_s ("%lf", &radius);
               
        while ((radius<-1) || (-1 < radius && radius< 0))// radius must be bigger than 0
        {
        printf ("The radius must >=0, enterd a valid radius (or -1 to end): ");
        scanf_s ("%lf", &radius);
        }
        
        circumference = 2*PI*radius;// circumference equation
        area = PI*radius*radius; // area equation

        calculation_counted = calculation_counted + 1;
        sum_radiuses = sum_radiuses + radius;
        
        printf ("The ciucumference is %lf \n", circumference); // %lf, %#.#f.... depends on the requirement
        printf ("The area is %lf\n\n", area);     
    }
   
    printf ("%d valid radiuses have been counted,\n ", calculation_counted);
    printf ("The sum of valid radiuses is %5.2f\n ", sum_radiuses);
    printf ("\n\n");

    return 0;
}
搜索更多相关主题的帖子: 计算 圆面积 C语言 
2013-05-12 11:27
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:10 
你那两个循环是什么意思?

授人以渔,不授人以鱼。
2013-05-12 11:50
yyqd2013
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:35
专家分:154
注 册:2013-5-8
得分:10 
if (radius != -1)
{
        circumference = 2*PI*radius;// circumference equation
        area = PI*radius*radius; // area equation
        calculation_counted = calculation_counted + 1;
        sum_radiuses = sum_radiuses + radius;
        printf ("The ciucumference is %lf \n", circumference); // %lf, %#.#f.... depends on the requirement
        printf ("The area is %lf\n\n", area);     
}

[ 本帖最后由 yyqd2013 于 2013-5-12 12:00 编辑 ]
2013-05-12 11:57
yyqd2013
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:35
专家分:154
注 册:2013-5-8
得分:0 
或者:
    while (radius != -1)
    {   
        printf ("Please enter a radius value (-1 to end): ");
        scanf_s ("%lf", &radius);
               
        while ((radius<-1) || (-1 < radius && radius< 0))// radius must be bigger than 0
        {
        printf ("The radius must >=0, enterd a valid radius (or -1 to end): ");
        scanf_s ("%lf", &radius);
        }
        
        if (-1 == radius)
            continue;

        circumference = 2*PI*radius;// circumference equation
        area = PI*radius*radius; // area equation

        calculation_counted = calculation_counted + 1;
        sum_radiuses = sum_radiuses + radius;
        
        printf ("The ciucumference is %lf \n", circumference); // %lf, %#.#f.... depends on the requirement
        printf ("The area is %lf\n\n", area);     
    }
2013-05-12 12:02
fred_99
Rank: 1
等 级:新手上路
帖 子:8
专家分:2
注 册:2013-5-12
得分:0 
回复 2楼 TonyDeng
你是说那两个 while{}?

第一个是 只要radius不等于-1,就一直可以输入radius值。
第二个是 如果发现radius小于零并不等于-1,就要求输入大于零的有效radius值。
2013-05-12 12:42
fred_99
Rank: 1
等 级:新手上路
帖 子:8
专家分:2
注 册:2013-5-12
得分:0 
回复 4楼 yyqd2013
这样可以让程序不计算radius=-1的情况。

但是,最后的统计数值出现问题。一直改不好。
2013-05-12 12:43
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
你记住自己的思路,进入单步调试模式,输入-1,一步一步看着指令指针是怎么流经那些代码的,看过后自然知道是怎么回事。

授人以渔,不授人以鱼。
2013-05-12 12:44
yyqd2013
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:35
专家分:154
注 册:2013-5-8
得分:0 
没看清楚。你这逻辑变复杂了。建议改为:
int calculation_counted = 0;
double sum_radiuses= 0;
2013-05-12 12:47
fred_99
Rank: 1
等 级:新手上路
帖 子:8
专家分:2
注 册:2013-5-12
得分:0 
回复 3楼 yyqd2013
用if替代while,不能循环。。。
2013-05-12 12:48
fred_99
Rank: 1
等 级:新手上路
帖 子:8
专家分:2
注 册:2013-5-12
得分:0 
回复 7楼 TonyDeng
怎样进入单步调试模式?

不好意思,我是刚刚开始学。
2013-05-12 12:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-406872-1-1.html




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

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