用C语言编写一个程序实现以下内容输入由两部分组成:变量定义部分和表达式计算部分。在变量定义部分中,每一行只能定义一个变量,并且一定要赋上一个初值。计算部分则是每一行有一个表达式,表达式由变量和操作符组成,符号和变量之间用一个空格分隔,且符号只能取+、-、*、/这四种,变量定义部分和表达式计算机部分之间用%%%进行分隔,下面是一个例子: a = 4 b = 2 %%% a + b a - b
时间: 2024-02-18 12:59:42 浏览: 27
好的,下面是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_VAR_NUM 100 // 最大变量数
#define MAX_VAR_NAME_LEN 20 // 最大变量名长度
#define MAX_EXPR_LEN 100 // 最大表达式长度
typedef struct {
char name[MAX_VAR_NAME_LEN]; // 变量名
int value; // 变量值
} Var;
Var vars[MAX_VAR_NUM]; // 存储变量
int var_num = 0; // 当前变量数量
int get_var_index(char* name) {
// 获取变量在数组中的下标
for (int i = 0; i < var_num; i++) {
if (strcmp(vars[i].name, name) == 0) {
return i;
}
}
return -1;
}
int main() {
char input[MAX_EXPR_LEN]; // 存储输入字符串
char* var_def; // 变量定义部分
char* expr; // 表达式计算部分
// 读入输入字符串
fgets(input, MAX_EXPR_LEN, stdin);
// 分离变量定义部分和表达式计算部分
var_def = strtok(input, "%%%");
expr = strtok(NULL, "%%%");
// 解析变量定义部分
char* var_str = strtok(var_def, "\n");
while (var_str != NULL) {
char* name = strtok(var_str, " =");
char* value_str = strtok(NULL, " =");
int value = atoi(value_str);
strcpy(vars[var_num].name, name);
vars[var_num].value = value;
var_num++;
var_str = strtok(NULL, "\n");
}
// 解析表达式计算部分
char* expr_str = strtok(expr, "\n");
while (expr_str != NULL) {
int result = 0;
char* var_name = strtok(expr_str, " ");
result = vars[get_var_index(var_name)].value;
char op = strtok(NULL, " ")[0];
var_name = strtok(NULL, " ");
int value = vars[get_var_index(var_name)].value;
switch (op) {
case '+':
result += value;
break;
case '-':
result -= value;
break;
case '*':
result *= value;
break;
case '/':
result /= value;
break;
default:
printf("Invalid operator: %c\n", op);
exit(1);
}
printf("%d\n", result);
expr_str = strtok(NULL, "\n");
}
return 0;
}
```
这个程序首先读入输入字符串,然后用`strtok`函数将其分离成变量定义部分和表达式计算部分。接着,程序解析变量定义部分,将变量名和初始值存储到`vars`数组中。然后,程序解析表达式计算部分,计算表达式的值并输出到标准输出流中。在计算表达式的时候,程序先获取变量在`vars`数组中的下标,然后根据操作符计算表达式的值。最后,程序输出计算结果。
需要注意的是,这个程序没有对输入字符串的合法性进行检查,如果输入的字符串格式不符合要求,程序可能会出现未定义行为。在实际使用中,应该对输入字符串进行合法性检查。