用c语言写一个简单的答题系统

 首先,这是我们的要求,对于我一个初学者写一个答题系统是有点难的,所以我将带大家跟着我一个初学者的思路来思考并解决。

首先是产生随机数1~20,在这里详细的可以参考C语言随机数的生成【详解】_星空之路Star的博客-CSDN博客_c语言随机数

由于我是直接参考的就不多说了。

还有为了防止出现同样的随机数,可以这样。

 

其次是如何输入题目

 我这里直接用了一个函数,每一个题目用char定义再用一维数组,

 再在函数里用switch case将题目用puts输入

 这里是将答案储存在这个数组中

 

 这里就是来判断答案是否正确,如果错误就会输出正确答案,并得到正确率。

我的这个答题系统总的来说是写的比较简便的,大家如果有更多的需求的话还是要自己多动动脑筋了。仅供参考。

实现一个完整的自动阅卷系统需要考虑很多方面,包括题目的录入、试卷的生成、答案的录入、答案的判定等等。下面是一个简单的自动阅卷程序的实现思路: 1. 题目录入:将所有的考试题目录入到系统中,可以采用在文件中录入或者在程序中直接定义的方式。 2. 试卷生成:从题目库中随机抽取一定数量的试题生成一份试卷,并将试题按照一定顺序输出到文件中。 3. 答案录入:考生在答题完毕后,将答案录入到系统中,可以采用手动录入或者从文件中读取的方式。 4. 答案判定:将考生答案与标准答案进行比对,计算出考生的得分。 下面是一个简单C语言实现: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> // 定义题目结构体 typedef struct problem { int number; // 题号 char content[200]; // 题目内容 char answer; // 答案 } Problem; // 定义试卷结构体 typedef struct paper { Problem problems[100]; // 试题数组 int problem_num; // 试题数量 } Paper; // 定义函数:从文件中读取题目 void read_problems(Problem *problems, int *problem_num) { FILE *fp; fp = fopen("problems.txt", "r"); if (fp == NULL) { printf("Can't open file problems.txt"); exit(1); } int i = 0; while (fscanf(fp, "%d %s %c", &problems[i].number, problems[i].content, &problems[i].answer) != EOF) { i++; } *problem_num = i; fclose(fp); } // 定义函数:生成试卷 void generate_paper(Problem *problems, int problem_num, Paper *paper) { srand((unsigned) time(NULL)); // 初始化随机数种子 int i, j, index; paper->problem_num = 10; // 假设试卷只有10道题 for (i = 0; i < paper->problem_num; i++) { do { index = rand() % problem_num; // 随机选取一道题 paper->problems[i] = problems[index]; // 判断是否已经在试卷中出现过 for (j = 0; j < i; j++) { if (paper->problems[i].number == paper->problems[j].number) { break; } } } while (j < i); } } // 定义函数:答案判定 void judge(Paper *paper, char *answers, int *score) { int i; *score = 0; for (i = 0; i < paper->problem_num; i++) { if (paper->problems[i].answer == answers[i]) { (*score)++; } } } int main() { Problem problems[100]; int problem_num; read_problems(problems, &problem_num); // 读取题目 Paper paper; generate_paper(problems, problem_num, &paper); // 生成试卷 printf("试卷如下:\n"); int i; for (i = 0; i < paper.problem_num; i++) { // 输出试卷 printf("%d. %s\n", paper.problems[i].number, paper.problems[i].content); } char answers[100]; int score; printf("请填答案(共%d题):\n", paper.problem_num); for (i = 0; i < paper.problem_num; i++) { printf("%d. ", i + 1); scanf(" %c", &answers[i]); // 注意这里需要在 %c 前面加一个空格,避免读入回车符 } judge(&paper, answers, &score); // 判定答案 printf("得分:%d\n", score); return 0; } ``` 在这个程序中,我们定义了一个Problem结构体表示一道题目,一个Paper结构体表示一份试卷。read_problems函数从文件中读取题目,generate_paper函数生成试卷,judge函数判定答案。程序首先读取题目,然后生成试卷并输出,接着让考生填答案并判定答案,最后输出得分。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值