解释C语言(逐句) 解一元一次方程的

#include<stdio.h>#include<string.h>voidmain(){chars[20],*p,b[10],ch;inti=0,f=0,f1=1;i... #include<stdio.h>
#include<string.h>
void main()
{
char s[20], *p, b[10], ch;
int i=0, f=0, f1=1;
int x=0, c=0;
int u=0;
gets(s);
p=s; while(*++p!='\0');
*p=' '; *(p+1)='\0';
p=s;
while(*p!='\0')
{
if(*p>='0'&&*p<='9') { b[i++]=*p; f=1;}
else if(f==1)
{
if(*p>='a'&&*p<='z')
{ch=*p;
if((u==0&&f1==0)||(u==1&&f1==1)){ b[i]='\0'; f=0; i=0; u=0; x=x+ atoi(b)*(-1);}
else { b[i]='\0'; f=0; i=0;u=0; x+=atoi(b); }}
else
if((u==0&&f1==0)||(u==1&&f1==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);}
}
if(*p=='-') u=1;
if(*p=='=') f1=0;
p++;
}
printf("%c=%d",ch,c/x);
getch();
}
展开
Didar905
2012-07-03 · TA获得超过177个赞
知道答主
回答量:39
采纳率:0%
帮助的人:17.6万
展开全部
#include<stdio.h>
#include<string.h>
//前面两个是库函数,第一个用于输入输出,第二个用于调用对字符串的各种操作

//下面是main函数主体,定义为void类型则最后不需要return返回值,若定义为int则需要返回
void main()
{
char s[20], *p, b[10], ch; //定义了四个变量,S[20],b[10]是字符串数组,P是字符串指针,用
//于指向一个字符串,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指针没指向字符串结束的位置,就一直循环
{
if(*p>='0'&&*p<='9') { b[i++]=*p; f=1; } //判断p此时指向的那个字符是否属于0-9的数字,
//如果是则把p指向的内容放在b数组
//否则执行else语句,并让f=1(f本来为0),注意
//i++使b数组递增
else
if(f==1) { //现在是else的部分,说明p指向的那个字符不是0-9了,而是其他字符
if(*p>='a'&&*p<='z') { //上面说到p指向的不是0-9,现在判断p是否指向a-z的26个字符,
//其实这样写是有问题的,万一你输入大写字母,结果会出错,建议改为 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==0&&f1==0)||(u==1&&f1==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==0&&f1==0)||(u==1&&f1==1))
else {
b[i]='\0';
f=0; i=0; u=0;
x+=atoi(b);
} //end else
} //end if(*p>='a'&&*p<='z')
//上面所有操作是在 if(*p>='a'&&*p<='z')内进行的,也就是遇到字母的时候,
//所以x最后的值存储的是变量(一元函数中的那个要求的值如2x=9中的x)的前缀
//(方程2x=9中2是叫前缀吗?)
//不对,那个2叫系数
else
if((u==0&&f1==0)||(u==1&&f1==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不是指系数,而是值,
//(比如2x=9中的9)
} //end if(f==1)

//到此判断p指向的那个字符的判断过程就结束了,但一次while循环没跑完,下面是指当遇到为负
//数的情况下,应该使u=1
//u=1就告诉我们遇到负数了,f1是指遇到=该怎么处理
if(*p=='-') u=1;
if(*p=='=') f1=0;
p++;
} //end while
//while循环到此结束,此时已经把一个一元方程化简了
//比如输入 2a+3a+6=12,可以认为他已经化简为 5a=6的形式
//而且系数5存放在变量x中,值6存放在c中,变量名字a存放在ch中
printf("%c=%d",ch,c/x); //输出结果
getch(); //可以不要,在windows平台下从控制台无回显地取一个字符
}
//最后告诉楼主一点,这样写太繁琐了,如果楼主用栈来实现,不可实现多元多次方程求解,而
//且就很简单的一个后缀式来处理
//不用这样各种if else来回判
//ps: 建文件的时候一定要写成c语言的**.c形式,不要写成c++的**.cpp格式,否则会报错
//因为atoi(),等函数在c++中的参数跟c中不一样,这样写会报错
欧文红点
推荐于2017-09-24 · TA获得超过640个赞
知道小有建树答主
回答量:344
采纳率:0%
帮助的人:209万
展开全部
#include<stdio.h>
#include<string.h>//标准函数的使用声名
void main()//主函数
{
char s[20], *p, b[10], ch;
int i=0, f=0, f1=1;
int x=0, c=0;
int u=0; //定义变量
gets(s);//接收输入的字符S,存入数组中
p=s; //赋值语句,将S存入指针P中
while(*++p!='\0');//while循环的使用
*p=' '; *(p+1)='\0';
p=s;//这里应该是这个的输入和保存
while(*p!='\0')
{
if(*p>='0'&&*p<='9') { b[i++]=*p; f=1;}
else if(f==1)
{
if(*p>='a'&&*p<='z') //if循环的使用
{
ch=*p;
if((u==0&&f1==0)||(u==1&&f1==1))
{
b[i]='\0'; f=0; i=0; u=0; x=x+ atoi(b)*(-1);// atoi. C语言库函数名 功能: 把字符串转换成整型数.

}
else { b[i]='\0'; f=0; i=0;u=0; x+=atoi(b); }}
else
if((u==0&&f1==0)||(u==1&&f1==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);}
}
if(*p=='-') u=1;
if(*p=='=') f1=0;
p++;
}
printf("%c=%d",ch,c/x);//输入ch以及c/x的值
getch();
}

C语言新手表示刚学的指针,不对的地方请更正
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
宗政钾织
2012-07-01 · 超过15用户采纳过TA的回答
知道答主
回答量:192
采纳率:0%
帮助的人:62.2万
展开全部
#include<stdio.h> #include<math.h> int main() { printf("请输入a b c:"); float a,b,c,x1,x2; while(scanf("%f%f%f",&a,&b,&c) == 3) { if(a==0&&b==0) {printf("Not an equation\n");continue;} if(b*b-4*a*c==0) printf("方程有两个相同的实根为:\n%f\n",-b/(a*2)); if(b*b-4*a*c>0) { x1 = (-b+sqrt(b*b-4*a*c))/(2*a); x2 = (-b-sqrt(b*b-4*a*c))/(2*a); printf("方程有两个不同的实根,分别为:\n%.2f,%.2f\n",x1>x2?x1,x2:x2,x1); } if(b*b-4*a*c<0) printf("方程有两个不同的虚根,分别为:\n%.2f+%.2fi %.2f-%.2fi\n",-b/(a*2),sqrt(-b*b+4*a*c)/(2*a),-b/(a*2),sqrt(-b*b+4*a*c)/(2*a)); } } xiaohu21500U4!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jiangxiang0919
2012-07-02
知道答主
回答量:37
采纳率:0%
帮助的人:17.6万
展开全部
看下有关书籍,很简单的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式