亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chap24.lst

?? C語言大全第四版源代碼全集
?? LST
字號:
listing 1
#define DELIMITER 1
#define VARIABLE  2
#define NUMBER    3

extern char *prog;  /* points to the expression to be analyzed */
char token[80];
char tok_type;

/* Return the next token. */
void get_token(void)
{
  register char *temp;

  tok_type = 0;
  temp = token;
  *temp = '\0';

  if(!*prog) return; /* at end of expression */
  while(isspace(*prog)) ++prog;  /* skip over white space */

  if(strchr("+-*/%^=()", *prog)){
    tok_type = DELIMITER;
    /* advance to next char */
    *temp++ = *prog++;
  }
  else if(isalpha(*prog)) {
    while(!isdelim(*prog)) *temp++ = *prog++;
    tok_type = VARIABLE;
  }
  else if(isdigit(*prog)) {
    while(!isdelim(*prog)) *temp++ = *prog++;
    tok_type = NUMBER;
  }

  *temp = '\0';
}

/* Return true if c is a delimiter. */
int isdelim(char c)
{
  if(strchr(" +-/*%^=()", c) || c==9 || c=='\r' || c==0)
    return 1;
  return 0;
}

listing 2
/* This module contains a simple expression parser
   that does not recognize variables.
*/

#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>

#define DELIMITER 1
#define VARIABLE  2
#define NUMBER    3

extern char *prog;   /* holds expression to be analyzed */
char token[80];
char tok_type;

void eval_exp(double *answer), eval_exp2(double *answer);
void eval_exp3(double *answer), eval_exp4(double *answer);
void eval_exp5(double *answer), eval_exp6(double *answer);
void atom(double *answer);
void get_token(void), putback(void);
void serror(int error);
int isdelim(char c);

/* Parser entry point. */
void eval_exp(double *answer)
{
  get_token();
  if(!*token) {
    serror(2);
    return;
  }
  eval_exp2(answer);

  if(*token) serror(0); /* last token must be null */
}

/* Add or subtract two terms. */
void eval_exp2(double *answer)
{
  register char  op;
  double temp;

  eval_exp3(answer);
  while((op = *token) == '+' || op == '-') {
    get_token();
    eval_exp3(&temp);
    switch(op) {
      case '-':
        *answer = *answer - temp;
        break;
      case '+':
        *answer = *answer + temp;
        break;
    }
  }
}

/* Multiply or divide two factors. */
void eval_exp3(double *answer)
{
  register char op;
  double temp;

  eval_exp4(answer);
  while((op = *token) == '*' || op == '/' || op == '%') {
    get_token();
    eval_exp4(&temp);
    switch(op) {
      case '*':
        *answer = *answer * temp;
        break;
      case '/':
        if(temp == 0.0) {
          serror(3); /* division by zero */
          *answer = 0.0;
        } else *answer = *answer / temp;
        break;
      case '%':
        *answer = (int) *answer % (int) temp;
        break;
    }
  }
}

/* Process an exponent */
void eval_exp4(double *answer)
{
  double temp, ex;
  register int t;

  eval_exp5(answer);

  if(*token == '^') {
    get_token();
    eval_exp4(&temp);
    ex = *answer;
    if(temp==0.0) {
      *answer = 1.0;
      return;
    }
    for(t=temp-1; t>0; --t) *answer = (*answer) * (double)ex;
  }
}

/* Evaluate a unary + or -. */
void eval_exp5(double *answer)
{
  register char  op;

  op = 0;
  if((tok_type == DELIMITER) && *token=='+' || *token == '-') {
    op = *token;
    get_token();
  }
  eval_exp6(answer);
  if(op == '-') *answer = -(*answer);
}

/* Process a parenthesized expression. */
void eval_exp6(double *answer)
{
  if((*token == '(')) {
    get_token();
    eval_exp2(answer);
    if(*token != ')')
      serror(1);
    get_token();
  }
  else
    atom(answer);
}

