C语言中的概念及类别比较

目录

位-字节-字

声明与定义

常量

整型常量

浮点型常量(实型常量)

字符型常量

字符串常量

变量

参数

进制

标识符

关键字

数据类型

5          _Bool类型:

6          可移植类型:

7          复数和虚数类型

8         有符号类型和无符号类型

打印类型大小

精度

变量的存储类型

程序区

静态存储区

动态存储区

使用auto关键字声明变量 

使用Static关键字声明变量

使用register关键字声明寄存器变量

使用extern 关键字声明外部变量

寄存器与储存器

寄存器(register)

储存器

RAM

ROM

字符

字符

字符集

字符串

字符常量

转义序列

C 运算符

运算符优先级

     算术运算符

关系运算符

逻辑运算符

位运算符

赋值运算符

杂项运算符 

%类型

&

e/E

==

表达式

赋值运算表达式

关系表达式

逻辑表达式

语句

表达语句

函数调用语句

控制语句

复合语句

空语句

控制结构

顺序结构

分支结构

循环结构

缓冲区

混合运算

数组

C预处理器

EOF


位-字节-字

都是描述计算机数据单元或储存单元的术语

最小的储存单位是位(bit),1字节(byte)等于8位,字(word)是64位[word取决于计算机,word从最开始的8位增至目前的64位]注:小数点也占一位。

声明与定义

变量定义:用于为变量分配储存空间,还可以为变量指定初始值.程序中,变量有且仅有一个定义.

变量声明:用于向程序表达变量的类型和名字.

