C语言的数据类型和变量

大家好,我是码哥,今天给大家带来一期C语言的数据类型和变量,我觉得这些东西主要是多运用,运用得多了就能掌握了。

1.数据类型介绍

生活中我们能够遇到各种各样的数据,我们会将收到的数据有个大致的分类,数据类型的作用就是将计算机得到的数据进行分类,比如给了一个数据“20”,编译器是如何知道怎么操作它的呢,这就需要用到数据类型中的int 来声明他是一个整形数据(也就是整数),再比如给了一个数据“3.14”,这就需要用到float或者double来声明它是一个浮点数(小数),若是一个字符‘a’时,则需要用char来声明。

1.1字符型

Char:用来描述一个字符或一个字符串(多个字符)

比如:

[signed] char 表示有符号的字符

[unsigned] char 表示无符号的字符

1.2整型:描述一个整数

Int 普通整数

long int 长整型

short int 短整型

long long int 更长的整型

这几个整型的区别就在于他们在计算机中所占的内存空间大小不同

1.3浮点型:描述一个小数

float 描述单精度浮点数

double 描述双精度浮点数

long double 描述双精度浮点数

float 和double 的区别在于精确程度double 更精确

1.4 _bool 类型(只用于判断真假)

在C99之后引入了新的类型”_bool”类型,这个类型只用于判断真假,头文件是#include<stdbool.h>

1.5各种数据类型的长度

在C语言编译运行的过程中,数据要在计算机中占据一定的空间,下面是一些常见的类型占据的空间大小

首先给大家介绍一下空间单位

比特位(bite)  字节  Kb  Mb  Gb  Tb

其中一个字节等于八个比特位,剩下的进制都是1024

int 占据4个字节的大小

Char 占据1个字节的大小

Float 占据4个字节的大小

Double 占据4个字节的大小

Long int占据4个字节的大小

Long long int 占据8个字节的大小

要想打印出各种类型所占空间的大小,需要用到sizeof函数,该函数是用来计算函数内容所占空间总的大小

1.6sizeof在执行时函数中的表达式不计算

sizeof 在代码进⾏编译的时候,就根据表达式的类型确定了,类型的常⽤,⽽表达式的执⾏却要在 程序运⾏期间才能执⾏,在编译期间已经将sizeof处理掉了,所以在运⾏期间就不会执⾏表达式了。

2.signed和unsigned

signed和unsigned主要用来修饰int和char类型的,signed表示数据有正负号,unsigned则表示没有,而int本身就自带正负号,所以int 前面加不加signed都一样,有符号的int的范围是-32768~32767,而无符号的int的最大值是0~65535。Unsigned int 中的int也可以省略,直接写unsigned a = 0;

char的signed类型表示的范围是-128~127,unsigned类型表示的范围是0~255,但是char有没有符号主要取决于编译器,有些就认为是有符号,有些则认为没有,这与int类型有写区别

3.变量

3.1变量的创建

在设计C语言代码的过程中,我们往往需要创建一个变量并且给他赋一个值,那么什么是变量呢?顾名思义,能够发生变化的量叫变量。

例如:

Int           a    =    10;

数据类型   变量名       变量的初值

3.2变量的种类

全局变量:大括号外的变量叫做全局变量,其在整个工程中都能够被使用。

局部变量:在函数内部被定义的变量叫做局部变量,他只在自己的大括号中能够被调用

注意:如果局部变量和全局变量的名字相同,应该以局部变量为优先,并且变量名字不能与库函数或数据类型重名。

在创建变量的过程中,计算机会把变量存放在一个区域,根据存放内容不同可以划分三个区域:栈区、堆区和静态区

  1. 局部变量放在栈区;
  2. 全局变量放在静态区;
  3. 堆区存放动态内存管理。(目前用不到,以后再说)

  1. 算数运算符(操作符)

4.1 +和-运算符

“+”就是将两个常量或变量相加

比如:int a = 12 +34;  这样a的值就变成了46.

“-”是将两个量相减

比如:int x =  3 – 1; 此时x的值是2。

    1. *、/和 % 运算符

“*”是将两个数相乘

比如:int b = 3 * 4;  这样b的值就变成了12.

“/”是取整数

比如:int c = 5 / 2;  这样c的值就变成了2,把后面剩下的1给舍去。

“%”是取余数

比如:int d = 5 / 2;  这样d的值就变成了1,把前面的2去掉。

4.3  = 运算符

“=”是将一个值赋值给一个变量,因此它叫赋值运算符

比如:int a = 2; 这样就把2赋值给了a。

