C++用栈实现幂函数并要求能从屏幕中输入输出和从文件中输入输出中选择
时间: 2024-05-08 10:15:59 浏览: 71
以下是使用栈实现幂函数的示例代码,同时包含从屏幕和文件中输入输出的选项:
```c
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 100
// 定义栈结构体
typedef struct {
double data[STACK_SIZE];
int top;
} Stack;
// 初始化栈
void initStack(Stack *stack) {
stack->top = -1;
}
// 判断栈是否为空
int isStackEmpty(Stack *stack) {
return stack->top == -1;
}
// 判断栈是否已满
int isStackFull(Stack *stack) {
return stack->top == STACK_SIZE - 1;
}
// 入栈操作
void push(Stack *stack, double value) {
if (isStackFull(stack)) {
printf("Stack is full.\n");
exit(1);
}
stack->top++;
stack->data[stack->top] = value;
}
// 出栈操作
double pop(Stack *stack) {
if (isStackEmpty(stack)) {
printf("Stack is empty.\n");
exit(1);
}
double value = stack->data[stack->top];
stack->top--;
return value;
}
// 幂函数
double power(double base, int exponent) {
double result = 1.0;
int i;
for (i = 0; i < exponent; i++) {
result *= base;
}
return result;
}
int main() {
Stack stack;
initStack(&stack);
int choice;
printf("Choose input/output method:\n1. Input/output from screen\n2. Input/output from file\n");
scanf("%d", &choice);
if (choice == 1) {
double base;
int exponent;
printf("Enter the base: ");
scanf("%lf", &base);
printf("Enter the exponent: ");
scanf("%d", &exponent);
while (exponent > 0) {
push(&stack, base);
exponent--;
}
double result = 1.0;
while (!isStackEmpty(&stack)) {
result *= pop(&stack);
}
printf("Result: %lf\n", result);
} else if (choice == 2) {
FILE *inputFile = fopen("input.txt", "r");
FILE *outputFile = fopen("output.txt", "w");
double base;
int exponent;
fscanf(inputFile, "%lf%d", &base, &exponent);
while (exponent > 0) {
push(&stack, base);
exponent--;
}
double result = 1.0;
while (!isStackEmpty(&stack)) {
result *= pop(&stack);
}
fprintf(outputFile, "%lf\n", result);
fclose(inputFile);
fclose(outputFile);
} else {
printf("Invalid choice.\n");
}
return 0;
}
```
上述代码中,使用了一个 Stack 结构体来实现栈操作。幂函数的实现使用了一个栈来存储 base 的 exponent 次方中的每一个 base,然后依次出栈并相乘得到最终结果。
程序提供了两种输入输出方式,可以通过输入 1 或 2 来选择相应的方式。如果选择从屏幕中输入输出,则直接从标准输入输出流中读取输入和输出结果;如果选择从文件中输入输出,则从 input.txt 中读取输入数据,计算得到结果后将结果输出到 output.txt 文件中。
需要注意的是,从文件中读取输入和输出数据时,需要使用 fscanf 和 fprintf 函数来读取和输出数据,而不是使用 scanf 和 printf 函数。同时,在文件操作完成后需要关闭文件句柄,以防止资源泄漏。
阅读全文