| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 402 人关注过本帖
标题:虚心求教!望大神指导!
只看楼主 加入收藏
Bloody_Mary
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-9-16
结帖率:0
收藏
已结贴  问题点数:20 回复次数:9 
虚心求教!望大神指导!
虚心向各位大神求教!

假如说我设计一个程序,要从键盘输入一段方程的字符串(假设“x+5”),然后再从键盘输入x的值(假设输入6),再用字符串里面计算出来的值赋给y(预想得到y=11),并打印到屏幕上来。也就是说,如何实现从输入的字符串 转变到一个实实在在可以运算的式子 再实现最后的运算?我想不通啊!!望各路大神指点!!(使用wintc编译)谢谢!!!!!!!!
搜索更多相关主题的帖子: 键盘 字符串 如何 
2012-12-12 00:22
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1692
专家分:4282
注 册:2007-12-27
收藏
得分:5 
去简单读一下编译原理

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2012-12-12 00:29
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:5 
简单的一个例子,不知道是这意思不
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    char str[100],ch;
    int x,y,i,j,flag;
    memset(str,'\0',100);
    printf("请输入两位数算术式(如x+5,如y-34,如x*5,如85/y):");
    scanf("%s",str);
    printf("请输入未知数的值:");
    scanf("%d",&x);
    for(i=0;i<100;i++)
        if(str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/')
        {    ch=str[i];
                break;
        }
    if(str[0]=='x'||str[0]=='y')
        for(i++,flag=0,j=0;i<100;i++,j++)
            str[j]=str[i];
    else
        for(flag=1;i<100;i++)
            str[i]='\0';
    y=atoi(str);
    if(flag)
    {
        x=x^y;
            y=x^y;
                x=x^y;
    }
    printf("结果:");
    switch(ch)
    {
        case '+':printf("%d\n",x+y);
            case '-':printf("%d\n",x-y);
                case '*':printf("%d\n",x*y);
                    case '/':printf("%d\n",x/y);
    }
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册

小小战士,战士中的战斗机!
2012-12-12 02:12
Bloody_Mary
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-9-16
收藏
得分:0 
回复 3楼 小小战士
看不太懂……求解释这是什么一种思路
2012-12-12 20:09
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:5 
3楼代码的主要思想是先把方程式以字符串类型读入,
然后找到运算符号(加减乘除),最后进行运算,功能比较齐全
不过我记得
if(flag)
    {
        x=x^y;
            y=x^y;
                x=x^y;
    }

这里要用pow(x,y)才能计算,
对了,还有math头文件;

I have not failed completely
2012-12-12 22:35
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
以下是引用神龙赖了在2012-12-12 22:35:22的发言:

3楼代码的主要思想是先把方程式以字符串类型读入,
然后找到运算符号(加减乘除),最后进行运算,功能比较齐全
不过我记得
if(flag)
    {
        x=x^y;
            y=x^y;
                x=x^y;
    }

这里要用pow(x,y)才能计算,
对了,还有math头文件;

我的大哥啊,这是异或运算符,这是一种不用中间变量的方法交换两个数的值的方法,不用pow(),不用math.h头文件

[ 本帖最后由 小小战士 于 2012-12-12 23:07 编辑 ]

小小战士,战士中的战斗机!
2012-12-12 23:04
蓝枫2012
Rank: 2
等 级:论坛游民
帖 子:4
专家分:20
注 册:2012-12-8
收藏
得分:5 
if(flag)
    {
        x=x^y;
            y=x^y;
                x=x^y;
    }
这段代码是干嘛用的。。。。
2012-12-12 23:14
蓝枫2012
Rank: 2
等 级:论坛游民
帖 子:4
专家分:20
注 册:2012-12-8
收藏
得分:0 
str[j]=str[i];
为什么药这样赋值?
2012-12-12 23:32
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
详细解释如下:

#include<stdio.h>//scanf和printf函数的头文件
#include<string.h>//memset函数的头文件
#include<stdlib.h>//atoi()函数的头文件
int main()
{
    char str[100],ch;//str接收输入字符串,ch保存运算符
    int x,y,i,j,flag;//x接收未知数的值,y接收atoi的返回值,i和j用于循环,flag=0表示未知数在前,flag=1在后表示未知数在后
    memset(str,'\0',100);//清空str
    printf("请输入两位数算术式(如x+5,如y-34,如x*5,如85/y):");//输入提示
    scanf("%s",str);//输入表达式
    printf("请输入未知数的值:");//输入提示
    scanf("%d",&x);//输入未知数的值
    for(i=0;i<100;i++)//循环遍历,用于找出运算符和位置
        if(str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/')//匹配'+','-','*','/'运算符
        {    ch=str[i];//ch保存运算符,i表示运算符的位置
                break;//一旦找到运算符,跳出循环
        }
    if(str[0]=='x'||str[0]=='y')//如果首位为未知数
        for(i++,flag=0,j=0;i<100;i++,j++)//i++表示运算符的下一个位置,即数字的开始,flag置0表示未知数在前
            str[j]=str[i];//循环将运算符后面的数字移到数组开始处,前面的所有字符被覆盖,str里只剩数字字符串
    else//首位不是未知数,也就是未知数在运算符后面
        for(flag=1;i<100;i++)//flag置1表示未知数在后面
            str[i]='\0';//清空数字之后的所有字符,str里只剩数字字符串
    y=atoi(str);//将字符串数字转换为真正的数字保存到y,但str本身没有变
    if(flag)//如果数字在后
    {
        x=x^y;//交换x,y,即始终保持(x运算符y)的形式,为下面的打印做准备,方便输出控制
            y=x^y;
                x=x^y;
    }
    printf("结果:");//输出提示
    switch(ch)
    {
        case '+':printf("%d\n",x+y);//输出  x+y
            case '-':printf("%d\n",x-y);//输出  x-y
                case '*':printf("%d\n",x*y);//输出  x*y
                    case '/':printf("%d\n",x/y);//输出  x/y
    }
    return 0;
}

[ 本帖最后由 小小战士 于 2012-12-12 23:41 编辑 ]

小小战士,战士中的战斗机!
2012-12-12 23:38
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
回复 9楼 小小战士
哦,我不知道^是干嘛用的...一开始我也没明白意思,现在懂了

不以老实靠谱为荣,不以狡猾坑爹为耻。

I have not failed completely
2012-12-13 20:59
快速回复:虚心求教!望大神指导!
数据加载中...
 
   



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

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