不爱磕瓜子 2021-12-22 23:56 采纳率: 100%
浏览 43
已结题

!明天答辩!输出老是不对!计算器功能实现

之前还可以用的,正常删除字符串里的错误字符什么的,结果我加了一个do while循环以后就不能用了,把do while删了也不能用了!我之前也没保存写的程序,明天就要答辩了,完蛋了!
下面是我的程序。没有语法错误,就是输出有问题!😭😭😭😭😭😭
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include<string.h>
#include<ctype.h>
#define My_Pi 3.14159
int main( )
{
float f(float s);
float sqrt1(float s);
float cos1(float deg);
float sin1(float deg);
float tan1(float deg);
float operate(float x,char c,float y);
//引用我定义的函数
float deg,a,b,s,x,y;
char c;
int num,k,l;
printf("如果想算加减乘除请按1,开方请按2,cos请按3,sin请按4,tan请按5\n");
scanf("%d",&num);
//通过输入进行操作
if(num==1)
{
printf("请输入数字和符号进行接下来的加减乘除运算。\n");
a=f(s);
}
if(num==2)
{
printf("请输入一个数字。\n");
scanf("%f",&s);
a=sqrt1(s);
}
if(num==3)
{
printf("请输入角度deg");
scanf("%f",&deg);
a=cos1(deg);
}
if(num==4)
{
printf("请输入角度deg");
scanf("%f",&deg);
a=sin1(deg);
}
if(num==5)
{
printf("请输入角度deg");
scanf("%f",&deg);
a=tan1(deg);
}
//保留运算结果继续运算
l=0;
printf("接下来将保留结果运算几次?请输入。");
scanf("%d",&k);
do{
printf("输入想进行的运算和数字.\n");
printf("%.3f",a);
scanf("%c%f",&c,&y);
b=operate(a,c,y);
printf("运算结果为%.3f",b);
a=b;
l++;
}
while(l!=k);
return 0;
}
float f(float s)
//这个是删除错误字符的函数
{
float exchange(char str[20]);
// float x,y;
// char c;
char str[20],str1[20],str2[20];
int i,a,b;
scanf("%s",&str);
i=0,a=0,b=0;
while(str[i]!='\0')
{
if((str[i]>=''&&str[i]<='9'))
{
str1[a]=str[i];
//正确字符放在str1
a++;
}
else
{
str2[b]=str[i];
//错误字符放进str2
b++;
}
i++;
}
printf("%s\n",str1);
if(b!=0)
printf("有错误字符输入\n");
s=exchange(str1);
//进行操作
return s;
}
//下面这个函数主要是为了计算多位数写的.
float exchange(char str[20])
{
float operate(float x,char c,float y);
char *p[20],c;
float P[20];
float x,y,a;
int num=strlen(str),i,n=0,sum=0;
for(i=0;i<num;i++)
{
if(!isdigit(str[i])&&str[i]!='.')
//当str1[i]里面不是数字或小数时,在将符号赋予c的同时用空格代替。
{
c=str[i];
str[i]='\0';
}
}
for(i=0;i<num;i++)
{
if((str[i-1]=='\0')&&((str[i]<='9'&&str[i]>='0')||(str[i]=='.')))
//非常重要的判定,要仔细思考情况。
{
p[n]=str+i;
//将str1[i]里的数字或者符号指向p[n].
n++;
}
}
for(i=0;i<n;i++)
{
P[i]=atof(p[i]);
//运用atof函数将p[i]里面的值整合放入P[i]里.
}
x=P[0];
y=P[1];
a=operate(x,c,y);
printf("运算结果为%.3f\n",a);
return a;
}
//开方运算函数
float sqrt1(float s)
{
s=sqrt(s);
printf("开方结果等于%.3f",s);
return s;
}
//以下为三角函数运算函数
float cos1(float deg)
{
deg=cos(deg/180
My_Pi);
printf("运算过后得cos值为%.3f",deg);
return deg;
}
float sin1(float deg)
{
deg=sin(deg/180My_Pi);
printf("运算过后得sin值为%.3f",deg);
return deg;
}
float tan1(float deg)
{
deg=tan(deg/180
My_Pi);
printf("运算过后得tan值为%.3f",deg);
return deg;
}
//这是最简单的加减乘除运算函数。
float operate(float x,char c,float y)
{
float s;
switch(c)
{
case'+':{
s=x+y;
}
break;
case'-':{
s=x-y;
}
break;
case'':{
s=x
y;
}
break;
case'/':if(y==0)
{
printf("出错了,请重新输入\n");
}
else
{
s=x/y;
}
break;
default:
{
printf("花田里犯了错\n");
break;
}
}
return s;
}

  • 写回答

3条回答 默认 最新

  • CSDN专家-link 2021-12-23 06:15
    关注

    str1并没有字符串结束符,用%s输出会有乱码的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月31日
  • 已采纳回答 12月23日
  • 修改了问题 12月23日
  • 创建了问题 12月22日

悬赏问题

  • ¥15 对于知识的学以致用的解释
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败