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>。