C编程作业-数学辅导-除法和余数逻辑-我能用更好的方法吗?

C编程作业-数学辅导-除法和余数逻辑-我能用更好的方法吗?,c,C,所以我写这个程序是为了用C语言编程。它使用开关菜单项在随机生成的加法、减法、乘法和除法问题之间进行选择 我做这件事时唯一的问题就是分部。你如何处理随机生成的数字,这些数字不能平均分成两部分。所以我想,“好吧,甚至不要把小数点当作浮点数来处理,直接用整数。然后用两个随机生成的数字的mod,如果有余数的话,用enter键输入余数。” 这就是我想要的 void division(){ int a,b; int ans, uans; int remain, uremain; a=rand()%(10

所以我写这个程序是为了用C语言编程。它使用开关菜单项在随机生成的加法、减法、乘法和除法问题之间进行选择

我做这件事时唯一的问题就是分部。你如何处理随机生成的数字,这些数字不能平均分成两部分。所以我想,“好吧,甚至不要把小数点当作浮点数来处理,直接用整数。然后用两个随机生成的数字的mod,如果有余数的话,用enter键输入余数。”

这就是我想要的

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