/* Get the value of a number. */
void atom(double *answer)
{
  if(tok_type == NUMBER) {
    *answer = atof(token);
    get_token();
    return;
  }
  serror(0);  /* otherwise syntax error in expression */
}

/* Return a token to the input stream. */
void putback(void)
{
  char *t;

  t = token;
  for(; *t; t++) prog--;
}

/* Display a syntax error. */
void serror(int error)
{
  static char *e[]= {
      "Syntax Error",
      "Unbalanced Parentheses",
      "No Expression Present",
      "Division by Zero"
  };
  printf("%s\n", e[error]);
}

/* Return the next token. */
void get_token(void)
{
  register char *temp;

  tok_type = 0;
  temp = token;
  *temp = '\0';

  if(!*prog) return; /* at end of expression */
  while(isspace(*prog)) ++prog; /* skip over white space */

  if(strchr("+-*/%^=()", *prog)){
    tok_type = DELIMITER;
    /* advance to next char */
    *temp++ = *prog++;
  }
  else if(isalpha(*prog)) {
    while(!isdelim(*prog)) *temp++ = *prog++;
    tok_type = VARIABLE;
  }
  else if(isdigit(*prog)) {
    while(!isdelim(*prog)) *temp++ = *prog++;
    tok_type = NUMBER;
  }

  *temp = '\0';
}

/* Return true if c is a delimiter. */
int isdelim(char c)
{

  if(strchr(" +-/*%^=()", c) || c==9 || c=='\r' || c==0)
    return 1;
  return 0;
}

listing 3
/* Parser demo program. */
#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>

char *prog;
void eval_exp(double *answer);

int main(void)
{
  double answer;
  char *p;

  p = (char *) malloc(100);
  if(!p) {
    printf("Allocation failure.\n");
    exit(1);
  }

  /* Process expressions until a blank line
     is entered.
  */
  do {
    prog = p;
    printf("Enter expression: ");
    gets(prog);
    if(!*prog) break;
    eval_exp(&answer);
    printf("Answer is: %.2f\n", answer);
  } while(*p);

  return 0;
}

listing 4
/* Return the value of a variable. */
double find_var(char *s)
{
  if(!isalpha(*s)){
    serror(1);
    return 0;
  }
  return vars[toupper(*token)-'A'];
}

listing 5
/* Get the value of a number or a variable. */
void atom(double *answer)
{
  switch(tok_type) {
    case VARIABLE:
      *answer = find_var(token);
      get_token();
      return;
    case NUMBER:
      *answer = atof(token);
      get_token();
      return;
    default:
      serror(0);
  }
}

listing 6
/* Process an assignment. */
void eval_exp1(double *result)
{
  int slot, ttok_type;
  char temp_token[80];

  if(tok_type == VARIABLE) {
    /* save old token */
    strcpy(temp_token, token);
    ttok_type = tok_type;

    /* compute the index of the variable */
    slot = toupper(*token) - 'A';

    get_token();
    if(*token != '=') {
      putback(); /* return current token */
      /* restore old token - not assignment */
      strcpy(token, temp_token);
      tok_type = ttok_type;
    }
    else {
      get_token(); /* get next part of exp */
      eval_exp2(result);
      vars[slot] = *result;
      return;
    }
  }

  eval_exp2(result);
}

listing 7
/* Return a token to the input stream. */
void putback(void)
{
  char *t;

  t = token;
  for(; *t; t++) prog--;
}

listing 8
/* This module contains the recursive descent
   parser that recognizes variables.
*/

#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>

#define DELIMITER 1
#define VARIABLE  2
#define NUMBER    3

extern char *prog; /* points to the expression to be analyzed */
char token[80];
char tok_type;

double vars[26] = { /* 26 user variables,  A-Z */
 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
};

