明显调用的表达式前的括号必须具有指针函数类型_C语言数学库的3种类型

数学库中包含许多有用的数学函数。math.h头文件提供这些函数的原型。表16.2中列出了一些声明在math.h中的函数。注意,函数中涉及的角度都以弧度为单位(1弧度=180/π=57.296度)。参考资料V“新增C99和C11标准的ANSI C库”列出了C99和C11标准的所有函数。

36fa453ef921a35716b0b39479829051.png

Some ANSI C Standard Math Functions

1 三角问题

我们可以使用数学库解决一些常见的问题:把x/y坐标转换为长度和角度。例如,在网格上画了一条线,该线条水平穿过了4个单元(x的值),垂直穿过了3个单元(y的值)。那么,该线的长度(量)和方向是什么?根据数学的三角公式可知:

magnitude = square root (x^2 + y^2)

and

angle = arctangent (y/x)

数学库提供平方根函数和一对反正切函数,所以可以用C程序表示这个问题。平方根函数是sqrt(),接受一个double类型的参数,并返回参数的平方根,也是double类型。 atan()函数接受一个double类型的参数(即正切值),并返回一个角度(该角度的正切值就

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用栈来判断括号是否匹配。遍历算术表达式,遇到左括号就将其入栈,遇到右括号就将栈顶元素出栈,并判断它们是否匹配。如果括号匹配,继续遍历;如果不匹配,或者栈为空,就说明括号不匹配。 以下是示例代码: ```c #include <stdio.h> #include <stdlib.h> typedef struct { char data; struct StackNode *next; } StackNode; typedef struct { StackNode *top; } Stack; Stack* createStack() { Stack *s = (Stack*) malloc(sizeof(Stack)); s->top = NULL; return s; } void push(Stack *s, char data) { StackNode *node = (StackNode*) malloc(sizeof(StackNode)); node->data = data; node->next = s->top; s->top = node; } char pop(Stack *s) { if (s->top == NULL) { printf("Error: stack is empty.\n"); exit(EXIT_FAILURE); } StackNode *node = s->top; char data = node->data; s->top = node->next; free(node); return data; } int isEmpty(Stack *s) { return s->top == NULL; } int isMatched(char left, char right) { return (left == '(' && right == ')') || (left == '[' && right == ']') || (left == '{' && right == '}'); } int checkParentheses(char *expr) { Stack *s = createStack(); while (*expr != '\0') { if (*expr == '(' || *expr == '[' || *expr == '{') { push(s, *expr); } else if (*expr == ')' || *expr == ']' || *expr == '}') { if (isEmpty(s) || !isMatched(pop(s), *expr)) { return 0; } } expr++; } int result = isEmpty(s); free(s); return result; } int main() { char expr[100]; printf("Enter an expression: "); scanf("%s", expr); if (checkParentheses(expr)) { printf("The parentheses are matched.\n"); } else { printf("The parentheses are not matched.\n"); } return 0; } ``` 这个程序中,我们定义了一个栈结构,使用链表来实现。`push` 函数将一个字符入栈,`pop` 函数将栈顶元素出栈,并返回它的值。`isEmpty` 函数判断栈是否为空。`isMatched` 函数判断左右括号是否匹配。`checkParentheses` 函数遍历算术表达式,将左括号入栈,遇到右括号就出栈,并判断左右括号是否匹配,最后判断栈是否为空。 在主函数中,我们从标准输入读入一个算术表达式调用 `checkParentheses` 函数来判断其中的括号是否匹配。如果返回值为真,则输出括号匹配;否则输出括号不匹配。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值