我们应该反问自己一句:为什么要学编程?
答案显而易见:编程编写代码让我们与计算机之间有了交流,可以让计算机去解决我们生活中的问题。
但是这个时候一个新的问题就出现了:我们应该怎样去描述生活中的问题呢?
我们知道在我们日常的生活中,我们身边的数据一般分为常量与变量。
常量 | 例如:我们的性别、血型,生活圆周率等 |
变量 | 例如:我们的年龄、体重,生活中每天变化的银行汇率等 |
那么我们如何描述这些变量呢?
在计算机语言中我们将数据类型分为以下类型:
数据类型 | 标识符 | 所占字节数 |
字符型 | char | 1 |
整型 | int | 4 |
短整型 | short [int] | 2 |
长整型 | long [int] | 4 |
长长整型 | longlong [int] | 8 |
单精度实数 | float | 4 |
双精度实数 | double | 8 |
看了上述的表格大家就会产生新的疑问:字节是什么意思?为什么一个数据要分这么多类型?为什么long[int]所占的字节数和int的字节数一样?这些类型又分别是什么意思?
我们首先解决第一个问题字节是什么意思?
计算机和我们人一样,也有形容自己体重大小的量。我们知道计算机只可以识别电信号,也就是我们知道的二进制数中的0、1,这个时候我们人为规定一个计算机识别的0或1所占的空间大小表示为1个比特我们就有了下面的替换关系:
8个比特(bite) | 1个字节 |
1024个字节(byte) | 1kb |
1024kb | 1mb |
1024mb | 1gb |
1024gb | 1tb |
1024tb | 1pb |
...... | ...... |
那么就到了我们第二个问题:我们数据要分为这么多类型?
假如有一个整型的数,它所占的空间大小是1字节,我们可以将这个数定义为short、int、long、longlong都是可以的,它们虽然都可以,但是一个longlong的所占空间的大小居然是short的8倍。
假如我们在编程中对数据的类型不加区分,假如一个程序中这样的变量有上千个,那么就会导致我们编写的程序比别人的内存大很多,为了节约我们的空间大小我们就人为的将数据分为了很多类型。
为什么long[int]所占的字节大小和int所占的字节是一样的?
在C语言的标准中我们规定,所以我们在输出时的大小就以小的输出(节约空间),因此会导致long[int]的大小和int是一样的。
最后一个也是最重要的一个!它们代表着什么意思呢?
首先我们学习char(字符型).我们如何使用呢?
在C语言中我们将'a'代表为字符a,所以我们在C语言中用以下代码定义字符a:
#include<stdio.h>
int main()
{
char ch = 'a';
return 0;
}
上面代码的我们将ch定义为a,也就是将a装在ch的空间里。
int、short、long、longlong就是整型系列的,也就是取整函数(向下取整),而double、float就是浮点型,我们可以理解为数学中的小数,但是它与小数有点不同,之所以不同,是因为12.22也可以写为,小数点的位置就不同了,因此称为浮点型。
除了字符型是特殊定义,数据的使用我们一般是类型名 变量名=
#include<stdio.h>
int main()
{
int year = 2022;
return 0;
}
#include<stdio.h>
int main()
{
double weight=130.3 ;
return 0;
}
或者定义为类型名 变量名
#include<stdio.h>
int main()
{
int year ;
return 0;
}
#include<stdio.h>
int main()
{
double weight ;
return 0;
}
我们也可以通过程序知道数据所需类型所需要的字节,在C语言中sizeof()函数是空间大小函数我们可以通过输入以下代码得到数据类型的字节大小:
#include<stdio.h>
int main()
{
printf("%d\n", sizeof(char));
printf("%d\n",sizeof(int));
printf("%d\n", sizeof(short));
printf("%d\n", sizeof(long));
printf("%d\n", sizeof(long long));
printf("%d\n", sizeof(double));
printf("%d\n", sizeof(float));
return 0;
}
我们也就可以得到该数据类型所需要的空间大小:
我们学习了常量,但是我们生活中存在的一般是变量,假如假如今年是2022年,过了一年是多少年,我们我们的体重一开始为150.3kg,经过锻炼我们体重下降了10kg,我们的体重又是多少?
#include<stdio.h>
int main()
{
int year = 2022;
double weight = 150.3;
year = year + 1;
weight = weight - 10;
printf("%d\n", year);
printf("%lf", weight);
return 0;
}
我们可以通过以上代码得出结论:
明年是2023,体重为143.30000。
printf为打印函数一般可以打印几个变量,使用方法假如是定值我们可以直接打印,例如printf("2011");假如我们得到的是变量那么我们可以先写未知量,再后面与之链接,例如printf("%d\n",year); printf("%d %l \n",year,weight);但是未知量也是有区别的
int\short\long\longlong | %d |
double | %lf |
float | %f |
因此我们输出未知量的时候我们要先知道输出值的类型,然后再设置变量。
但是如果程序都像上面设置好了输入的值,就会导致程序是固定的输出结果固定,为了解决我们自己的问题,所以我们要自己输入数值,然后计算机输出结果,因此这样的话我们就会使用到新的函数scanf(),也就是输入函数,它的使用方法和prinft()基本是一样的,例如我们可以通过下面程序求两个整数的乘积:
#include<stdio.h>
int main()
{
int a;
int b;
int sum;
scanf("%d %d",&a,&b);
sum = a * b;
printf("两个数的乘积为%d", sum);
return 0;
}
但是系统会报错:
我们阅读问题,可以知道解决vs不可以使用scanf函数的解决方法有两种:
1.将scanf改为scanf_s(不推荐,因为scanf_s为VS自己软件的符号,不是C语言的标准,如果使用这个,在其它的编程软件上你的程序就运行不了)
2.第二种方法(较推荐):
然后在你程序的第一行写上#define(空格)(复制的 )(空格)(1)
当输入122 22回车后就可以得到结果:
通过上面我们可以知道scanf函数是怎么使用的:scanf("未知量标识符",变量名称);
我们变量一般分为全局变量(大括号外面的变量)和局部变量(大括号里面的变量),当我们的程序全局变量和局部变量名字相同时,我们程序优先选择局部变量。
如下面程序:
#include<stdio.h>
int a = 20000;
int main()
{
int a = 100;
printf("%d",a);
return 0;
}
它的输出结果显然是100