void eval_exp(double *answer), eval_exp2(double *answer);
void eval_exp1(double *result);
void eval_exp3(double *answer), eval_exp4(double *answer);
void eval_exp5(double *answer), eval_exp6(double *answer);
void atom(double *answer);
void get_token(void), putback(void);
void serror(int error);
double find_var(char *s);
int isdelim(char c);

/* Parser entry point. */
void eval_exp(double *answer)
{
  get_token();
  if(!*token) {
    serror(2);
    return;
  }
  eval_exp1(answer);
  if(*token) serror(0); /* last token must be null */
}

/* Process an assignment. */
void eval_exp1(double *answer)
{
  int slot;
  char ttok_type;
  char temp_token[80];

  if(tok_type == VARIABLE) {
    /* save old token */
    strcpy(temp_token, token);
    ttok_type = tok_type;
    /* compute the index of the variable */
    slot = toupper(*token) - 'A';

    get_token();
    if(*token != '=') {
      putback(); /* return current token */
      /* restore old token - not assignment */
      strcpy(token, temp_token);
      tok_type = ttok_type;
    }
    else {
      get_token(); /* get next part of exp */
      eval_exp2(answer);
      vars[slot] = *answer;
      return;
    }
  }
  eval_exp2(answer);
}

/* Add or subtract two terms. */
void eval_exp2(double *answer)
{
  register char op;
  double temp;

  eval_exp3(answer);
  while((op = *token) == '+' || op == '-') {
    get_token();
    eval_exp3(&temp);
    switch(op) {
      case '-':
        *answer = *answer - temp;
        break;
      case '+':
        *answer = *answer + temp;
        break;
    }
  }
}

/* Multiply or divide two factors. */
void eval_exp3(double *answer)
{
  register char op;
  double temp;

  eval_exp4(answer);
  while((op = *token) == '*' || op == '/' || op == '%') {
    get_token();
    eval_exp4(&temp);
    switch(op) {
      case '*':
        *answer = *answer * temp;
        break;
      case '/':
        if(temp == 0.0) {
          serror(3); /* division by zero */
          *answer = 0.0;
        } else *answer = *answer / temp;
        break;
      case '%':
        *answer = (int) *answer % (int) temp;
        break;
    }
  }
}

/* Process an exponent */
void eval_exp4(double *answer)
{
  double temp, ex;
  register int t;

  eval_exp5(answer);
  if(*token == '^') {
    get_token();
    eval_exp4(&temp);
    ex = *answer;
    if(temp==0.0) {
      *answer = 1.0;
      return;
    }
    for(t=temp-1; t>0; --t) *answer = (*answer) * (double)ex;
  }
}

/* Evaluate a unary + or -. */
void eval_exp5(double *answer)
{
  register char  op;

  op = 0;
  if((tok_type == DELIMITER) && *token=='+' || *token == '-') {
    op = *token;
    get_token();
  }
  eval_exp6(answer);
  if(op == '-') *answer = -(*answer);
}

/* Process a parenthesized expression. */
void eval_exp6(double *answer)
{
  if((*token == '(')) {
    get_token();
    eval_exp2(answer);
    if(*token != ')')
      serror(1);
    get_token();
  }
  else atom(answer);
}

/* Get the value of a number or a variable. */
void atom(double *answer)
{
  switch(tok_type) {
    case VARIABLE:
      *answer = find_var(token);
      get_token();
      return;
    case NUMBER:
      *answer = atof(token);
      get_token();
      return;
    default:
      serror(0);
  }
}

/* Return a token to the input stream. */
void putback(void)
{
  char *t;

  t = token;
  for(; *t; t++) prog--;
}

/* Display a syntax error. */
void serror(int error)
{
  static char *e[]= {
      "Syntax Error",
      "Unbalanced Parentheses",
      "No Expression Present",
      "Division by Zero"
  };
  printf("%s\n", e[error]);
}

