【C语言初阶(二)】C语言数据类型和变量

❣博主主页: 33的博客
▶文章专栏分类: C语言从入门到精通
🚚我的代码仓库: 33的代码仓库🚚

1.前言

在前一篇文章中,我们已经对c语言的基本概念进行了学习,这篇文章我们将更进一步的去学习c语言的有关知识。
本章重点:

本篇文章主要对c语言的数据类型,数据类型的取值范围,变量,算数操作符,赋值操作符,单目操作符,强制类型转换等等进行介绍。


2.C语言数据类型介绍

所谓类型,就是相似的数据所拥有的共同特性,下面盘点一下c语言提供的各种数据类型


2.1字符型

charsigned char//有符号字符型unsigned char//无符号字符型

2.2整型

short //短整型
int  //整型
long [int]//长整型

2.3浮点型

float //单精度浮点型
double//双精度浮点型

2.4布尔类型

引入布尔类型专门用来表示真假

_Bool

代码演示

int main()
{
_Bool a = ture;
if(a)
{
	printf("是真的")}
}

2.5各种数据类型的长度

每种数据类型都有自己的长度,那么使用不同的数据类型,就能创造出不同长度的变量,那么我们该如何求出数据类型的长度呢?我们引用sizeof操作符。
sizeof是专门用来求操作符的类型长度的,单位是字节。
那么接下来我们一起求一下数据类型的长度

int main()
{
 printf("%zd",sizeof(char));
 printf("%zd",sizeof(short));
 printf("%zd",sizeof(int));
 printf("%zd",sizeof(long));
 printf("%zd",sizeof(float));
 printf("%zd",sizeof(double));
}

那么就可以求出各数据类型的长度:char为1byte,short为2,int为4,long为8,float为 4,double为 8.
注:计算结果是size_t类型,无符号整型用%zd表示

sizeof求表达式的时候,表达式不计算

int main() 
{
	short a = 2;
	int b = 10;
	printf("%zd\n", sizeof(a = b + 1));
	printf("%zd\n", a);
	return 0;
}

发现运算后,a的值依然为2
在这里插入图片描述


3.signed 和unsigned

signed 和unsigned都为关键字,修饰字符型和整型,signed 表示一个类型带有正负号,unsigned表示该类型不带正负号,只能表示0和正数。

signed int a;//等同于int a
unsigned  int a;//等同于 unsigned a
signed char c//不等同于char!!!

4.数据类型和取值范围

数据类型非常多,尤其是整型就有,short,int,long,longlong,这是为什么呢?其实每一种数据类型都有自己的取值范围,也就是存储的数值的最大值和最小值。如果要查看当前系统的极限值:limits.h说明了整型的取值范围,float.h说明了浮点型的取值范围。


5.变量

了解清楚了类型,那么我们使用类型是干什么呢?其实类型是用来产生变量的,什么是变量呢?c语言中经常变化的量就称为变量,一直不变的量就称为常量
变量的创建语法如下:

data_type name;//data_type为数据类型   name为变量名
int a;//整型变量a
char b;//字符变量b
double c;//浮点型变量c

变量的分类:局部变量和全局变量
局部变量:在大括号内部定义的变量,使用范围比较局限,只能在大括号内部使用。全局变量:在大括号外部定义的变量。当局部变量和全局变量符号相同的时候,局部变量优先。局部变量放在内存的栈区,全局变量放在内存的静态区。


6.算术操作符 + - * / %

算数操作符也被叫做、运算符,分别是**+ - * / %**,这些操作符称为双目操作符,双目操作符是指,有两个操作数,操作符两端就是操作数。
+和-用来完成加法和减法;*和/用来完成乘法和除法。但值得注意的是在进行除法运算时,除号的两端如果是整数,得到的结果也是整数。结果只会返回整数部分,那么该如何得到为结果为小数的值呢?那么两个运算数必须至少有一个是浮点数。

我们可以来看个例子

int main()
{
float a = 6/4;//结果为1.000000
float b  = 6.0/4;//结果为1.500000
printf("%f\n",a);
printf("%f\n",b);
}

因为/的结果只能返回整数部分,那么余数部分怎么求呢,其实我们只需要用%来求余,负数求余的规则是结果的正负由第一个运算数的正负决定。


7.赋值操作符 =

在变量创建的时候给一个值叫做初始化,在变量创建好以后,再给一个值就是赋值


7.1连续赋值

int a = 2;
int b = 3;
int c = 4;
c = b = a+c;//把a+c赋值给b,b=6,再把b赋值给c=6


7.2复合赋值

int a = 2;
int c = 4;
int a += 3;//等价与a=a+3
int c -= 3;//等价与c=c-3

