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