早教吧作业答案频道 -->其他-->
这个程序运行减法的时候有错误.如果我从键盘输入一个负数就会出错.急#include#include#include#includeintscan(){chars[100];inti,t,z=0;do{z=0;gets(s);for(i=0;s[i]!='\0';i++)if(s[i]'9')break;if(i>=strlen(s))for(t=0;s[t]!=
题目详情
这个程序运行减法的时候有错误.如果我从键盘输入一个负数就会出错.急
#include
#include
#include
#include
int scan()
{
char s[100];
int i,t,z=0;
do
{
z=0;
gets(s);
for(i=0;s[i]!='\0';i++)
if(s[i]'9') break;
if(i >= strlen(s))
for(t=0;s[t]!='\0';t++)
z=z*10+((int)s[t]-48);
else
printf("您输入答案形式有误,请输入正确的形式:\n");
}
while(i < strlen(s));
return(z);
}
int x=1,y=1,choice=0,sum=0,right=0,z=0,answer;
float precent;
char symbol;//(符号)
void random()//随机给出等式
{
srand(time(NULL));
x=rand()%100+1;
y=rand()%100+1;
}
void choose()
{
int operation(int,int,int);
if(sum==0) precent=0.0;
else precent=(float)right/sum;
printf("\n如需进行加减乘除运算测试,请分别输:1(加法运算)、2(减法运算)、3(乘法运算)、4(除法运算)\n");
printf("如需退出请输:5(退出运算)\n");
choice=scan();
switch(choice)
{
case 1:printf("欢迎您进行加法运算测试,如需退出请输:99999\n");symbol='+';break;
case 2:printf("欢迎您进行减法运算测试,如需退出请输:99999\n");symbol='-';break;
case 3:printf("欢迎您进行乘法运算测试,如需退出请输:99999\n");symbol='*';break;
case 4:printf("欢迎您进行除法运算测试,如需退出请输:99999\n");symbol='/';break;
case 5:printf("欢迎您下次再来测试\n");
printf("您本次测试共完成%d道题,其中%d道回答正确,正确率为:%f.本次获得积分%d分...\n",sum,right,precent,right);
break;
default:printf("您输入答案形式有误,请输入正确的形式:\n");choose();
}
}
int ans(int x,int y,int choice)
{
switch(choice)
{
case 1:z=x+y;break;
case 2:z=x-y;break;
case 3:z=x*y;break;
case 4:z=x/y;break;
}
return(z);
}
void operation()
{
random();
printf("%d%c%d=",x,symbol,y);
z=ans(x,y,choice);
answer=scan();
if(z==answer)
{
printf("恭喜您,回答正确.\n");
right++;sum++;
operation();
}
else if(answer==99999) choose();
else
{
printf("不正确,正确答案为:%5d\n",z);
sum++;
operation();
}
}
void main()
{
printf("欢迎您来到四则运算测试系统(请每次输入后以Enter键结束)\n");
choose();
while(choice!=5)
\x05 operation();
}
#include
#include
#include
#include
int scan()
{
char s[100];
int i,t,z=0;
do
{
z=0;
gets(s);
for(i=0;s[i]!='\0';i++)
if(s[i]'9') break;
if(i >= strlen(s))
for(t=0;s[t]!='\0';t++)
z=z*10+((int)s[t]-48);
else
printf("您输入答案形式有误,请输入正确的形式:\n");
}
while(i < strlen(s));
return(z);
}
int x=1,y=1,choice=0,sum=0,right=0,z=0,answer;
float precent;
char symbol;//(符号)
void random()//随机给出等式
{
srand(time(NULL));
x=rand()%100+1;
y=rand()%100+1;
}
void choose()
{
int operation(int,int,int);
if(sum==0) precent=0.0;
else precent=(float)right/sum;
printf("\n如需进行加减乘除运算测试,请分别输:1(加法运算)、2(减法运算)、3(乘法运算)、4(除法运算)\n");
printf("如需退出请输:5(退出运算)\n");
choice=scan();
switch(choice)
{
case 1:printf("欢迎您进行加法运算测试,如需退出请输:99999\n");symbol='+';break;
case 2:printf("欢迎您进行减法运算测试,如需退出请输:99999\n");symbol='-';break;
case 3:printf("欢迎您进行乘法运算测试,如需退出请输:99999\n");symbol='*';break;
case 4:printf("欢迎您进行除法运算测试,如需退出请输:99999\n");symbol='/';break;
case 5:printf("欢迎您下次再来测试\n");
printf("您本次测试共完成%d道题,其中%d道回答正确,正确率为:%f.本次获得积分%d分...\n",sum,right,precent,right);
break;
default:printf("您输入答案形式有误,请输入正确的形式:\n");choose();
}
}
int ans(int x,int y,int choice)
{
switch(choice)
{
case 1:z=x+y;break;
case 2:z=x-y;break;
case 3:z=x*y;break;
case 4:z=x/y;break;
}
return(z);
}
void operation()
{
random();
printf("%d%c%d=",x,symbol,y);
z=ans(x,y,choice);
answer=scan();
if(z==answer)
{
printf("恭喜您,回答正确.\n");
right++;sum++;
operation();
}
else if(answer==99999) choose();
else
{
printf("不正确,正确答案为:%5d\n",z);
sum++;
operation();
}
}
void main()
{
printf("欢迎您来到四则运算测试系统(请每次输入后以Enter键结束)\n");
choose();
while(choice!=5)
\x05 operation();
}
▼优质解答
答案和解析
scan函数中第一个for循环:
for(i=0;s[i]!='\0';i++)
if(s[i]'9') break;
此处有问题,因为你如果输入的第一个字符是个负号的话,那么i=0时就回Kill掉for循环,所以后边的if(i >= strlen(s))这个条件判断为假倒至其走到else分支
改动的方法就是将那个第一个for循环里边的if条件改为如下:
if(!(s[i] == '-' ||s[i]>'0' && s[i]
for(i=0;s[i]!='\0';i++)
if(s[i]'9') break;
此处有问题,因为你如果输入的第一个字符是个负号的话,那么i=0时就回Kill掉for循环,所以后边的if(i >= strlen(s))这个条件判断为假倒至其走到else分支
改动的方法就是将那个第一个for循环里边的if条件改为如下:
if(!(s[i] == '-' ||s[i]>'0' && s[i]
看了这个程序运行减法的时候有错误....的网友还看了以下:
对于方程组{x+y+z=6y-z=4x-y-2z=3,若先消去x,可得含y,z的方程组是若先消去y, 2020-03-30 …
解方程组x+y-z=4和x+z=1和x-y+2z=-1{1}若消去x,可得到含y,z的方程组什么;{ 2020-03-30 …
求满足方程:x*x+y*y+z*z=88*88 (注:要求x>y>z)的方程的整数解的个数(包括负 2020-05-13 …
为什么键盘有一些打不出字,拼音上的一排数也打不出就是a和q 、z还有上面一排数字打不出不是键盘不好 2020-05-17 …
解方程组:2x-y+3z=33x+y-2z=-1x+y+z=5若消去x,关于y、z的方程组若消去y 2020-06-11 …
1、求通过点(0,2,0),垂直于y轴并垂直与直线:x=z,y=2z的直线方程;2、一个平面过直线 2020-06-13 …
如何按键精灵狂按Z键如题,因为玩GBA,有一个地方需要狂按Z键,但我用手动的试了半天也不成功,所以 2020-06-18 …
设方程F(x+z,xy,z)=0确定了隐函数z=z(x,y),其中F具有连续一阶偏导数,求δz/. 2020-06-27 …
三元一次方程3.已知方程组3x-2y+z=6与关于x,y,z的方程组ax+by2cz=26x+y- 2020-08-03 …
跪求大师帮我做几道方程组得题,解方程组1.7x+3y=762x-9y=22.17x+25y=6725 2020-10-31 …