资源描述:
《C语言设计的初步知识》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
C语言 语言是什么?规则语法句子语句 C语句概述C语句分为5类控制语句函数调用语句表达式语句空语句复合语句 C语句概述(一)控制语句完成一定的控制功能1if()~else条件语句6break间断语句2for()~循环语句7switch()开关语句3while()~循环语句8goto转向语句4do~while();循环语句9return返回语句5continue继续语句 C语句概述(二)函数调用语句有一个函数调用加一个分号构成一个语句printf(“ThisisaCstatement.”); C语句概述(三)表达式语句有一个表达式加一个分号构成一个语句a=3;分号表达式表达式语句 C语句概述(四)空语句只有一个分号的语句(什么也不做) C语句概述(五)复合语句用一对{}括起来的语句{z=x+y;t=z/100;printf(“%f”,t);} 简单的C语言程序#includemain(){printf("ThisisaCprogram. ");}/*文件包含*//*主函数*//*函数体开始*//*输出语句*//*函数体结束*//*注释*/ #includemain(){printf("ThisisaCprogram. ");}main:主函数名,每个C程序有且只有一个主函数,C程序总是从main函数开始执行的,与main函数的位置无关。 #includemain(){printf("ThisisaCprogram. ");}{}是函数开始和结束的标志,不可省每个C语句以分号结束使用标准库函数时应在程序开头一行写:#include 求两数之和#includevoidmain()/*求两数之和*/{inta,b,sum;/*声明,定义变量为整型*//*以下3行为C语句*/a=123;b=456;sum=a+b;printf(″sumis%d\n″,sum);}说明:/*……*/表示注释。注释只是给人看的,对编译和运行不起作用。所以可以用汉字或英文字符表示,可以出现在一行中的最右侧,也可以单独成为一行。 简单的C语言程序介绍C程序:(1)C程序是由函数构成的。这使得程序容易实现模块化。(2)一个函数由两部分组成: 简单的C语言程序介绍函数的首部:函数体:花括号内的部分。若一个函数有多个花括号,则最外层的一对花括号为函数体的范围。函数体包括两部分:声明部分:可缺省执行部分:由若干个语句组成。可缺省 注意:函数的声明部分和执行部分都可缺省,例如:voiddump(){}这是一个空函数,什么也不做,但是合法的函数。简单的C语言程序介绍 一个函数的例子intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);} (1)C程序总是从main函数开始执行的,与main函数的位置无关。(2)C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上,C程序没有行号。(3)每个语句和数据声明的最后必须有一个分号。(4)C语言本身没有输入输出语句。输入和输出的操作是由库函数scanf和printf等函数来完成的。C对输入输出实行“函数化”。简单的C语言程序介绍 voidmain()/*主函数*/{inta,b,c;/*定义变量a、b、c*/scanf(″%d,%d″,&a,&b);/*输入变量a和b的值*/c=max(a,b);/*调用max函数,将得到的值赋给c*/printf(″max=%d″,c);/*输出c的值*/} #includeintmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}voidmain()/*主函数*/{inta,b,c;/*定义变量a、b、c*/scanf(″%d,%d″,&a,&b);/*输入变量a和b的值*/c=max(a,b);/*调用max函数,将得到的值赋给c*/printf(″max=%d″,c);/*输出c的值*/} 例:以下叙述中正确的是()AC程序中注释部分可以出现在程序中任意合适的地方BC程序的书写格式是固定的,每行只能写一条语句C构成C程序的基本单位是函数,所有函数名都可以由用户命名D在对C语言程序进行编译时,可以发现注释行中的拼写错误 C语言规定,在一个C程序中,main()函数的位置()A必须在系统调用的库函数之后B必须在程序的开始C必须在程序的最后D可以在任意位置 对于一个正常运行的C程序,下列叙述中正确的是()A程序的执行总是从main函数开始,在main函数结束B程序的执行总是从程序的第一个函数开始,在main函数结束C程序的执行总是从main函数开始,在程序的最后一个函数中结束D程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束 下列4个程序中,完全正确的是()。A)#includemain();{/*programming*/printf("programming! ");}B)#includemain(){/*/programming/*/printf("programming! ");}C)#includemain(){/*/programming*/*/printf("programming! ");}D)includemain(){/*programming*/printf("programming! ");} 标识符分类①关键字(32个)(有固定含义,不可改变)②预定义标识符(有特殊含义,可以改变)小写类型说明符:int,float,double等语句定义符:if,for,while等库函数的名字:printf,scanf等编译预处理命令名:include等③用户自定义的标识符ⅰ格式合法,ⅱ不能使用关键字,ⅲ见名知意 标识符命名规则:①标识符中只能包含字母(a-z,A-Z),数字(0-9),下划线(_)。②第一个字符必须是字母或下划线。 例以下C语言用户标识符中,不合法的是()A_1BAaBcCa_bDa-b 例可在C程序中用作用户标识符的一组标识符是()。A)voiddefineWORDB)as_b3_123IfC)For-abccaseD)2cDOSIG 常量1.定义:在程序执行期间,其值不可改变的量称为常量2.类型:数值常量例如:10,3,2.68等符号常量即用一个符号代表一个常量10/3/202128 例如:#definePI3.1415926main(){floatr,l,s;r=2;l=2*PI*r;s=PI*r*r;printf(“l=%d,s=%d”,l,s);} 符号常量必须先定义后才能用它表示一个数值。符号常量的值在其作用域内不能改变,也不能再被赋值。符号常量名习惯用大写字母表示。说明10/3/202130 常量整型100,125,-100,0实型3.14,0.125,-3.789字符型‘a’,‘b’,‘2’字符串“a”,“ab”,“1232” 变量变量代表内存中具有特定属性的一个存储单元,它用来存放数据,这就是变量的值,在程序运行期间,这些值是可以改变的。 变量变量命名的规定:C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。例:sum,_total,month,Student_name,lotus_1_2_3,BASIC,li_lingM.D.John,¥123,3D64,a>b 变量注意:①编译系统将大写字母和小写字母认为是两个不同的字符。②在选择变量名和其它标识符时,应注意做到“见名知意”,即选有含意的英文单词(或其缩写)作标识符。③要求对所有用到的变量作强制定义,也就是“先定义,后使用”。 C的数据类型数据类型构造类型指针类型空类型(无值类型)void枚举类型enum数组类型结构类型struct联合类型union基本类型整型int字符型char实型(浮点型)单精度实型float双精度实型double长双精度型(longdouble) 整型数据整型变量(1)整型数据在内存中的存放形式数据在内存中是以二进制形式存放的。如:inti;/*定义为整型变量*/i=10;/*给i赋以整数10*/ 整型数据(2)整型变量的分类:字节数共六种有符号基本整型有符号短整型有符号长整型无符号基本整型无符号短整型无符号长整型(signed)int4(signed)short(int)2(signed)long(int)4unsignedint4unsignedshort(int)2unsignedlong(int)4注意:括号表示其中的内容是可选的. 整型数据(3)整型变量的定义:C规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义”。例如:inta,b(指定变量a、b为整型)unsignedshortc,d;(指定变量c、d为无符号短整型)longe,f;(指定变量e、f为长整型) 整型数据整型常量的表示方法整型常量即整常数。在C语言中,整常数可用以下三种形式表示:(1)十进制整数。如:123,-456.4。(2)八进制整数。以0头的数是八进制数。如:0123表示八进制数123,等于十进制数83 整型数据(3)十六进制整数。以0x开头的数是16进制数。如:0x123,代表16进制数123,等于十进制数291。 十进制整常数:没有前缀,其数码为0-9。例如65535,-568八进制整常数:以0开头,其数码为0-7。例如015十六进制整常数:以0X或0x开头,其数码为0-9,A-F或a-f。例如0x2A长整型数:整型常数后缀为L或l。例如358000L无符号数:整型常数后缀为U或u。例如158u总结 例题:定义无符号整数类为UInt,下面可以作为类UInt实例化值的是()A-369B369C0.369D整数集合{1,2,3,4,5} 例题:以下选项中,能用作数据常量的是()Ao115B0118C1.5e1.5D115L 类型位数数的范围有效数字float3210-37~10386~7位double型6410-307~1030815~16位longdouble12810-4931~10493218~19位浮点型数据浮点型变量的分类浮点型变量分为单精度(float型)、双精度(double型)和长双精度型(longdouble)三类形式。 例题:#includemain(){ints,t,A=100;doubleB=6;s=sizeof(A);t=sizeof(B);printf(“%d,%d ”,s,t);}在VC6平台上编译运行,程序运行后的输出结果是()A2,4B4,4C4,8D10,6 小数形式:由数字和小数点及正负号组成。(注意:必须有小数点)例如:23.678.123123.0.123指数形式:由数字、小数点、字母e或E及正负号组成。(注:e或E之前必须有数字,且后指数必须为整数)例如:3.5E-52e3实型常量10/3/202146 例题:以下选项中可用作C程序合法实数的是()A1e0B3.0e0.2CE9D9.12E 字符型数据字符常量(1)用单引号包含的一个字符是字符型常量(2)只能包含一个字符‘a’,’A’,‘1’‘abc’、“a” 字符型数据字符串常量字符串常量是一对双撇号括起来的字符序列.合法的字符串常量:“Howdoyoudo.”,“CHINA”,“a”,“$123.45”可以输出一个字符串,如printf(“Howdoyoudo.”); 字符型数据字符变量字符型变量用来存放字符常量,注意只能放一个字符。字符变量的定义形式如下:charc1,c2;可以用下面语句对c1,c2赋值:c1=‘a’;c2=‘b’;一个字符变量在内存中占一个字节。 字符型数据‘a’是字符常量,”a”是字符串常量,二者不同。如:假设C被指定为字符变量:charcc=’a’;c=”a”;c=”CHINA”;结论:不能把一个字符串常量赋给一个字符变量。 字符型数据字符数据在内存中的存储形式及其使用方法将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。这样使字符型数据和整型数据之间可以通用。一个字符数据既可以以字符形式输出,也可以以整数形式输出。 charc1,c2;c1=97;c2=98;说明:它的作用相当于以下两个赋值语句:c1=′a′;c2=′b′;因为’a’和’b’的ASCII码为97和98C语言允许字符数据与整数直接进行算术运算c1=c1-32; 记住‘0’的ASCII码值为48;‘A’的ASCII码值为65;‘a’的ASCII码值为97。大写字母与小写字母的ASCII码值相差32。 有以下程序#includemain(){charc1,c2;c1=’A’+’8’-‘4’;c2=’A’+’8’-‘5’;printf(“%c,%d ”,c1,c2);}已知字母A的ASCII码为65,程序运行后的输出结果是()AE,68BD,69CE,DD输出无定值 转义字符有些以“”开头的特殊字符称为转义字符 换行t横向跳格r回车\反斜杠dddddd表示1到3位八进制数字xhhhh表示1到2位十六进制数字 例题有以下定义语句,编译时会出现编译错误的是Achara=’a’;Bchara=‘ ’;Cchara=‘aa’;Dchara=‘x2d’;以下选项中能表示合法常量的是()A整数:1,200B实数:1.5E2.0C字符斜杠:‘\’D字符:“ 07”以下选项中不能用作C程序合法常量的是()A1,234B'123'C123D'x7A' 以下不正确的转义字符是()。A)'\‘B)‘t’C)‘ ’D)‘ 88’ 变量赋初值(1)C语言允许在定义变量的同时使变量初始化如:inta=3;/*指定a为整型变量,初值为3*/floatf=3.56; 变量赋初值(2)可以使被定义的变量的一部分赋初值。如:inta,b,c=5;(3)如果对几个变量赋以同一个初值,应写成:inta=3,b=3,c=3;不能写成∶inta=b=c=3;注意:初始化不是在编译阶段完成的而是在程序运行时执行本函数时赋初值的,相当于有一个赋值语句。 运算符 运算符C的运算符有以下几类:(1)算术运算符(+-*/%)(2)关系运算符(><==>=<=!=)(3)逻辑运算符(!&&||)(4)位运算符(<<>>~|∧&)(5)赋值运算符(=及其扩展赋值运算符)(6)条件运算符(?:)(7)逗号运算符(,) 运算符(8)指针运算符(*和&)(9)求字节数运算符(sizeof)(10)强制类型转换运算符((类型))(11)分量运算符(.->)(12)下标运算符([ ])(13)其他(如函数调用运算符()) 记住运算符的优先级级别由大到小:(逻辑)非>算(术运算符)>关(系运算符)>(逻辑)与>(逻辑)或>条(件运算符)>赋(值运算符) 算术运算符基本的算术运算符:+(加法运算符,或正值运算符。如:3+5、+3)-(减法运算符,或负值运算符。如:5-2、-3)*(乘法运算符。如:3*5)/(除法运算符。如:5/3)%(模运算符,或称求余运算符,%两侧均应为整型数据,如:7%4的值为3)。 算术运算符C语言规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。C规定了各种运算符的结合方向(结合性)算术运算符的结合方向为“自左至右”,即先左后右。 记住/:当除号左右两边都是整数的时候,商也要是整数,如果不是整数则舍弃小数部分。当参与运算量有一个为实型,则商为double型。 例题:如有定义语句:intx=12,y=8,z;,在其后执行语句z=0.9+x/y,则z的值为()A.1.9B.1C.2D.2.4 类型转换各种类型数据混合运算时,最终结果的类型可依据以下转换规律:char->short->int->long->float->double 例题:若有定义语句:inta=10;doubleb=3.14;,则表达式‘A’+a+b值得类型是()A.charB.intC.doubleD.float 有两种类型转换:一种是在运算时不必用户指定,系统自动进行的类型转换,如3+6.5。第二种是强制类型转换。当自动类型转换不能实现目的时,可以用强制类型转换。 强制类型转换运算符可以利用强制类型转换运算符将一个表达式转换成所需类型。一般形式:(类型名)(表达式)例如:(double)a将a转换成double类型(int)(x+y)将x+y的值转换成整型(float)(5%3)将5%3的值转换成float型 例题:以下程序运行后的输出结果是()。main(){inta;a=(int)((double)(3/2)+0.5+(int)1.99*2);printf("%d ",a);} 若有定义:inta=7;floatx=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是()。A2.500000B2.750000C3.500000D0.000000 赋值运算符(1)赋值运算符赋值符号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量。a=3注意赋值运算符左边必须是变量,而不是表达式 赋值运算符和赋值表达式(2)复合的赋值运算符在赋值符“=”之前加上其他运算符,可以构成复合的运算符。例如:a+=3等价于a=a+3x*=y+8等价于x=x*(y+8)x%=3等价于x=x%3 赋值运算符和赋值表达式为便于记忆,可以这样理解:①a+=b(其中a为变量,b为表达式)②a+=b(将有下划线的“a+”移到“=”右侧)|___↑③a=a+b(在“=”左侧补上变量名a) 注意:如果b是包含若干项的表达式,则相当于它有括号。如:①x%=y+3②x%=(y+3)|__↑③x=x%(y+3)(不要错写成x=x%y+3)凡是二元(二目)运算符,都可以与赋值符一起组合成复合赋值符。C语言规定可以使用10种复合赋值运算符:+=,-=,*=,/=,%=,<<=,>>=,&=,∧=,|= 赋值运算符(3)赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。一般形式为:<变量><赋值运算符><表达式>例如:“a=5”是一个赋值表达式 赋值运算符对赋值表达式求解的过程是:①求赋值运算符右侧的“表达式”的值;②赋给赋值运算符左侧的变量。例如:赋值表达式“a=3*5”的值为15,执行表达式后,变量a的值也是15。注意:一个表达式应该有一个值 赋值运算符赋值表达式中的“表达式”,又可以是一个赋值表达式.例如:a=(b=5)分析:括弧内的“b=5”是一个赋值表达式,它的值等于5。执行表达式“a=(b=5)”相当于执行“b=5”和“a=b”两个赋值表达式。赋值运算符按照“自右而左”的结合顺序,因此,“(b=5)”外面的括弧可以不要,即“a=(b=5)”和“a=b=5”等价. 赋值运算符请分析下面的赋值表达式∶(a=3*5)=4*3分析:先执行括弧内的运算,将15赋给a,然后执行4*3的运算,得12,再把12赋给a。最后a的值为12,整个表达式的值为12。可以看到∶(a=3*5)出现在赋值运算符的左侧,因此赋值表达式(a=3*5)是左值注意:在对赋值表达式(a=3*5)求解后,变量a得到值15执行(a=3*5)=4*3时,实际上是将4*3的积12赋给变量a,而不是赋给3*5。不能写成:a=3*5=4*3 赋值运算符赋值表达式也可以包含复合的赋值运算符。如:a+=a-=a*a分析:此赋值表达式的求解步骤如下∶①先进行“a-=a*a”的运算,它相当于a=a-a*a,a的值为12-144=-132。②再进行“a+=-132”的运算,相当于a=a+(-132),a的值为-132-132=-264。 赋值运算符将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其他语句(如输出语句、循环语句等)中.如:printf("%d",a=b);分析:如果b的值为3,则输出a的值(也是表达式a=b的值)为3。在一个语句中完成了赋值和输出双重功能。 例题:若有定义语句:inta=3,b=2,c=1;,以下选项中错误的赋值表达式是()Aa=(b=4)=3Ba=b=c+1Ca=(b=4)+cDa=1+(b=c=4) 已知inta=6;则执行a+=a-=a*a;语句后,a的值为()。A36B0C-24D-60 自增、自减运算符作用是使变量的值增1或减1如:++i,--i(在使用i之前,先使i的值加(减)1)i++,i--(在使用i之后,使i的值加(减)1) i++与++i的区别:++i是先执行i=i+1后,再使用i的值;i++是先使用i的值后,再执行i=i+1。例如:①j=++i;i的值先变成4,再赋给j,j的值均为4②j=i++;先将i的值3赋给j,j的值为3,然后i变为4自增、自减运算符 注意:(1)自增运算符(++),自减运算符(--),只能用于变量,而不能用于常量或表达式,(2)++和--的结合方向是“自右至左”。自增、自减运算符 例题:#includemain(){intx=011;printf("%d ",++x);}程序运行后的输出结果是()A12B11C10D9 设有定义:intk=0;,下列选项的4个表达式中与其他3个表达式的值不相同的是()。Ak++Bk+=1C++kDk+1 逗号运算符逗号运算符:将两个表达式连接起来,又称为“顺序求值运算符”如:3+5,6+8一般形式:表达式1,表达式2求解过程:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。逗号表达式的值为14 逗号运算符例:逗号表达式a=3*5,a*4分析:赋值运算符的优先级别高于逗号运算符,因此应先求解a=3*5.a的值为15,然后求解a*4,得60。整个逗号表达式的值为60。一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式如:(a=3*5,a*4)a+5先计算出a的值等于15,再进行a*4的运算得60(但a值未变,仍为15),再进行a+5得20,即整个表达式的值为20。 逗号运算符和逗号表达式逗号表达式的一般形式可以扩展为表达式1,表达式2,表达式3,……,表达式n它的值为表达式n的值。逗号运算符是所有运算符中级别最低的例:①x=(a=3,6*3)②x=a=3,6*3赋值表达式,将一个逗号表达式的值赋给x,x的值等于18逗号表达式,包括一个赋值表达式和一个算术表达式,x的值为3,整个逗号表达式的值为18。 逗号运算符和逗号表达式注意:并不是任何地方出现的逗号都是作为逗号运算符。例如函数参数也是用逗号来间隔的。如:printf(“%d,%d,%d”,a,b,c);“a,b,c”并不是一个逗号表达式,它是printf函数的3个参数printf(“%d,%d,%d”,(a,b,c),b,c)“(a,b,c)”是一个逗号表达式,它的值等于c的值。 例题:设有定义:intx=2;以下表达式中,值不为6的是()Ax*=x+1Bx++,2*xCx*=(1+x)D2*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);Ax=27,y=27Bx=12,y=13Cx=15,y=14Dx=y=27 例题:假设有语句sizeof(double),则它是()A一个整型表达式B一个双精度浮点型表达式C一种函数调用D一种函数定义