定义也是声明,但extern声明不是定义(通过使用extern关键字声明变量而不是定义它.

[注意]

1.变量在使用前就要被定义或声明.

2.在一个程序中,变量只能定义一次,却可以声明多次.

3.定义分配储存空间,而声名不会

常量

常量就像是常规的变量,只不过常量的值在定义后不能进行修改。常量可以直接在代码中使用,也可以通过定义常量来使用。

常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。

整型常量

(1).八进制整型常量必须以0开头,十六进制的整型常量必须为0X或0x。

(2)十进制无符号整型常量的范围为 0~65535,有符号数为-32768~+32767。八进制无符号数的表示范围为0~0177777;十六进制无符号数的 表示范围为0X0~OXFFFF 或0X0~OxFFPF。如果使用的数超过了上述范围,就必须用长整型数来表示。长整型数是用后缀L或1来表示的。例如:

十进制长整型常量:

327L、856000L、63653L

八进制长整型常量:

036L、057L、0277777L

十六进制长整型常量:

OX1AL、OXBCSL、OX1FFFFL

说明

长整型常量327L和基本整型常量327在数值上并无区别,但对327L,因为是长整型常量,C编译系统将为它分配4个字节存储空间;而对327,因为是基本整型,只分配2个字节的存储空间。

(3).无符号数也可用后缀表示,整型常量的无符号数的后缀为U或u。例如:

212u        0X25ABu        056u212u、

前缀、后缀可同时使用以表示各种类型的数。例如,0523Lu 表示八进制无符号长整数 523,其十进制为339。

(4)整型数据在内存中是以二进制的形式存放,数值是以补码表示的。一个正数的补码和其原码的形式相同;一个负数的补码是将该数绝对值的二进制形式,按位取反再加1。

浮点型常量(实型常量)

浮点型常量的基本形式是:有符号的数字(包括小数点)

正号可以省略。可以没有小数点(如,2E5)或指数部分(如,19.28),但是不能同时省略两者。

可以省略小数部分(如,3.E16)或整数部分(如,.45E-6),但是不能同时省略两者。

注:e前面必须有数字,e后面的指数必须为整数。

字符型常量

字符型常量是用单引号括起来的一个字符。例如'a'

在C语言中,字符型常量具有以下特点:

1.宇符型常量只能用单引号括起来,不能用双引号或其他括号。

2.字符型常量只能是单个字符,不能是字符串。

3.字符可以是字符集中的任意字符,但数字被定义为字符型之后则不能参与数值运算。

字符串常量

1.字符串常量的概念和字符串长度

字符串常量是用一对双引号括起来的若干字符序列。

字符串中字符的个数称为字符串长度。长度为0 的字符串(即一个字符都没有的字符串)称为空串。例如,"welcome to our school"、“hello girl"等都是字符串常量,其长度分别为21和10(空格也是一个字符)。

2.字符串的存储    C语言规定:在存储字符串常量时,由系统在字 符串的末尾自动加一个”\0"作为字符串的结束标志.("\0"也要储存,而ASCII码不用储存这个结束标志"\0").

变量

1.什么是变量:通俗地说:变量是用于存放数据的容器,我们通过变量名获取数据,甚至数据可以修改.

2.本质:变量是程序在内存中申请的一块用来存放数据的空间.

参数

参数:传递给函数的信息,分为形参(例如:x)和实参(例如:2)

例如:printf("Hello, pal.")函数调用有一个参数:"Hello,pal."。

一个字符串就是一个参数

printf("%d cats ate %d cans of tuna\n",cats,cans);中cats and cans也都是参数。

scanf("%d",&weight)函数调用有两个参数:"%d"和&weight。

进制

1、八进制数是一种逢八一的计数体制,基数是8,用0~7表示,如077

 2、八进制数以数字0开头。

3、十六进制数是一种逢十六进一的计数体制,基数是16,用0~9,A~F表示,如0xFF或0XFF

以十进制显示数字,使用%d;

以八进制显示数字,使用%o;

以十六进制显示数字,使用%x;

但是,要把各进制的前缀显现出来就要加点前缀

八进制:%#o;

十六进制:%#x,%#X;

标识符

指常量,变量,语句标号以及用户自定义函数的名称。

一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。(不能是关键字)

C 标识符内不允许出现标点字符,比如 @、$ 和 %。C 是区分大小写的编程语言

关键字

下表列出了 C 中的保留字。这些保留字不能作为常量名、变量名或其他标识符名称。

关键字说明
auto声明自动变量
break跳出当前循环
case开关语句分支
char声明字符型变量或函数返回值类型
const定义常量,如果一个变量被 const 修饰,那么它的值就不能再被改变
continue结束当前循环,开始下一轮循环
default开关语句中的"其它"分支
do循环语句的循环体
double声明双精度浮点型变量或函数返回值类型
else条件语句否定分支(与 if 连用)
enum声明枚举类型
extern声明变量或函数是在其它文件或本文件的其他位置定义
float声明浮点型变量或函数返回值类型
for一种循环语句
goto无条件跳转语句
if条件语句
int声明整型变量或函数
long声明长整型变量或函数返回值类型
register声明寄存器变量
return子程序返回语句(可以带参数,也可不带参数)
short声明短整型变量或函数
signed声明有符号类型变量或函数
sizeof计算数据类型或变量长度(即所占字节数)
static声明静态变量
struct声明结构体类型
switch用于开关语句
typedef用以给数据类型取别名
unsigned声明无符号类型变量或函数
union声明共用体类型
void声明函数无返回值或无参数,声明无类型指针
volatile说明变量在程序执行中可被隐含地改变
while循环语句的循环条件

数据类型

在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。

基本数据类型由11个关键字组成:int,long,short,unsigned,char,float,double,signed,_Bool,_Complex,_Imaginary。

C 中的类型可分为以下几种:

序号类型与描述
1

基本数据类型
它们是算术类型,包括整型(int)、字符型(char)、浮点型(float)和双精度浮点型(double)。

格据定义,int类型不小于16位,short类型至少占16位,long类型至少占32位,Long long类型至少占64位,char类型表示一个字符要占一字节内存。

2枚举类型
它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。
3void 类型:
类型说明符 void 表示没有值的数据类型,通常用于函数返回值。

4

派生类型:
:包括数组类型、指针类型和结构体类型。

5          _Bool类型

用于表示布尔值,即逻辑值ture和false。1代表ture,0代表false。(实际上也是一种整数类型)

6          可移植类型

                stdint.h and inttypes.h

7          复数和虚数类型

C语言有三种复数类型:float_Complex,double_Complex,    long double_Complex

例如,float_Complex类型的变量应包括两个float类型的值,分别表示复数的实部和虚部。

类似地,C语言的三种虚数类型是:float_Imaginary,double_Imaginary,long double_Imaginary.

如果包含complex.h头文件,便可用complex代替_Complex,用imaginary代替_Imaginary,还可以用

I(i的大写)代替-1的平方根。

8         有符号类型和无符号类型

在整数类型前加上关键字signed(符号类型)或unsigned(无符号类型)

有符号类整数型:可以用于表示正整数和负整数。

无符号整型:只能用来表示零和正整数。在整型类型前加上关键字unsigned表明该类型是无符号整型:unsignedint , unsigned long等。单独的unsigned相当于unsignedint。

打印类型大小

8b021ec65a3d48cb9d94813dcd6373d5.png

精度

float最多能表示小于8388607的小数点后7位,但绝对能保证的为6位,也即float的十进制的精度为为6~7位。

double数据类型绝对值最小可以取到2^-1024,精度则为2^52-1=4503599627370495,为16位。所以精度最高位16位,一定可以保证15位。

未规定long double的确切精度。(不少于double的精度,但不会大多少)

变量的存储类型

变量的存储类型决定变量什么时候被分配到指 定的内存空间中,以及在什么时候释放存储空间。变量的存储类型分为两种,即动态存储和静态存储。

用户的存储空间可以分为3个部分,即程序区、静态存储区和动态存储.要理解动态存储和静态存储方式,首先要了解 一下内存中用户存储空间的基本情况。

程序区

用来存放用户要执行的程序段,数据分别放在静态存储区和动态存储区中。

静态存储区

静态存储的变量位于内存的静态存储区,全局变量都保存在静态存储区中。因此,全局变量从程序执行时开始分配存储单元,直到程序终止时,才释放其所占的存储单元。

动态存储区

在动态存储区中存储与堆栈操作相关的数据, 住栈中的数据随着进栈出栈操作而变化,当变量被弹出堆栈以后,其生存周期也就结束了。在调用函数时其局部变量也被保存到动态存储区中,当函数结束执行,返回到主调函数时,变量所占用的空间将被释放,此时局部变量也将消失。由此可见,如果一个函数被调用了两次,其中变量的存储空间可能为不同的地址。

使用auto关键字声明变量 

自动变量的类型声明符为auto。auto 存储类是所有局部变量默认的存储类。

自动变量属于局部变量,其作用域仅限于定义这个变量的函数或者是符合语向内。自动变量价结方式属于动态存储方式。定义在函数中的变量默认为 auto 存储类,这意味着它们在函数开始时被创建,在函数结束时被销毁。

使用Static关键字声明变量

在编写程序时,有时需要在调用函数中的某个局部变量以后,该变量的值不消失,并且保持原值不变,也就是该变量所占用的存储空间不被释放,在下次调用该函数时,变量中的值仍是上次调用说函数结束时变量的值。这时使用的变量类型是静态变量,使用static 关键字进行声明。静态变量属于静态存储方式。

定义变量时,使用static 关键字就可以将其定义为静态变量。格式如下:

static            类型声明符          变量1,变量2,···

用static 关键字声明外部变量,会得到静态全局变量。当用 static 关键字定义内部变量时,会得到静态局部变量。

5f57feaae5214e30b38adf9fd88206aa.jpeg

319cd740e9af4c54926e484c7c9879dc.jpeg

使用register关键字声明寄存器变量

定义寄存器类型变量的格式如下:

register 类型声明符变量1,变量2,

对于循环次数较多的循环控制变量以及循环体内反复使用的变量,可以将其定义为寄存器变量,这样编译器就可以将变量存储到寄存器当中,提高运算效率。

注意:

(1)寄存器类型变量属于动态存储方式。只有局部变量,才能被定义为寄存器变量。静态存储类型的变量不能被定义为寄存器变量。

(2)将变量定义为寄存器类型以后,就不能对该变量使用取地址(&)的操作了,因为寄存器是没有内存地址的。

(3)计算机中寄存器的数目是有限的,不能将所有的变量都定义为寄存器变量。不同的系统对寄存器变量的处理方法也是不同的,有些 系统将寄存器变量当作自动变量进行处理,为其分配内存单元。

在实际的应用中,register类型变量应用得不多,在某些编译系统中会自动地将使用频繁的变量放入到寄存器中,无须编程人员指定。

使用extern 关键字声明外部变量

外部变量(也称全局变量)是在函数的外部定义的变量,其作用域是从变量的定义处开始,到程序文件的结尾处结束。外部变量可以被其作用域中的所有函数调用.在编译时,编译器将其存储在静态存储器区中。

说明:如果变量不是定义在程序文件开始处,那么其作用域就是从定义他的位子开始,到程序文件的结束为止。如果想被变量定义以前的函数调用,则需要在变量声明前添加extern关键词,这样声明的变量就可以被其他的外部函数所调用。

f8d852aaa9364237b8a7eda955801e9c.jpeg4ed6b26e8ac54a1690d83b58dc8ddbb2.jpeg

寄存器与储存器

寄存器(register)

容量最小,速度最快,但数据在断电后会丢失。

在计算机中,寄存器就像是计算机的“手”,用于暂存中间结果,让程序更快地运行

储存器

存储器容量比寄存器大,读写速度慢,但数据可以持久保存。

RAM

RAM可以读写数据,但数据在断电后会丢失;

ROM

ROM只能读取数据,数据可以长期保存。

其实RAM和ROM都是属于存储器,RAM代表随机存储器,ROM代表只读存储器

ROM表示的是只读存储器,即:它只能读出信息,不能写入信息,计算机关闭电源后其内的信息仍旧保存,一般用它存储固定的系统软件和字库等。RAM表示的是读写存储器,可其中的任一存储单元进行读或写操作,计算机关闭电源后其内的信息将不在保存,再次开机需要重新装入,通常用来存放操作系统,各种正在运行的软件、输入和输出数据、中间结果及与外存交换信息等,我们常说的内存主要是指RAM

它们的特性不同,在计算机系统中分别扮演不同的角色。

寄存器通常用于存储CPU内部的临时数据和控制指令。

存储器被用来存储计算机程序和数据,包括操作系统、应用软件和用户数据等。

RAM用于存储需要频繁读写的数据,例如程序运行中的变量和缓存等。

而ROM则被用来存储固化的程序和数据,例如BIOS、固件、启动程序等

C储存类

字符

字符

日常使用的数字、字母、文字、标点符号,图形符号等都称作字符

字符集

由很多个字符组成的集合叫做 字符集 。 可以人为的根据某个规则将一些符号归纳为一组集合,这些文字符号的集合就称为一个字符集。一个汉字或中文标点符号通常被计算为两个字符,因为它的存储空间占用2个字节。

字符串

(英语:string),是由零个或多个字符组成的有限序列。

字符常量

用单引号括起来的单个字符被称为字符常量

Char grade=’A’;

编译器一发现’A’就将其转换成相应的代码值(代码值是指ASCII码表中各个字符对应的数值)

如果省掉单引号,编译器认为A是一个变量名;

如果把A用双引号括起来,编译器则认为”A”是一个字符串.

转义序列

在 C 中,有一些特定的字符,当它们前面有反斜杠时,它们就具有特殊的含义,被用来表示如换行符(\n)或制表符(\t)等。

把转义序列赋给字符变量时,必须用单引号把转义序列括起来.例如: char nerf='\n';

稍后打印变量nerf的效果是相当于\n;

下表列出了一些这样的转义序列码:

转义序列含义
\\\ 字符
\'' 字符
\"" 字符
\?? 字符
\a警报铃声
\b退格键
\f换页符
\n换行符
\r回车
\t水平制表符
\v垂直制表符
\ooo一到三位的八进制数
\xhh . . .一个或多个数字的十六进制数

C 运算符

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 语言内置了丰富的运算符,并提供了以下类型的运算符:

运算符优先级

    注:  x *= y // x = x * y

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

--

()

圆括号

(表达式)/函数名(形参表)

--

.

成员选择(对象)

对象.成员名

--

->

成员选择(指针)

对象指针->成员名

--

2

-

负号运算符

-表达式

右到左

单目运算符

~

按位取反运算符

~表达式

++

自增运算符

++变量名/变量名++

--

自减运算符

--变量名/变量名--

*

取值运算符

*指针变量

&

取地址运算符

&变量名

!

逻辑非运算符

!表达式

(类型)

强制类型转换

(数据类型)表达式

--

sizeof

长度运算符

sizeof(表达式)

--

3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

%

余数(取模)

整型表达式%整型表达式

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

5

<< 

左移

变量<<表达式

左到右

双目运算符

>> 

右移

变量>>表达式

6

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

小于

表达式<表达式

<=

小于等于

表达式<=表达式

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

13

?:

条件运算符

表达式1?

表达式2: 表达式3

右到左

三目运算符

14

=

赋值运算符

变量=表达式

右到左

--

/=

除后赋值

变量/=表达式

--

*=

乘后赋值

变量*=表达式

--

%=

取模后赋值

变量%=表达式

--

+=

加后赋值

变量+=表达式

--

-=

减后赋值

变量-=表达式

--

<<=

左移后赋值

变量<<=表达式

--

>>=

右移后赋值

变量>>=表达式

--

&=

按位与后赋值

变量&=表达式

--

^=

按位异或后赋值

变量^=表达式

--

|=

按位或后赋值

变量|=表达式

--

15

逗号运算符

表达式,表达式,…

左到右

--

说明:

    同一优先级的运算符,运算次序由结合方向所决定。
    简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

     算术运算符

  • 下表显示了 C 语言支持的所有算术运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:

    运算符描述实例
    %取模运算符,整除后的余数B % A 将得到 0
    ++自增运算符,整数值增加 1A++ 将得到 11
    --自减运算符,整数值减少 1A-- 将得到 9
  • 如果i++或者++i单独为一条指令,则效果并没有什么区别,都是令i = i + 1;但是如果和其它的运算符结合,则二者还是有区别的。具体来说,i++ 是先使用 i,然后执行 i = i + 1;而 ++i 则是先执行  i = i + 1,然后再使用 i 。举个例子看下:

    int i = 0;
    printf("i++ is: %d\n", i++); // 先使用i,即打印 i++ is: 0;然后i = i + 1,即i的值变成1
    printf("i is: %d\n", i);     // 打印 i is: 1
    printf("++i is: %d\n", ++i); // 先对i自增,即i = i + 1,令 i 的值变成2;然后打印,即 ++i is: 2
    printf("i is: %d\n", i); // 打印 i is: 2

  • 5e6e7438a674458383c4ca9edb35560d.png

关系运算符

关系运算符

关系运算符包括大于、大于等于、小于、小于等于、等于和不等于

0f175b07d8904937affd6fe38224949f.png

注意:符号“>=”(大于等于)与“<=”(小于等于)的意思分别是大于或等于、小于或等于。

优先级: >,<,>=,<= 的优先级高于 == !=

逻辑运算符

逻辑运算符
                   操作符                    含义
                        &&                     与
                        ||                     或
                         !                      非

优先级:逻辑非 ! 的优先级最高,逻辑与 && 次之,逻辑或  ||  优先级最低。

1,逻辑与 “&&” ,读作: “and” \n通俗解释:两个条件必须满足.\n比如:丈母娘说你想娶我女儿,必须有房且有车: —–有房 && 有车;

2,逻辑或 “||” ,读作: “or”\n通俗解释:两个条件满足其一就可以.\n比如:丈母娘说你想娶我女儿,要么得有房要么得有车: —–有房 || 有车;

3,逻辑非 “!”, 读作:”not”\n通俗解释:反着问.\n比如:\n你是不是不抽烟? —- !抽烟\n你是不是不喝酒? —- !喝酒

位运算符

55a05460bc024ceab7a398645b6465be.png0689297ce4ab4f9595fea897741f72c1.png61acbc2daa9648a1b783cc12fc15f85f.pngcefe70cd072f4c3f9d52cefc1b81ece9.png

6cb3b2986c5047aea5fad6ecd33c8ac9.png

赋值运算符

”=“

杂项运算符 

%类型

%d整型输出(%ld长整型输出)

[格式化字符中每个%d都与待打印标量列表中相应的int值匹配.这个值可以是int类型的变量,int类型的常量或其他任何值为int类型的表达式.(例如: int ten=10;int two=2;printf("%d minus %d  is %d",ten,2,ten-tow);)]

%f以小数形式输出,默认情况下保留小数点6位

[%.2f中的.2用于精确控制输出,指定输出的浮点数只显示小数点的后两位]

这里是引用
%f和%lf分别是float类型和double类型用于格式化输入输出时对应的格式符号。

常用形式:

%————取余数
%d —— int 类型
%ld —— long 类型
%lld —— longlong 类型
%f —— float 类型
%lf —— double 类型
其他形式:
%d ——整型常量,十进制形式
%o —— 整型常量,八进制形式
%x —— 整型常量,十六进制形式
%s —— 字符常量,字符串形式(“a”)
%c —— 字符常量,字符形式(‘a’)
%f —— 实型常量,保留6位小数
%e —— 实型常量,科学计数,13位,小数6位,e是5位

%p          指针的值(打印指针地址)

%zd        通常用于sizeof和strlen()返回的实际类型(通常是unsugned或unsigned long)。

%u以十进制数输出unsigned型数据(无符号数)。注意:(%d与%u有无符号的数值范围,也就是极限的值,不然数值打印出来会有误)

%%代表%[由于 printf() 函数使用%符号来标识转换说明,因此打印 % 符号就成了个问题。如果单独使用一个 % 符号,编译器会认为漏掉了一个转换字符。使用两个 % 符号就行了]

%m.nf,%m.n在字符串的输出中,m表示宽度,字符串共占的列数;n表示实际的字符数。%m.n在浮点数中,m也表示宽度;n表示小数的位数。

1、printf(\"%2.3f\\n\", 12.34);    输出为12.340。

&

C语言C++中,&表示对操作数取地址

e/E

3.16e7=3.16*10^7(表示3.16乘以10的7次方)

==

代数式中的运算符和表达式中的运算符是不同的。代数式中的等号是”=“,而表达式中的等号是”==“

”==“是在表达式中用来比较两个对象的运算符。如果两个对象相等,这关系表达式为真;如果不相等,则关系表达式的值为假。

i==5是逻辑关系等于,一般用于判断 i 的值是不是5,i=5是赋值,使i 的值等于5。

表达式

表达式(Expression):表达式是由变量、常量、运算符和函数调用等组成的一系列代码,用于计算并生成一个值。

赋值运算表达式

由赋值运算符”=”所组成的表达式称为赋值表达式

复合的赋值运算符

在“=“之前加上其他的运算符,可以构成复合的赋值运算符

例如,a+=3等价于a=a+3.    a*=b+c等价于a=a*(b+c)

关系表达式

用关系运算符将两个表达式连接起来的式子

一般格式为:表达式   关系运算符   表达式

a>b该表达式是一个关系表达式,当a的值大于b的 值时,该表达式的值为真;否则为假。表达式的值的类型为布尔型。

说明:布尔型(bool)数值只有两个值,即真和假。0为假,非0则为真

逻辑表达式

C语言编译系统在给出逻辑运算结果时,以1代表”真“,0代表”假“。但反过来,在判断一个量是为”真“还是假时,以0代表假,以非0的值为真。例如,由于5和3均为非0.因此5&&3的值为真,返回值为1。

小知识:使用逻辑表达式需要注意的几点

1)逻辑运算符两侧的操作数,除可以是0和非0的整数外,也可以是其他任何类型的数据,如实型、字符型等。

2)在计算逻辑表达式时,计算机会按照优先级逐个判断子表达式的真伪。当通过某分子式就能够判断整个逻辑的真伪时,后边的子式就不会被解析。(以下两点解释)

