题目 1073: 弟弟的作业

题目描述
你的弟弟刚做完了“100以内数的加减法”这部分的作业,请你帮他检查一下。每道题目(包括弟弟的答案)的格式为a+b=c或者a-b=c,其中a和b是作业中给出的,均为不超过100的非负整数;c是弟弟算出的答案,可能是不超过200的非负整数,也可能是单个字符"?",表示他不会算。

输入
输入文件包含不超过100行,以文件结束符结尾。每行包含一道题目,格式保证符合上述规定,且不包含任何空白字符。输入的所有整数均不含前导0。

输出
输出仅一行,包含一个非负整数,即弟弟答对的题目数量。
(运行错误感觉因该是以文件结束符结尾那一部分错了)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sr = new Scanner(System.in);
        int jl=0;
      for(;;)
       {
           String  zf=sr.next();
    	   if(zf.equals("EOF") || zf.equals("-1")||zf.equals("0")) 
    	   {
    		   System.out.println(jl);
    		   break;
    	   }
    	   if(zf.indexOf("?")!=-1)
    	   {
    		   continue;
    	   }
    	   int pd=zf.indexOf("+");
    	   if(pd>0)
    	   {
    		   int js1=Integer.parseInt(zf.substring(0, pd));
    		   int js2=Integer.parseInt(zf.substring(pd+1, zf.indexOf("=")));
    		   int jg=Integer.parseInt(zf.substring(zf.indexOf("=")+1, zf.length()));
    		   if((js1+js2)==jg)
    		   {
    			   jl++;
    		   }
    	   }
    	   else
    	   {
    		   int js1=Integer.parseInt(zf.substring(0, zf.indexOf("-")));
    		   int js2=Integer.parseInt(zf.substring(zf.indexOf("-")+1, zf.indexOf("=")));
    		   int jg=Integer.parseInt(zf.substring(zf.indexOf("=")+1, zf.length()));
    		   if((js1-js2)==jg)
    		   {
    			   jl++;
    		   }
    	   }
    	   
    	   }
    }
}
<think>好的,我需要用户找到一个关于用C++解决检查作业的示例。首先,用户的需求是检查作业,可能涉及到比较学生的答案和标准答案是否一致。这可能包括处理学题、代码题或者其他类型的题目。不过用户提到的C++编程,所以示例应该用C++来实现。 先想一个简单的场景,比如作业的检查。例如,学生提交了一个包含学题的答案,程序需要读取学生的答案和标准答案,然后对比是否正确。这时候可能需要文件操作,读取两个文件的内容,逐行比较。 然后考虑据结构。比如,可以用两个vector或者组来存储学生答案和标准答案,然后逐个比较元素。如果有不匹配的就记录下来,最后输出正确率或者错误的位置。 还需要处理可能的输入输出问题。比如,文件格式是什么样的?假设每行一个答案,这样读取起来比较方便。或者如果是更复杂的结构,比如JSON,但可能对于C++来说处理起来麻烦,所以暂时用简单的文本文件。 另外,可能需要异常处理,比如文件无法打开的情况,这时候程序需要给出提示。 接下来想代码结构。主函可能包括读取两个文件,比较它们的内容,输出结果。需要用到fstream来读取文件,vector来存储据,然后循环比较。 可能的错误点:文件行不一致,这时候要处理这种情况,比如提示错误或者只比较共同的行。 然后,代码示例应该包括这些部分。比如: 1. 打开两个文件,学生答案和标准答案。 2. 逐行读取,存储到两个vector中。 3. 比较每个对应的元素,统计正确和错误位置。 4. 输出结果。 再考虑是否需要处理不同类型的答案,比如字、字符串或者更复杂的据结构。但作为示例,可能先处理简单的值或字符串比较。 现在,写一个具体的例子。比如学生答案文件student.txt内容: 5 10 3.14 Hello 标准答案answer.txt内容: 5 12 3.14 World 程序读取这两个文件,比较每一行,输出哪些行正确,哪些错误。 代码的大致步骤: - 使用ifstream读取两个文件。 - 使用getline逐行读取,存储到vector<string>中。 - 遍历两个vector,比较每个元素。 - 统计正确和错误的位置。 注意,如果答案可能包含前导或后置空格,可能需要trim处理,但示例中可以忽略,假设输入是干净的。 然后,代码示例: #include <iostream> #include <fstream> #include <vector> #include <string> using namespace std; int main() { vector<string> studentAnswers; vector<string> correctAnswers; // 读取学生答案 ifstream studentFile("student.txt"); string line; while (getline(studentFile, line)) { studentAnswers.push_back(line); } studentFile.close(); // 读取标准答案 ifstream correctFile("answer.txt"); while (getline(correctFile, line)) { correctAnswers.push_back(line); } correctFile.close(); // 检查行是否一致 if (studentAnswers.size() != correctAnswers.size()) { cout << "错误:答案行不一致!" << endl; return 1; } // 比较答案 int total = studentAnswers.size(); int correct = 0; for (int i = 0; i < total; ++i) { if (studentAnswers[i] == correctAnswers[i]) { correct++; } else { cout << "第" << (i+1) << "题错误。学生答案:" << studentAnswers[i] << ",标准答案:" << correctAnswers[i] << endl; } } cout << "正确率:" << correct << "/" << total << endl; return 0; } 这个示例代码应该能满足基本需求。不过可能需要根据具体作业类型调整比较方式,比如值比较可能有精度问题,这时候需要转换字符串为值类型,但示例中可能直接比较字符串是否完全一致。 另外,用户可能希望更复杂的检查,比如学表达式化简后的等价性,这时候需要更复杂的解析和比较逻辑,但作为示例,简单的字符串比较已经足够。 现在,按照用户的要求,生成相关问题。问题应该围绕这个示例可能涉及的C++知识点,比如文件操作、vector使用、字符串处理,或者可能的扩展方向,比如如何处理不同题型、性能优化等。</think>### C++ 编程解决作业检查示例 以下示例演示如何用C++实现简单的作业检查程序,用于对比学生答案与标准答案的一致性: ```cpp #include <iostream> #include <fstream> #include <vector> #include <string> using namespace std; int main() { vector<string> studentAnswers, correctAnswers; // 读取学生答案文件 ifstream studentFile("student_answers.txt"); string line; while (getline(studentFile, line)) { studentAnswers.push_back(line); } studentFile.close(); // 读取标准答案文件 ifstream correctFile("correct_answers.txt"); while (getline(correctFile, line)) { correctAnswers.push_back(line); } correctFile.close(); // 检查文件行一致性 if (studentAnswers.size() != correctAnswers.size()) { cerr << "错误:答案量不一致" << endl; return 1; } // 逐题比对答案 int score = 0; for (size_t i = 0; i < studentAnswers.size(); ++i) { if (studentAnswers[i] == correctAnswers[i]) { score++; } else { cout << "第" << i+1 << "题错误 | 学生答案:" << studentAnswers[i] << " | 标准答案:" << correctAnswers[i] << endl; } } cout << "最终得分:" << score << "/" << studentAnswers.size() << endl; return 0; } ``` #### 关键实现解析 1. **文件读取**:使用`ifstream`读取文本文件,逐行存储到`vector<string>`容器中[^3] 2. **容器操作**:通过`vector`实现动态组管理,适应不同题量的作业检查 3. **字符串比对**:直接对比字符串内容,适用于选择题、填空题等题型 4. **错误处理**:检测文件行差异,避免越界访问[^1] #### 扩展方向 - **支持学表达式**:将字符串转换为值类型,处理浮点精度误差 ```cpp #include <cmath> bool isEqual(double a, double b, double epsilon = 0.001) { return fabs(a - b) < epsilon; } ``` - **代码题检查**:集成编译器API(如Clang)实现代码逻辑验证[^4] - **多线程优化**:使用`std::thread`并行处理大题量作业
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值