1、C程序设计的初步知识,主讲教师:宁云智部门:信息工程系QQ:52347227Email:Phone:18673333292,一、环境体验,例2.1#includemain()double a,b,area;a=1.2; /*将矩形的两条边长分别赋值给a和b*/b=3.6;area=a*b; /*计算矩形的面积并存储到变量area中*/printf(a=%f,b=%f,area=%fn,a,b,area); /*输出矩形的两条边长和面积*/,example2#includemain()printf(这是我编写的第一个C程序,我好开心!);,程序说明,main()是主函数,每个可执行的C程序都必须
2、有一个且只能有一个主函数,一个程序只能有一个主函数。括起来的部分是函数体。每一条执行语句都必须用“;”结束。“/*”和“*/”之间的语句为程序的注释,不会执行。 “/*”和“*/”必须成对出现,“/”和“*”之间不能有空格,注释之间不能嵌套。#include通常为命令行,命令行必须用“#”号开头,行尾不能加“;”号。,二、标识符、常量和变量,在C语言中,有许多符号的命名,如变量名、函数名、数组名等,都必须遵守一定的规则,按此规则命名的符号称为标识符。 合法的标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须为字母或下划线。合法标识符:area、PI、_ini、a_arr
3、ay、s1234、P101p非法标识符:456p、cade-y、w.w、a&b 在C语言的标识符中,大写字母和小写字母被认为是两个不同字符。,标识符,C语言中的标识符可以分为以下三类:1、关键字 C语言中已经预先规定了一批标识符,它们在程序中代表着固定的含义,不能另做他用,这些标识符称为关键字。如例2.1中的double。另外还有如int、if等。(附录4)2、预定义标识符 所谓预定义标识符是指在C语言中预先定义并具有特定含义的标识符,如C语言提供的库函数的名字(如printf)和预编译处理命令(如define)等。预定义标识符可以被重新定义,另作他用,但不建议这么用。见example3。,3
4、、用户标识符 由用户根据需要定义的标识符称为用户标识符,又称自定义标识符。 用户在定义定义用户标识符时要注意以下几点:见名知义不能与关键字相同,不能与预定义标识符相同遵守命名规则见example3,二、标识符、常量和变量,所谓常量是指在程序运行过程中,其值不能被改变的量。整形常量:正值(1、12、55、88等)、负值(-1、-12、-55、-88等)实型常量:(如3.14159、-2.71828、0.0等)。字符常量:(如a、A、z、Z等)。字符串常量:(如:”ZhuZhou”、”BeiJing”、”张三”等),常量,二、标识符、常量和变量,在C语言程序中,可以用一个符号名来代表一个常量,称为
5、符号常量。这个符号常量必须在程序中进行特别的“指定”,并符合标识符的命名规则。 见example4,符号常量,二、标识符、常量和变量,所谓变量是指在程序运行过程中其值可以改变的量。程序中用到的所有变量都必须有一个名字作为标识,变量的名字由用户定义,它必须符合标识符的命名规则。如例2.1中的a、b和area就是由用户定义的变量名。 一个变量实质上代表了内存中的某个存储单元。在程序中,变量a就是指用a命名的某个存储单元,用户对变量a进行的操作就是对该存储单元进行的操作;给变量a赋值,实质上 就是把数据存入该变量所代表的存储单元中。,变量,二、标识符、常量和变量,C语言规定,程序中所有变量都必须先定
6、义后使用。对变量的定义通常放在函数体内的前部,但也可以放在函数的外部或复合语句的开头。,变量,三、整型数据,在C语言中,整型常量可以用十进制、八进制和十六进制等形式表示。十进制:如32767、-32767、0等。八进制:010(8)、011(9)、016(14)。十六进制:0x10(16)、0Xde(222)、0xf(15),1、整型常量,main()int i=1,j=0,k=2;/*定义i、j、k为整型变量并赋初值*/ int i,j,k; /*比较两种用法*/i=1;j=0;k=2;,2、整型变量,3、整数在内存中的存储形式,计算机中,内存储器的最小存储单位称为“位(bit)”。由于只能
7、存放0或1,因此称为二进制单位。大多数计算机把8个二进制位组成一个“字节(byte)”,并给每个字节分配一个地址。若干字节组成一个“字(word)”,用一个字来存放一条机器指令或一个数据。 通常把一个字节中的最右边一位称为最低位,最左边一位称为最高位。对于一个有符号整数,其中最高位(最左边一位)用来存放整数的符号,称为符号位。若是正整数,最高位放置0;若是负整数,最高位放置1。,(1)正整数,见书p12。,(2)负整数,负整数在内存中以“补码”的形式存放的。取某个二进制数的补码,步骤如下:求原码的反码。即把原码除符号位之外的二进制码按位取反。把所得的反码加1,即得到原码的补码。求1000010
8、1(-5)的补码。,把内存中以补码形式存放的二进制码转化成十进制的负整数。步骤如下:先对除符号之外的各位取反将所得二进制数转换成十进制数。对所求得的数再减1。 问:在计算机内存中11111010表示十进制的什么数? 通过以上分析可知,由两个字节存放的最小整数是1000000000000000,对应的十进制数为-32768,而-1在内存中存放的二进制为1111111111111111。,(3)无符号整数,用两个字节来存放一个整数时,若说明为无符号整数,则最高位不再用来存放整数的符号,16个二进制位全部用来存放整数,因此无符号整数不可能是负数。这时,若内存中存放的16个二进制位全部为1,则它所代表
9、的整数就不再是-1,而是65535。,4、整型数据的分类,在vc6.0中可以在整型常量的后面加上一个字母l或L,例如123L、345l等。无符号整数的末尾可以加上字母u或U,长整型无符号整型可以加后缀lu或LU。,四、实型数据,(1)小数形式 小数形式是由数字和小数点组成的一种实数表示形式,例如0.123、.123、123.、0.0等都是合法的实型常量。注意:小数形式表示的实型常量必须要有小数点。,1、实型常量,(2)指数形式 这种形式类似数学中的指数形式。(见p13),四、实型数据,单精度型:float a,b,c; 双精度型:double x,y,z;,2、实型变量,double型变量中存
10、放的数据要比float型变量中存放的数据得多。注意,在VC6.0中,所有的float类型数据在运算中都自动转换成doulbe型数据。 在程序中一个实数可以用小数形式表示,也可以用指数形式表示。但在内存中一律是以指数形式存放的。,五、算术表达式,在C语言中,基本的算术运算符是:+、-、*、/、%。 (1)类型一致。如:1.0/2.0结果为0.5,1/2结果为0。 (2)类型不一致,自动进行转换,见附录5。 (3)在C语言中,所有实型数的运算均以双精度方式进行。若是单精度数,则在尾数部分添0,使之转换为双精度数。,1、基本的算术运算符,五、算术表达式,(1)算术运算符的优先级 见书(p15) (2
11、)算术运算符和圆括号的结合性 单目运算符“+”和“-”的结合性事从右到左的,其余运算符的结合性是从左到右的。(what?) 例:(5+1)/2 5+1/2 5*-2 5*(-2) C语言运算符的优先级和结合方向见附录6,2、运算符的优先级、结合性和算术表达式,五、算术表达式,(3)表达式 用算术运算符和一对圆括号将运算数连接起来的、符合C语言语法的表达式称为算术表达式。 其运算规则和要求如下: 在算术表达式中,可以使用多层圆括号,但左右括号必须配对。 在算术表达式中,若包含不同优先级的运算符,则按运算符的优先级从高到低进行;若表达式中运算符的级别相同,则按运算符的结合方向进行。,2、运算符的优
12、先级、结合性和算术表达式,五、算术表达式,(类型名)(表达式)例:(int)3.234 (double)(10%3),3、强制类型转换表达式,六、赋值表达式,形式:变量名=表达式 赋值运算的功能是先求出右边表达式的值,然后把此值赋给左边的变量,确切地说,是把数据存入以该变量为标识的存储单元中去。 a=10; /*把常量10赋给变量a*/ b=a;/*把a中的值赋给变量b,a中的值不变*/ 问:b? 说明: (见书p16),1、赋值运算符和赋值表达式,六、赋值表达式,+=、- =、*=、/=、%= 例:已有变量a,其值为9,计算表达式a+=a-=a+a的值。(example5),2、符合赋值表达
13、式,六、赋值表达式,(1)同种类型转换无影响 (2)兼容类型可转换 (3)非兼容类型转换精度受到影响或出错。,3、赋值表达式中的类型转换,七、自加、自减运算符和逗号运算符,(1)自加运算符“+”和自减运算符“-”的运算结果是使运算对象的值增1或减1。如果i+相当于i=i+1;i-相当于i=i-1。 (2)运算符“+”和 “-”是单目运算符,运算对象可以是整型变量也可以是实型变量,但不能是常量和表达式。因此,+3、(i+j)-等都是不合法的。 (3)+i、i+、-i和i-的区别(例子见书p18)。 (4)运算符“+”和 “-”是自右向左结合的。如:-i+的值为-3?,1、自加运算符“+”和自减运算符“-”,七、自加、自减运算符和逗号运算符,表达式1,表达式2, ,表达式n。 在所有运算符号中,逗号运算符的优先级最低。,2、逗号运算符“+”和逗号表达式,