用c语言编写一个完整的代码解决下面问题 问题描述:将单项选择题考试的题目和标准答案制作成数据文件,在考试人选择答题后显示题目,在答题人答题完毕后自动与标准答案比对并给出评判结果。实现功能:1、有良好的人机交互功能提示用户下一步的操作。 2、在用户答题完毕后自动显示下一道题目 3、答题完毕后显示答题的总信息和标准答案的比对及评分结果 4、信息都需要保存在文件中
时间: 2023-03-31 08:01:03 浏览: 133
经典c语言面试题公司考试这种题目主要考你编写的代码是否考虑到各种情况,是否安全(不会溢出)
4星 · 用户满意度95%
以下是用 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 ;
}
阅读全文