| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6097 人关注过本帖
标题:输入一行加减运算的字符串(少于80个字符),计算加减运算的结果
只看楼主 加入收藏
hsm
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2015-11-19
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:8 
输入一行加减运算的字符串(少于80个字符),计算加减运算的结果
输入一行加减运算的字符串(少于80个字符),计算加减运算的结果
输入输出示例:
10+52-28
y=34
我写的源程序是这样的,系统编译是没有问题的,但是求出来的结果不对,不知道哪里错了,麻烦看一下
#include<stdio.h>
#include<math.h>
#define N 80
void main()
{
    int i,j,m=0,p=0,a[N],sum;              //m为减号个数,p为加号个数
    char num[N];
    gets(num);
    for(i=0,j=0;((num[i]>='0'&&num[i]<='9')||num[i]=='+'||num[i]=='-')&&num[i]!='\0';i++)//判断是否有其他字符
        j++;
    if(i=j)
    {
        for(i=0;num[i]!='\0';i++)
        {
            a[i]=(int)num[i]-48;
            if(a[i]==-5)
                p++;
            if(a[i]==-3)
            {
                m++;
                a[i+1]=-a[i+1];
            }
            if(a[i+1]!=-5&&a[i+1]!=-3&&a[i+1]!='\0')
            {
                if(a[i]!=-5&&a[i]!=-3)
                    a[i]*=10;
                if(a[i-1]=-3&&i!=0)
                    a[i+1]=-a[i+1];
            }
        }
        sum=p*5+3*m;
        for(i=0;num[i]!='\0';i++)
            sum+=num[i];
        printf("y=%d\n",sum);
    }
    else
        printf("Invalid input!\n");
}
搜索更多相关主题的帖子: include 字符串 源程序 include 字符串 源程序 
2015-12-09 23:24
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
if(i==j) 也就算了
代码中的 -5 和 -3 是个什么鬼?
2015-12-10 09:29
hsm
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2015-11-19
收藏
得分:0 
回复 2楼 rjsp
ASCII代码中+值为43,-为45,与48相减分别为-5,-3,我是通过是否为-5和-3来判断运算符
2015-12-10 10:45
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
以下是引用hsm在2015-12-10 10:45:06的发言:

ASCII代码中+值为43,-为45,与48相减分别为-5,-3,我是通过是否为-5和-3来判断运算符
玩这些魔法数,包括48,的意义何在,显示自己精通ASC码值?
程序代码:
#include <stdio.h>

#define N 80

int main( void )
{
    char s[N];
    gets( s );

    int a=0, b=0, f=+1, stop=0;
    for( const char* p=s; !stop; ++p )
    {
        switch( *p )
        {
        case '0':case '1':case '2':case '3':case '4':case '5':case '6':case '7':case '8':case '9':
            b = b*10 + (*p-'0');
            break;
        case '+':case '-':case '\0':
            a += f*b;
            b = 0;
            f = *p!='-'?+1:-1;
            stop = *p=='\0';
            break;
        default:
            puts( "Invalid input!" );
            stop = 1;
        }
    }
    printf( "%d\n", a );

    return 0;
}

2015-12-10 11:00
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:1 
如果输入++--,12++-1不合法的字符串呐?
2015-12-10 11:38
hsm
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2015-11-19
收藏
得分:0 
回复 4楼 rjsp
刚刚上课才讲了指针(@﹏@)~
2015-12-10 16:11
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:9 
以下是引用hsm在2015-12-10 16:11:27的发言:

刚刚上课才讲了指针(@﹏@)~
其实和指针没关系

程序代码:
#include <stdio.h>

#define N 80

int main( void )
{
    char s[N];
    gets( s );

    int a=0, b=0, f=+1, stop=0;
    for( size_t i=0; !stop; ++i )
    {
        switch( s[i] )
        {
        case '0':case '1':case '2':case '3':case '4':case '5':case '6':case '7':case '8':case '9':
            b = b*10 + (s[i]-'0');
            break;
        case '+':case '-':case '\0':
            a += f*b;
            b = 0;
            f = s[i]!='-'?+1:-1;
            stop = s[i]=='\0';
            break;
        default:
            puts( "Invalid input!" );
            stop = 1;
        }
    }
    printf( "%d\n", a );

    return 0;
}

2015-12-10 16:27
hsm
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2015-11-19
收藏
得分:0 
如果有乘除呢,a怎么处理
2015-12-11 21:51
hsm
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2015-11-19
收藏
得分:0 
回复 7楼 rjsp
如果有乘除呢,a怎么处理
2015-12-11 22:52
快速回复:输入一行加减运算的字符串(少于80个字符),计算加减运算的结果
数据加载中...
 
   



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

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