早教吧作业答案频道 -->其他-->
这个程序运行减法的时候有错误.如果我从键盘输入一个负数就会出错.急#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]
看了这个程序运行减法的时候有错误....的网友还看了以下:
大家看看这个lingo程序哪里错了啊····谢谢各位model:title first steps 2020-05-13 …
虽能帮我看看lingo程序哪里错了model:sets:a/1..3/:d;b/1..3/;c(a 2020-05-13 …
一棵二叉树结点的前序序列为A、B、D、E、G、C、F、H、I,对称序序列为D、B、G、E、A、C、H 2020-05-23 …
( 4 )一棵二叉树结点的前序序列为 A 、 B 、 D 、 E 、 G 、 C 、 F 、 H 、 2020-05-23 …
某二叉树结点的前序序列为A、B、D、E、G、C、F、H、I,对称序序列为D、B、G、 E、A、C、H 2020-05-23 …
氢化钙固体是登山运动员常用的能源提供剂。某兴趣小组拟选用如下装置制备氢化钙,仪器连接顺序正确的是( 2020-06-21 …
C++运算顺序看书上写的是先乘除后加减可是书上后面的例子上写的:10+′a′+i*f-d/e运算次 2020-06-26 …
前辈们帮忙解释一下这个冒泡排序的每个语句的意思(标注在每句后面就行,voidmainprbub(p 2020-07-23 …
C语言冒泡排序法,疑问啊~~~~~~~~~~~~~~~~~#include<stdio.h>#de 2020-07-23 …
保险精算题.设m>1,按从大到小的次序排列i,i(m),d,d(m)1、设m>1,按从大到小的次序排 2020-12-05 …