• 大小: 4KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-28
  • 语言: C/C++
  • 标签: C语言  计算器  

资源简介

C语言计算器可以计算 + - / * 连在一起的运算,可以计算各种括号的运算,支持小数计算。 例:-2*(((1+1)*(2+2)+3)+6) = -34

资源截图

代码片段和文件信息

#include 
/*
 * 计算函数
 * 参数buf          混合运算的字符首地址
 * 参数excursion    保存偏移量
 * 返回值计算好的数
 */
double calculate(const char *buf int *excursion);
/*
 * 把字符串的数字和字符分离
 * 参数num          保存分离后的数字
 * 参数symbol       保存分离后的符号
 * 参数sc           字符的个数
 * 参数nc           数字的个数
 * 参数excursion    保存偏移量
 */
void separation_symbol_num(const char *buf double *num char *symbol int *sc int *nc int *excursion);
void separation_symbol_num(const char *buf double *num char *symbol int *sc int *nc int *excursion)
{
    const char *p = buf;
    char dp = 0;            //小数点标识
    double dpnum = 0;       //小数
    int dpcount = 0;        //小数计数器
    int scount = 0;
    int ncount = 0;
    int my_excursion = 0;
    if(p == NULL)
        return;
    p++;
    while(*p)
    {
        switch(*p)
        {
            case ‘-‘:symbol[scount++] = ‘-‘;break;
            case ‘+‘:symbol[scount++] = ‘+‘;break;
            case ‘*‘:symbol[scount++] = ‘*‘;break;
            case ‘/‘:symbol[scount++] = ‘/‘;break;
            case ‘(‘://如果符号是‘(’,就调用递归函数
                     num[ncount++] = calculate(p+1 &my_excursion);
                     //printf(“num = %g\n“ num[ncount - 1]);
                     //printf(“my_excursion = %d\n“ my_excursion);
                     p += my_excursion + 1;
                     *(excursion) += my_excursion +1;
                     my_excursion = 0;
                     break;
            case ‘)‘:goto loop;break;   //如果符号是‘)’,则退出这次递归
            default://提取数字
                     dpnum = 0;
                     dpcount = 0;
                     dp = 0;
                     if(*p < ‘0‘ || *p > ‘9‘)
                         return;
                     while ((*p >= ‘0‘ && *p <= ‘9‘) || *p == ‘.‘)
                     {
                         if(*p == ‘.‘)
                         {
                             dp = 1;
                             p++;
                             continue;
                         }
                         if(dp == 1)
                        

评论

共有 条评论