用c语言编写一个完整的程序解决下面问题 问题描述:将单项选择题考试的题目和标准答案制作成数据文件,在考试人选择答题后显示题目,在答题人答题完毕后自动与标准答案比对并给出评判结果。实现功能:1、有良好的人机交互功能提示用户下一步的操作。 2、在用户答题完毕后自动显示下一道题目 3、答题完毕后显示答题的总信息和标准答案的比对及评分结果 4、信息都需要保存在文件中
时间: 2023-04-04 21:01:49 浏览: 194
以下是一个用 C 语言编写的程序,可以解决单项选择题考试的题目和标准答案的比对及评分问题:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_QUESTIONS 100 // 最大题目数量
#define MAX_OPTIONS 4 // 每道题目的最大选项数量
#define MAX_ANSWER_LENGTH 10 // 每个选项的最大长度
#define MAX_NAME_LENGTH 50 // 文件名的最大长度
// 定义题目结构体
typedef struct {
char question[100]; // 题目
char options[MAX_OPTIONS][MAX_ANSWER_LENGTH]; // 选项
int answer; // 正确答案
} Question;
// 定义考试结果结构体
typedef struct {
int total; // 总题数
int correct; // 正确答案数量
int wrong; // 错误答案数量
} Result;
// 读取题目和答案文件
int read_questions(Question *questions, char *filename) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("无法打开文件 %s\n", filename);
return ;
}
int count = ;
char line[200];
while (fgets(line, sizeof(line), fp) != NULL) {
char *p = strtok(line, ",");
strcpy(questions[count].question, p);
for (int i = ; i < MAX_OPTIONS; i++) {
p = strtok(NULL, ",");
if (p == NULL) {
break;
}
strcpy(questions[count].options[i], p);
}
p = strtok(NULL, ",");
if (p != NULL) {
questions[count].answer = atoi(p);
}
count++;
}
fclose(fp);
return count;
}
// 显示题目
void show_question(Question *question) {
printf("%s\n", question->question);
for (int i = ; i < MAX_OPTIONS; i++) {
if (strlen(question->options[i]) == ) {
break;
}
printf("%c. %s\n", 'A' + i, question->options[i]);
}
}
// 获取用户输入的答案
int get_answer() {
char line[10];
fgets(line, sizeof(line), stdin);
return line[] - 'A';
}
// 比对答案并返回结果
int check_answer(Question *question, int answer) {
return question->answer == answer;
}
// 显示考试结果
void show_result(Result *result) {
printf("总题数:%d\n", result->total);
printf("正确答案:%d\n", result->correct);
printf("错误答案:%d\n", result->wrong);
}
// 保存考试结果到文件
void save_result(Result *result, char *filename) {
FILE *fp = fopen(filename, "w");
if (fp == NULL) {
printf("无法打开文件 %s\n", filename);
return;
}
fprintf(fp, "总题数:%d\n", result->total);
fprintf(fp, "正确答案:%d\n", result->correct);
fprintf(fp, "错误答案:%d\n", result->wrong);
fclose(fp);
}
int main() {
Question questions[MAX_QUESTIONS];
Result result = {, , };
char filename[MAX_NAME_LENGTH];
printf("请输入题目和答案文件名:");
fgets(filename, sizeof(filename), stdin);
filename[strlen(filename) - 1] = '\';
int count = read_questions(questions, filename);
if (count == ) {
return ;
}
printf("考试开始!\n");
for (int i = ; i < count; i++) {
printf("第 %d 题:\n", i + 1);
show_question(&questions[i]);
printf("请输入答案:");
int answer = get_answer();
if (check_answer(&questions[i], answer)) {
printf("回答正确!\n");
result.correct++;
} else {
printf("回答错误!\n");
result.wrong++;
}
result.total++;
}
printf("考试结束!\n");
show_result(&result);
char result_filename[MAX_NAME_LENGTH];
printf("请输入考试结果保存文件名:");
fgets(result_filename, sizeof(result_filename), stdin);
result_filename[strlen(result_filename) - 1] = '\';
save_result(&result, result_filename);
return ;
}
阅读全文