先看看第一种最基本的计算器
#include <stdio.h>
#include <stdlib.h>
void tips()
{
printf("****************************************\n");
printf("****************************************\n");
printf("**********请输入一种算法 + - * /**********\n");
printf("***************Qinff制作*****************\n");
printf("****************************************\n");
printf("****************************************\n");
}
int adda(int a,int b)
{
int c;
c=a+b;
return c;
}
int jian(int a,int b)
{
int c;
c=a-b;
return c;
}
int cheng(int a,int b)
{
int c;
c=a*b;
return c;
}
float chu(int a,int b)
{
float c;
c=(float)a/b;
return c;
}
void reallcalc(int data1,int data2,char suanfa)
{
switch(suanfa)
{
case '+':
printf("两数相加,结果为%d+%d=%d\n",data1,data2,adda(data1,data2));
break;
case '-':
printf("两数相减,结果为%d-%d=%d\n",data1,data2,jian(data1,data2));
break;
case '*':
printf("两数相乘,结果为%d*%d=%d\n",data1,data2,cheng(data1,data2));
break;
case '/':
printf("两数相除,结果为%d/%d=%f\n",data1,data2,chu(data1,data2));
break;
}
}
void calc(char suanfa)
{
int data1,data2;
switch (suanfa)
{
case'+':
printf("你选择了加法!\n");
break;
case'-':
printf("你选择了减法!\n");
break;
case'*':
printf("你选择了乘法!\n");
break;
case'/':
printf("你选择了除法!\n");
break;
default:
return -1;
// printf("请正确输入运算符!\n");
break;
}
printf("请输入第一个数:\n");
scanf("%d",&data1);
printf("请输入第二个数:\n");
scanf("%d",&data2);
reallcalc(data1,data2,suanfa);
}
int main()
{
int data1,data2,data3;
char suanfa;
int mark=0;
int ret;
while(1)
{
tips();
if(mark !=0)//把data2以后的回车吸收掉,不想第一次进入程序的时候就被吸收,用mark限制
{
getchar();//回车符也是一种字符 ,getchar函数表示获取一个字符
}//这里表示把回车键吸收掉
scanf("%c",&suanfa);
getchar();
mark = 1;
calc(suanfa);
}
system("pause");
return 0;
}
这里有一个很关键的地方,用mark来吸收回车键,不然程序在最后输入回车后scanf吸收的是回车键,第二次在判断输入的算法时就会出现错误。
第二种计算器
#include <stdio.h>
#include <stdlib.h>
void tips()
{
printf("****************************************\n");
printf("****************************************\n");
printf("********请输入一种算法 + - * /**********\n");
printf("****************************************\n");
printf("****************************************\n");
}
int main()
{
int data1,data2,data3;
char suanfa;
int mark=0;
while(1)
{
tips();
if(mark !=0)//不想第一次进入程序的时候就被吸收,用mark限制
{
getchar();//回车符也是一种字符 ,getchar函数表示获取一个字符
}//这里表示把回车键吸收掉
scanf("%c",&suanfa);
getchar();
mark = 1;
switch (suanfa)
{
case'+':
printf("你选择了加法!\n");
printf("请输入第一个数据 :\n");
scanf("%d",&data1);
printf("请输入第二个数据 :\n");
scanf("%d",&data2);
printf("%d+%d=%d\n",data1,data2,data1+data2);
break;
case'-':
printf("你选择了减法!\n");
printf("请输入第一个数据 :\n");
scanf("%d",&data1);
printf("请输入第二个数据 :\n");
scanf("%d",&data2);
printf("%d-%d=%d\n",data1,data2,data1-data2);
break;
case'*':
printf("你选择了乘法!\n");
printf("请输入第一个数据 :\n");
scanf("%d",&data1);
printf("请输入第二个数据 :\n");
scanf("%d",&data2);
printf("%d*%d=%d\n",data1,data2,data1*data2);
break;
case'/':
printf("你选择了除法!\n");
printf("请输入第一个数据 :\n");
scanf("%d",&data1);
printf("请输入第二个数据 :\n");
scanf("%d",&data2);
printf("%d/%d=%f\n",data1,data2,(float)data1/data2);
//输出小数的时候一定要把int型强制转换成float型;被除数、除数其中一个强制转换就行了。
break;
default:
printf("请正确输入运算符!\n");
}
}
system("pause");
return 0;
}
这里没有运用函数,而是直接计算输出的。
第三种计算器,运用函数指针
#include<stdio.h>
#include<stdlib.h>
int add(int *a,int *b)
{
return *a+*b;
}
int jian(int *a,int *b)
{
return *a-*b;
}
int cheng(int *a,int *b)
{
return *a*(*b);
}
float chu(int *a,int *b)
{
float c;
c=(float)*a/(*b);
return c;
}
void tips()
{
printf("*******************************\n");
printf("**********请输入算法***********\n");
printf("*******************************\n");
printf("*******************************\n");
}
void onetishi(char suanfa)
{
switch(suanfa)
{
case '+':
printf("你选择的是加法!\n");
break;
case '-':
printf("你选择的是减法!\n");
break;
case '*':
printf("你选择的是乘法!\n");
break;
case '/':
printf("你选择的是除法!\n");
break;
default:
printf("请重新输入正确的算法:");
exit(-1);
}
}
void jisuan(int a,int b,char suanfa)
{
int (*padd)(int *a,int *b);
padd=add;
int (*pjian)(int *a,int *b);
pjian=jian;
int (*pcheng)(int *a,int *b);
pcheng=cheng;
float (*pchu)(int *a,int *b);
pchu=chu;
switch(suanfa)
{
case'+':
printf("两数相加:%d+%d=%d",a,b,padd(&a,&b));
break;
case'-':
printf("两数相减:%d-%d=%d",a,b,pjian(&a,&b));
break;
case'*':
printf("两数相乘:%d*%d=%d",a,b,pcheng(&a,&b));
break;
case'/':
printf("两数相除:%d/%d=%f",a,b,pchu(&a,&b));
break;
default:
break;
}
}
int main()
{
int a,b;
char suanfa;
tips();
scanf("%c",&suanfa);
void (*ponetishi)(char suanfa);
ponetishi =onetishi;
ponetishi(suanfa) ;
printf("请输入第一个数:");
scanf("%d",&a);
printf("请输入第二个数:");
scanf("%d",&b);
void (*pjisuan)(int a,int b,char suanfa);//声明计算函数
pjisuan=jisuan;
pjisuan(a,b,suanfa);
return 0;
}
其实不难,多敲代码多实践。