C编程作业-数学辅导-除法和余数逻辑-我能用更好的方法吗?
所以我写这个程序是为了用C语言编程。它使用开关菜单项在随机生成的加法、减法、乘法和除法问题之间进行选择 我做这件事时唯一的问题就是分部。你如何处理随机生成的数字,这些数字不能平均分成两部分。所以我想,“好吧,甚至不要把小数点当作浮点数来处理,直接用整数。然后用两个随机生成的数字的mod,如果有余数的话,用enter键输入余数。” 这就是我想要的C编程作业-数学辅导-除法和余数逻辑-我能用更好的方法吗?,c,C,所以我写这个程序是为了用C语言编程。它使用开关菜单项在随机生成的加法、减法、乘法和除法问题之间进行选择 我做这件事时唯一的问题就是分部。你如何处理随机生成的数字,这些数字不能平均分成两部分。所以我想,“好吧,甚至不要把小数点当作浮点数来处理,直接用整数。然后用两个随机生成的数字的mod,如果有余数的话,用enter键输入余数。” 这就是我想要的 void division(){ int a,b; int ans, uans; int remain, uremain; a=rand()%(10
void division(){
int a,b;
int ans, uans;
int remain, uremain;
a=rand()%(100-1+1)+1;
b=rand()%(100-1+1)+1;
printf("What is\n");
printf(" %.0f\n",a);
printf(" ÷ %.0f\n",b);
printf("========\n");
printf("?= ");
scanf("%d",&uans);
printf("\n Remainder = ");
scanf("%d",&uremain);
ans = a / b;
remain = a % b;
if(ans==uans && remain==uremain){
printf("\n\nCorrect!.......\n\n");
printf("\n\nThe answer was %d with a remainder of %.0f\n",ans, remain);
}
else{
printf("\n\nIncorrect!......\n\n");
printf("\n\nThe answer was %d with a remainder of %d\n",ans, remain);
}
}
有没有更好的方法来解释,如果没有余数,可能不必输入余数。我假设我可以做一些类似if(level>0)的事情,看看是否有余数,然后添加它,但只是想知道其他人怎么想
这里是完整的程序
/*****************************
CS 50 - Programing in C
Math tutor
Write a program that displays a menu as shown in the sample run.
You can enter 1, 2, 3, or 4 for choosing an addition, subtraction, multiplication,
or division test. After a test is finished, the menu is redisplayed.
You may choose another test or enter 5 to exit the system.
Each test generates two random single-digit numbers to form a question for addition,
subtraction, multiplication, or division.
For a subtraction such as number1 – number2,
number1 is greater than or equal to number2.
For a division question such as number1 / number2, number2 is not zero.
******************************/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
int displaymenu();
void addition();
void subtraction();
void multiplication();
void division();
int main(){
int com;
srand(time(NULL));
do{
com = displaymenu();
switch(com){
case 1:
addition();
break;
case 2:
subtraction();
break;
case 3:
multiplication();
break;
case 4:
division();
break;
case 5: printf("Have a nice day\n");
}
}while(com != 5);
//needed for all basic programs to run for the professor
system("pause");
return(0);
}
int displaymenu(){
int choice;
printf("*-----------------------*\n");
printf("| MATH TUTOR |\n");
printf("*-----------------------*\n");
printf("* 1. Addition *\n");
printf("* 2. Subtration *\n");
printf("* 3. Multiplication *\n");
printf("* 4. Division *\n");
printf("* 5. EXIT *\n");
printf("*-----------------------*\n");
printf("Menu Choice: ");
scanf("%d",&choice);
return choice;
}
void addition(){
int a,b, ans;
a=rand()%(100-1+1)+1;
b=rand()%(100-1+1)+1;
printf("What is\n");
printf(" %d\n",a);
printf(" + %d\n",b);
printf("========\n");
printf("?= ");
scanf("%d",&ans);
if((a+b)==ans){
printf("\n\nCorrect!.......\n\n");
}
else{
printf("\n\nIncorrect!......\n\n");
printf("\n\nThe answer was %d\n",a+b);
}
}
void subtraction(){
int a,b, ans;
a=rand()%(100-1+1)+1;
b=rand()%(100-1+1)+1;
printf("What is\n");
printf(" %d\n",a);
printf(" - %d\n",b);
printf("========\n");
printf("?= ");
scanf("%d",&ans);
if((a-b)==ans){
printf("\n\nCorrect!.......\n\n");
}
else{
printf("\n\nIncorrect!......\n\n");
printf("\n\nThe answer was %d\n",a-b);
}
}
void multiplication(){
int a,b, ans;
a=rand()%(100-1+1)+1;
b=rand()%(100-1+1)+1;
printf("What is\n");
printf(" %d\n",a);
printf(" x %d\n",b);
printf("========\n");
printf("?= ");
scanf("%d",&ans);
if((a*b)==ans){
printf("\n\nCorrect!.......\n\n");
}
else{
printf("\n\nIncorrect!......\n\n");
printf("\n\nThe answer was %d\n",a*b);
}
}
void division(){
int a,b;
int ans, uans;
int remain, uremain;
a=rand()%(100-1+1)+1;
b=rand()%(100-1+1)+1;
ans = a / b;
remain = a % b;
printf("What is\n");
printf(" %d\n",a);
printf(" ÷ %d\n",b);
printf("========\n");
printf("?= ");
scanf("%d",&uans);
if(remain > 0){
printf("\nRemainder = ");
scanf("%d",&uremain);
}
if(ans==uans && remain==uremain){
printf("\n\nCorrect!.......\n");
printf("\n\nThe answer was %d with a remainder of %d\n",ans, remain);
}
else{
printf("\n\nIncorrect!......\n");
printf("\n\nThe answer was %d with a remainder of %d\n\n\n\n",ans, remain);
}
}
/*****************************
cs50-用C语言编程
数学家教
编写一个显示菜单的程序,如示例运行中所示。
您可以输入1、2、3或4来选择加法、减法、乘法,
或除法测试。测试完成后,将重新显示菜单。
您可以选择其他测试或输入5退出系统。
每个测试生成两个随机的单位数,形成一个加法问题,
减法、乘法或除法。
对于减法运算,如number1–number2,
number1大于或等于number2。
对于除法题,如number1/number2,number2不是零。
******************************/
#包括
#包括
#包括
#包括
#包括
#包括
int displaymenu();
空位加法();
空减法();
空乘();
无效分割();
int main(){
国际通讯;
srand(时间(空));
做{
com=显示菜单();
交换机(com){
案例1:
加法();
打破
案例2:
减法();
打破
案例3:
乘法();
打破
案例4:
分部();
打破
案例5:printf(“祝您愉快”\n);
}
}而(com!=5);
//教授需要运行所有的基础程序
系统(“暂停”);
返回(0);
}
int displaymenu(){
智力选择;
printf(“*--------------------------*\n”);
printf(“|数学导师|\n”);
printf(“*--------------------------*\n”);
printf(“*1.添加*\n”);
printf(“*2.子部分*\n”);
printf(“*3.乘法*\n”);
printf(“*4.分部*\n”);
printf(“*5.退出*\n”);
printf(“*--------------------------*\n”);
printf(“菜单选择:”);
scanf(“%d”,选择(&C);
回报选择;
}
空位加法(){
INTA,b,ans;
a=rand()%(100-1+1)+1;
b=rand()%(100-1+1)+1;
printf(“什么是\n”);
printf(“%d\n”,a);
printf(“+%d\n”,b);
printf(“=============\n”);
printf(“?=”);
scanf(“%d”和“&ans”);
如果((a+b)=ans){
printf(“\n\n正确!”…\n\n”);
}
否则{
printf(“\n\n不正确!”…\n\n”);
printf(“\n\n答案是%d\n”,a+b);
}
}
空减法(){
INTA,b,ans;
a=rand()%(100-1+1)+1;
b=rand()%(100-1+1)+1;
printf(“什么是\n”);
printf(“%d\n”,a);
printf(“-%d\n”,b);
printf(“=============\n”);
printf(“?=”);
scanf(“%d”和“&ans”);
如果((a-b)=ans){
printf(“\n\n正确!”…\n\n”);
}
否则{
printf(“\n\n不正确!”…\n\n”);
printf(“\n\n答案是%d\n”,a-b);
}
}
空乘(){
INTA,b,ans;
a=rand()%(100-1+1)+1;
b=rand()%(100-1+1)+1;
printf(“什么是\n”);
printf(“%d\n”,a);
printf(“x%d\n”,b);
printf(“=============\n”);
printf(“?=”);
scanf(“%d”和“&ans”);
如果((a*b)=ans){
printf(“\n\n正确!”…\n\n”);
}
否则{
printf(“\n\n不正确!”…\n\n”);
printf(“\n\n答案是%d\n”,a*b);
}
}
无效分割(){
INTA,b;
int ans,UAN;
乌里曼;
a=rand()%(100-1+1)+1;
b=rand()%(100-1+1)+1;
ans=a/b;
剩余=a%b;
printf(“什么是\n”);
printf(“%d\n”,a);
printf(÷%d\n“,b);
printf(“=============\n”);
printf(“?=”);
scanf(“%d”和&uans);
如果(保持>0){
printf(“\nMainder=”);
scanf(“%d”和&uremain);
}
if(ans==uans&&remain==uremain){
printf(“\n\n正确!…\n”);
printf(“\n\n答案是%d,剩余的是%d\n”,ans,reserve);
}
否则{
printf(“\n\n不正确!…\n”);
printf(“\n\n答案为%d,剩余部分为%d\n\n\n”,ans,剩余部分);
}
}
您可以用与乘法相同的方法生成除法问题,但使用乘积和一个数字来解决问题,另一个数字就是解决方案
也就是说,生成
a
和b
,就像你在乘法中所做的那样,然后询问a*b
除以a
是多少(这样b
就是答案)。你为什么不希望用户输入一个余数呢?即使余数为0,用户也有可能输入大于0的余数并得到错误的答案。也许会有帮助?我正在尝试使其成为一个简单的应用程序,而不是制作任何超级花哨的东西。我知道已经有很多功能了,但我只想再做一次基本的应用。我想我需要加一点关于int b是否为0的信息,重做随机数以防万一。你能告诉我你所说的上下文是什么意思吗?我发布了整个程序,以便更好地了解我所做的事情。我这样做的方式是:do{a=rand()%(100-1+1)+1;b=rand()%(100-1+1)+1;ans=a*b;reside=a%b;}而(a0)代码>当然可以,但这可能需要任意大量的时间(因为您不知道需要多少次迭代),并且给出了错误的答案。它声称a
除以b
的答案是a*b
。