C语言实现考试答题正确率统计输出全为1问题排查
C语言学生答题判分程序问题修复
实现需求
- 录入5道题的标准答案
- 依次录入3名学生的姓名及每道题的作答答案
- 对比标准答案统计每名学生的答对题目数量
- 按格式输出所有学生的姓名和对应答对题数
测试输入
- 标准答案:a、b、c、d、a
- 学生作答数据:
- matheus:a、b、c、d、a,预期答对5题
- maria:a、a、a、a、a,预期答对2题
- marcos:c、c、c、c、c,预期答对1题
问题现象
原始代码运行后输出所有学生的答对题数均为1,与预期结果不符。
原始错误代码
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void){ int i, j, aux; char name[3][20], g[5], r[5]; printf("\t======= TEST TEMPLATE =======\n\n"); for(i = 0; i < 5; i++){ printf("\nTemplate question. %d: ", i+1); scanf("%s", &g[i]); } printf("\n\n\t======= TEST =======\n\n"); for(j = 0; j < 3; j++){ printf("\nStudent name: "); scanf("%s", name[j]); for(i = 0; i< 5; i++){ printf("\nQ.%d: ", i+1); scanf("%s", &r[i]); } } for(j = 0; j < 3; j++){ aux = 0; for(i = 0; i < 5; i++){ if(g[i] == r[i]){ aux++; } } } printf("\n\n\t======= ANSWARES =======\n\n"); for(j = 0; j < 3; j++){ printf("%s: %d\n", name[j], aux); } return 0; }
错误原因
- 存储结构设计错误:原始代码用一维数组
r[5]存储学生答案,每录入一名新学生的作答就会覆盖上一名学生的答案,最终r数组里只保留了最后一名学生marcos的答案 - 得分统计逻辑错误:原始代码统计得分时循环遍历3名学生,每次都会重置
aux计数变量,循环结束后aux只保留了最后一名学生的得分1 - 输出逻辑错误:原始代码单独循环输出所有学生得分时,统一使用了最后一次统计得到的
aux值,导致所有学生得分都显示为1
修复后可运行代码(变量采用葡萄牙语命名)
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void){ char name[3][20], g[5], r[3][5]; printf("\t======= GABARITO DA PROVA =======\n\n"); for(int i = 0; i < 5; i++){ printf("\nGabarito da questão %d: ", i+1); scanf("%s", &g[i]); // printf("%c\n", g[i]); } printf("\n\n\t======= PROVA =======\n\n"); for(int j = 0; j < 3; j++){ printf("\nNome do Aluno: "); scanf("%s", name[j]); for(int i = 0; i< 5; i++){ printf("\nQ.%d: ", i+1); scanf("%s", &r[j][i]); //printf("%c \n", r[j][i]); } } printf("\n\n\t======= RESPOSTAS =======\n\n"); for(int j = 0; j < 3; j++){ int aux = 0; for(int i = 0; i < 5; i++){ //printf("%c - %c\n", g[i], r[j][i]); if(g[i] == r[j][i]){ aux+=1; } } printf("%s: %d\n", name[j], aux); } return 0; }
修复点说明
- 将学生答案存储数组修改为二维数组
r[3][5],可以分别存储3名学生各5道题的答案,不会出现覆盖问题 - 将得分统计和输出逻辑合并到同一个循环内,每统计完一名学生的得分就直接输出,避免计数变量被覆盖
- 统计得分时用
r[j][i]读取第j名学生第i题的答案,和标准答案g[i]对比,统计结果准确
内容的提问来源于stack exchange,提问作者Matheus Ferreira Leandro
相关产品推荐
相关产品推荐