注:a+=3与a=+3是有区别的,前者表示a=a+3,后者是a=正3


8.单目操作符 ++ – + -

操作符只有一个操作数被称为单目操作符,分别是++,–,+,-

8.1++和–

++是一种自增的操作符,分为前置++和后置++;–是一种自减的操作符,分为前置–和后置–
前置++,计算口诀:先+1,后使用

int a = 1int b = ++a;//a=a+1=2,b=2
printf("%d",b);

后置++,计算口诀:先使用,后+1

int a = 1int b = a++//b=a=1,a=a+1=2
printf("%d",b);

同理可以得到前置–,计算口诀:先-1,后使用;后置-- ,计算口诀,先使用,后–;

8.2 +和-

这里的+是正号,和-号,都是都是单目操作符,运算符+不会对正负值没有影响,一般可以省略,但是,写了也不会报错。运算符-用来改变一个值的正负,负号前面加上-就会变成正数,正号前面加上-就会变成负数。


9.强制类型转换

在操作符中还有一种特殊的操作符是强制类型转换,语法的形式很简单,如下:

(类型)
int a = 3.14//其中a是int类型,3.14是double类型,两边类型不一致会报警
//消除警告方式可以使用强制类型转换
int a =(int)3.14/

10.scanf 和 printf介绍

scanf 和 printf的使用都需要包含<stdio.h文件>

10.1printf

10.1.1基本用法

printf()的作用是将参数文本输出屏幕。它名字里面的f代表format(格式化),表示可以定制输出的文本格式。printf()不会在行尾自动添加换行符,运行结束后,光标就停留在输出解释的地方,不会自动换行,为了使光标换号可以使用换行符\n换行且文本内部换行也是用\n来表示;

int main()
{
printf("hello world\n");
printf("hello\n world\n");
}

10.1.2 占位符

所谓占位符,就是这个位置可以用其他值代入。细心的同学已经发现在前面,我已经频繁使用过了,用%表示的。占位符的第一个字符一律为%,第二个字符表示占位符的类型。

int main()
{
int a = 3;
printf("%d",a)
}

常见的占位符:
%s : 字符串
%c : 字符
%d :十进制整数
%zd:size_t类型(sizeof中用到)
%p :指针
%%输出一个%

9.1.3输出格式

限定宽度格式:%nd,允许限定占位符的最小宽度为n,默认为右对齐,不满n为前面自动补齐,如果希望改为左对齐,则改成%-nd

int main()
{
int a = 32;
printf("%5d",a)//输出’   32‘
printf("%-5d",a)//输出’32    ‘
}

如果想限定小数的位数,例如希望保留小数点后保留2为,整数部分保留3位,如下:

int main()
{
printf("%6.2f\n",0.5)//输出'   0.50’
}

总是显示正负号格式:%+

int main()
{

printf("%+d",12)//输出+12
printf("%+d",-12)//输出-12
}

输出部分字符串格式:%.【m】s

int()
{
printf("%.5s","hello world");//输出hello
}

10.2 scanf

如果我们要给变量输入值,可以使用scanf2,如果要打印在屏幕上,就可以结合上方所学的printf函数。

10.2.1基本用法

scanf()用于读取用户的键盘输入,程序运行到这个语句时,会停下来等待用户输入,用户输入数据时,按一下回车,scanf就会处理用户的输入,scanf的返回值是一个整数,表示成功读取变量的个数。除了%c之外都会忽略空白字符

int main()
{
int a = 0;
int r =scanf("%d\n",&a)//输入数a
printf("%d %d\n",a,r)//打印数a,读取变量的个数r

}

10.2.2 赋值忽略符

有时,用户的输入可能不符合格式,如下:

int main()
{
int a = 0;
int b = 1;
int c = 1;
scanf("%d-%d-%d",&a,&b,&c) ;//输入格式只能是例如 1-3-4
printf("%d %d %d",a,b,c) ;
}

如果输入a b c就会出现错误,为了避免这种情况,scanf提供了赋值忽略符*,只要把 * 加入在任何%的后面,该占位符就不会返回值,解析后将被丢弃。

int main()
{
int a = 0;
int b = 1;
int c = 1;
scanf("%d%*c%d%*c%d",&a,&b,&c) ;//输入格式只能是例如 1-3-4
printf("%d %d %d",a,b,c) ;
}

11. 总结

本篇文章主要对c语言的数据类型,数据类型的取值范围,变量,算数操作符,赋值操作符,单目操作符,强制类型转换,printf和scanf等等的相关内容进行介绍。但依然有不足的地方,欢迎大家指正,我会继续学习!


下期预告:分支和循环

  • 55
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 27
    评论
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值