首页 > 编程语言 >软件开发与创新第二次实验——结对编程:计算题出题系统

软件开发与创新第二次实验——结对编程:计算题出题系统

时间:2024-04-19 23:12:09浏览次数:29  
标签:case 结对 num1 num2 计算题 num3 break 出题 answer

一.结对情况

本人:2252209
结对搭档:2211323

二.程序设想思路

根据题目我和搭档总结出如下几个关键点:
1.四则运算随机出题
2.两个运算符,三个数字
3.提供算式答案并对用户输入答案进行检查

我们在基础要求上新增点如下:
1.为提高用户使用观感,开头结尾增加一些文字说明
2.在用户输入完答案后,系统自动进行检查,若答案错误则给出提示和标准答案
3.细节点:题目序号的添加,“正确和错误”的提示

三.制作过程

前半部分由2211323同学负责编写代码,我辅助帮助发现问和查找题解决方案;后半部分交换进行。

四.代码

点击查看代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// 生成随机的四则运算题目
void generate_question(int index, char* question, int* answer) {
    char operators[4] = { '+', '-', '*', '/' };
    char operator1 = operators[rand() % 4];
    char operator2 = operators[rand() % 4];
    int num1 = rand() % 20 + 1;
    int num2 = rand() % 20 + 1;
    int num3 = rand() % 20 + 1;

    
    if (operator1 == '/' && (num2 == 0 || num1 % num2 != 0)) {
        num2 = rand() % 10 + 1;
    }

    sprintf(question, "%d. %d %c %d %c %d", index, num1, operator1, num2, operator2, num3);

    switch (operator1) {
    case '+':
        switch (operator2) {
        case '+':
            *answer = num1 + num2 + num3;
            break;
        case '-':
            *answer = num1 + num2 - num3;
            break;
        case '*':
            *answer = num1 + num2 * num3;
            break;
        case '/':
            *answer = num1 + num2 / num3;
            break;
        }
        break;
    case '-':
        switch (operator2) {
        case '+':
            *answer = num1 - num2 + num3;
            break;
        case '-':
            *answer = num1 - num2 - num3;
            break;
        case '*':
            *answer = num1 - num2 * num3;
            break;
        case '/':
            *answer = num1 - num2 / num3;
            break;
        }
        break;
    case '*':
        switch (operator2) {
        case '+':
            *answer = num1 * num2 + num3;
            break;
        case '-':
            *answer = num1 * num2 - num3;
            break;
        case '*':
            *answer = num1 * num2 * num3;
            break;
        case '/':
            *answer = num1 * num2 / num3;
            break;
        }
        break;
    case '/':
        switch (operator2) {
        case '+':
            *answer = num1 / num2 + num3;
            break;
        case '-':
            *answer = num1 / num2 - num3;
            break;
        case '*':
            *answer = num1 / num2 * num3;
            break;
        case '/':
            *answer = num1 / num2 / num3;
            break;
        }
        break;
    }
}

// 检查用户答案是否正确
int check_answer(int correct_answer, int user_answer) {
    if (correct_answer == user_answer) {
        printf("回答正确!\n");
        return 1;
    }
    else {
        printf("答案错误,正确答案是 %d\n", correct_answer);
        return 0;
    }
}

int main() {
    srand(time(NULL)); // 初始化随机数种子

    printf("欢迎来到四则运算题目挑战!\n");
    int correct_count = 0;

    for (int i = 1; i <= 50; i++) {
        char question[20];
        int correct_answer, user_answer;

        generate_question(i, question, &correct_answer);
        printf("题目: %s\n", question);
        printf("请输入答案:");
        scanf("%d", &user_answer);

        if (check_answer(correct_answer, user_answer)) {
            correct_count++;
        }
    }

    printf("今日五十道题已完成,明天再来!\n");

    return 0;
}

五.运行截图

image

image

六.运行环境

基于Windows 11家庭版设备,使用Visual Studio Installer编译器,运用C语言进行代码编写。

七.代码运用的知识点及主要函数介绍

1.随机数生成:使用 rand() 函数和 srand() 函数生成随机数,配合 time() 函数作为种子,确保每次运行程序时生成的随机数不同。

2.字符数组和字符串操作:使用字符数组来存储生成的题目字符串,并利用 sprintf() 函数将题目格式化为字符串。

3.条件语句和嵌套条件:使用 if 语句进行条件判断,根据运算符的不同生成对应的算术表达式,并且确保除法运算时被除数不为0。
generate_question(int index, char question, int answer)**:

