1012: 弟弟的作业

本文提供了一个程序解决小学生数学作业题,包括加法和减法,并检查答案是否正确。

1012: 弟弟的作业

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 19  Solved: 11
[ Submit][ Status][ Discuss]

Description

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

Input

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

Output

输出仅一行,包含一个非负整数,即弟弟答对的题目数量。

Sample Input

1+2=33-1=56+7=?99-0=99

Sample Output

2



#include<stdio.h>
int main() {
  char s[99];
  int a, b, c, n = 0;
  while(scanf("%s", &s) == 1) {
    if(sscanf(s, "%d+%d=%d", &a, &b, &c) == 3 && a+b==c) n++;
    if(sscanf(s, "%d-%d=%d", &a, &b, &c) == 3 && a-b==c) n++;
  }
  printf("%d\n", n);
  return 0;
}
//sscanf() - 从一个字符串中读进与指定格式相符的数据,头文件为stdio.h,这是个知识点,挺不错


#include<iostream>
#include<stdio.h>
using namespace std;
int  main()
{
    int a,c,e,n=0;
    char b,d,s[20];
    while((scanf("%d%c%d%c%s",&a,&b,&c,&d,&s)!=EOF))
    {
       int i=0;
       if(s[i]>='0'&&s[i]<='9')
       {
           e=0;
           while(s[i]>='0'&&s[i]<='9')
          {
              e=e*10+(s[i]-'0');//类型转换
              i++;
          }
             cout<<e<<endl;
       }
       if(b=='+'&&a+c==e)
          n++;
       if(b=='-'&&a-c==e)
          n++;
   }
       cout<<n<<endl;
   return 0;
}



<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`并行处理大题量作业
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值