第二章 C程序设计的初步知识
2.1 简单 C语言程序的构成和格式例 1,打印一句话 This is a c program
main( )
{
printf ("This is a c program\n");
}
2.1 简单 C语言程序的构成和格式例 2,求两数之和
main ( ) /* 主函数 */
{ int a,b,sum; /*这是定义变量 */
a=123; b=456; /*这是 赋值 */
sum=a+b; /*求和 */
printf(“sum is %d\n”,sum); /*输出 */
}
2.1 简单 C语言程序的构成和格式例 3,求最大数
main( ) /* 主函数 */
{ int a,b,c; /*定义变量 */
scanf("%d,%d",&a,&b); /*输入变量 a和 b的值 */
c=max(a,b); /*调用 max函数,将得到的值赋给 c*/
printf("max=%d",c;) /*输出 c的值 */
}
2.1 简单 C语言程序的构成和格式
C程序格式
1,C程序全部由一个一个的函数构成。至少有一个主函数 main
( ),其它函数可被主函数调用或相互调用。 其它函数可为 C 函数库中函数,也可为自己编的函数。
2.函数的执行一定从 main ( )开始。尽管 main ( )函数位置可自由。
3.书写自由,一个语句可多行,一行可多个语句。
4.每一条语句必须用一个分号结束;分号是 C语句的一部分而不是分隔符。
5.可用 /* */ 对 C语言加注释
6.关键字及编译预处理命令用小写字母书写。
2.2 常量、变量和标识符
2.2.1 标识符标识符是计算机语言中表示一定含义的字符组合,是符号常量、变量名、数组名、函数名、类型名、枚举元素名、
语句关键字的统称。如:上述程序中 main,printf。
标识符由字母、数字和下划线组成,并且第一个字符必须为字母或下划线。
标识符的长度一般取前 8个字符有效(不同的 C语言版本长度不同)。如 student_name和 student_number表示同一标识符。
C语言标识符中,大写字母和小写字母被认为是两个不同的字符。
习惯上,变量名、函数名等用小写字母表示;常量名用大写字母表示 (以增加可读性 )。
2.2.1 标识符
C语言的标识符分为三类:
一、关键字
C语言规定的标识符,在程序中代表着固定的含义(保留字)。如 int 。
所有关键字都要用小写英文字母表示。
二、预定义标识符
C语言提供的库函数名和预处理命令等。如 printf。
三、用户标识符用户自定义的标识符(变量名、函数名、数组名、文件名等)。
取名时尽量遵循“简洁明了”和“见名知意”的原则。
2.2.2 常量常量:在程序运行的过程中不能改变的量。
一般的数据显式写法均表示常量。
如:
58 整型常量
23.6 实型常量
‘ a’ 字符常量
,aaa” 字符串常量还可用一个符号表示一个常量 --符号常量
2.2.3 用定义一个符号的方法来代表一个常量可以用一个符号表示一个常量 --符号常量例:
#define PRICE 30
main ( )
{
int num,total;
num=10;
total=num*PRICE;
printf("total=%d",total);
}
符号常量用 #define 命令行来指定,上面程序中定义了一个符号常量 PRICE,代表 30。符号常量一般用大写,以区分变量,#define命令行最后不得加分号。
2.2.4 变量变量,程序执行中可以改变的量 。
每个都有一个名字,即变量名。
变量名应遵循标识符的约定。
变量名一般使用小写字符。
变量象常量一样有多种类型,因此变量名最好可以体现变量属于何种类型。
在变量类型中,没有字符串类型;因此没有字符串变量。
变量必须先定义后使用;通常在函数体的开始部分定义,在特殊情况下,也可以在函数体外或复合语句的开头定义。
变量实际上是指内存中一小块连续存储区域。定义变量 a,
就是指用 a命名某个存储区域,对变量 a的操作就是对该存储区域的操作。
2.3.1 整型常量
2.3 整型数据整型常量? 整型常数
C语言提供了三种 进制 形式
1,十进制如,256,308,- 120等
2,八进制以数字 0开头表示的整数例,0235,0146 - 012等,
0235=2× 82+ 3× 8+ 5= 15710
2.3.1 整型常量
2,八进制
0146= 1× 82+ 4× 8+ 6= 10210
- 012=- (1× 8+ 2)=- 1010
3,十六进制以 "0x"开头的整型数如,0x16,0x28
各数应写出打头字符表明进制。
不应有超出本进制的字符。
整型常量有短整型、基本整型、长整型和无符号型之分。
2.3.2 整型变量整型变量有短整型、基本整型、长整型和无符号型四种。
基本型:用,int”定义基本类型的长度为 16位,即两个字节,数值范围在
-32768~32767
如,12,-1235 是合法;
33333,0xabcd是非法。
2.3.3 整型数据的分类类型 定义符 位数 数值范围 I/O格式符基本 int 16位 -32768~ 32767 %d
短整 short 16 同上 %hd
长整 long 32 -231~ (231-1)%ld
无符号
unsigned [int] 16 0~ 65535 %u
unsigned short 16 同上 %hu
unsigned long 32 0~ (232-1) %lu
2.3.4 整数在内存中的存储形式
1.正整数原码形式存放
2,负整数补码形式存放
3,无符号数最高位也用于存放数值
2.4.1 实型常量实型常量又称实数,有两种表示形式
1,小数形式如,23.456,-12.3是合法。
12是非法。区分 12和 12.0。
2,指数形式如,13e4,1.2e-4是合法,
e4和 123e不合法。
2.4 实型数据
2.4.2 实型变量分为单精度型与双精度型,
分别为
float x,y,z; (单精度 )
double a,b,c; (双精度 )
一般地,单精度占 4字节内存单元 ;
双精度占 8字节内存单元,
单精度数值,10–38~1038
双精度数值,10–308~10308
2.4.2 实型变量注意,不同机器对实型变量的有效数字长度的限制如,pc机,单精度一般为 7位,双精度 15位于是,float a;
a=123456.789
则实际赋值 a?123456.7
2.5.1 基本的算术运算符
2.5 算术表达式运算符符号运算符目数 结合性 功能 例子
+ 二目 左结合 加 2+3,2.4+3+4
- 二目或一目 左结合 减、相反数
2-3,5.2-4-2,-2
* 二目 左结合 乘 2*3,3.2*5*6
/ 二目 左结合 除 5/4,5.0/4,16/4/2
% 二目 左结合 取余 5%4
2.5.1 基本的算术运算符说明
1,双目运算符两边的类型必须一致,否则会自动转换,转换规律见附录二。
2,所有的实型数的运算均以双精度方式进行。
3.两个整型数据相除 (结果为整,一般向零靠拢 )。
如 –5/ 3 = – 1
4.,/” 中,有一个 float,则结果为 double型,使用时千万注意 int / int 出现数据丢失。
2.5.2 算术符的优先级、结合性和算术表达式一、算术运算符的优先级
(),+,-,*,\,%,+,-
前面的 +,-为单目运算符
同一优先级,自左向右,为左结合性,反之为右结合性。
二、算术运算符和圆括号的结合性只有单目运算符的结合性是从右到左,其余运算符的结合性都是从左到右。
2.5.2 算术符的优先级、结合性和算术表达式三、算术表达式算术表达式,用算术运算符和括号将运算对象连接起来,且符合 C语法规则的式子。
运算对象可以是常量、变量、函数等。
计算机中的算术表达式的运算规则与数学中的四则运算类似。
2.5.3 强制类型转换表达式可利用强制类型转换运算符将一个算术表达式转换为所需类型。
形式,(类型名 ) (表达式 )
例如,
(double) a 将 a转换为 double
(int) (x+y) 将 x+y转换为 int
(float) (5%3) 将 5%3转换为 float
括号不能省略。
强制类型转换运算优先于算术运算符。
2.5.3 强制类型转换表达式例,main ( )
{ float x;
int i; x=3.6; i= (int) x;
printf ("x=%f,I=%d",x,i);
}
结果为,x=3.600000,i=3
再如,若 x为 float,则 x%3不合法。
但可用 (int)x%3来解决。
2.6.1 赋值运算符和赋值表达式
2.6 赋值表达式由 =连接的式子称为赋值表达式。其一般形式为:
变量名 =表达式
赋值表达式的功能是把右边的表达式的值传递给变量(因为其具有计算功能),同时整个赋值表达式的值是变量的值。
如,a=4+2; y=a+5; z= a + y; a =a + 1;
其结合性是右结合。
如,a=b=c=8? a=(b=(c=8))
赋值表达式的左侧只能是变量,不能是常量或表达式。如,a + b = c 不合法。
2.6.2 复合的赋值表达式在赋值运算符 ( =) 之前加上一个其它的二目运算符可构成复合运算符 。 如,+=,-=,*=,%=等 。 其一般格式为:
<变量 ><二目运算符 >=<表达式 >?<变量 >=<变量 ><二目运算符 >(<表达式 >)
如,a*=8?a=a*8
a*=y-2?a=a*(y-2)
若 a=8,是运算 a+=a*=a+a (256)
2.6.3 赋值运算中的类型转换赋值时,两边类型若不一致,则按以下规则转换,
1,将实型数据 (无论单,双精度 )赋给整型变量时,舍弃小数,
2,整型数据赋给实型变量,数值不变,但按实数形式存放,
3,字符型数据赋给整型变量时,
(1)字符?无符号整型变量,则存入低 8位,高 8位补零。
(2)字符?带符号整型变量,则字符高位扩展。
4,将 int? long int,进行符号扩展。
即,符号扩展,低 16位?long 的低 16位。
5,long int? int 则高 16位截断。
6,将 unsigned int 型?long int 高位补 0。
7,非 unsigned 型?长度相同的 unsigned型数据,原样传送 (包括符号位 )。
2.6.3 赋值运算中的类型转换
+ + 自增 1 – – 自减 1
例如 int i = 3;
则,+ +i,i++ 都会使 i变为 4,但有区别,
++i,先使 i值 +1,再使用 i值
i++,先使用 i值,再使 i值 +1
因此 j= ++i; 则 j=4,i=4 (i=i+1; j=i;)
j=i++; 则 j=3,i=4 (j=i; i=i+1)
2.7.1 自加运算符( ++)和自减运算符( --)
2.6 赋值表达式同理,– –i,i – –,均使 i值 –1,但,
– – i,先使 i值 –1,再使用 i值 ;
i – –,先使用 i值,再使 i值 –1
例如,i=3;
printf ("i=%d\n",i++);
结果,i=3
printf ("i=%d\n",++i);
结果,i=4
2.7.1 自加运算符( ++)和自减运算符( --)
一般形式,
表达式 1,表达式 2,…,表达式 n
计算规则,
先计算表达式 1,再计算表达式 2,最后值为表达式 2
的值。
例如,b= (a=3*5,a*4),a+5
结果 b=60
2.7.2 逗号运算符和逗号表达式
2.1 简单 C语言程序的构成和格式例 1,打印一句话 This is a c program
main( )
{
printf ("This is a c program\n");
}
2.1 简单 C语言程序的构成和格式例 2,求两数之和
main ( ) /* 主函数 */
{ int a,b,sum; /*这是定义变量 */
a=123; b=456; /*这是 赋值 */
sum=a+b; /*求和 */
printf(“sum is %d\n”,sum); /*输出 */
}
2.1 简单 C语言程序的构成和格式例 3,求最大数
main( ) /* 主函数 */
{ int a,b,c; /*定义变量 */
scanf("%d,%d",&a,&b); /*输入变量 a和 b的值 */
c=max(a,b); /*调用 max函数,将得到的值赋给 c*/
printf("max=%d",c;) /*输出 c的值 */
}
2.1 简单 C语言程序的构成和格式
C程序格式
1,C程序全部由一个一个的函数构成。至少有一个主函数 main
( ),其它函数可被主函数调用或相互调用。 其它函数可为 C 函数库中函数,也可为自己编的函数。
2.函数的执行一定从 main ( )开始。尽管 main ( )函数位置可自由。
3.书写自由,一个语句可多行,一行可多个语句。
4.每一条语句必须用一个分号结束;分号是 C语句的一部分而不是分隔符。
5.可用 /* */ 对 C语言加注释
6.关键字及编译预处理命令用小写字母书写。
2.2 常量、变量和标识符
2.2.1 标识符标识符是计算机语言中表示一定含义的字符组合,是符号常量、变量名、数组名、函数名、类型名、枚举元素名、
语句关键字的统称。如:上述程序中 main,printf。
标识符由字母、数字和下划线组成,并且第一个字符必须为字母或下划线。
标识符的长度一般取前 8个字符有效(不同的 C语言版本长度不同)。如 student_name和 student_number表示同一标识符。
C语言标识符中,大写字母和小写字母被认为是两个不同的字符。
习惯上,变量名、函数名等用小写字母表示;常量名用大写字母表示 (以增加可读性 )。
2.2.1 标识符
C语言的标识符分为三类:
一、关键字
C语言规定的标识符,在程序中代表着固定的含义(保留字)。如 int 。
所有关键字都要用小写英文字母表示。
二、预定义标识符
C语言提供的库函数名和预处理命令等。如 printf。
三、用户标识符用户自定义的标识符(变量名、函数名、数组名、文件名等)。
取名时尽量遵循“简洁明了”和“见名知意”的原则。
2.2.2 常量常量:在程序运行的过程中不能改变的量。
一般的数据显式写法均表示常量。
如:
58 整型常量
23.6 实型常量
‘ a’ 字符常量
,aaa” 字符串常量还可用一个符号表示一个常量 --符号常量
2.2.3 用定义一个符号的方法来代表一个常量可以用一个符号表示一个常量 --符号常量例:
#define PRICE 30
main ( )
{
int num,total;
num=10;
total=num*PRICE;
printf("total=%d",total);
}
符号常量用 #define 命令行来指定,上面程序中定义了一个符号常量 PRICE,代表 30。符号常量一般用大写,以区分变量,#define命令行最后不得加分号。
2.2.4 变量变量,程序执行中可以改变的量 。
每个都有一个名字,即变量名。
变量名应遵循标识符的约定。
变量名一般使用小写字符。
变量象常量一样有多种类型,因此变量名最好可以体现变量属于何种类型。
在变量类型中,没有字符串类型;因此没有字符串变量。
变量必须先定义后使用;通常在函数体的开始部分定义,在特殊情况下,也可以在函数体外或复合语句的开头定义。
变量实际上是指内存中一小块连续存储区域。定义变量 a,
就是指用 a命名某个存储区域,对变量 a的操作就是对该存储区域的操作。
2.3.1 整型常量
2.3 整型数据整型常量? 整型常数
C语言提供了三种 进制 形式
1,十进制如,256,308,- 120等
2,八进制以数字 0开头表示的整数例,0235,0146 - 012等,
0235=2× 82+ 3× 8+ 5= 15710
2.3.1 整型常量
2,八进制
0146= 1× 82+ 4× 8+ 6= 10210
- 012=- (1× 8+ 2)=- 1010
3,十六进制以 "0x"开头的整型数如,0x16,0x28
各数应写出打头字符表明进制。
不应有超出本进制的字符。
整型常量有短整型、基本整型、长整型和无符号型之分。
2.3.2 整型变量整型变量有短整型、基本整型、长整型和无符号型四种。
基本型:用,int”定义基本类型的长度为 16位,即两个字节,数值范围在
-32768~32767
如,12,-1235 是合法;
33333,0xabcd是非法。
2.3.3 整型数据的分类类型 定义符 位数 数值范围 I/O格式符基本 int 16位 -32768~ 32767 %d
短整 short 16 同上 %hd
长整 long 32 -231~ (231-1)%ld
无符号
unsigned [int] 16 0~ 65535 %u
unsigned short 16 同上 %hu
unsigned long 32 0~ (232-1) %lu
2.3.4 整数在内存中的存储形式
1.正整数原码形式存放
2,负整数补码形式存放
3,无符号数最高位也用于存放数值
2.4.1 实型常量实型常量又称实数,有两种表示形式
1,小数形式如,23.456,-12.3是合法。
12是非法。区分 12和 12.0。
2,指数形式如,13e4,1.2e-4是合法,
e4和 123e不合法。
2.4 实型数据
2.4.2 实型变量分为单精度型与双精度型,
分别为
float x,y,z; (单精度 )
double a,b,c; (双精度 )
一般地,单精度占 4字节内存单元 ;
双精度占 8字节内存单元,
单精度数值,10–38~1038
双精度数值,10–308~10308
2.4.2 实型变量注意,不同机器对实型变量的有效数字长度的限制如,pc机,单精度一般为 7位,双精度 15位于是,float a;
a=123456.789
则实际赋值 a?123456.7
2.5.1 基本的算术运算符
2.5 算术表达式运算符符号运算符目数 结合性 功能 例子
+ 二目 左结合 加 2+3,2.4+3+4
- 二目或一目 左结合 减、相反数
2-3,5.2-4-2,-2
* 二目 左结合 乘 2*3,3.2*5*6
/ 二目 左结合 除 5/4,5.0/4,16/4/2
% 二目 左结合 取余 5%4
2.5.1 基本的算术运算符说明
1,双目运算符两边的类型必须一致,否则会自动转换,转换规律见附录二。
2,所有的实型数的运算均以双精度方式进行。
3.两个整型数据相除 (结果为整,一般向零靠拢 )。
如 –5/ 3 = – 1
4.,/” 中,有一个 float,则结果为 double型,使用时千万注意 int / int 出现数据丢失。
2.5.2 算术符的优先级、结合性和算术表达式一、算术运算符的优先级
(),+,-,*,\,%,+,-
前面的 +,-为单目运算符
同一优先级,自左向右,为左结合性,反之为右结合性。
二、算术运算符和圆括号的结合性只有单目运算符的结合性是从右到左,其余运算符的结合性都是从左到右。
2.5.2 算术符的优先级、结合性和算术表达式三、算术表达式算术表达式,用算术运算符和括号将运算对象连接起来,且符合 C语法规则的式子。
运算对象可以是常量、变量、函数等。
计算机中的算术表达式的运算规则与数学中的四则运算类似。
2.5.3 强制类型转换表达式可利用强制类型转换运算符将一个算术表达式转换为所需类型。
形式,(类型名 ) (表达式 )
例如,
(double) a 将 a转换为 double
(int) (x+y) 将 x+y转换为 int
(float) (5%3) 将 5%3转换为 float
括号不能省略。
强制类型转换运算优先于算术运算符。
2.5.3 强制类型转换表达式例,main ( )
{ float x;
int i; x=3.6; i= (int) x;
printf ("x=%f,I=%d",x,i);
}
结果为,x=3.600000,i=3
再如,若 x为 float,则 x%3不合法。
但可用 (int)x%3来解决。
2.6.1 赋值运算符和赋值表达式
2.6 赋值表达式由 =连接的式子称为赋值表达式。其一般形式为:
变量名 =表达式
赋值表达式的功能是把右边的表达式的值传递给变量(因为其具有计算功能),同时整个赋值表达式的值是变量的值。
如,a=4+2; y=a+5; z= a + y; a =a + 1;
其结合性是右结合。
如,a=b=c=8? a=(b=(c=8))
赋值表达式的左侧只能是变量,不能是常量或表达式。如,a + b = c 不合法。
2.6.2 复合的赋值表达式在赋值运算符 ( =) 之前加上一个其它的二目运算符可构成复合运算符 。 如,+=,-=,*=,%=等 。 其一般格式为:
<变量 ><二目运算符 >=<表达式 >?<变量 >=<变量 ><二目运算符 >(<表达式 >)
如,a*=8?a=a*8
a*=y-2?a=a*(y-2)
若 a=8,是运算 a+=a*=a+a (256)
2.6.3 赋值运算中的类型转换赋值时,两边类型若不一致,则按以下规则转换,
1,将实型数据 (无论单,双精度 )赋给整型变量时,舍弃小数,
2,整型数据赋给实型变量,数值不变,但按实数形式存放,
3,字符型数据赋给整型变量时,
(1)字符?无符号整型变量,则存入低 8位,高 8位补零。
(2)字符?带符号整型变量,则字符高位扩展。
4,将 int? long int,进行符号扩展。
即,符号扩展,低 16位?long 的低 16位。
5,long int? int 则高 16位截断。
6,将 unsigned int 型?long int 高位补 0。
7,非 unsigned 型?长度相同的 unsigned型数据,原样传送 (包括符号位 )。
2.6.3 赋值运算中的类型转换
+ + 自增 1 – – 自减 1
例如 int i = 3;
则,+ +i,i++ 都会使 i变为 4,但有区别,
++i,先使 i值 +1,再使用 i值
i++,先使用 i值,再使 i值 +1
因此 j= ++i; 则 j=4,i=4 (i=i+1; j=i;)
j=i++; 则 j=3,i=4 (j=i; i=i+1)
2.7.1 自加运算符( ++)和自减运算符( --)
2.6 赋值表达式同理,– –i,i – –,均使 i值 –1,但,
– – i,先使 i值 –1,再使用 i值 ;
i – –,先使用 i值,再使 i值 –1
例如,i=3;
printf ("i=%d\n",i++);
结果,i=3
printf ("i=%d\n",++i);
结果,i=4
2.7.1 自加运算符( ++)和自减运算符( --)
一般形式,
表达式 1,表达式 2,…,表达式 n
计算规则,
先计算表达式 1,再计算表达式 2,最后值为表达式 2
的值。
例如,b= (a=3*5,a*4),a+5
结果 b=60
2.7.2 逗号运算符和逗号表达式