《第1、2章C语言设计初步知识课件.ppt》由会员分享,可在线阅读,更多相关《第1、2章C语言设计初步知识课件.ppt(99页珍藏版)》请在三一办公上搜索。
1、C 语言,语言是什么?,规则 语法 句子 语句,C语句概述,C语句分为,C语句概述,(一)控制语句 完成一定的控制功能1 if()else 条件语句 6 break 间断语句 2 for()循环语句 7 switch()开关语句3 while()循环语句 8 goto 转向语句 4 do while();循环语句 9 return 返回语句5 continue 继续语句,C语句概述,(二)函数调用语句 有一个函数调用加一个分号构成一个语句 printf(“This is a C statement.”);,C语句概述,(三)表达式语句 有一个表达式加一个分号构成一个语句 a=3;,分号,表达式
2、,表达式语句,+,=,C语句概述,(四)空语句 只有一个分号的语句(什么也不做),C语句概述,(五)复合语句 用一对括起来的语句 z=x+y;t=z/100;printf(“%f”,t);,简单的C语言程序,#include main()printf(This is a C program.n);,/*文件包含*/*主函数*/*函数体开始*/*输出语句*/*函数体结束*/,/*注释*/,#include main()printf(This is a C program.n);,main:主函数名,每个C程序有且只有一个主函数,C程序总是从main函数开始执行的,与main函数的位置无关。,#i
3、nclude main()printf(This is a C program.n);,是函数开始和结束的标志,不可省每个C语句以分号结束使用标准库函数时应在程序开头一行写:#include,求两数之和,#include void main()/*求两数之和*/int a,b,sum;/*声明,定义变量为整型*/*以下3行为C语句*/a=123;b=456;sum=a+b;printf(sum is%dn,sum);,说明:/*/表示注释。注释只是给人看的,对编译和运行不起作用。所以可以用汉字或英文字符表示,可以出现在一行中的最右侧,也可以单独成为一行。,简单的C语言程序介绍,C程序:(1)C
4、程序是由函数构成的。这使得程序容易实现模块化。(2)一个函数由两部分组成:,简单的C语言程序介绍,函数的首部:函数体:花括号内的部分。若一个函数有多个花括号,则最外层的一对花括号为函数体的范围。函数体包括两部分:声明部分:可缺省执行部分:由若干个语句组成。可缺省,注意:函数的声明部分和执行部分都可缺省,例如:void dump()这是一个空函数,什么也不做,但是合法的函数。,简单的C语言程序介绍,一个函数的例子,int max(int x,int y)int z;if(xy)z=x;else z=y;return(z);,(1)C程序总是从main函数开始执行的,与main函数的位置无关。(2
5、)C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上,C程序没有行号。(3)每个语句和数据声明的最后必须有一个分号。(4)C语言本身没有输入输出语句。输入和输出的操作是由库函数scanf和printf等函数来完成的。C对输入输出实行“函数化”。,简单的C语言程序介绍,void main()/*主函数*/int a,b,c;/*定义变量a、b、c*/scanf(d,d,/*输出c的值*/,#include int max(int x,int y)int z;if(xy)z=x;else z=y;return(z);void main()/*主函数*/int a,b,c;/*定义变
6、量a、b、c*/scanf(d,d,/*输出c的值*/,例:以下叙述中正确的是()A C程序中注释部分可以出现在程序中任意合适的地方B C程序的书写格式是固定的,每行只能写一条语句C 构成C程序的基本单位是函数,所有函数名都可以由用户命名D 在对C语言程序进行编译时,可以发现注释行中的拼写错误,C语言规定,在一个C程序中,main()函数的位置()A 必须在系统调用的库函数之后B 必须在程序的开始C 必须在程序的最后D 可以在任意位置,对于一个正常运行的C程序,下列叙述中正确的是()A 程序的执行总是从main函数开始,在main函数结束B 程序的执行总是从程序的第一个函数开始,在main函数
7、结束C程序的执行总是从main函数开始,在程序的最后一个函数中结束D程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束,下列4个程序中,完全正确的是()。A)#include main();/*programming*/printf(programming!n);B)#include main()/*/programming/*/printf(programming!n);C)#include main()/*/programming*/*/printf(programming!n);D)include main()/*programming*/printf(programmin
8、g!n);,标识符,分类,关键字(32个)(有固定含义,不可改变),预定义标识符(有特殊含义,可以改变),小写,类型说明符:int,float,double等语句定义符:if,for,while等,库函数的名字:printf,scanf 等编译预处理命令名:include等,用户自定义的标识符 格式合法,不能使用关键字,见名知意,标识符,命名规则:标识符中只能包含字母(a-z,A-Z),数字(0-9),下划线(_)。第一个字符必须是字母或下划线。,例,以下C语言用户标识符中,不合法的是()A _1 B AaBc C a_b D a-b,例,可在C程序中用作用户标识符的一组标识符是()。A)vo
9、id define WORDB)as_b3 _123 IfC)For-abc caseD)2c DO SIG,2023/1/22,28,常量,1.定义:在程序执行期间,其值不可改变的量称为常量2.类型:数值常量 例如:10,3,2.68等符号常量 即用一个符号代表一个常量,例如:#define PI 3.1415926 main()float r,l,s;r=2;l=2*PI*r;s=PI*r*r;printf(“l=%d,s=%d”,l,s);,2023/1/22,30,符号常量必须先定义后才能用它表示一个数值。符号常量的值在其作用域内不能改变,也不能再被赋值。符号常量名习惯用大写字母表示。
10、,说明,常量,整型 100,125,-100,0实型 3.14,0.125,-3.789字符型 a,b,2字符串“a”,“ab”,“1232”,变量,变量代表内存中具有特定属性的一个存储单元,它用来存放数据,这就是变量的值,在程序运行期间,这些值是可以改变的。,变量,变量命名的规定:语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。例:sum,_total,month,Student_name,lotus_1_2_,BASIC,li_ling M.D.John,¥123,3D64,ab,变量,注意:编译系统将大写字母和小写字母认为是两个不同的字符。在选择变量名
11、和其它标识符时,应注意做到“见名知意”,即选有含意的英文单词(或其缩写)作标识符。要求对所有用到的变量作强制定义,也就是“先定义,后使用”。,C的数据类型,数据类型,构造类型,指针类型,空类型(无值类型)void,单精度实型 float,双精度实型 double,长双精度型(long double),整型数据,整型变量(1)整型数据在内存中的存放形式 数据在内存中是以二进制形式存放的。如:int i;/*定义为整型变量*/i=10;/*给i赋以整数10*/,整型数据,(2)整型变量的分类:字节数,共六种,有符号基本整型有符号短整型有符号长整型无符号基本整型无符号短整型无符号长整型,(signe
12、d)int 4(signed)short(int)2(signed)long(int)4unsigned int 4 unsigned short(int)2unsigned long(int)4,注意:括号表示其中的内容是可选的.,整型数据,(3)整型变量的定义:规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义”。例如:int a,b;(指定变量、为整型)unsigned short c,d;(指定变量、为无符号短整型)long e,f;(指定变量、为长整型),整型数据,整型常量的表示方法 整型常量即整常数。在语言中,整常数可用以下三种形式表示:(1)十进制整数。如:123,-
13、456,4。(2)八进制整数。以0头的数是八进制数。如:0123表示八进制数123,等于十进制数83,整型数据,(3)十六进制整数。以0 x开头的数是16进制数。如:0 x123,代表16进制数123,等于十进制数 291。,十进制整常数:没有前缀,其数码为0-9。例如65535,-568八进制整常数:以0开头,其数码为0-7。例如015十六进制整常数:以0X或0 x开头,其数码为0-9,A-F或a-f。例如0 x2A长整型数:整型常数后缀为L或l。例如358000L无符号数:整型常数后缀为U或u。例如158u,总结,例题:定义无符号整数类为UInt,下面可以作为类UInt实例化值的是()A-
14、369 B 369 C 0.369 D 整数集合1,2,3,4,5,例题:以下选项中,能用作数据常量的是()A o115 B 0118 C 1.5e1.5 D 115L,浮点型数据,浮点型变量的分类 浮点型变量分为单精度(float型)、双精度(double型)和长双精度型(long double)三类形式。,例题:#include main()int s,t,A=100;double B=6;s=sizeof(A);t=sizeof(B);printf(“%d,%dn”,s,t);在VC6平台上编译运行,程序运行后的输出结果是()A 2,4 B 4,4 C 4,8 D 10,6,2023/1
15、/22,46,小数形式:由数字和小数点及正负号组成。(注意:必须有小数点)例如:23.678.123 123.0.123 指数形式:由数字、小数点、字母e或E及正负号组成。(注:e或E之前必须有数字,且后指数必须为整数)例如:3.5E-5 2e3,实型常量,例题:以下选项中可用作C程序合法实数的是()A 1e0 B 3.0e0.2 C E9 D 9.12E,字符型数据,字符常量(1)用单引号包含的一个字符是字符型常量(2)只能包含一个字符,a,A,1abc、“a”,字符型数据,字符串常量字符串常量是一对双撇号括起来的字符序列.合法的字符串常量:“How do you do.”,“CHINA”,
16、“a”,“$123.45”可以输出一个字符串,如printf(“How do you do.”);,字符型数据,字符变量字符型变量用来存放字符常量,注意只能放一个字符。字符变量的定义形式如下:char c1,c2;可以用下面语句对c1,c2赋值:c1a;c2 b;一个字符变量在内存中占一个字节。,字符型数据,是字符常量,”是字符串常量,二者不同。如:假设被指定为字符变量:char c,c=a;”a”;c”CHINA”;,结论:不能把一个字符串常量赋给一个字符变量。,字符型数据,字符数据在内存中的存储形式及其使用方法将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是
17、将该字符的相应的ASCII代码放到存储单元中。,这样使字符型数据和整型数据之间可以通用。一个字符数据既可以以字符形式输出,也可以以整数形式输出。,char c1,c2;c1=97;c2=98;说明:它的作用相当于以下两个赋值语句:c1;c2;因为a和b的ASCII码为和语言允许字符数据与整数直接进行算术运算c1=c1-32;,记住,0的ASCII码值为48;A的ASCII码值为65;a的ASCII码值为97。大写字母与小写字母的ASCII码值相差32。,有以下程序#include main()char c1,c2;c1=A+8-4;c2=A+8-5;printf(“%c,%dn”,c1,c2)
18、;已知字母A的ASCII码为65,程序运行后的输出结果是()A E,68 B D,69 C E,D D 输出无定值,转义字符,有些以“”开头的特殊字符称为转义字符,n 换行t 横向跳格r 回车 反斜杠ddd ddd表示1到3位八进制数字xhh hh表示1到2位十六进制数字,例题有以下定义语句,编译时会出现编译错误的是 A char a=a;B char a=n;C char a=aa;D char a=x2d;以下选项中能表示合法常量的是()A 整数:1,200 B 实数:1.5E2.0 C 字符斜杠:D 字符:“007”以下选项中不能用作C程序合法常量的是()A 1,234 B 123 C
19、123 D x7A,以下不正确的转义字符是()。A)B)tC)nD)088,变量赋初值,(1)语言允许在定义变量的同时使变量初始化如:int a=3;/*指定为整型变量,初值为*/float f=3.56;,变量赋初值,(2)可以使被定义的变量的一部分赋初值。如:int a,b,c=5;(3)如果对几个变量赋以同一个初值,应写成:int a=3,b=3,c=3;不能写成 int a=b=c=3;,注意:初始化不是在编译阶段完成的而是在程序运行时执行本函数时赋初值的,相当于有一个赋值语句。,运算符,运算符,的运算符有以下几类:(1)算术运算符(+-*/%)(2)关系运算符(!)(3)逻辑运算符(
20、!|)(4)位运算符(|)(5)赋值运算符(及其扩展赋值运算符)(6)条件运算符(?:)(7)逗号运算符(,),运算符,(8)指针运算符(*和)(9)求字节数运算符()(10)强制类型转换运算符((类型))(11)分量运算符(-)(12)下标运算符()(13)其他(如函数调用运算符(),记住,运算符的优先级级别由大到小:(逻辑)非 算(术运算符)关(系运算符)(逻辑)与(逻辑)或 条(件运算符)赋(值运算符),算术运算符,基本的算术运算符:(加法运算符,或正值运算符。如:、)(减法运算符,或负值运算符。如:、)*(乘法运算符。如:*)(除法运算符。如:)(模运算符,或称求余运算符,两侧均应为整
21、型数据,如:的值为)。,算术运算符,语言规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。规定了各种运算符的结合方向(结合性)算术运算符的结合方向为“自左至右”,即先左后右。,记住,/:当除号左右两边都是整数的时候,商也要是整数,如果不是整数则舍弃小数部分。当参与运算量有一个为实型,则商为double型。,例题:如有定义语句:int x=12,y=8,z;,在其后执行语句z=0.9+x/y,则z的值为()A.1.9 B.1 C.2 D.2.4,类型转换,各种类型数据混合运算时,最终结果的类型可依据以下转换规律:char-short-int-lon
22、g-float-double,例题:若有定义语句:int a=10;double b=3.14;,则表达式A+a+b值得类型是()A.charB.intC.doubleD.float,有两种类型转换:一种是在运算时不必用户指定,系统自动进行的类型转换,如3+6.5。第二种是强制类型转换。当自动类型转换不能实现目的时,可以用强制类型转换。,强制类型转换运算符,可以利用强制类型转换运算符将一个表达式转换成所需类型。一般形式:(类型名)(表达式)例如:(double)将转换成double类型(int)(x+y)将x+y的值转换成整型(float)(5%3)将5%3的值转换成float型,例题:以下程
23、序运行后的输出结果是()。main()int a;a=(int)(double)(3/2)+0.5+(int)1.99*2);printf(%dn,a);,若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是()。A 2.500000 B 2.750000C 3.500000 D 0.000000,赋值运算符,(1)赋值运算符 赋值符号“”就是赋值运算符,它的作用是将一个数据赋给一个变量。a=3注意赋值运算符左边必须是变量,而不是表达式,赋值运算符和赋值表达式,(2)复合的赋值运算符 在赋值符“”之前加上其他运算符,可以构成复合的
24、运算符。例如:等价于*等价于*()等价于,赋值运算符和赋值表达式,为便于记忆,可以这样理解:a+=b(其中a为变量,b为表达式)a+=b(将有下划线的“a+”移到“=”右侧)|_ a=a+b(在“=”左侧补上变量名a),注意:如果是包含若干项的表达式,则相当于它有 括号。如:x%=y+3 x%=(y+3)|_ x=x%(y+3)(不要错写成x=x%y+3),凡是二元(二目)运算符,都可以与赋值符一起组合成复合赋值符。,语言规定可以使用种复合赋值运算符:,*,|,赋值运算符,(3)赋值表达式 由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。一般形式为:例如:“5”是一个赋值表
25、达式,赋值运算符,对赋值表达式求解的过程是:求赋值运算符右侧的“表达式”的值;赋给赋值运算符左侧的变量。例如:赋值表达式“=3*5”的值为15,执行表达式后,变量a的值也是15。,注意:一个表达式应该有一个值,赋值运算符,赋值表达式中的“表达式”,又可以是一个赋值表达式.例如:a=(b=5),分析:括弧内的“b=5”是一个赋值表达式,它的值等于5。执行表达式“a=(b=5)”相当于执行“b=5”和“ab”两个赋值表达式。赋值运算符按照“自右而左”的结合顺序,因此,“(b5)”外面的括弧可以不要,即“a=(b=5)”和“a=b=5”等价.,赋值运算符,赋值表达式也可以包含复合的赋值运算符。如:a
26、+=a-=a*a,分析:此赋值表达式的求解步骤如下 先进行“*”的运算,它相当于*,a的值为144132。再进行“”的运算,相当于=a+(-132),a的值为132-132-264。,赋值运算符,将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其他语句(如输出语句、循环语句等)中.如:printf(%d,a=b);,分析:如果b的值为3,则输出a的值(也是表达式a=b的值)为3。在一个语句中完成了赋值和输出双重功能。,例题:若有定义语句:int a=3,b=2,c=1;,以下选项中错误的赋值表达式是()A a=(b=4)=3 B a=b=c+1 C
27、a=(b=4)+c D a=1+(b=c=4),已知int a=6;则执行a+=a-=a*a;语句后,a的值为()。A 36 B 0 C-24 D-60,自增、自减运算符,作用是使变量的值增或减如:+i,-i(在使用之前,先使的值加(减)i+,i-(在使用之后,使的值加(减),i+与+i的区别:是先执行后,再使用的值;是先使用的值后,再执行。例如:;i的值先变成4,再赋给,j的值均为;先将 i的值3赋给,的值为,然后变为,自增、自减运算符,注意:(1)自增运算符(),自减运算符(),只能用于变量,而不能用于常量或表达式,(2)和的结合方向是“自右至左”。,自增、自减运算符,例题:#includ
28、e main()int x=011;printf(%dn,+x);程序运行后的输出结果是()A 12 B 11 C 10 D 9,设有定义:int k=0;,下列选项的4个表达式中与其他3个表达式的值不相同的是()。A k+B k+=1C+kD k+1,逗号运算符,逗号运算符:将两个表达式连接起来,又称为“顺序求值运算符”如:5,,一般形式:表达式,表达式,求解过程:先求解表达式,再求解表达式。整个逗号表达式的值是表达式的值。,逗号表达式 的值为14,逗号运算符,例:逗号表达式*5,*,分析:赋值运算符的优先级别高于逗号运算符,因此应先求解*5.,的值为5,然后求解*,得。整个逗号表达式的值为
29、。,一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式 如:(*,*)先计算出的值等于,再进行*的运算得60(但值未变,仍为15),再进行得,即整个表达式的值为。,逗号运算符和逗号表达式,逗号表达式的一般形式可以扩展为 表达式,表达式,表达式,表达式 它的值为表达式的值。,逗号运算符是所有运算符中级别最低的例:(,*),*3,赋值表达式,将一个逗号表达式的值赋给,的值等于,逗号表达式,包括一个赋值表达式和一个算术表达式,的值为,整个逗号表达式的值为18。,逗号运算符和逗号表达式,注意:并不是任何地方出现的逗号都是作为逗号运算符。例如函数参数也是用逗号来间隔的。如:printf(“%d,%
30、d,%d”,a,b,c);,“,”并不是一个逗号表达式,它是printf函数的3个参数,printf(“%d,%d,%d”,(a,b,c),b,c),“(,)”是一个逗号表达式,它的值等于的值。,例题:设有定义:int x=2;以下表达式中,值不为6的是()A x*=x+1 B x+,2*x C x*=(1+x)D 2*x,x+=2,例题:若变量已正确定义并赋值,则以下符合C语言语法的表达式是()。A)a=a+7;B)a=7+b+c,a+C)int(12.3%4)D)a=a+7=c+b,下面程序的运行结果是()。y=5;x=14;y=(x=3*y,x+6),x-1);printf(x=%d,y=%d,x,y);A x=27,y=27B x=12,y=13C x=15,y=14D x=y=27,例题:假设有语句sizeof(double),则它是()A 一个整型表达式B一个双精度浮点型表达式C一种函数调用D一种函数定义,