作业二:结对编程
//method.h #pragma once #ifndef __METHOD_H__ #define __METHOD_H__ #include<stdio.h> #include<stdlib.h> #include<time.h> //函数声明 void Interface(); //主界面 char Symbol(); //随机生成符号 int Number(); //随机生成数字 int addition(char judge); //加法运算 int subtraction(char judge, char Judge); //减法运算 void swap(); //交换函数 int multiplication(char judge); //乘法运算 int division(char judge, char Judge); //除法运算 void Interface() { //主界面 int num; //用于存储输入的数字 int n; //用于选择一行输出的运算式数量 char judge; //用于选择是与否 char Judge; //用于减法有无负数和除法有无余数 char sym; //用于存储生成的符号 srand((unsigned)time(NULL)); //重新“播种”,改变种子,让生成的数字改变 printf("**********************************欢迎使用四则运算**********************************\n"); printf("\n\n\n"); printf(" ********************************** \n"); printf(" ** 1.加法运算 ** \n"); printf(" ** 2.减法无负 ** \n"); printf(" ** 3.减法有负 ** \n"); printf(" ** 4.乘法运算 ** \n"); printf(" ** 5.除法无余 ** \n"); printf(" ** 6.除法有余 ** \n"); printf(" ** 7.混合有负余 ** \n"); printf(" ** 8.混合无负余 ** \n"); printf(" ** 0.退出程序 ** \n"); printf(" ********************************** \n"); printf("\n\n\n"); printf("**************************************请选择:**************************************\n"); do { scanf_s("%d", &num); //输入选择 if (num == 0)exit(1); //退出程序 else if (num == 1) { //加法运算 num = 0; sym = '+'; printf("是否输出答案(是(1),否(0)):"); getchar(); scanf_s("%c", &judge); } else if (num == 2) { //减法无负 num = 0; sym = '-'; printf("是否输出答案(是(1),否(0)):"); getchar(); scanf_s("%c", &judge); Judge = '1'; } else if (num == 3) { //减法有负 num = 0; sym = '-'; printf("是否输出答案(是(1),否(0)):"); getchar(); scanf_s("%c", &judge); Judge = '0'; } else if (num == 4) { //乘法运算 num = 0; sym = '*'; printf("是否输出答案(是(1),否(0)):"); getchar(); scanf_s("%c", &judge); } else if (num == 5) { //除法无余 num = 0; sym = '/'; printf("是否输出答案(是(1),否(0)):"); getchar(); scanf_s("%c", &judge); Judge = '0'; } else if (num == 6) { //除法有余 num = 0; sym = '/'; printf("是否输出答案(是(1),否(0)):"); getchar(); scanf_s("%c", &judge); Judge = '1'; } else if (num == 7) { //混合有余负 num = 0; sym = 'R'; printf("是否输出答案(是(1),否(0)):"); getchar(); scanf_s("%c", &judge); Judge = '1'; } else if (num == 8) { //混合无余负 num = 0; sym = 'R'; printf("是否输出答案(是(1),否(0)):"); getchar(); scanf_s("%c", &judge); Judge = '0'; } else printf("错误选项!请重新选择:"); } while (num != 0); char s = sym; //存储符号备份 printf("请输入题量:"); scanf_s("%d", &num); //输入题量 printf("请输入一行显示运算式数量(1-4):"); scanf_s("%d", &n); //输入数量 for (int i = 0; i < num; i++){ //循环进行 if (s == 'R')sym = Symbol(); //随机生成符号 if (sym == '+')addition(judge); //输出加法运算式 else if (sym == '-')subtraction(judge,Judge); //输出减法运算式 else if (sym == '*')multiplication(judge); //输出乘法运算式 else if (sym == '/')division(judge,Judge); //输出除法运算式 if ((i + 1) % n == 0 && i != 0)printf("\n"); } printf("\n"); } char Symbol() { //随机生成符号 int num; //用于存储生成的数字,1-2代表+和- //srand((unsigned)time(NULL)); //重新“播种”,改变种子,让生成的数字改变 num = rand() % 4 + 1; //种子生成器,产生1-4之间的数字 if (num == 1)return '+'; //为1返回+ else if (num == 2) return '-'; //为2返回- else if (num == 3) return '*'; //为3返回× else return '/'; //为4返回÷ } int Number() { //随机生成整数 int num; //用于存储生成的数字 //srand((unsigned)time(NULL)); //重新“播种”,改变种子,让生成的数字改变 num = rand() % 99 + 1; //种子生成器,产生1-99之间的数字 return num; } int addition(char judge) { //加法运算 int result; //用于存储结果 int num1, num2; //用于存储生成的两个数字 num1 = Number(); //调用随机生成函数赋给num1 num2 = Number(); //调用随机生成函数赋给num2 result = num1 + num2; //将两个数的和赋给result if (result > 100)addition(judge); //如果结果大于100,重新调用该函数 else if(judge == '1') printf("%d + %d = %d\t\t", num1, num2, result); //打印有答案的运算式 else printf("%d + %d = \t\t", num1, num2); //打印无答案的运算式 return result; } //考虑没有负数结果的运算,写一个用于交换数字的函数 void swap(int &num1, int &num2) { //交换函数 if (num1 < num2) { num1 = num1 + num2; num2 = num1 - num2; num1 = num1 - num2; } } int subtraction(char judge, char Judge) { //减法运算 int result; //用于存储结果 int num1, num2; //用于存储生成的两个数字 num1 = Number(); //调用随机生成函数赋给num1 num2 = Number(); //调用随机生成函数赋给num2 if(Judge == 1)swap(num1, num2); //无负运算 result = num1 - num2; //将两个数的差赋给result if(judge == '1')printf("%d - %d = %d\t\t", num1, num2, result); //打印有答案运算式 else printf("%d - %d = \t\t", num1, num2); //打印无答案运算式 return result; } int multiplication(char judge) { //乘法运算 int result; //用于存储结果 int num1, num2; //用于存储生成的两个数字 num1 = Number(); //调用随机生成函数赋给num1 num2 = Number(); //调用随机生成函数赋给num2 result = num1 * num2; //将两个数的积赋给result if (result > 100)multiplication(judge); //如果结果大于100,重新调用该函数 else if(judge == '1') printf("%d × %d = %d\t\t", num1, num2, result); //打印有答案运算式 else printf("%d × %d = \t\t", num1, num2); //打印无答案运算式 return result; } int division(char judge, char Judge) { //除法运算 int result; //用于存储结果 int remainder; //用于存储余数 int num1, num2; //用于存储生成的两个数字 num2 = Number(); //调用随机生成函数赋给num2 if (Judge == 1) { num1 = num2 * (rand() % 10 + 1); //将num2的整数倍传给num1,整除无余数 result = num1 / num2; //将num1和num2的商赋给result if (num1 > 100)division(judge, Judge); //如果被除数num1大于100,重新调用该函数 else if (judge == '1') printf("%d ÷ %d = %d\t\t", num1, num2, result); //打印有答案运算式 else printf("%d ÷ %d = \t\t", num1, num2); //打印无答案运算式 } else { num1 = Number(); //有余数的运算 result = num1 / num2; //将num1和num2的商赋给result remainder = num1 % num2; //将num1和num2的余数赋给remainer if (judge == '1') printf("%d ÷ %d = %d 余 %d\t\t", num1, num2, result, remainder); //打印有答案运算式 else printf("%d ÷ %d = \t\t", num1, num2); //打印无答案运算式 } return result; } #endif //main.cpp #include "pch.h" #include "method.h" int main() { while (1) { Interface(); //主界面函数 } return 0; }
小组成员:贺依凡(1759140) 郑子豪(1759138)
这是我们第一次进行结对编程,我们通过大一所学的C++的编程知识和上网百度进行。由于我们自身能力有限,我们寻求了王金峰他们小组的帮助。在结对编程中我们充分感受到了合作的魅力也使我们对写代码提升了兴趣,我们大概用了一个下午在舍友的指导下对代码进行构思和编写,相对于一个人进行而言,在存在能力差异的情况下结对编程效率更高,在我们小组讨论下认为,结对编程实质上就是找个合资伙伴合作共赢的结果,但在过程中难免会有分歧,只有多沟通说出自己的想法我觉得就能解决。
成员感想:
成员一(1759138):这是我第一次参与结对编程,感觉很新颖,大家一起学习攻破难关越能激发自身对一门学科的探索欲望。虽然我们基础很差但是在结对编程中能共同进步,三人行必有我师。
成员二(1759140):非常高兴能与学号为1759138的同学合作,编程是我们的软肋,多亏有了这次结对编程的机会让我们能够主动弥补自身不足,希望下次还能有机会一次合作!
浙公网安备 33010602011771号