C语言小学加减乘除口算去重函数
时间: 2025-06-21 08:27:35 浏览: 10
### 实现去重的小学四则运算口算题目生成函数
为了实现一个能去除重复题目的小学四则运算口算题生成器,可以采用哈希表来跟踪已经生成过的题目。下面展示了一个简单的C语言程序,该程序实现了这一功能。
#### 函数设计说明
- 使用结构体 `Question` 来存储每道题及其答案。
- 利用链表作为哈希冲突解决方法的数据结构。
- 定义辅助函数用于创建新节点、检查是否存在相同题目以及打印题目列表。
- 主要逻辑在于随机生成操作数并构建唯一键值存入哈希表中以防止重复。
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define TABLE_SIZE 10007 /* 哈希表大小 */
typedef struct Node {
int num1;
char op; // Operator: '+', '-', '*', '/'
int num2;
float result;
struct Node* next;
} Question;
/* 创建新的问题节点 */
Question* createNode(int a, char o, int b) {
Question *newQ = (Question*)malloc(sizeof(Question));
newQ->num1 = a;
newQ->op = o;
newQ->num2 = b;
switch(o){
case '+': newQ->result = a + b;break;
case '-': newQ->result = a - b;break;
case '*': newQ->result = a * b;break;
case '/':
if(b != 0)newQ->result = (float)a / b;
else newQ->result = -1; // 防止除零错误
break;
}
newQ->next = NULL;
return newQ;
}
unsigned long hashFunction(const Question *q) {
unsigned long key = q->num1 ^ ((unsigned long)(q->op)) ^ q->num2;
return key % TABLE_SIZE;
}
// 插入或更新哈希表中的条目
void insertOrUpdateHash(Question **hashTable, const Question *question);
// 查找特定的问题是否存在于哈希表内
int containsKey(Question **hashTable, const Question *target);
// 打印所有已有的问题
void printQuestions(Question **hashTable);
// 清理分配给哈希表的空间
void freeHashTable(Question **hashTable);
```
此部分定义了一些必要的数据结构和基本的操作函数[^4]。
接下来是具体的业务流程处理:
```c
int main() {
srand(time(NULL)); // 初始化随机种子
Question *hashTable[TABLE_SIZE];
for (size_t i=0 ;i<TABLE_SIZE;i++) {
hashTable[i]=NULL;
}
while(1){ // 循环直到满足条件为止
int operandA=rand()%100+1; // 获取第一个操作数范围内的整数值
int operandB=rand()%100+1; // 获取第二个操作数范围内的整数值
char operators[]="+-*";
char operatorChar=operators[rand()%strlen(operators)]; // 随机选取一种运算符
Question tempQuest=createNode(operandA,operatorChar,operandB);
if(!containsKey(hashTable,&tempQuest)){
printf("New unique question generated!\n");
insertOrUpdateHash(hashTable,tempQuest);
printQuestions(hashTable); // 可选:仅当需要查看当前状态时调用
sleep(1); // 控制频率可调整时间间隔
}else{
puts("Duplicate detected! Skipping...");
continue;
}
// 当达到一定数量后退出循环...
// 或者设置其他终止条件...
}
}
```
上述代码片段展示了如何通过哈希表机制确保每次产生的题目都是独一无二的,并且可以通过控制台输出验证结果。注意这里简化了实际应用可能涉及的一些细节,例如更复杂的边界情况判断等[^5]。
阅读全文
相关推荐