1.对于逻辑与运算,如果第一个操作数被判定为“假”系统将不再判定或求解第二个操作数。

2.对于逻辑或运算,如果第一个操作数被判定为“真系统将不再判定或求解第二个操作数。

语句

语句是用来向计算机系统发出指令的。C程序的执行部分是由语句组成的,所以一个程序应当包含了若干语句;程序的功能是有执行语句实现的。

C语句可分为五类:表达语句,函数调用语句,控制语句,复合语句和空语句。

表达语句

表达语句有表达式加上分号";"组成。其一般格式为:

表达式;

函数调用语句

即由函数名,实际参数加上分号组成。一般格式为:

函数名(实际参数);

执行函数语句就是调用函数体,并把实际参数赋予函数定义中的形式参数,然后执行被调函数体中的语句,求函数值。例如:

printf("hello world");

就是一个函数调用语句,printf函数是函数库中已有的函数,不需用用户自定义。

控制语句

C语言程序从执行方式看,可以分为顺序,选择和循环3种基本结构。一般都是这三种结构的复杂组合。C语言中规定了9种控制语句,用于实现选择结构与循环结构。它们可以分为以下三类:

1.条件判断语句:if语句,switch语句。

2.循环执行语句:do-while语句,while语句,for语句。

3.转向语句:break语句,goto语句,continue语句,return语句。

