展开全部
#include <iostream>
#include <string>
#include <map>
#include <cctype>
using namespace std;
enum Token_value{
NAME, NUMBER, END,
PLUS='+',MINUS='-',MUL='*',DIV='/',
PRINT=';',ASSIGN='=',LP='(',RP=')'
};
Token_value curr_tok=PRINT;
map<string,double>table;
double term(bool);
double prim(bool);
Token_value get_token();
int no_of_errors;
double error(const string& s)
{
no_of_errors++;
cerr << "error:" << s << '\n';
return 1;
}
double expr(bool get)
{
double left = term(get);
for(;;)
switch(curr_tok){
case PLUS:
left+=term(true);
break;
case MINUS:
left-=term(true);
break;
default:
return left;
}
}
double term(bool get)
{
double left=prim(get);
for(;;)
switch(curr_tok){
case MUL:
left *= prim(true);
break;
case DIV:
if(double d = prim(true)){
left /= d;
break;
}
return error("divide by 0");
default:
return left;
}
}
double number_value;
string string_value;
double prim(bool get)
{
if(get) get_token();
switch(curr_tok){
case NUMBER:
{
double v=number_value;
get_token();
return v;
}
case NAME:
{
double& v=table[string_value];
if(get_token()==ASSIGN) v = expr(true);
return v;
}
case MINUS:
return -prim(true);
case LP:
{
double e=expr(true);
if(curr_tok!=RP)return error(") expected.");
get_token();
return e;
}
default:
return error("primary expected");
}
}
Token_value get_token()
{
char ch;
do { // skip whitespace except '\en'
if(!cin.get(ch)) return curr_tok = END;
} while (ch!='\n' && isspace(ch));
switch (ch) {
case ';':
case '\n':
return curr_tok=PRINT;
case '*':
case '/':
case '+':
case '-':
case '(':
case ')':
case '=':
return curr_tok=Token_value(ch);
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
case '.':
cin.putback(ch);
cin >> number_value;
return curr_tok=NUMBER;
default:// NAME, NAME=, or error
if (isalpha(ch)) {
string_value = ch;
while (cin.get(ch) && isalnum(ch))
//string_value += ch;
string_value.push_back(ch);
cin.putback(ch);
return curr_tok=NAME;
}
error("bad token");
return curr_tok=PRINT;
}
}
int main()
{
table["pi"]=3.1415926535897932385;
table["e"] =2.7182818284590452354;
while(cin){
get_token();
if(curr_tok==END)break;
if(curr_tok==PRINT) continue;
cout << expr(false) << '\n';
}
return no_of_errors;
}
#include <string>
#include <map>
#include <cctype>
using namespace std;
enum Token_value{
NAME, NUMBER, END,
PLUS='+',MINUS='-',MUL='*',DIV='/',
PRINT=';',ASSIGN='=',LP='(',RP=')'
};
Token_value curr_tok=PRINT;
map<string,double>table;
double term(bool);
double prim(bool);
Token_value get_token();
int no_of_errors;
double error(const string& s)
{
no_of_errors++;
cerr << "error:" << s << '\n';
return 1;
}
double expr(bool get)
{
double left = term(get);
for(;;)
switch(curr_tok){
case PLUS:
left+=term(true);
break;
case MINUS:
left-=term(true);
break;
default:
return left;
}
}
double term(bool get)
{
double left=prim(get);
for(;;)
switch(curr_tok){
case MUL:
left *= prim(true);
break;
case DIV:
if(double d = prim(true)){
left /= d;
break;
}
return error("divide by 0");
default:
return left;
}
}
double number_value;
string string_value;
double prim(bool get)
{
if(get) get_token();
switch(curr_tok){
case NUMBER:
{
double v=number_value;
get_token();
return v;
}
case NAME:
{
double& v=table[string_value];
if(get_token()==ASSIGN) v = expr(true);
return v;
}
case MINUS:
return -prim(true);
case LP:
{
double e=expr(true);
if(curr_tok!=RP)return error(") expected.");
get_token();
return e;
}
default:
return error("primary expected");
}
}
Token_value get_token()
{
char ch;
do { // skip whitespace except '\en'
if(!cin.get(ch)) return curr_tok = END;
} while (ch!='\n' && isspace(ch));
switch (ch) {
case ';':
case '\n':
return curr_tok=PRINT;
case '*':
case '/':
case '+':
case '-':
case '(':
case ')':
case '=':
return curr_tok=Token_value(ch);
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
case '.':
cin.putback(ch);
cin >> number_value;
return curr_tok=NUMBER;
default:// NAME, NAME=, or error
if (isalpha(ch)) {
string_value = ch;
while (cin.get(ch) && isalnum(ch))
//string_value += ch;
string_value.push_back(ch);
cin.putback(ch);
return curr_tok=NAME;
}
error("bad token");
return curr_tok=PRINT;
}
}
int main()
{
table["pi"]=3.1415926535897932385;
table["e"] =2.7182818284590452354;
while(cin){
get_token();
if(curr_tok==END)break;
if(curr_tok==PRINT) continue;
cout << expr(false) << '\n';
}
return no_of_errors;
}
展开全部
//*****************
//**program14.cpp**
//*****************
#include "iostream.h"
int main()
{
int x,y,z;
for(x=1;x<20;x++) //公鸡的只数,最多不超过20只
for(y=1;y<33;y++) //母鸡的只数,最多不超过33只
{
z=100-x-y; //小鸡的只数
if(5*x+y*3+z/3==100&&z%3==0)
cout<<"公鸡有"<<x<<"只,母鸡有"<<y<<"只,小鸡有"<<z<<"只。\n";
}
return 1;
}
//**program14.cpp**
//*****************
#include "iostream.h"
int main()
{
int x,y,z;
for(x=1;x<20;x++) //公鸡的只数,最多不超过20只
for(y=1;y<33;y++) //母鸡的只数,最多不超过33只
{
z=100-x-y; //小鸡的只数
if(5*x+y*3+z/3==100&&z%3==0)
cout<<"公鸡有"<<x<<"只,母鸡有"<<y<<"只,小鸡有"<<z<<"只。\n";
}
return 1;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这还用找人??
VC入门基本都练过,再就是网上一搜一大堆
自己编也不是很难啊.
VC入门基本都练过,再就是网上一搜一大堆
自己编也不是很难啊.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先给分.然后加12397312吧.我给你做好了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
分少了点。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2007-02-11
展开全部
我不知道啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询