/* Return the next token. */
void get_token(void)
{
  register char *temp;

  tok_type = 0;
  temp = token;
  *temp = '\0';

  if(!*prog) return; /* at end of expression */

  while(isspace(*prog)) ++prog; /* skip over white space */

  if(strchr("+-*/%^=()", *prog)){
    tok_type = DELIMITER;
    /* advance to next char */
    *temp++ = *prog++;
  }
  else if(isalpha(*prog)) {
    while(!isdelim(*prog)) *temp++ = *prog++;
    tok_type = VARIABLE;
  }
  else if(isdigit(*prog)) {
    while(!isdelim(*prog)) *temp++ = *prog++;
    tok_type = NUMBER;
  }

  *temp = '\0';
}

/* Return true if c is a delimiter. */
int isdelim(char c)
{
  if(strchr(" +-/*%^=()", c) || c==9 || c=='\r' || c==0)
    return 1;
  return 0;
}

/* Return the value of a variable. */
double find_var(char *s)
{
  if(!isalpha(*s)){
    serror(1);
    return 0.0;
  }
  return vars[toupper(*token)-'A'];
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品一区四区| 一区二区三区精密机械公司| 亚洲欧美中日韩| 蜜桃免费网站一区二区三区| av在线不卡电影| 精品日韩在线一区| 亚洲综合免费观看高清完整版在线 | 国产精品一区二区久久不卡| 色爱区综合激月婷婷| 久久综合久久综合亚洲| 亚洲午夜视频在线| 不卡av在线免费观看| 日韩视频123| 亚洲成人一二三| 99精品视频在线播放观看| 久久综合一区二区| 日本不卡一区二区| 欧美日韩一区久久| 亚洲综合一二区| 99久久精品免费看国产 | 国产色综合久久| 麻豆久久一区二区| 欧美精品久久天天躁| 亚洲综合男人的天堂| 色综合一个色综合亚洲| 中文字幕在线一区免费| 处破女av一区二区| 国产片一区二区三区| 精品无人区卡一卡二卡三乱码免费卡| 精品视频在线视频| 亚洲第一搞黄网站| 欧美三级韩国三级日本一级| 日韩毛片视频在线看| 91老司机福利 在线| 国产精品久久久一本精品| 成人听书哪个软件好| 国产精品午夜在线| 成人一区在线观看| 国产精品理伦片| 91热门视频在线观看| 亚洲天堂网中文字| 色欧美日韩亚洲| 亚洲一区二区三区四区在线观看 | 久久久不卡网国产精品二区 | 日韩欧美高清在线| 麻豆91精品91久久久的内涵| 337p日本欧洲亚洲大胆精品| 国产精品一区二区三区四区| 中文字幕精品三区| 色哟哟在线观看一区二区三区| 亚洲另类在线视频| 在线观看一区二区视频| 天天色综合天天| 精品久久久久久无| 日本高清不卡一区| 一区二区三区色| 欧美一级一区二区| 国产99久久久精品| 亚洲精品乱码久久久久| 欧美日韩成人综合| 韩国成人在线视频| 亚洲天堂成人在线观看| 欧美无人高清视频在线观看| 日韩av电影天堂| 欧美—级在线免费片| 色婷婷av一区二区三区大白胸| 午夜精品福利一区二区蜜股av| 日韩欧美国产一二三区| 成人av网址在线| 亚洲一二三区不卡| 久久蜜桃一区二区| 日本精品视频一区二区| 九一九一国产精品| 亚洲欧洲日产国产综合网| 欧美精品久久99久久在免费线| 国产麻豆视频一区| 亚洲一区二区成人在线观看| 精品成人一区二区三区四区| 色诱亚洲精品久久久久久| 久久精品国产一区二区三 | 国产欧美精品国产国产专区| 欧美影院一区二区三区| 另类的小说在线视频另类成人小视频在线| 国产精品久久久久婷婷二区次| 宅男在线国产精品| www.久久久久久久久| 麻豆国产欧美一区二区三区| 亚洲色图制服诱惑| 久久综合狠狠综合久久激情| 欧美亚洲愉拍一区二区| 成人高清伦理免费影院在线观看| 五月天久久比比资源色| 亚洲欧美综合色| 久久久午夜精品| 欧美一级精品在线| 欧美色视频在线观看| 不卡视频在线观看| 国产乱子伦一区二区三区国色天香 | 精品一区二区三区久久| 亚洲成a人v欧美综合天堂下载| 国产精品女同一区二区三区| 337p日本欧洲亚洲大胆色噜噜| 欧美日韩在线免费视频| 日本二三区不卡| www.99精品| 丁香啪啪综合成人亚洲小说| 狠狠色丁香婷婷综合久久片| 日本中文字幕不卡| 亚洲va欧美va人人爽午夜| 综合久久给合久久狠狠狠97色 | 午夜精品视频一区| 亚洲中国最大av网站| 中文字幕综合网| 亚洲免费视频中文字幕| 中文字幕一区二区三区蜜月 | 国产精品 日产精品 欧美精品| 激情综合网天天干| 久久电影网电视剧免费观看| 美女被吸乳得到大胸91| 日本不卡一区二区三区| 免费在线视频一区| 免费人成黄页网站在线一区二区| 三级欧美在线一区| 久久99国产乱子伦精品免费| 老司机午夜精品99久久| 激情文学综合丁香| 国产精品一区二区果冻传媒| 国产成人亚洲综合a∨猫咪| 国产成人高清在线| www.欧美色图| 色噜噜夜夜夜综合网| 欧美亚洲尤物久久| 4438x成人网最大色成网站| 日韩欧美一二三| 久久久国产精品午夜一区ai换脸| 国产精品网站一区| 亚洲免费在线视频| 午夜不卡av在线| 精品一区二区三区视频在线观看 | 亚洲老司机在线| 天天影视网天天综合色在线播放 | 日韩一区二区电影网| 精品国产精品网麻豆系列| 国产欧美一区二区三区沐欲| 国产精品传媒在线| 日韩国产欧美在线观看| 激情小说亚洲一区| 91蜜桃网址入口| 欧美一二三四区在线| 国产亚洲综合色| 亚洲精品成a人| 久久国产生活片100| 波多野结衣精品在线| 欧美日韩免费电影| 欧美国产精品中文字幕| 亚洲精选免费视频| 久久精品久久99精品久久| 99久久伊人精品| 日韩一区二区三区av| 一区二区三区中文免费| 麻豆91在线观看| 91在线观看地址| 日韩亚洲欧美在线| 亚洲乱码中文字幕| 国产美女视频一区| 欧美午夜寂寞影院| 国产精品毛片久久久久久| 同产精品九九九| 成人激情电影免费在线观看| 欧美一区二区三区爱爱| 亚洲视频你懂的| 国产在线精品一区二区| 欧美三级视频在线播放| 国产精品欧美久久久久无广告| 无吗不卡中文字幕| 91一区二区三区在线观看| 久久综合中文字幕| 日韩影视精彩在线| 91麻豆精东视频| 国产欧美精品一区二区三区四区| 丝袜诱惑亚洲看片| 91国偷自产一区二区开放时间| 久久精品一区蜜桃臀影院| 日本不卡免费在线视频| 欧美性淫爽ww久久久久无| 国产精品视频一二三| 国产精品一区二区在线观看网站| 制服丝袜中文字幕亚洲| 亚洲一区二区三区免费视频| 不卡视频在线看| 欧美国产成人在线| 国产福利视频一区二区三区| 欧美成人性战久久| 奇米影视在线99精品| 欧美剧情片在线观看| 亚洲免费在线视频| 色老综合老女人久久久| 亚洲欧洲综合另类在线| 99久久99久久精品免费看蜜桃| 中文字幕av一区二区三区|