因为a、b、x都是float类型,所有的scanf、printf里面都应该使用%f,不能使用%d,而且%和f之间不得有空格,而且scanf里面不要有其他字符,该语句应该为:
scanf("%f%f",a,b);
把这些修改了就基本上没有问题了,如果还有问题请补充,记住粘贴你修改后的程序和系统的提示,谢谢.
#include?iostream
int?main()
{
int?a?=?0,b?=?0;
printf("请输入一次方程的系数a和b(以逗号隔开):");
scanf("%d,%d",a,b);
double?c?=?(double)-b?/?a;
printf("一次方程?%dx+%d=0?的根是:x?=?%lf\n",a,b,c);
system("pause");
return?0;
#includestdio.h
#includestring.h
//前面两个是库函数,第一个用于输入输出,第二个用于调用对字符串的各种操作
//下面是main函数主体,定义为void类型则最后不需要return返回值,若定义为int则需要返回
void main()
//于指向一个字符串,ch是字符变量
int i=0, f=0, f1=1; //定义int型的变量,变量作用下面会说明
int x=0, c=0;
int u=0;
gets(s); // gets()函数是库函数,用于从键盘接受你输入的一串东西,只接受你回车键以前
//的内容
p=s; //让指针p 指向 上面gets()函数接收到的那串字符,就是把那串字符的首地址给p
while(*++p!='\0'); //一个while循环,由于p只是指向那串字符的首地址,所以呢循环的作用是到达
//那串字符的末尾,'\0'表示一串字符串结束了,'\0'不是你输的,而是一串字
//符结束后,系统自动添上去的
*p=' '; *(p+1)='\0'; //上面while循环结束后p指针已经指向字符串的末尾了,现在把字符串的最
//后一位变为' '(空格),这时候需要自己给字符串末尾添加结束标志'\0',因
//为你把字符串单个执行系统不会自动给你添了
p=s; //上面p指针已经通过while循环跑到字符串末尾了,所以呢需要重新赋值下,
//这样p又一次指向字符串s的开头
//下面是解一元一次方程的过程,主体还是一个while循环
while(*p!='\0') //*p!='\0'是指只要p指针没指向字符串结束的位置,就一直循环
//如果是则把p指向的内容放在b数组
//否则执行else语句,并让f=1(f本来为0),注意
//i++使b数组递增
else
//其实这样写是有问题的,万一你输入大写字母,结果会出错,建议改为 if(*p='a'*p='z'||*p='A'*p='Z')
ch=*p; //*p是指p指针指向的那个字符,注意p指向的是地址,*P代表p地址处存放
//的数据
//b数组中存放的是字符串中的数字部分,下面的if跟else分别是把char类型的数字转换为int型
//if是处理负数的情况,else处理正数的情况,如何判断正负数是通过,f1,u的值来看的
if((u==0f1==0)||(u==1f1==1)) {
b[i]='\0';
f=0; i=0; u=0;
x=x+ atoi(b)*(-1); //atoi()是库函数,把char类型的数据转换为int型
//x=x+ atoi(b)*(-1); 等效于 x+=atoi(b)*(-1);
} // end if((u==0f1==0)||(u==1f1==1))
else {
f=0; i=0; u=0;
x+=atoi(b);
} //end else
} //end if(*p='a'*p='z')
//上面所有操作是在 if(*p='a'*p='z')内进行的,也就是遇到字母的时候,
if((u==0f1==0)||(u==1f1==1)) { b[i]='\0'; f=0; i=0; u=0; c+=atoi(b); }
else { b[i]='\0'; f=0; i=0;u=0; c=c+ atoi(b)*(-1);}
//上面两句是else中的内容,说明遇到的不是字母,所以呢c不是指系数,而是值,
} //end if(f==1)
//到此判断p指向的那个字符的判断过程就结束了,但一次while循环没跑完,下面是指当遇到为负
//数的情况下,应该使u=1
//u=1就告诉我们遇到负数了,f1是指遇到=该怎么处理
if(*p=='-') u=1;
if(*p=='=') f1=0;
p++;
} //end while
//while循环到此结束,此时已经把一个一元方程化简了
printf("%c=%d",ch,c/x); //输出结果
getch(); //可以不要,在windows平台下从控制台无回显地取一个字符
}
//最后告诉楼主一点,这样写太繁琐了,如果楼主用栈来实现,不可实现多元多次方程求解,而
//且就很简单的一个后缀式来处理
//不用这样各种if else来回判
//ps: 建文件的时候一定要写成c语言的**.c形式,不要写成c++的**.cpp格式,否则会报错
//因为atoi(),等函数在c++中的参数跟c中不一样,这样写会报错
思路:
方程组 定义为 方程的列表;
方程定义为 等式(= 连接的算式 你编程时,应该先找等号,把方程分成两半);
算式定义为 项的和(符号看成-1乘以某);
项定义为常数或者积;
积定义为常数乘以字母.(分清楚项以后,就可以移项,合并同类项.)
自顶向下分析.
理清楚变量和系数以后,用矩阵解.
我这个程序只能接受ax+b=c这种形式的方程.
其中,a=1时可以省略,+b也可以省略.a,b,c不能为表达式,必须为确定的浮点数.
a不能为0
#include "stdio.h"
#include "stdlib.h"
float a,b,c;
int i,j;
gets(str);
for(i=0;str[i]!='\0';i++)
if(str[i]=='x' || str[i]=='X')
break;
if(str[i]=='\0') printf("error!\n");
if(i==0) a=1;
else a=atof(str);
if(a==0)
printf("a mustn't be zero!\n");
exit(1);
if(str[++i]=='=')
b=0;
c=atof(str+i+1);
if(str[i]=='+') i++;
for(j=i;str[j]!='\0';j++)
if(str[j]=='=') break;
b=atof(str+i);
c=atof(str+j+1);
printf("x=%f\n",(c-b)/a);
#include
void
main()
i=0,f=0,f1=1;
x=0,c=0;
u=0;
while(*++p!='\0');
';
*(p+1)='\0';
以上就是土嘎嘎小编为大家整理的c语言编写一元一次函数 c语言编写一元一次函数ax+b相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!