用c语言编写一个完整的代码解决下面问题 问题描述:将单项选择题考试的题目和标准答案制作成数据文件,在考试人选择答题后显示题目,在答题人答题完毕后自动与标准答案比对并给出评判结果。实现功能:1、有良好的人机交互功能提示用户下一步的操作。 2、在用户答题完毕后自动显示下一道题目 3、答题完毕后显示答题的总信息和标准答案的比对及评分结果 4、信息都需要保存在文件中
时间: 2023-03-31 13:01:03 浏览: 135
exam_system,c语言源码怎么编译,c语言
以下是用 C 语言编写的代码,可以实现单项选择题考试的题目和标准答案制作成数据文件,在考试人选择答题后显示题目,在答题人答题完毕后自动与标准答案比对并给出评判结果,并将信息保存在文件中。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_QUESTIONS 100 // 最大题目数量
#define MAX_OPTIONS 4 // 每道题目的最大选项数量
#define MAX_ANSWER_LENGTH 10 // 每个选项的最大长度
// 题目结构体
typedef struct {
char question[100]; // 题目
char options[MAX_OPTIONS][MAX_ANSWER_LENGTH]; // 选项
int correct_option; // 正确选项
} Question;
// 读取题目文件
int read_questions(Question *questions) {
FILE *fp = fopen("questions.txt", "r");
if (fp == NULL) {
printf("无法打开题目文件!\n");
return ;
}
int num_questions = ;
char line[200];
while (fgets(line, sizeof(line), fp) != NULL) {
// 读取题目
strcpy(questions[num_questions].question, line);
// 读取选项
for (int i = ; i < MAX_OPTIONS; i++) {
fgets(line, sizeof(line), fp);
if (line[] == '\n') {
break;
}
strcpy(questions[num_questions].options[i], line);
}
// 读取正确选项
fgets(line, sizeof(line), fp);
questions[num_questions].correct_option = atoi(line);
num_questions++;
}
fclose(fp);
return num_questions;
}
// 显示题目
void show_question(Question question) {
printf("%s", question.question);
for (int i = ; i < MAX_OPTIONS; i++) {
if (strlen(question.options[i]) == ) {
break;
}
printf("%d. %s", i + 1, question.options[i]);
}
}
// 保存答题信息
void save_answer(int question_num, int answer, FILE *fp) {
fprintf(fp, "%d,%d\n", question_num, answer);
}
// 读取答题信息
int read_answer(int question_num, FILE *fp) {
char line[20];
while (fgets(line, sizeof(line), fp) != NULL) {
int q, a;
sscanf(line, "%d,%d", &q, &a);
if (q == question_num) {
return a;
}
}
return -1;
}
int main() {
Question questions[MAX_QUESTIONS];
int num_questions = read_questions(questions);
if (num_questions == ) {
return 1;
}
FILE *fp = fopen("answers.txt", "a+");
if (fp == NULL) {
printf("无法打开答案文件!\n");
return 1;
}
int score = ;
for (int i = ; i < num_questions; i++) {
show_question(questions[i]);
int answer;
printf("请输入答案:");
scanf("%d", &answer);
save_answer(i, answer, fp);
if (answer == questions[i].correct_option) {
printf("回答正确!\n");
score++;
} else {
printf("回答错误!\n");
}
}
printf("答题结束,您的得分是:%d/%d\n", score, num_questions);
rewind(fp);
printf("答题信息如下:\n");
char line[20];
while (fgets(line, sizeof(line), fp) != NULL) {
int q, a;
sscanf(line, "%d,%d", &q, &a);
printf("第%d题,您的答案:%d\n", q + 1, a);
}
fclose(fp);
return ;
}
阅读全文