在C语言第一篇里我写到了编译器,在这里补充一个点,文本编辑器,编译器,IDE(集成开发环境)的区别。
文本编辑器是用作编写普通文字的应用软件,如window的记事本,atom,sublime,它常用来编写程序的源代码。 编译器是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序,有gcc,g++。 IDE是可以编辑代码且可以将代码编辑器,编译器,调试器,图形界面等结合起来的一个集成的应用程序,如Visual Stdio,DevC++等,但口头上我们经常直接将IDE说成了编译器。
在上篇内容中我们讲到 #include,我们将这个比作钥匙区打开仓库拿工具。在专业术语中,#include是一个预处理器指令,作用是把stdio.h的内容“复制”,“粘贴”,到代码中去。
那么问题来了,"stdio.h"里面有什么呢?.h代表的是文件扩展名也指 C语言的头文件。stdio.h的全称是standard input output header——标准输入输出头文件。有了这个文件我们可以对数据进行输入(scanf)输出(printf)。这个输入和输出的内容数据和这篇文章的重点变量有关系。
数据的载体——变量简介
变量存放的是数据。标题的答案:程序的数据要放到变量里。C的变量的类型可以分为好几种,整数型,浮点型,字符型,布尔型…
整数型:顾名思义就是存放整数的类型,主要有int,long (int),long long (int)。
int 在32位和64位的电脑占有四个字节,可以存放2^31-1个不一样的数字。而long,long long我们只要知道它们比int 大就可以了。对于整数型,还有 short (int) 这个类型占的字节比int小,可以放的数字也就比int少了。要怎么使用那么多不同的类型呢?在生活中,程序在不同机器上运行,有些例如单片机的空间小,需要节约空间,就可以用short类型,在电脑上,空间大,我们就一般用int。如果要储存的数据很大,也要用long等数据了~
浮点型: 存放的是数学中的小数,有单精度float,双精度double等。float可以记录小数点后六位的数,double可以记录小数点后15位。浮点型也可以用科学记数法表示:4e16表示4*10^16。e以及后面的数字合起来就是10的几次方。
字符型: 可以放的就是字符啦!有char。可以放字母,符号,数字等,占有的字节是1字符。且只能是一个如'1','2','c'......像'abc','123'这些就不能用字符型来储存了,它们有一个别的名字叫做字符串。之后会发推文讲的~
还有一种很简单很好用的类型布尔型bool:这种类型表示的是真假也可以说是true和false,经常在编程中我们拿来判断这个条件是不是完成了的。
变量的声明
咦?声明是什么?声明就是告诉计算机,你在哪要什么类型的变量,然后让这个变量存在。关于声明,我们可以把变量声明为各种各样的除了C语言关键字之外的名字,如a,b,c,x,y,z,flag,name.....
图片来源:百度百科
我们只需要记住几种经常用的,其他编译器会告诉我们的
上代码吧!!!
ps:"//"表示的是注释,编译器是跳过这个的,后面的内容是给程序员看的
#include int main(){ int a,b,c=0; float x,y,z=1.2; char ch='h'; bool flag=1; scanf("%d %d\n",&a,&b);//输入整数 scanf("%f %f\n",&x,&y);//输入小数 printf("%d %d %f %0.2f\n",a,b,c,d);//输出 printf("%c %d",ch,flag);}
int a,b,c=0;double x,y,z=1.2;
就是声明的格式,在声明c的时候我们顺便将一个0“=”给了c,为什么要用“=”,它们两个相等吗?其实不是的,在C语言里“=”的意义是赋值,是把0赋值给c这个变量。在声明的同时赋值,我们将它叫做初始化,很专业吧。来看看其他赋值的方式吧。
int a;//声明再赋值a=2;double _i; _i=1.2;
注:这里用了_i的命名,C变量的命名可以用字母数字,下划线,但只能是字母和下划线开头,并且要注意的是不能为C语言关键字。
char和bool也是可以先声明在赋值或者直接初始化的~
unsigned和const
usigned翻译成中文是没有符号的,没有负数,所以声明的变量叫做无符号变量。什么作用?看代码注释吧~const的作用是把这个变量声明为常量。不能被赋值。
unsigned int a;//声明无符号整数型变量,不能放负数 //但放的数字的范围可以变成原来的两倍。const int a=1; //声明一个值为1的常量,不可以被赋值 //但可以赋值给别的变量
占位符和地址符
在上面的代码中,出现了%d %f %c还有"&"这个符号。
①先从简单的讲起,"&"是地址符,作用是提取出&后面的变量的地址。scanf输入数据,在把数据按着地址放到变量里面。
②%d %f %c 是占位符,作用呢,很明显,就是在printf和scanf的""里面占一个位置,让数据输入或者输出。由于输入输出数据的不同,我们用d,f,c等来代替。d表示整数,f表示单精度,c表示字符。
对于%d的小特性(在printf中)
%02d——表示占用两个宽度,不到的用0来填充。如1会表示为01。%5d——表示占用5个宽度,不到的用空格来填充。
对于%f的小特性(printf)
%0.2f——表示小数点后有两位。如0.235会变成0.23或者0.24。是不是会四舍五入会根据编译器不同而改变,这里就不举例了。
输出时候用%e——用科学记数法表示。如0.23会输出为23e-2。
在d,f,c前面加个u表示无符号变量
8进制和16进制的打印
如果要打印八进制,可以用%o
如果要打印十六进制,可以用%x
如:printf("%o",8);会输出10 printf("%x",15)会输出F
注:对于scanf("%d %d",&a,&b);它是输入函数,格式和printf差不多,就是多了地址符。仔细看看,两个%d%d之间是有一个空格的,输入的时候要注意中间留个空格给他们。如果是","也要输入一个逗号,要注意中英文。
类型转换
什么是类型转换?就是把不同类型的值相互赋值。上代码,简单粗暴。
int a; //声明double b=1.2;a=b; //用printf打印出来会变成了1因为在计算机中浮点数和整 //数储存方式不一样,把浮点的赋值给整数会截去小数部分//反过来int c=1;double d;d=c; //printf出来会是小数,只不过小数部分为0。//还有char ch='a';int ch1=ch;//printf出来ch1等于65,是a的ASCLL码值。 //同时A是97//对于bool类型bool flag=true;int flag1=flag;//printf出来flag1会是1 //如果flag=flase,flag1会是0 //相反的把数字赋值给bool类型 //除了0之外的其他数都会转化为1
讲到类型转换,平时赋值的时候要核对是不是可以转换。如果类型不同,可能会出现截断,数据错误等问题。
unsigned的赋值也可能会出现问题,把很大的无符号变量赋值给有符号的可能会变成负数。这是因为变量的二进制表示不一样。要了解相关的知识,这里引用一个大佬的推文——原码、反码、补码(一) —— 原码 会讲到一些关于二进制中正负数储存的方式。也可以关注他公众号了解一些信息安全的知识~
结语: 关于C语言中变量的类型,以及相关的知识就讲这么多了。
主要分为:数据类型、声明、占位符和地址符、类型转换,输入输出。
怎么样学好这语言。关键是要多实践,多敲,给自己个小目标,把这推文里的特性都敲一敲,看看运行后会有什么效果。
发现自己还没出关于用编译器的教程,目前公众号的读者定位是刚刚学C的学生,过几天我会出一个图片教程教用devC++(不难,有兴趣可以自己琢磨下),这样子暑假你们就可以慢慢练练了。
感jio不错可以转发或者点击右下角好看哦~
(。^▽^)也可以关注我
⇣⇣⇣