switch实现简单计算器功能
写程序实现功能:读入两个整数(data1和data2)和一个运算符(op),
计算表达式data1 op data2 的值.其中op可以为+、-、*、/四个符号中的任一种
(用switch语句实现)
思路一:使用scanf输入数字和字符,使用单引号‘’进行接收,使之转化为ascII码并且输出。
#include<stdio.h>
int main()
{
int a,b;
char op;
scanf("%d %c %d",&a,&op,&b);
switch (op)
{
case '+':printf("%d\n",a+b);break;
case '-':printf("%d\n",a+b);break;
case '*':printf("%d\n",a+b);break;
case '/':printf("%d\n",a+b);break;
default:printf("请重新输入\n");
break;
}
return 0;
}
输出结果:
思路二: 将case的常量换成“+-*/”的ascII码,美化一下输出,改成如下结构。
#include<stdio.h>
int main()
{
int a,b;
char op;
scanf("%d %c %d",&a,&op,&b);
switch (op)
{
case 43:printf("%d + %d = %d\n",a,b,a+b);break;
case 45:printf("%d - %d = %d\n",a,b,a-b);break;
case 42:printf("%d * %d = %d\n",a,b,a*b);break;
case 47:printf("%d / %d = %d\n",a,b,a/b);break;
default:printf("请重新输入\n");
break;
}
return 0;
}
输出结果:
思路三:使用getchar用来接收相应的数据
#include<stdio.h>
int main()
{
int a,b;
char op;
scanf("%d",&a);
op = getchar();
scanf("%d",&b);
switch (op)
{
case 43:printf("%d + %d = %d\n",a,b,a+b);break;
case 45:printf("%d - %d = %d\n",a,b,a-b);break;
case 42:printf("%d * %d = %d\n",a,b,a*b);break;
case 47:printf("%d / %d = %d\n",a,b,a/b);break;
default:printf("请重新输入\n");
break;
}
return 0;
}
本代码由于使用了getchar,要注意垃圾字符污染缓冲区,若像上图输入的方法,则会出现如下结果:
本结果是因为getchar获取了空格键,并且输出了空格的asc值,故使用getchar时要特别注意此种情况。
正确输出的结果:
从终端输入三个整数,并从大到小排序
思路一:终极摆烂做法之,无敌if嵌套
#include<stdio.h>
int main()
{
int a,b,c;
printf("请输入需要排序的数:");
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{
if (a>c)
{
if (b>c)
{
printf("%d %d %d\n",a,b,c);
}
else
{
printf("%d %d %d\n",a,c,b);
}
}
else
{
printf("%d %d %d\n",c,a,b);
}
}
else
{
if (a>c)
{
printf("%d %d %d\n",b,a,c);
}
else
{
if(b>c)
{
printf("%d %d %d\n",b,c,a);
}
else
{
printf("%d %d %d\n",c,b,a);
}
}
}
return 0;
}
输出结果如下:
将输入的三个数,分别比较,分别罗列可能出现的情况,要注意每个if之间的逻辑关系。
思路二,引入第四个“变量”,作为这3个数的中间存储空间进行转换
#include<stdio.h>
int main()
{
int a,b,c,temp; //temp作为中间值
printf("请分别输入a,b,c的值:\n");
scanf("%d%d%d",&a,&b,&c);
if(a < b)
{
temp = a; //先把a赋值给temp 这样才能实现转换
a = b; //若没有temp这个变量,把a赋值给b,那么b=a,如果再把b赋值给a,
//那么a依旧是原本的a,依旧<b,达不到咱们转换的效果。
b = temp; //最后把temp的值赋给b 达到 a与b两个值互换的结果
}
if(a < c)
{
temp = a;
a = c;
c = temp;
}
if(b < c)
{
temp = b;
b = c;
c = temp;
}
printf("%d,%d,%d\n",a,b,c);
return 0;
}
使用中间值的方法,将较大的数换出来挨个比较,达到找出最大值的效果。