【C】C语言基础(包括:关键字、数据类型、输入输出)

C语言中的变与不变——变量与常量

标识符和关键字
标识符:用来标识程序中用到的变量名、函数名、类型名、数组名、文件名以及符号常量名的有效字符序列。

语法规则(部分):

标识符只能是由英文字母、数字和下划线组成的字符串,并且第一个字符必须为字母或下划线;
标准C语言不限制标识符的长度,但是受到各个版本的C语言编译系统的限制。大多数情况下,标识符的前8位有效,也就是说,如果两个标识符的前8位相同,系统将会认为是同一个标识符。
关键字:C语言规定的具有特殊意义的字符串,通常也称为保留字(37个)。通常分为:数据类型关键字、语句控制关键字、存储类型关键字、其他关键字。

下面列出了C语言的所有关键字:
在这里插入图片描述
常量和变量
在程序执行过程中,其值不发生改变的值称为常量,其值可变的称为变量。在程序中,变量通常是可以不经说明而直接引用的,而变量则必须先定义后使用。

常量可以分为:数值常量、字符常量、字符串常量和符号常量等。

数值常量:数值常量通常表示的是数字。

int a=1;

在这句程序中的1,在程序运行过程中是始终不变的,是常量。

字符常量:字符常量通常是指单引号里的单个字符。


int a=1;
int b='1';

在这个程序段中,1和’1’的含义是不一样的,一个是数值,可运算;一个是字符,仅仅是一个符号而已。

字符串常量:字符串常量通常是指双引号里的字符串。
这里需要注意一种特殊情况,比如“\n”、“\a”,像这种字符常量就是通常所说的转义字符。这种字符以反斜杠(\)开头,后面跟一个字符或者一个八进制或者十六进制数,表示的不是双引号里面的值,而是“转义”。

下面列出了C语言的所有转义字符:
在这里插入图片描述
符号常量:符号常量是使用一个标识符来表示一个常量。但是,符号常量在使用前必须要先定义,定义形式为:

#define 标识符 常量

其中,#define是一条预处理命令,称为宏定义命令。在编译之前,系统会自动把所有的标识符都替换成常量。

变量按其作用域分,可分为局部变量和全局变量,具体的解释为:

全局变量(外部变量):在所有源文件内均有效。在同源文件的函数中使用使用全局变量,需要将全局变量提前声明;同时在不包含全局变量定义的不同源文件需要用extern关键字再次声明。
静态全局变量:只在定义它的源文件内有效;
静态局部变量:只在定义它的函数内有效。只是程序仅分配一次内存,函数返回后,该变量不会消失,只有程序结束后才会释放内存;
局部变量(内部变量):在定义它的函数内有效,但是函数返回后失效。
关于C语言变量,还有几个注意点:

由于C语言规定函数的返回值只能有一个,当需要增加函数的返回数据的时候,使用外部变量是一种很好的方式。因此,外部变量是实现函数之间数据通信的有效手段。
变量的定义是给变量分配内存空间,在分配好内存空间后,程序没有运行前,会给变量分配一个不可知的混乱值,如果程序中没有对其进行赋值就使用的话,势必会引起不可预期的结果。所以,变量在使用前必须进行初始化。
关于C语言变量的详细讲解,可参考链接【编程语言】C语言函数中的变量(包括:作用域、存储类型)。

C语言中数据的种类——数据类型

所谓数据类型就是按被说明量的性质、表现形式、占据存储空间的大小、构造特点来划分的。在C语言中,数据类型可分成基本数据类型、构造数据类型、指针数据类型、空类型四大类。本文主要介绍基本数据类型。

数制
二进制:二进制是逢二进一的数制,目前的计算机全部是采用二进制系统;
八进制:八进制是逢八进一的数制,八进制数必须以0开头,即以0作为八进制的前缀。八进制数通常是无符号数;
十六进制:十六进制就是逢十六进一的数制,十六进制数必须以0x开头。
数制间的转换:标准输出函数printf()可以用于函数输出转换。
在这里插入图片描述
例如,将unsigned int类型的数12进行十进制、八进制、十六进制的输出:


unsigned int x=12;
printf("十进制%u 转换为八进制%o 转换为十六进制%x\n",x,x,x);

基本数据类型

short、int、long、char、float、double 这六个关键字代表C 语言里的六种基本数据类型。

在计算机内部的数据都是以2进制的形式存储的,每一个二进制数称为1位(bit),位是计算机中的最小的存储单元,一个8bit的二进制数称为一个字节(Byte),不同的数据类型有不同的字节要求来存储。但是,各种无符号类型量所占用的内存空间与相应的有符号类型量相同。正是由于省去了符号位,故无符号数不能表示负数,使得无符号数可以存放的正整数的范围比有符号数扩大了一倍。

在不同的系统上,这些类型占据的字节长度是不同的:

在这里插入图片描述
除了这些之外,还有一些特殊的数据类型:
在这里插入图片描述
通过上表,可以看出,对于32位和64位机器,只有long和指针类型的长度不一样,其它类型所占字节数都是一样的(long double除外,见备注)。

解释:在MSDN上关于这一点有描述,On 32-bit platforms, long is synonymous with int.

即:在32位机上,long与int同义。

不同的编译器会分配不同的空间,还跟计算机是多少位的有关,不过一般long是int的两倍长度。long的定义是其所占用的存储空间大小不小于int**。long 和int只是(可能会)存储空间大小不同,而读取两者中的数据时使用的方法规则是一样的**。而在32位机上,两者是相同的。

