用C语言编写以下程序 问题描述:将单项选择题考试的题目和标准答案制作成数据文件,在考试人选择答题后显示题目,在答题人答题完毕后自动与标准答案比对并给出评判结果。实现功能:1、有良好的人机交互功能提示用户下一步的操作。 2、在用户答题完毕后自动显示下一道题目 3、答题完毕后显示答题的总信息和标准答案的比对及评分结果 4、信息都需要保存在文件中知
时间: 2023-03-29 21:02:09 浏览: 64
我可以回答这个问题。以下是用C语言编写的程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_QUESTIONS 100 // 最大题目数量
#define MAX_CHOICES 4 // 每道题目的最大选项数量
#define MAX_FILENAME_LENGTH 100 // 文件名的最大长度
// 题目结构体
typedef struct {
char question[100]; // 题目内容
char choices[MAX_CHOICES][100]; // 选项
int correct_choice; // 正确选项
} Question;
// 读取题目文件
int read_questions(Question questions[], char filename[]) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("无法打开文件 %s\n", filename);
return ;
}
int num_questions = ;
char line[100];
while (fgets(line, sizeof(line), fp) != NULL) {
// 读取题目
strcpy(questions[num_questions].question, line);
// 读取选项
for (int i = ; i < MAX_CHOICES; i++) {
fgets(line, sizeof(line), fp);
if (line[] == '\n') {
// 选项读取完毕
break;
}
strcpy(questions[num_questions].choices[i], line);
}
// 读取正确选项
fgets(line, sizeof(line), fp);
questions[num_questions].correct_choice = atoi(line);
num_questions++;
}
fclose(fp);
return num_questions;
}
// 显示题目
void display_question(Question question) {
printf("%s", question.question);
for (int i = ; i < MAX_CHOICES; i++) {
if (strlen(question.choices[i]) == ) {
break;
}
printf("%c. %s", 'A' + i, question.choices[i]);
}
}
// 显示评分结果
void display_score(int num_correct, int num_questions) {
printf("答对了 %d 道题目,总共 %d 道题目,得分 %.2f\n", num_correct, num_questions, (float)num_correct / num_questions * 100);
}
int main() {
char question_filename[MAX_FILENAME_LENGTH];
printf("请输入题目文件名:");
scanf("%s", question_filename);
Question questions[MAX_QUESTIONS];
int num_questions = read_questions(questions, question_filename);
if (num_questions == ) {
return 1;
}
int num_correct = ;
for (int i = ; i < num_questions; i++) {
display_question(questions[i]);
int choice;
printf("请输入答案:");
scanf("%d", &choice);
if (choice == questions[i].correct_choice) {
printf("回答正确!\n");
num_correct++;
} else {
printf("回答错误!正确答案是 %c\n", 'A' + questions[i].correct_choice);
}
if (i < num_questions - 1) {
printf("请按任意键继续下一题\n");
getchar(); // 消耗回车键
getchar(); // 等待用户按下任意键
printf("\n");
}
}
display_score(num_correct, num_questions);
char result_filename[MAX_FILENAME_LENGTH];
printf("请输入结果文件名:");
scanf("%s", result_filename);
FILE *fp = fopen(result_filename, "w");
if (fp == NULL) {
printf("无法打开文件 %s\n", result_filename);
return 1;
}
fprintf(fp, "答对了 %d 道题目,总共 %d 道题目,得分 %.2f\n", num_correct, num_questions, (float)num_correct / num_questions * 100);
fclose(fp);
return ;
}