复合语句

把多个语句用花括号“{}”括起来组成的一条语句称为复合语句,在程序中应把复合语句看作是单条语句,而不是多条语句。例如:{                    t=a;

                                                                       a=b;}

空语句

只由分号“;”组成的语句叫空语句。

(什么也不执行的语句)

控制结构

分为三种:顺序结构、分支结构和循环结构。

顺序结构

顺序结构是最简单的程序结构,计算机从程序的第一条语句开始执行,一直到结束,中间没有分支跳转,也没有循环结构。

分支结构

单分支结构: 只有一个条件,符合就执行 双分支结构: 有两个条件,符合哪个就执行哪个语句块 。

循环结构

缓冲区

缓冲区是内存中的一段储存区域,用来临时存放一些数据。

当一个程序开始运行时,系统会自动给键盘和显示器分配缓冲区。键盘缓冲区是用来存放用户从键盘输入数据,当用户输入完数据并按Enter键时,这些数据才会被送入缓冲区。

注:用户输入的任何数据都是作为一个个字符存放在缓冲区的。例如(输入ABC并按下Enter键,则送入缓冲区的是'A','B','C','\n'4个字符,如果输入12,则是‘1’、‘2’、'\n'3个字符。)

混合运算

当各种不同的数据类型进行混合运算时,需要进行数据类型的转换。各种不同的数据类型需要先转换为同一种数据类型,然后再进行运算。将低等级的数据类型转换为高等级的数据类型,这种转换称为自动类型转换,是由编译器自动完成的。

