我们用到的计算器

通过按几个按钮就可以实现计算功能。
对于初学者来说(也对于我来说)还做不出来这种有按钮的计算器。
控制台程序
如果你有看过我的教程一的话应该知道咱们敲出来的是一大块黑黑的东西,在那上面显示文字。那个一大块黑黑的东西叫控制台,它长这个样子:

图中所示的就是控制台。这个样子的程序叫做控制台程序。
其实通过控制台程序也是可以实现计算器的功能的。
上面那张图就是一种计算器。是不是比系统自带的高级呢。我们这个计算器可以直接输入表达式求和。
实现
我们这个教程的计算器要做到上面的那个效果。
那么,我们应该怎么做呢。
首先,打开vs2019,创建一个工程,名字随便起,然后创建文件。更详细的内容请看教程一。
一切准备就绪后就可以敲代码啦。
敲代码第一步-引用头文件。上一个教程已经说过了,stdio.h是c语言中提供的标准输入输出库。这次的计算器主要使用输入输出功能。要想使用输入输出函数就必须要使用它。
所以,我们写上这句话:
#include<stdio.h>
接下来就是程序的入口,上一个教程中有提到程序的入口。三秒钟时间想一想程序的入口是啥...
3
2
1
主函数:main
main(){
}
主函数的大括号里我们要写什么呢?不急,我们先想一下这个计算器有什么。
根据上面的图片我们可以知道,我们的程序应该先显示一句话,然后开始让用户输入表达式。所以,我们的主函数里面应该加上这样的语句:
float a,b;
char op;
printf("请输入一个表达式");
scanf("%f%c%f",&a,&op,&b);
你可能会有一个疑问:那个double和char是啥。
那个double和char是为了区分变量能存储什么样的数据。变量又是啥呢。您可以将变量想象成一种容器,所有数据都会放到这个容器里面。而double和char就是这个容器所能容纳的数据的类型。
数据的类型分为以下几种:整型(int)、浮点型(也叫实型)(float)、双精度浮点型(double)、字符型(char)、字符串型(string)、布尔型(bool)。
这个整型和浮点型呢就是整数和小数的关系。比如。3,他就是整形,3.0他就是浮点型(虽说在数学上,这个3.0和3没啥区别,但在计算机中,他俩是不一样滴)。
双精度浮点型和浮点型的最大的一个区别就是双精度浮点型比浮点型所表示的数要多,精度也高。
字符型呢就是存储一个字符的变量,比如,a,b,v,f等等。
字符串呢就是存储好多个字符,比如,"abvf","I love you","你好呀","До Свидания."等等。
关于字符串和字符,后面会继续讲解。现在回到我们的计算器上。
这个计算器在输入表达式之后会显示之前输入的式子并显示结果。你可能会有一个疑问,他是怎么算出来的呢。
在c语言中有一种叫做运算符的东西。这个运算符呢,它也不是什么特别高深的东西,就相当于数学中的运算,什么加减乘除啊,都需要靠运算符来解决。那么我们就先介绍一下即将登场的运算符君。
运算符 | 名称 | 作用 |
---|---|---|
+ | 加 | 计算两个数的和 |
- | 减 | 计算两个数的差 |
* | 乘 | 计算两个数的积 |
/ | 除 | 计算两个数的商 |
这个+,-没什么可说的,数学上怎么做加减在计算机中也怎么做,c语言也是如此。
这个*啊,它的样子和数学上的乘号有点不同。而c语言中的乘号是小键盘9上面的那个或者键盘字母区上面的8键(需要按住shift)。其实不止c语言,其他编程语言也都是这样滴。
至于这个/(除)就和数学上有点不一样了。这个除呢,如果除号两边都是整数的话,输出的结果只有整数。比如:4/3,数学上等于1.33333333...,但是,你会看到电脑会输出1,这不是电脑出现了问题,这是这个运算符的一个约定。那怎样让它输出小数呢?只要让除号两边有一个不是整数就可以了,比如,4/3.0,那最后就会输出1.333333。
你可能会问:这也不对啊,应该是无限循环的才对啊。
这就是计算机对于小数的存储方式,计算机不能存储那么多的小数位。而c语言呢,只能存6位小数,所以,这个无线循环小数在c语言中就变成了有限小数。
好了,上面这些运算符都完成了一种运算叫算术运算。所以,上面的这些符号叫算术运算符。而用算术运算符与数字连接起来,像3/4,2*2,3+3,1.25-2.22等这种式子叫做算术表达式。
回到我们的计算器上,既然已经知道了这些运算符,那怎么知道用户输入了哪个运算符呢。
我们要用一种能判断用户输入了什么运算符。我们这里使用if
if(op=='+'){
printf("%f%c%f=%f",a,op,b,a+b);
}
if(op=='-'){
printf("%f%c%f=%f",a,op,b,a-b);
}
if(op=='*'){
printf("%f%c%f=%f",a,op,b,a*b);
}
if(op=='/'){
printf("%f%c%f=%f",a,op,b,a/b);
}
此时,你可能还有一个疑问:怎么判断a,b是不是小数呢。
还记得前面的数据类型吗?(不记得的小伙伴证明你没有好好看也没有好好记笔记哦)
这里面有两个代表小数的数据类型,叫double和float,除号两边,如果有一个是float或者double,结果就是小数。和上面讲的除号的注意事项一样。所以,我们直接写上就行啦。
那这个if又是干嘛的呢。
这个if是用来做判断的。if后面的括号里存放的是条件,如果这个条件成立,就执行{}里面的语句。否则就不执行。继续执行{}后面的语句。关于if的详细介绍会在后面的知识点中有详细的介绍。
上面这个代码里面的==是用来判断==左右两边两个内容是否相等的。
源代码
不要把源代码放入环境中直接运行哦,最好跟着教程去敲一下。
#include<stdio.h>
int main(){
float a,b;
char op;
printf("请输入一个表达式");
scanf("%f%c%f",&a,&op,&b);
if(op=='+'){
printf("%f%c%f=%f",a,op,b,a+b);
}
if(op=='-'){
printf("%f%c%f=%f",a,op,b,a-b);
}
if(op=='*'){
printf("%f%c%f=%f",a,op,b,a*b);
}
if(op=='/'){
printf("%f%c%f=%f",a,op,b,a/b);
}
}
知识点(上)
- 输入函数scanf()和输出函数printf()
scanf("字符串",变量表);
printf("字符串",变量表);
我们以今天的两条语句来举例
scanf("%f%c%f",&a,&op,&b);
printf("%f%c%f=%f",a,op,b,a+b);
首先,scanf函数的括号里面的%f,%c是格式符。它是为了与后面的变量表相匹配,一个格式符和一个变量相匹配。比如scanf("%f%c%f",&a,&op,&b);中,%f对应a,%c对应op,%f对应b。这个语句的作用是将用户输入的内容分别存入a,op,b。&是取地址符,scanf函数不会对变量直接操作而是通过变量的地址,间接的对里面的数据进行操作。地址是啥,后面再讲。
同理,printf("%f%c%f=%f",a,op,b,a+b);这里面的%f对应a,%c对应op,%f对应b,%f对应a+b,对于a+b,会将a+b的结果计算完再放入%f中。这条语句的意思是,将a,op,b,a+b的值按照格式符的位置输出。
下面是几个常用的格式符
格式符 | 对应类型 | 说明 |
---|---|---|
%d | int | 十进制整数格式符,将对应的值以十进制的格式输出 |
%f | float/double(有些编译器只对应float,对于这个教程所用到的编辑器使用它就可以了) | 浮点型或双精度浮点型格式符,将对应的值以小数格式输出 |
%lf | double | 双精度浮点型格式符,将对应的值以小数格式输出(能输出的数值范围比%f多) |
%x | int | 十六进制整数格式符,将对应的值以十六进制的格式进行输入或者输出 |
%o | int | 八进制整数格式符,将对应的值以八进制的格式进行输入或者输出 |
%c | char/int | 字符格式符,将对应的值以字符的形式输出 |
%.mf | float/double(有些编译器只对应float) | 将小数数值以m位小数的格式输出 |
在使用格式符时,最好要与你要输出或者输入的变量的类型对应,否则会出现一些差错。就比如将整数以%d和%c的格式输出会得到不一样的结果,比如将97以%d,%c的格式输出会得到97和a。这是因为在c语言中,字符的存储方式是按照ascii编码存储的。什么是ascii码标准,各位读者可以自行百度并尝试记住26个英文字母的大写、小写与0-9阿拉伯数字的ascii码
- if语句
语法:
if(条件){
语句1;
语句2;
....
}
这个就是前面所提到的if,它的作用是用来做判断的。那么怎么做判断呢。看if后面的()里面。以上面的这个op=='+'举例,当用户输入加号时,加号就会被存入op中,而这个加号又和==右面的加号一样,所以就判断条件成立,否则,条件不成立。条件成立后的执行顺序和前面所讲的一样。
当然,你可能会看到类似于下面的语句:
if(a==3)
printf("a=%d",a);
printf("a=0");
这个语句的意思是如果a等于3,那么就执行printf("a=%d",a)将a的值输出,然后执行printf("a=0");再输出一个a=0。你看到的结果是a=3a=0。如果a不等于3,你看到的结果是a=0。
if在条件满足时只能执行后面一条语句。而{}是一个神奇的东西,在“{”和“}”之间的所有语句都被算为一条语句。
如果你将上面的代码改成
if(a==3){
printf("a=%d",a);
printf("a=0");
}
那运行结果就不一样了。
如果a等于3,就输出a=3a=0否则什么也不干。
再看下面的代码:
```c
if(a==3)
printf("a=%d",a);
else
printf("a=0");
如果a等于3,就输出a=3,否则就输出a=0。再也不用看到两个a的结果了。
这个else就是否则的意思。if是如果,else是否则,连在一起,如果...,否则...就能知道他俩连在一起是什么意思了。
同样,else也只能执行后面一条语句,所以,如果想让else后面执行多条语句就用{}括起来吧。
好了,本次教程就到这里。希望继续等待更新哦。
网友评论