详细解释如下:
#include<stdio.h>//scanf和printf函数的头文件
#include<string.h>//memset函数的头文件
#include<stdlib.h>//atoi()函数的头文件
int main()
{
char str[100],ch;//str接收输入字符串,ch保存运算符
int x,y,i,j,flag;//x接收未知数的值,y接收atoi的返回值,i和j用于循环,flag=0表示未知数在前,flag=1在后表示未知数在后
memset(str,'\0',100);//清空str
printf("请输入两位数算术式(如x+5,如y-34,如x*5,如85/y):");//输入提示
scanf("%s",str);//输入表达式
printf("请输入未知数的值:");//输入提示
scanf("%d",&x);//输入未知数的值
for(i=0;i<100;i++)//循环遍历,用于找出运算符和位置
if(str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/')//匹配'+','-','*','/'运算符
{
ch=str[i];//ch保存运算符,i表示运算符的位置
break;//一旦找到运算符,跳出循环
}
if(str[0]=='x'||str[0]=='y')//如果首位为未知数
for(i++,flag=0,j=0;i<100;i++,j++)//i++表示运算符的下一个位置,即数字的开始,flag置0表示未知数在前
str[j]=str[i];//循环将运算符后面的数字移到数组开始处,前面的所有字符被覆盖,str里只剩数字字符串
else//首位不是未知数,也就是未知数在运算符后面
for(flag=1;i<100;i++)//flag置1表示未知数在后面
str[i]='\0';//清空数字之后的所有字符,str里只剩数字字符串
y=atoi(str);//将字符串数字转换为真正的数字保存到y,但str本身没有变
if(flag)//如果数字在后
{
x=x^y;//交换x,y,即始终保持(x运算符y)的形式,为下面的打印做准备,方便输出控制
y=x^y;
x=x^y;
}
printf("结果:");//输出提示
switch(ch)
{
case '+':printf("%d\n",x+y);//输出
x+y
case '-':printf("%d\n",x-y);//输出
x-y
case '*':printf("%d\n",x*y);//输出
x*y
case '/':printf("%d\n",x/y);//输出
x/y
}
return 0;
}
[
本帖最后由 小小战士 于 2012-12-12 23:41 编辑 ]