中易网

关于算法编程题(C语言实现)

答案:3  悬赏:80  
解决时间 2021-04-21 12:23
#include<stdio.h>
#include<string.h>
void fun(char *a,int left ,int right , int *b ,int *c) // int fun(字符数组 上界 下界 常数 系数)
{
int f; // 符号位
int sum ; //数字位
int i; // 循环变量
f=1;
sum=0;
for (i=left; i<= right ; i++)
{ if(a[i] == '-') f=-1;
if (a[i] =='+') f=1;
if(a[i] >='0' && a[i] <= '9')
{
sum=10*sum + a[i] - '0' ;
}
if(a[i]>='a' && a[i]<='z')
*c=sum;
else *b=sum;
}
}
// 函数 用来在a[left] -- a[right]中 得出a常数,b系数。

int main( int argc, char *argv[])
{
char *a; //字符串
int dy; // 等于号的位置;
int z; // 字符数组总共元素
int b,c; // b为常数 c为系数
int d,e; // d为常数 e为系数
int i; //循环变量
int jie; //方程的解
int zm ; //字母
a=NULL;
dy=0;
scanf("%s",a);
z=strlen(a);
for(i=1;i<=z;i++)
{
if (a[i] == '==' )
{z=i;
break;
}
}
for(i=1;i<=z;i++)
{
if ( a[i] <= 'z' && a[i] >='a')
{
zm=a[i];
break;
}
}
a=0;b=0;
fun(a,1,dy,&b,&c);
fun(a,dy,z,&d,&e);
jie=(d-b)/(e-c);
printf("%c = %d",zm,jie);
getch();
return 0;
}

1、这是我的程序,一读入就出错,找不到错。。另外请问一下对于这种编译能通过 但是运行出错的问题该如何去查找?
2.附上原题, NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能。实验室将这个任务交给了一个刚进入的新手ZL先生。为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例:
  4+3x=8
  6a-5+1=2-2a
  -5+12y=0
  ZL先生被主管告之,在计算器上键入的一个一元一次方程中,只包含整数、小写字母及+、-、=这三个数学符号(当然,符号“-”既可作减号,也可作负号)。方程中并没有括号,也没有除号,方程中的字母表示未知数。
  你可假设对键入的方程的正确性的判断是由另一个程序员在做,或者说可认为键入的一元一次方程均为合法的,且有唯一实数
最佳答案
char *a; //字符串 改为 char a[20];//存放字符串的字符数组
int jie; //方程的解 改为 double jie;
dy = 0; 删去 dy=0;
两处的 for(i=1;i<=z;i++) 都改为 for(i = 0; i < z; i++)
if (a[i] == '==' ) 改为 if (a[i] == '=' )
{z=i; 改为 {dy = i;
a=0;b=0; 删去 a=0;b=0;
fun(a,1,dy,&b,&c); 改为 fun(a, 0, dy - 1, &b, &c);
fun(a,dy,z,&b,&c); 改为 fun(a, dy + 1, z - 1, &b, &c);
jie=(d-b)/(e-c); 改为 jie=((double)(d-b))/(e-c);
printf("%c = %d",zm,jie); 改为 printf("%c = %f",zm,jie);
全部回答
if (a[i] == '==' ) // '==' 应该改为 '='  for(i=1;i<=z;i++) 应该改为: for(i=0;i<z;i++)  a=0;b=0; // a 是 char 指针,a=0 这样赋值不妥。 另外,方程的解应该是 float 型的。
我修改的程序都是把s[0] t[0]转换为strlen(s) strlen(t)函数来实现的 为什么不把strlen(s),strlen(t)分别赋予s[0],t[0],害怕覆盖原来的数据吗?没有必要,他们原本就是来存储这个数据的,君不见,它们都不参与匹配!他们的初始化应该在这个函数之外完成,在每次数组长度改变后,就及时设置,换句话说,在调用这个函数之前,应该保证他们已经设置正确, 在打印时,应该从第二个元素s[1]或t[1]开始,因为s[0],t[0]不再是数组的实际内容 不知道我有没有表述清楚, 一般,数组的第一个元素存放实际的内容,而你这里并不是这样,数组的第一个元素不再是数组的实际内容,而是数组长度 ================================================================== 补充; 比较大小时s[0]的值不就变成了整形的ascii码值了么? 1.整数就是整数,没有ascii码,ascii码是针对字符的 2.在c中,整数赋予字符变量是合法的 2.在c中,字符与整数的关系运算也是合法的,当你要把一个字节的数解释成字符的时候,它就是字符,可他存储的还是数啊,就把它当整数用吧,毕竟我们没有打算打印它,当然它能表示的整数太少了,所以数组长度受到限制 如果你要以字符显示它,那它当然是那个整数所对应的字符,如果那是可打印字符的话
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
申请完了实名认证为什么无权进行数字证书申请
英雄岛种怎样赚金币
It's time for sports. Let's go b
有一总感情超越了友情是什么?
我脸上长了黑油怎么办啊?皮肤也变黄了?
中国银行兴化楚水支行地址在哪,我要去那里办
12月26日出生的名人有谁?
美食的哪个团购网比较好
我的脸型难看怎么办~ 求救啊~!!!!
广东省惠州市博罗县公庄镇南溪邮编是什么?
墙布十大品牌是哪些?
鲁西骨科医院第一门诊部这个地址在什么地方,
麦斜镇麦斜村工会这个地址在什么地方,我要处
军曹回到K隆星是第几集
人在真空无保护且不考虑呼吸的情况会如何
推荐资讯
二胎见红多久开始疼,多久会生
宜昌和宜都的关系
一胎顺产第二胎好生吗,如果第一胎是顺产的话
DNF30级紫左轮有哪些
求推荐几首英文歌。
广西梧州万秀区大学1路旺城广场内坐动车到哪
怎么在永城开二手车店
我买的影驰9600GSO战将版1G显存
高层厕所冲下去一条毛巾,会堵住吗
阿尔法看到的雁群里有多少只大雁
叔叔的女儿办周岁酒我这个当哥哥的送红包改说
金叶商用电器我想知道这个在什么地方
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?