事物的难度远远低于对事物的恐惧
上一篇文章已经介绍说明了Visual C++的安装和使用,链接如下:
【C语言学习教程—1】VC++6.0的安装和创建简单C语言工程文件教程
文末有程序代码免费的获取方式!!!!
本篇文章开始正式讲解和介绍C语言的知识,在学习一门新语言时首先需要先了解它的基本知识,比如数据类型、运算符、表达式和数据的输入和输出等。
C语言的数据类型
C语言的数据类型可以分成4种:基本类型、构造类型、指针类型和void空类型,整体类型图如下图所示:
初学者初次看到上面的结构图时,可能会觉得C语言的数据种类有点多,不过不用着急首先将基本类型学清楚学懂就可以了,其他的后续将会进行介绍。
计算机在保存不同的数据类型时所占用的内存大小也是不同的,如下图所示(单位:字节):
由于不同数据类型所占用的内存大小不同,因此各自所能表示的取值范围也是不同的,具体如下图:
在以后编程时,可以参照上表中各个数据类型的取值范围,从而定义合适变量进行使用。
一. 常量和变量
常量:在程序运行时,其值不能被改变的量,常量也分为不同的类型:
1)整型常量,如66,789等;
2)浮点型常量,如12.5,56.3等;
3)字符常量,用一对单引号包含起来的一个字符,如’a’,'e’等。
先看一行代码,其中printf()函数是C语言中用于输出结果的语句,会将双引号之间的内容进行输出,其中%d是一个格式符,专门用来显示一个十进制整数,其中\n是换行符:
printf("12加34的结果是%d\n",12+34);
上面的语句的输出结果是:
12加34的结果是46
在引入变量之前,首先需要了解标识符和保留字两个概念:
1)标识符:由字母、数字和下划线三种字符组成,并且第一个字符必须是字符或者下划线,如temp、test、_abc都是合法的标识符。
2)保留字:系统保留起来,有特殊的用途,所以不能将保留字作为标识符来使用,否则就会出现语法错误,C/C++保留字如下图所示:
那么变量是什么呢?变量与常量不一样,常量一般是一个字面值,比如56,就是一个常量,不能被修改,而变量的名字如下:
变量:其值可以改变的量,变量肯定会有一个变量名,在内存中会占用一定的空间,变量名其实就是一个标识符,同时变量名是区分大小写的,大小写不同的变量会被认为是两个不同的变量。
在使用变量之前,我们需要对其进行定义,变量的定义格式如下:
类型名 变量名[ = 变量初值];
其中,[ ]中的内容可以省略,在格式表达中,凡被[ ]括起来的内容都可以省略。
下面的语句是定义了两个不同的变量:(注意:在C语言中 分号 被用作为语句结束的标志)
int abc;
int ABC;
二. 整形数据
在人们日常生活中数字常常以十进制的形式出现和使用,除了十进制以外常用的还有八进制和十六进制。
1)八进制
先来看程序2_1:
#include <stdio.h>
int main()
{
int date = 023;
printf("date的十进制数据为:%d\n",date);
return 0;
}
其中第一行是包含对应的头文件,然后才能使用printf( )函数,然后在主函数中定义一个int变量,并为其赋值23(八进制,定义变量并赋值以0开头的数值时,默认为8进制),最后通过printf( )函数进行输出,运行结果过如下:
date的十进制数据为:19
Press any key to continue
从结果中可以看出,程序计算正确,结果为82+13=19。
2)十六进制
先看程序2_2:
#include <stdio.h>
int main()
{
int date = 0x23;
printf("date的十进制数据为:%d\n",date);
return 0;
}
上面程序结构与程序2_1相似,在给变脸达特赋值时,赋的是0x23,以0x开的数据表示十六进制,对程序进行编译和运行,结果如下:
date的十进制数据为:35
Press any key to continue
从结果中可以看出,程序计算正确,结果为162+13=35。
- 整型变量的分类
- 基本类型:int
- 短整型:short int(简写为short)
- 长整型:long int(简写为long)
- 无符号型:unsigned shor,unsigned int,unsigned long
上述的四种类型都是表示整型数据的,由于基本型、短整型和长整型所占用的内存大小不一样,因此各自能表示的数值范围也不一样的,可以参考上面图片中的数据。其中无符号型只能表示零和正整数,由于不需要符号位,因此所能表示的数值范围 比其对应的类型更大一些。
在程序中可以通过运算符sizeof(sizeof是一个运算符,而不是一个函数)获得各个类型在内存中所占用的字节数,与变量中所存储的数据没有关系,程序2_3如下:
#include <stdio.h>
int main()
{
short a = 1;
int b = 2;
long c = 3;
printf("short型所占用的字节数:%d\n",sizeof(a));
printf("int型所占用的字节数:%d\n",sizeof(b));
printf("long型所占用的字节数:%d\n",sizeof(c));
return 0;
}
依次定义short、int、long三种类型的变量,然后使用sizeof获得各自所占用的字节大小,运行的结果如下:
short型所占用的字节数:2
int型所占用的字节数:4
long型所占用的字节数:4
Press any key to continue
从运行结果中,可以看出与之前描述的符合。
- 整型变量的定义
在上面的几个程序中,已经定义了很多变量,在变量定的过程中需要注意的是:1)变量的名称需要符合标识符的定义规则,否则程序会报错。2)变量在定义的时候可以为其赋初值,也可以不为其赋初值。
同时还有一些特殊的写法:
- 在一个常数后面加一个字母U或者u,表示该常数用无符号整型方式存储,相当于unsigned int。
- 在一个常数后面加一个字母L或者l,表示该常数用长整型方式存储,相当于long。
- 在一个常数后面加一个字母F或者f,表示该常数用浮点方式存储,相当于float。
一些例子:
long int test = 78L;
unsigned int test2 = 345U;
三. 浮点型数据
- 浮点型常量的表现形式
- 十进制:1.23,4.5689等等
- 指数形式:23E5,123E2等,其中23E5即为23*10的5次方。
- 浮点型变量的分类
在C语言中,浮点型变量分为单精度和双精度两种:
- float:单精度变量
- double:双精度变量
- 浮点型变量的定义
看如下程序2_4:
#include <stdio.h>
int main()
{
float a = 1.2f,b = 2.5f;
double c = 3.8,d = 4.7;
printf("a=%f\nb=%f\nc=%lf\nd=%lf\n",a,b,c,d);
return 0;
}
分别定义了float类型的a和b,和double类型的c和d,由于常量1.2和2.5个3.8和4.7默认为double类型,所以在给变量a和b赋值的时候需要指明常量的存储类型,否则会出现warning(警告)。运行结果如下:
a=1.200000
b=2.500000
c=3.800000
d=4.700000
Press any key to continue
注意:在对float类型变量和double类型变量输出的时候,需要使用%f和%lf。
问题:float和double的区别是什么呢??
答:首先在在内存存储所占用的字节数是不一样的,float一般占用4个字节,double一般占用8个字节,这就意味着double类型的变量能够表示更大范围的数据,同时还具有更高的精度。
float能表示的范围为(1.17549E-038)~(3.40282E+038),精度在6位左右。
double能表示的范围为(2.22507E-308)~(1.79769E+308)精度在15左右。
三. 字符型数据
- 字符常量
在C语言中字符常量使用单引号包含起来的一个字符,如’a’,'d’等等。 - 转义字符
转义字符又称为特殊字符,是以"“开头的字符序列,比如之前在printf中使用的”\n",就是一个特殊字符,目的是换行,部分的转义字符如下图所示:
下面以程序2_5为例,看一下转义字符的使用:
#include <stdio.h>
int main()
{
printf("abc\ndefg\\hij\"lmn\n");
return 0;
}
运行结果如下:
abc
defg\hij"lmn
Press any key to continue
从运行结果中可以看出,\n被识别成了换行,\被识别成了\,“被识别成了”。
- 字符变量
字符变量是用来存储字符常量的,但需要注意,只能存储一个字符,而不能存储一个字符串,因此一个字符变量在内存中只占用一个字节,字符变量输出的时候使用%c,程序2_6如下:
#include <stdio.h>
int main()
{
char a,b,c;
a = 'A';
b = 'B';
c = '\"';
printf("a=%c\nb=%c\nc=%c\n",a,b,c);
return 0;
}
运行结果如下:
a=A
b=B
c="
Press any key to continue
从结果中可以看出,程序成功的将对应的字符存储到了相应的字符变量中,
现在需要思考一个问题:字符变量是如何存储在计算机的内存中的呢?
此时就需要了解一下ASCⅡ码,常用的ASCⅡ表如下图所示:
每一个字符都对应一个ASCⅡ值,在计算机内存中就是存储字符变量的ASCⅡ值,来看一下程序2_7:
#include <stdio.h>
int main()
{
char a,b,c;
a = 'a';
b = 66;
c = 99;
printf("字符a变量存储的ASCII值为:%d\nb=%c\nc=%c\n",a,b,c);
return 0;
}
运行结果如下:
字符a变量存储的ASCII值为:97
b=B
c=c
Press any key to continue
从运行结果可以看出,字符’a’在内存中存储的值为97,通过查阅ASCⅡ表可知,'a’对应的ASCⅡ值就是97,同样也可以给字符变量赋值一个数字,然后以字符的形式输出,就会输出对应的字符变量。
- 字符串变量
之前说过字符变量是以单引号包含的,而字符串变量是以双引号包含的,比如下面两条语句:
char c;
c = 'a'; //正确的
c = "a"; //错误,不能将字符串常量赋值给字符变量
现在来思考一下,为什么不能将字符串常量赋值给字符变量呢???
首先需要明确一个事情,那就是字符变量在内存中只占用一个字节的内存,
‘a’:这个字符常量里面只存储了一个字符’a’
“a”:然而这个字符串常量中,存储了一个字符’a’,和一个字符’\0’
如下图所示:
即:每一个字符串常量都是以’\0’结尾的,同时’\0’这个字符是输出语句的结束字符,看一下下面的程序2_8:
#include <stdio.h>
int main()
{
printf("abcdef\0AAAABBB\n");
return 0;
}
运行结果为:
abcdefPress any key to continue
从运行结果可以看出,程序只输出了abcdef,然后遇到了字符’\0’,程序认为此串字符输出结束了。
至此C语言的基本数据类型都已经介绍完啦,下一个文章将介绍C语言的运算符。
技术交流、程序代码免费获取方式:微信扫描下方二维码