购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2
主要内容提要

1.C语言程序中的变量类型

C语言程序中的变量有无符号整型、带符号整型和浮点型三类。无符号整型有unsigned char、unsigned short、unsigned int(unsigned)、unsigned long、unsigned long long等,带符号整型有signed char、short、int、long、long long等,浮点型有float、double、long double三种。每种数据类型都有一定的表数范围,不同类型变量之间的赋值和运算需要进行类型转换,可能导致数值变化。

2.C语言程序中的常量及其类型

C语言程序中有字面量、#define定义的常量符号和const定义的常量名这3种常量表示形式。字面量形式的常量类型有相应的规定,程序员和编译器都需要根据语言规范的规定来理解和处理。

3.C语言表达式中的运算符

C语言表达式中出现的运算符可以是算术运算符、按位运算符、逻辑运算符、关系运算符、自增/自减运算符、取地址/取内容运算符以及各种括号等。在同一个表达式中的运算符需要考虑优先级及结合顺序。

4.C语言程序中的基本运算

加、减、乘、除等算术运算是高级语言中必须提供的基本运算,包括无符号整数的算术运算、带符号整数的算术运算和浮点数的算术运算。C语言中除了这些算术运算以外,还有按位运算、逻辑运算、移位运算、扩展运算等。

· 按位运算:按位与、按位或、按位取反等运算。

· 逻辑运算:一个变量和常量在整体上作为逻辑值进行逻辑运算:全0为“假”,非0为“真”。

· 移位运算:包括逻辑移位运算、算术移位运算和循环移位运算。逻辑移位运算对无符号数进行移位,移位时,在空出的位补0,左移时可根据移出位是否为1来判断是否溢出;算术移位运算对带符号整数进行移位,移位前后符号位保持不变,否则溢出;循环移位时不需要考虑溢出。左移一位,数值扩大一倍,相当于乘2操作;右移一位,数值缩小一半,相当于除2操作。

· 扩展运算:包括零扩展运算和符号扩展运算。零扩展运算对无符号数进行扩展,高位补0;符号扩展运算对带符号整数进行扩展,因为用补码表示,所以在高位直接补符号。

5.C语言中的控制结构

在C语言程序中,每个操作用一条语句表示,每条语句以分号结尾,如赋值语句、return语句、复合语句、表示函数之间调用关系的函数调用语句,以及表示程序流程控制的条件选择语句、循环执行语句。控制结构主要有顺序执行、选择执行和循环执行三种基本模式。在顺序执行结构中,一个语句完成后总是按顺序执行下一个语句,用{}将若干语句组合而成的复合语句就是一种顺序执行结构;在选择执行结构中,执行哪条语句由条件决定,可以从一个条件是否满足的两种可能性中选择一个语句执行,也可以通过多个条件判断从多个可能性中选择一个语句执行;在循环执行结构中,只要满足条件就不断执行循环体中的语句,每次循环体中语句的执行都可能改变条件,当条件不满足时跳出循环。

6.C语言中的函数调用

C语言程序本质上由若干函数组成,其中每条语句属于且仅属于一个函数。所有的C语言程序都从main()函数开始,在main()函数中可以调用其他函数,这些被main()调用的函数又可以调用另外的函数。

一个C程序可以由多个C源程序文件组成,一个函数通过函数调用语句引用其他函数,每个函数定义中可能有多个函数调用语句,如果被调用函数在引用之前没有定义,则必须在之前给出函数原型声明。每个函数定义由函数头部和函数体两部分组成。头部信息包括返回值类型、函数名,以及由圆括号中给出的形式参数(简称形参)列表,形式参数列表中的每个参数之间用逗号分隔。

在一个函数中如果出现函数调用语句,则意味着程序的执行流程将从当前的函数调用语句跳转到被调用函数处执行,在被调用函数执行结束时,程序回到调用函数处继续执行。在从调用函数跳转到被调用函数执行时,必须将相应的入口参数(也称为实际参数,简称实参)传递给被调用函数的形式参数,而在被调用函数返回时,必须将返回值传递给调用过程。C语言要求传递的实际参数类型必须符合函数定义中对应的形式参数类型或能转换为形参类型。

7.变量的作用域及其存储分配

编译器在处理高级语言源程序时,必须根据变量的定义和变量声明来确定每个变量适合分配在哪类存储器中,并根据变量的作用域和生存期确定其应分配在动态存储区还是静态存储区。程序中的变量实际上是一个存储位置,在对应存储位置上存放的数据发生了变化,就意味着变量值的改变。

C程序中的变量一定是先定义后引用的,每个变量都有其对应的作用域和生存期,例如,在一个复合语句中定义的变量只能在该复合语句内部引用,且变量的定义必须在其中包含的所有语句之前。

程序中变量的引用有读和写两种方式。若变量在表达式中,则在表达式计算时需要读取变量的值,即进行读操作;若变量在赋值语句等号的左边,则需要将新值写入变量所在存储区,即进行写操作。

C语言中有全局变量(外部变量)、静态全局变量、非静态局部变量(自动变量)和静态局部变量。

· 全局变量分配在静态存储区,程序中所有函数都可以对其进行读写,其作用域和生存期与函数的作用域和生存期一样,可在整个程序执行过程中在任何地方被引用。

· 静态全局变量分配在静态存储区,只有所在文件中的函数才可以对其进行读写,其他文件中的函数不能对其进行读写。

· 非静态局部变量是指在函数体内部定义的变量。函数体是由{}括起来的复合语句,局部变量的作用域仅是其定义所在的最小复合语句,在此复合语句之外,变量不能被引用。也可以把函数的形参看成局部变量,其作用域为函数体内部。

· 静态局部变量的作用域与自动变量一样,局限在定义所在的函数体内部,其他函数无法引用。与自动变量不同的是,静态局部变量的生存期是整个程序执行过程,再次进入对应函数执行时,可以像读写全局变量存储空间一样对其进行操作。因此静态局部变量与静态全局变量一样,具有局部作用域、全程生存期、一次初始化的特点,也应分配在静态存储区。静态局部变量和静态全局变量统称为静态变量。

8.C标准I/O库函数

通常,程序需要与外界环境交互,因此需要有输入/输出(I/O)功能。C语言程序可通过调用特定的I/O函数的方式实现I/O。使用的I/O函数可以是C标准I/O库函数或者系统提供的系统级I/O函数。前者包括文件I/O函数fopen()、fread()、fwrite()和fclose()或控制台I/O函数printf()、scanf()等;后者包括UNIX/Linux系统中的open()、read()、write()和close()等函数,或者Windows系统中的CreateFile()、ReadFile()、WriteFile()、CloseHandle()、ReadConsole()、WriteConsole()等API函数。 ysKwOUjbsdRLhBLWFN5goZVce3DQyfNUYdcDHVqhVRHw1Ycisoi7ArnG3y5TPKGs

点击中间区域
呼出菜单
上一章
目录
下一章
×