C语言学习笔记(二八)

C语言学习第二十八天,继续学习函数,今天主要做练习。

练习4-3 在有了基本框架后,对计算器程序进行扩充就比较简单了。在该程序中加入取模(%)运算符,并注意考虑负数的情况。
在switch中添加

    case '%':
        op2 = pop();
        if (op2 != 0.0) {
            op1 = pop();
            push( (int)op1 % (int)op2);
        } else
            printf("error: zero divisor\n");
        break;

在getop中修改

    if (!isdigit(c) && c != '.' && c != '-')
        return c; /*不是数*/
    i = 0;
    if (c == '-') {
        if (isdigit(s[++i] = c = getch()))
            while (isdigit(s[++i] = c = getch()))
                ;
        else
            return '-';
    }

练习4-4 在栈操作中添加几个命令,分别用于在不弹出元素的情况下打印栈顶元素;复制栈顶元素;交换栈顶两个元素的值。另外增加一个命令用于清空栈。

/* 打印栈顶元素 */
void printTop(void) {
    if (sp > 0)
        printf("%f\n", val[sp - 1]);
    else
        printf("error: stack empty\n");
}

/* 复制栈顶元素 */
double copyTop(void) {
    if (sp > 0) {
        return val[sp - 1];
    }  else
        printf("error: stack empty\n");
        return 0.0;
}

/* 交换栈顶2个元素 */
void exchangeTop2(void) {
    double num1, num2;

    num1 = pop();
    num2 = pop();
    push(num1);
    push(num2);
}

/* 清空栈 */
void clear(void) {
    sp = 0;
}

练习4-5 给计算器程序增加访问sin、exp与pow等库函数的操作。有关这些库函数的详细信息,参见附录B.4节中的头文件<math.h>。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值