例如,如果int 类型的变量与double 类型的变量进行运算,首先需要将int类型的变量转换为double类型,然后对两个double 类型变量进行运算。

自动类型转换遵循以下规则:

(1)如果参与运算的数据类型不相同,则首先将其转为相同的数据类型,然后再对两个相同教据类型的数据进行运算。

(2)在进行数据类型转换时,要向数据长度增的方长向进行转换,以保证转换以后数据的精度不降低。例如,float 类型和double 类型进行运算时,需要将float 类型转换为double类型再进行运算。

(3)char类型和 short 类型进行运算时,需要 将其先转换为int类型,然后再进行下一步操作

(4)字符必须先转换为整数(C语言规定字符类型数据和整型数据之间可以通用) 。

(5)short型转换为int型(同属于整型) 。

(6)float型数据在运算时一律转换为双精度(double)型,以提高运算精度(同属于实型) 。

具体规则如下图所示:watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rWB5qWa5Li25qC85b-1,size_20,color_FFFFFF,t_70,g_se,x_16

                                                                                                                                    

31af596a4f9d45d9a4e097c234c4edb6.jpeg

数组

可以把它看作是一行连续的多个储存单元。更正式的说法是同类型数据元素的有序序列。

C语言中的字符串一定以空字符(\0)结束这意味着数组的容量必须至少比待储存的字符串的字符数多一。例如:char name [40];

C预处理器

格式:#define    符号常量名        值

例如(#define TAXPATE  0.015)        注意[无等号=,无;]

在编译程序时,程序中所有的TAXPATE都会被替换为0.015,这一过程被称为”编译时替换”

这样定义的常量也称为明示常量。为什么TAXPATE要用大写?用大写表示符号常量是C语言一贯的传统。这样,在程序中看到全大写的名称就立刻明白这是个符号常量,而非变量。但全用小写来表示符号常量,程序也能运行。

#define指令还可以定义字符和字符串常量。

EOF

while(scanf("%d",&number)!=EOF)

这段代码的意思就是,当数据输入结束,自动退出循环,EOF就像是一个判断条件,判断scanf的返回值,对,没听错,scanf是有返回值的。

    while(1){//死循环,一直读入

    c=getchar();//单个字符的读入

    if(c==EOF)//如果已经到文件末尾

    break ;//跳出死循环(不在读入)

其实EOF在程序中的默认值是-1,所以将EOF替换成-1也是对的。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值