一.结对情况
本人: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;
}
五.运行截图
六.运行环境
基于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