4.这个函数用于生成一个包含题目和答案的字符串,并将正确答案存储到一个指针所指向的位置。
参数 index 是题目的序号,用于标识题目。
参数 question 是一个字符数组,用于存储生成的题目字符串。
参数 answer 是一个指向整型变量的指针,用于存储生成的题目的正确答案。

5.check_answer(int correct_answer, int user_answer):
这个函数用于检查用户输入的答案是否正确,并输出相应的提示信息。
参数 correct_answer 是正确的答案。
参数 user_answer 是用户输入的答案。
返回值是一个整数,表示用户答案是否正确,1 表示正确,0 表示错误。

八.此次实验体会

我的体会:

结对编程是一种非常有趣和有益的编程实践方式。通过与队友一起编写代码,我体会到了许多:

1.与队友合作编程时,我们可以分享彼此的知识和经验,学习到不同的编程技巧和方法。这种知识交流可以加速个人的学习和成长。

2.在编写代码过程中,可能会遇到各种各样的问题。结对编程能够让两个人共同思考问题,并找到解决方案。有时候一个人可能会忽略一些细节或者陷入思维定势,而有了队友的帮助和观点,问题往往可以更快地得到解决。

3.代码质量提高:两个人一起编写代码,可以相互审查、检查,从而减少错误和漏洞。通过互相检查代码,可以提高代码的质量和稳定性。

4.逻辑思维的训练:在生成题目和检查答案的过程中,需要考虑各种情况,如运算符的组合、被除数不能为零等,这锻炼了我的逻辑思维能力。

搭档的体会:

1.功能模块化的重要性:将生成题目和检查答案的功能分别封装成函数,使得代码结构清晰,易于理解和维护。这种模块化的设计让代码更加灵活,可以方便地扩展和修改。

2.随机数生成的应用:通过使用随机数生成器 rand() 和种子函数 srand(),我们能够生成各种不同的题目,增加了程序的趣味性和挑战性。

3.输入输出的处理:通过使用 printf() 和 scanf() 函数进行输入输出,实现了与用户的交互,使程序具有了实用性。

4.在结对编程中,两个人共同完成一项任务,因此也会共同分享责任和成就感。当完成一个功能或者解决一个难题时,可以与队友分享喜悦和成就,增强团队的凝聚力和向心力。

标签:case,结对,num1,num2,计算题,num3,break,出题,answer
From: https://www.cnblogs.com/u3389544/p/18146966

相关文章

  • 软件创新与开发——结对编程
    程序要求:两个运算符,100以内的数字,不需要写答案。需要检查答案是否正确,并且保证答案在0-100之间。本次作业由2252312和2252413共同完成由2252312发布博客园运行环境:Windows10教育版开发环境:devc++语言:C++处理器:11thGenIntel(R)Core(TM)i7-11700@2.5GHz2.50GHz以下是源......
  • 结对编程
    结对同学:2252832程序要求:两个运算符,100以内的数字,不需要写答案。需要检查答案是否正确,并且保证答案在0-100之间根据题目要求,我们决定使用c++语言完成编程,使用两个运算符,100以内的数字。需要检查答案是否正确,并且保证答案在0到100之间结对编程过程1.首先确认问题需求,......
  • 结对编程——100以内加减乘除
    前言按照结对编程的原则,我(2252627)和我的合作伙伴(2252616)两人进行了结对编程,我们共同完成的项目的是小学的四则运算,通过随机生成四则运算题目,供学生答题,并在学生提交答案后进行自动评定,返回正误。经过讨论,我们采用了C++语言作为开发语言,并选取DevC++5.11作为开发环境。功能要求......
  • 结对编程(c语言)
    作业要求:小学老师要每周给同学出300道四则运算练习题。选择c语言进行实现–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之间–尽可能地多设置一些条件也可以让同学们自选一个小应用程序进行结对编程的开发请两位同学以结对编码(......
  • 结对编程-c++四则运算
    题目:小学老师要每周给同学出300道四则运算练习题。–这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之间–尽可能地多设置......
  • 结对编程-C++四则运算
    小学老师要每周给同学出300道四则运算练习题。–这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之间–尽可能地多设置一......
  • 结对
    publicListgetStationsBetween(StringstartStation,StringendStation,List<List>allSubwayStations){ListstationsBetween=newArrayList<>();Map<String,List>graph=buildGraph(allSubwayStations);//检查起始站和终点站是否存在于地铁网络中if(......
  • 结对编程
    前言小学老师要每周给同学出300道四则运算练习题。–这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之间–尽可能地多设......
  • 结对编程
    小学老师要每周给同学出300道四则运算练习题。–这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之间合作伙伴:2252522代......
  • 结对编程-C#-四则运算
    结对编程-四则运算要求:小学老师要每周给同学出300道四则运算练习题。–这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之......