注意:赋值运算符也可以连续赋值

将a,b和c初始化

比如:int a = 1;

      Int b = 0;

      int c = 0;

      b = c = a + 5

不过还是建议分开写,避免出错。

5.复合赋值符

在c语言中有一些单目运算符,像自增、自减运算符等

比如: int a = 0;

          a++;

此时a++就相当于a = a + 1

自减运算符也是如此(--)

++和--操作符分为前置和后置,当其放在变量前面时,就是先++或—再拿来使用,后置则是先使用在++或--。值得一提的是,+和-可以是单目也可以是双目,当其是单目时可以把它们理解为正负号,双目时就把他们理解为加或减。

6.强制类型转换

强制类型转换就是把一个类型的数据强制变成另一种数据

比如:

Int a = 3.14;

这时编译器会报警,但如果改为:int a = (int)3.14;就不会报错,而是将3.14小数点后面的数字省略掉。

7.scanf和printf

scanf是输入一个数据,而printf是输出一个数据

比如:int a = 0;

scanf(“%d”,&a);//输入a的值

printf(“%d”,a);//输出a的值

当然,也可以直接输入或输出常数

在这里就不得不提到占位符了,那么什么是占位符呢,我的理解就是帮助你创建的数据占位置的符号。码哥这边有一些占位符的举例

 %a :⼗六进制浮点数,字⺟输出为⼩写。

  %A :⼗六进制浮点数,字⺟输出为⼤写。

%c :字符。

%d :⼗进制整数。//int

  %e :使⽤科学计数法的浮点数,指数部分的 e 为⼩写。

  %E :使⽤科学计数法的浮点数,指数部分的 E 为⼤写。

  %i :整数,基本等同于 %d

 %f :⼩数(包含 float 类型和 double 类型)。//float%f double-%lf

  %g :6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e 为⼩写。

  %G :等同于 %g ,唯⼀的区别是指数部分的 E 为⼤写。

  %hd :⼗进制shortint类型。

 %ho :⼋进制shortint类型。

  %hx :⼗六进制shortint类型。

  %hu :unsignedshortint类型。

  %ld :⼗进制longint类型。

  %lo :⼋进制longint类型。

  %lx :⼗六进制longint类型。

  %lu :unsignedlongint类型。

 %lld :⼗进制longlongint类型。

  %llo :⼋进制longlongint类型。

%llx :⼗六进制longlongint类型。

%llu :unsignedlonglongint类型。

%Le :科学计数法表⽰的longdouble类型浮点数。

%Lf :longdouble类型浮点数。

%n :已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。

%o :⼋进制整数。

%p :指针(⽤来打印地址)。

%s :字符串。

%u :⽆符号整数(unsignedint)。 %x :⼗六进制整数。

%zd size_t 类型。

%% :输出⼀个百分号。

printf函数在输出时可以设置输出数据的最小宽度

比如:

printf(“%3d”,23);在输出数据时会在前面补一个空格来凑成3个最小宽度,如果希望左对齐可以在%的后面加上一个“-”。

在默认情况下输出整数时正数不会带+,如果想要带+,可以在%的后面加上+变成“+%d”

同样的,小数也可以限定位数

比如:

Printf(“%.2f”,3.1415);

在这时侯输出的数据就会只取小数点后两位,后面的会直接舍去。这种限定小数的可以与限宽的占位符结合使用

小数限位符可以与限宽限位符都可以用*来代替,只要在printf中传参就行

Printf(“%*.*f“,2,1,3.12);这时会打印出3.1

    想要输出部分字符串可以在%后面加上你想取的数量变为%5s

scanf()函数可以读取用户在键盘上输入的数据,它的用法与peintf十分相似,不过在双引号后面的数据名字要取地址(指针变量除外)

例如:

int a = 0;

scanf(“%d”,&a);

scanf在处理占位符时会自动过滤空白字符,包括空格,制表符,换行符等

scanf的返回值是一个整数,它表示读取成功的变量的个数,如果没有读取到或者匹配失败就会返回0.

8.赋值忽略符

#include

 int main()

 {

 int year = 0;

int month = 0;

int day = 0;

scanf("%d-%d-%d", &year, &month, &day);

 printf("%d %d %d\n", year, month, day);

 return 0;

 }

在上面的代码中,如果用户要输入2024年5月1日,那么他就只能输入2024-5-1,如果他输入2024.5.1就会出错,要想满足用户需求,就必须吧-给忽略掉,可以用“%*c“来代替

”-“,这样用户输入的容错率就更高了。

今天的C语言就到这里,感谢大家的观看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值