C语言中整型和浮点型

整形在内存中是以二进制的形式存放的。如果定义了一个整形变量i:

int i=10

在内存中变量i的实际存放是:00000000 00000000 00000000 00001010。

数值是按照补码的形式表示的:

正数的补码与源码相同;
负数的补码等于该数绝对值的二进制形式按位取反再加1。
浮点型在内存一般是按照指数形式存储的。如果定义了一个浮点数变量j:

float j=3.14159;

在内存中变量j的实际存放是:符号位,小数部分(.314159),指数部分(1)。

小数部分占位越多,数的有效数字越多,精度越高;
指数部分占位越多,数的取值范围越大。

C语言中字符型

字符变量在内存中如何存储:

**字符是系统中字符集中的一系列的符号,**在使用的时候,用编号进行读取,也就是说在字符变量里面放着这些符号的编号,这些编号就是ASCII码。ASCII码是一些整形的数据,这也造成了字符型变量可以在一定程度上可以和整形进行换算。因为数字1-9、字母a-z、字母A-Z的ASCII码都是连续的,而且是整形。

C语言中字符串型

字符串常量和字符常量的区别:

字符常量是单引号括起来的,字符串常量是双引号括起来的
字符常量只能是单个字符,字符串常量可以是单个或多个字符;
可以将一个字符常量赋值给一个字符变量,但是不能讲一个字符串常量赋值给一个字符串变量的。
因为C语言中是没有字符串变量这个说法的!但是,可以用一个字符数组来存放一个字符串常量。

字符常量占用1个字节的内存空间,字符串常量占用的内存字节数等于字符串中字节数加1。
因为增加的1个字节的空间是用来存放字符“\0”(ASCII码为0)。这是字符串结束的标志

数据类型的转换
隐式转换

在这里插入图片描述
隐式转换,又称为自动转换,应遵循以下规则:

若参与运算的类型不同,则先转换成同一类型,然后进行计算;
转换按数据长度增加的方向进行,以保证精度不降低;
所有的浮点数运算都是以双精度进行的,即使仅含有float单精度量运算的表达式,也要转换成double;
char和short参与运算时,必须先转换成int;
赋值运算时,赋值号左右两边的数据类型不同时,赋值号右边的类型将转换成左边的类型,即使丢失精度。

显式转换

如果隐式转换不符合要求,非常明确地希望转换数据类型,可以使用显示转换。其一般形式是:

(类型说明符) (表达式)

无论是隐式转换还是显示转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。

C语言中用户与计算机的交互——输入和输出

在这里插入图片描述
这些函数的具体描述和讲解如下:
格式化输入/输出
C语言提供了许多的常用函数(包括输入/输出函数、数学运算函数等),他们被存放在系统的函数库中。在C语言的标准库stdio.h文件中,提供了一些通用的函数(如printf()函数和scanf()函数等),这些函数被各种计算机系统所提供,因此也是标准输入/输出函数。

使用标准输入/输出库函数的时候需要用到stdio.h文件,因此源文件开头应有相应的预编译命令:

#include<stdio.h>
#include "stdio.h"

stdio是standard input&output的意思。

格式化是指按照一定的格式,格式化输入/输出是指按照一定的格式读取来自输入设备的数据或者向输出设备输出数据。符合格式化输入/输出的代表函数就是printf()函数和scanf()函数。

格式化输出函数——printf()函数
printf()函数调用的一般形式如下:

printf("格式控制字符串",输出表列);

其中,格式控制字符串用于指定输出格式,由格式字符串和非格式字符串组成。格式字符串是以%开头的字符串,在%后面根由各种格式的字符,已说明输出数据的类型、形式、长度、小数位数等。

格式控制字符的一般形式如下:

%[*] [标志][输出最小宽度][.精度][长度]类型

其中,方括号[]代表的是可选项。其中各项的描述介绍如下:

类型:类型字符用于表示输出数据的类型,其格式字符和描述如下

在这里插入图片描述
标志:标志参数表示输出数据的一些特征,而不影响数据的值,其标志字符和描述如下:
在这里插入图片描述
最小输出宽度:用十进制整数来表示输出的最小位数。若实际位数大于定义的宽度,则按照实际位数输出;若实际位数小于定义的宽度,则补以空格或0;
**精度:**精度格式符以“.”开头,后跟十进制整数。此项的意义是如果输出的是数字,则表示小数的位数;若输出的是字符,则表示输出字符的个数;
**长度:**长度格式符分为h、l两种,h表示按短整形量(short)输出,l表示按长整形量(long)输出;
*:*是用来专门代替最小输出宽度、精度的,此时需要在参数列表中多对这个符号进行赋值。
例如:


#include<stdio.h>
 
int main()
{
    
    
	float b = 123.1234567;
	int a = 88;
 
	printf("a=%d,%5d,%o,%x\n", a, a, a, a);
	printf("b=%f,%lf,%5.4lf,%e\n", b, b, b, b);
	printf("%c\n", a);
 
	return 0;
}





这段程序运行的结果是:

a=88, 88,130,58
b=123.123459,123.123459,123.1235,1.231235e+02
X
请按任意键继续. . .

猜你喜欢

转载自blog.csdn.net/weixin_43491077/article/details/109651268