下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、c c 语言复习材料语言复习材料第第1 1章章c c 语言概述语言概述1.1.计算机语言经历了四代发展计算机语言经历了四代发展: :第一代:机器语言, 二进制 0、1 构成的面向特定机器的低级语言。计算机可以直接执行。第二代:汇编语言。又称符号语言, 对机器指令进行简单的符号化。第三代:高级语言,完全接近人类习惯,各种机器指令用英文单词表示。如:basic,fortran, c,pascal 等。第四代:甚高级语言,是一种面向对象或面向问题的高级语言。 如:visual basic, 简称 vbvisual c+, 简称 vc。2.2.语言的发展历程语言的发展历程73 年 贝尔实验室 d.m.
2、ritchie 设计出 c 语言,用 c 改写 unix 内核77 年 出现不依赖于具体机器的 c 语言编译文本(系统)80 年代初,美国国家标准化协会(ansi) ,根据语言问世以来各种版本对语言的发展和扩充,制定了 ansi c 标准1987 年 ansi 公布 c 新标准 87 ansi c1990 年 iso(国际标准化组织)接受上述 87 ansic 标准,作为 iso 的 c 标准80 年代 c 普及和 c+ 推出3.3.语言的特点语言的特点(1)语言简洁、紧凑,使用方便、灵活。 32 个关键字、9 种控制语句,程序形式自由。(2)运算符丰富。34 种运算符 。(3)数据类型丰富,
3、具有现代语言的各种数据结构。(4)具有结构化的控制语句 ,是完全模块化和结构化的语言。(5)语法限制不太严格,程序设计自由度大。(6)允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可直接对硬件进行操作。兼有高级和低级语言的特点 。(7)目标代码质量高,程序执行效率高。(8)程序可移植性好(与汇编语言比)。基本上不做修改就能用于各种型号的计算机和各种操作系统。3232 个关键字个关键字autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshor
4、tsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile9 9 种控制语句种控制语句if( )elsefor( )while( )dowhile( )continuebreakswitchgotoreturn3434 种运算符种运算符算术运算符:+-*/%+-关系运算符:=!=逻辑运算符: !&|1位运算符:|&赋值运算符:= 及其扩展条件运算符:?:逗号运算符:,指针运算符:*&求字节数:sizeof强制类型转换:(类型)分量运算符:.-下标运算符:其它:( )-4.4. 简单的简单的 c
5、 c 语言程序介绍语言程序介绍以 # 开始的语句称为预处理器指令以.h 为后缀的文件被称为头文件,可以是 c 程序中现成的标准库文件,也可以是自定义的库文件。c 程序中的一个语句可以跨越多行,并且用分号通知编译器该语句已结束。语言程序的结构1.一个完整的语言程序,是由一个 main()函数(又称主函数)和若干个其它函数结合而成的,或仅由一个 main()函数构成。 。2. 一个语言程序,总是从 main()函数开始执行,而不论其在程序中的位置。当主函数执行完毕时,亦即程序执行完毕。习惯上,将主函数 main()放在最前头。3.函数是语言程序的基本单位。语言程序体现了结构程序设计的特征。4.函数
6、的一般结构任何函数(包括主函数 main())都是由函数说明和函数体两部分组成。其一般结构如下: 函数类型 函数名(函数参数表) 说明语句部分;执行语句部分; 1.函数说明函数说明由三部分组成:(1)函数类型(2)函数名(3)函数参数表,其中函数参数表的格式为:数据类型形参, 数据类型形参 2函数类型函数名函数参数表intmax(intx ,inty)2.函数体函数体一般由说明语句和可执行语句两部分构成。在函数说明部分的下面,一对内的部分。大括号必须配对使用 。(1)说明语句部分说明语句部分由变量定义、自定义类型定义、自定义函数说明、外部变量说明等组成。2 int a, b; float k,
7、 h;(2)可执行语句,一般由若干条可执行语句构成。3.函数体说明(1)如果不需要,也可以缺省变量定义语句。例如,例1.1程序中缺省变量定义语句。(2)函数体中的变量定义语句,必须在所有可执行语句之前。下面程序中变量定义语句“ int x; ”的位置是非法的:4. c 语言程序使用英文小写字母书写。 c 语言区分字母大小写,大写字母一般符号常量或特殊用途使用。5. 所有语句都必须以分号“ ; ”结束,作为语句之间的分隔符。函数的最后一个语句也必须以分号“ ; ”结束。6. 程序行的书写格式自由。既允许 1 行内写几条语句,也允许 1 条语句分写在几行上。7. c 语言程序不使用行号。8. c
8、语言本身没有输入输出语句。 输入和输入操作是由库函数 scanf 和 printf 等函数来实现的。9.在源程序中,凡是用“/*”和“*/”括起来的文字,都是注释。c 语言的注释格式为:/* */(1) “/*” 和 “*/” 必须成对使用,且 “/” 和 “*”、以及 “*” 和 “/” 之间不能有空格,否则都出错。(2)注释的位置,可以单占 1 行,也可以跟在语句的后面。(3)如果 1 行写不下,可另起 1 行继续写。(4)注释中允许使用汉字。在非中文操作系统下,看到的是一串乱码,但不影响程序运行。第第 2 2 章章 程序的灵魂算法程序的灵魂算法1.1. 算法的特性算法的特性(1)有穷性:
9、一个算法总是执行有限步后结束, 每一步在有限时间内完成(2)确定性:算法中每一个步骤应当是确定的,而不能应当是含糊的、模棱两可的。输入:一个算法有 0 个或多个输入的外界量 。3输出,一个算法有一个或多个输出的量,它们是与输入有某种关系的量。(3)有效性:算法中每一个步骤应当能有效地执行,并得到确定的结果。2.2.一个流程图包括以下几部分:一个流程图包括以下几部分:(1)表示相应操作的框;(2)带箭头的流程线;(3)框内外必要的文字说明注意:流程线不要忘记画箭头.用流程图表示算法直观形象,比较清楚地显示出各个框之间的逻辑关系。3.3.三种基本结构的表示三种基本结构的表示(1)顺序结构(2)选择
10、结构(3)循环结构a) 当型循环 b) 直到型循环4.4.三种基本结构的特点三种基本结构的特点(1)只有一个入口 (2)只有一个出口 (3)不存在死语句 (4)不存在死循环5.5.结构化程序设计思想结构化程序设计思想自顶向下、逐步细化、模块化自顶向下:先从全局、整体设计逐步细化:将一个问题分解成几个较小的问题解决模块化:将一个大任务分解成若干个较小的部分,每个部分承担一定功能,称为“功能模块”第第 3 3 章章 数据类型、运算符与表达式数据类型、运算符与表达式1.1.常量常量.常量:在程序运行过程中,其值不能改变的量称为常量, 可为任意数据类型.符号常量:标识符代表常量定义格式: #defin
11、e变量: 在程序运行过程中,其值可以被改变的量称为变量。可以为任意数据类型.变量定义的一般格式: 数据类型变量 1,变量 2,变量 n;变量的三个要素:4(1)变量名。每个变量都必须有一个名称。(2)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。(3)变量的类型标识符命名规则语言中,用标识符来区分不同文件、函数、变量。(1)标识符有效字符:只能由字母、数字和下划线组成,且以字母或下划线开头。(2)标识符有效长度:tc v2.0 标识符的有效长度为个字符。随系统而异,但至少前个字符有效。如果超长,则超长部分被舍弃。(3)c 语言的关键字不能用作变量名。(4)标
12、识符命名通常应选择能表示数据含义的英文单词(或缩写)作变量名,或汉语拼音字头作变量名。通过变量名就知道变量值的含义,做到“见名知意”。注意:c 语言对英文字母的大小敏感,即同一字母的大小写,被认为是两个不同的字符。变量名 total 与变量名 total、total、total 等不是同一个变量,习惯上,变量名和函数名中的英文字母用小写,以增加可读性。整型数据在内存中的存放,数值是以补码表示的。一个正数的补码与原码相同;一个负数的补码求法:原码的二进制形式,取反求得反码,再加 1,得到负数的补码。2.2.整型变量的分类整型变量的分类有符号基本整型(signed)int有符号短整型(signed
13、)short (int )有符号长整型(signed) long (int)无符号基本整型unsigned int无符号短整型unsigned short (int)无符号长整型unsigned long (int)整数类型的有关数据5类型类型说明符长度数的范围基本型int2 字节-3276832767短整型short2 字节-215215-1长整型long4 字节-231231-1无符号整型unsigned2 字节065535无符号短整型unsigned short2 字节065535无符号长整型unsigned long4 字节0(232-1)整型常量的类型(1)一个整数,如果其值在-32
14、768+32767 范围内,认为它是 int 型,它可以赋值给int 型和 long int 型变量。(2) 一个整数,如果其值超过了上述范围,而在-2147483637+2147483647 范围内,则认为它是为长整型。可以将它赋值给一个 long int 型变量。(3) 一个整常量后面加一个字母 u 或 u,认为是unsigned int 型,如12345u,在内存中按 unsigned int 规定的方式存放(存储单元中最高位不作为符号位,而用来存储数据)。如果写成-12345u,则先将-12345 转换成其补码 53191,然后按无符号数存储。(4) 在一个整常量后面加一个字母 l 或
15、 l,则认为是 long int 型常量。用于函数调用中。如果函数的形参为 long int 型,则要求实参也为 long int 型。规范化的指数形式:在字母 e(或 e)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字.3.3.浮点型变量浮点型变量浮点型变量的分类6浮点型变量分为单精度 (float 型) 、 双精度 (double 型) 和长双精度型 (long double)三类形式。类型位数数的范围有效数字float 32 10-37 10-38 67 位double 型 64 10-30710-308 1516 位long double 128 10-493110-4
16、932 1819 位说明:一个浮点型变量只能保证的有效数字是 7 位有效数字,后面的数字是无意义的,并不准确地表示该数。应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数4.4.字符型数据字符型数据字符常量:用单引号包含的一个字符是字符型常量,只能包含一个字符转义字符:有些以“”开头的特殊字符称为转义字符转义字符nvraddd注意事项:单撇号中的字符不能是或者一个字符占一个字节,字符常量的值:该字符的 ascii 码值思考:9和 9 的区别含义换行垂直制表回车响铃单引号3 位 8 进制数代表的字符转义字符tbf“xhh含义水平制表退格换页反斜线双引号2 位 16 进制数
17、代表的字符5.5.字符变量字符变量字符型变量用来存放字符常量,注意只能放一个字符。字符变量的定义形式如下:char c1,c2;在本函数中可以用下面语句对 c1,c2 赋值:c1a;c2 b ;一个字符变量在内存中占一个字节。字符数据在内存中的存储形式及其使用方法一个字符常量存放到一个字符变量中,实际上并不是把该字符的字型放到内存中去,而是将该字符的相应的 ascii 代码放到存储单元中。这样使字符型数据和整型数据之间可以通用。7例 3.6 向字符变量赋以整数。#include void main()char c1,c2;c1=97;c2=98;printf(“%c %cn”,c1,c2);p
18、rintf(“%d %dn”,c1,c2);例 3.7 大小写字母的转换.#include void main()char c1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(“c c,c1,c2) ;说明:说明:程序的作用是将两个小写字母 a和 b 转换成大写字母 a 和 b。从代码表中可以看到每一个小写字母比它相应的大写字母的 ascii 码大 32。语言允许字符数据与整数直接进行算术运算。说明:说明:在第和第 4 行中,将整数97 和98 分别赋给 c1 和 c2, 它的作用相当于以下两个赋值语句:c1;c2;因为a和 b的ascii 码为 97 和 986
19、.6.字符串常量字符串常量字符串常量是一对双撇号括起来的字符序列.是字符常量,”是字符串常量,二者不同。不能把一个字符串常量赋给一个字符变量。规定:在每一个字符串常量的结尾加一个 “字符串结束标志”,以便系统据此判断字符串是否结束。规定以字符作为字符串结束标志。8字符常量 a 与字符串常量 a 的区别:(1)定界符不同:字符常量使用单引号a ,而字符串常量使用双引号 ;(2)存储要求不同:字符常量存储的是字符的 ascii 码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志 0 。7.7.变量赋初值变量赋初值(1)语言允许在定义变量的同时使变量初始化.(2)可以使被定义的变量的一
20、部分赋初值。如: int a,b,c=5;表示指定、为整型变量,但只对初始化,c 的初值为(3)如果对几个变量赋以同一个初值,应写成:int a=3,b=3,c=3;表示、的初值都是。不能写成 int a=b=c=3;注意:初始化不是在编译阶段完成的而是在程序运行时执行本函数时赋初值的,相当于有一个赋值语句。8.8.算术运算符和算术表达式算术运算符和算术表达式基本的算术运算符+加法运算或正值运算符-减法运算或负值运算符*乘法运算符/除法运算符,求商,两个整数相除结果为整数%模运算符,求余,要求两侧均为整型数据9.9.赋值运算符和赋值表达式赋值运算符和赋值表达式如果赋值运算符两侧的类型不一致,但
21、都是数值型或字符型时,在赋值时要进行类型转换。将浮点型数据(包括单、双精度)赋给整型变量时,舍弃浮点数的小数部分。如:为整型变量,执行“i=3.56”的结果是使的值为,以整数形式存储在整型变量中.将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中如: 将 23 赋给 float 变量,即执行23,先将 23 转换成 2300000,再存储在中。将 23 赋给 double 型变量,即执行23,系统将 23 补足有效位数字为2300000000000000,然后以双精度浮点数形式存储到变量中。将一个 double 型数据赋给 float 变量时, 截取其前面 7 位有效数字,
22、存放到 float9变量的存储单元(4 个字节)中。但应注意数值范围不能溢出。如:float f;double d=123.456789e100; f=d;就出现溢出的错误。如果将一个 float 型数据赋给 double 变量时,数值不变,有效位数扩展到 16 位,在内存中以 8 个字节存储.字符型数据赋给整型变量时,由于字符只占 1 个字节,而整型变量为个字节,因此将字符数据(个二进位)放到整型变量存储单元的低位中。第一种情况:低位对应、高位补零第二种情况:符号扩展将一个 int、short、long 型数据赋给一个 char 型变量时,只将其低 8 位原封不动地送到 char 型变量(即
23、截断) 。例如:int i=289;char c=a;c=i;6将带符号的整型数据(int 型)赋给 long 型变量时,要进行符号扩展,将整型数的 16 位送到 long 型低 16 位中:如果 int 型数据为正值(符号位为) ,则 long 型变量的高 16 位补;如果 int 型变量为负值(符号位为) ,则 long 型变量的高 16 位补,以保持数值不改变。反之,若将一个 long 型数据赋给一个 int 型变量,只将 long 型数据中低 16 位原封不动地送到整型变量(即截断) 。将 unsigned int 型数据赋给 long int 型变量时,不存在符号扩展问题,只需将高位
24、补即可。将一个 unsigned 类型数据赋给一个占字节数相同的非 unsigned 型整型变量(例如:unsigned int -int,unsigned long-long,unsigned short-short) ,将 unsigned 型变量的内容原样送到非 unsigned 型变量中,但如果数据范围超过相应整型的范围,则会出现数据错误。复合的赋值运算符复合的赋值运算符 a += b (其中 a 为变量,b 为表达式) a += b(将有下划线的“a+”移到“=”右侧) |_ a = a + b (在“=”左侧补上变量名 a)如果是包含若干项的表达式,则相当于它有如果是包含若干项的表
25、达式,则相当于它有 括号。括号。如:如: x %= y+3 x %= (y+3)语言规定可以使用种复合赋值运算符:语言规定可以使用种复合赋值运算符:,* *,| |左值左值 (lvalue) (lvalue) : 赋值运算符左侧的标识符变量可以作为左值;而表达式就不能作为左值(如 a+b);常变量也不能作为左值,右值右值 (lvalue) (lvalue) :出现在赋值运算符右侧的表达式左值也可以出现在赋值运算符右侧,因而左值都可以作为右值。赋值表达式中的“表达式” ,又可以是一个赋值表达式。例如例如: : a=(b=5)分析分析: :括弧内的“b=5”是一个赋值表达式,它的值等于 5。执行表
26、达式“a=(b=5)”相当于执行“b=5”和“ab”两个赋值表达式。 赋值运算符按照“自右而左”的结合顺序,因此,“(b5)”外面的括弧可以不要,即“a=(b=5)”和“a=b=5”等价。分析下面的赋值表达式(a=3*5)=4*310分析分析: :先执行括弧内的运算,将 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
27、 的积 12 赋给变量 a,而不是赋给 3*5。赋值表达式也可以包含复合的赋值运算符。如:如:a+=a-=a*a分析分析: :此赋值表达式的求解步骤如下 先进行“*”的运算, 它相当于*,a 的值为144132。再进行“”的运算,相当于 =a+(-132),a 的值为132-132-264。10.10.逗号运算符和逗号表达式逗号运算符和逗号表达式逗号运算符:将两个表达式连接起来,又称为“顺序求值运算符”一般形式:表达式,表达式求解过程:先求解表达式,再求解表达式。整个逗号表达式的值是表达式的值。例:逗号表达式*5,*分析:赋值运算符的优先级别高于逗号运算符, 因此应先求解*5。一个逗号表达式又
28、可以与另一个表达式组成一个新的逗号表达式如:(*,*),a+5 3*5 先计算出的值等于,再进行*的运算得 60(但值未变,仍为 15) ,再进行得,即整个表达式的值为。赋值表达式,将一个逗号表达式的逗号运算符是所有运算符中级别最低的值赋给,的值等于例例: : (,*) ,*3逗号表达式,包括一个赋值表达式和一个算术表达式,的值为,整个逗号表达式的值为18。例 1 a=3*5,a*4 /a=15,表达式值 60 a=3*5,a*4,a+5 /a=15,表达式值 20例 2 x=(a=3,6*3) /赋值表达式,表达式值 18,x=18 x=a=3,6*a /逗号表达式,表达式值 18,x=3例
29、 3 a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c); /1,2,3printf(“%d,%d,%d”,(a,b,c),b,c); /3,2,3例 4printf(“%d,%d,%d”,a,b,c) ; /其中逗号起分隔作用printf(“%d,%d,%d”,(a,b,c),b,c)/其中逗号为逗号运算符11.11. 自增自增+、自减运算符、自减运算符作用:使变量值加 1 或减 1种类:前置 +i, -i (先执行 i+1 或 i-1,再使用 i 值。后置 i+,i- (先使用 i 值,再执行 i+1 或 i-1) 。例 j=3; k=+j; /k=4,j=4 j=3
30、; k=j+; /k=3,j=4j=3; printf(“%d”,+j); /411j=3; printf(“%d”,j+); /3 a=3;b=5;c=(+a)*b; /c=20,a=4 a=3;b=5;c=(a+)*b; /c=15,a=4注意说明:只能用于变量,不能用于常量或表达式;结合方向“自右向左”;优先级别: - - + - - * / % - + - - + - - * / % - + -自增(减)运算常用于循环语句中循环变量自动加(减)1 或指针变量,使指针指向下一个地址表达式中包含多个自加、自减运算时,很容易出错例 1:如 i3,则 ki结果:k3,i4例 2:如 i3,则(
31、i+) + (i+) + (i+)结果:9,i6例 3:如 i3,则(+ i) + (+ i) + (+ i)结果:18,i6第四章第四章 最简单的最简单的 c c 程序设计顺序程序设计程序设计顺序程序设计c 语言本身不提供输入输出语句,输入和输出操作是由 c 函数库中的函数来实现的字符输入函数: getchar字符输出函数:putchar格式输入函数: scanf格式输出函数: printf字符串输入函数:gets字数串输出函数:puts1.putchar1.putchar 函数(字符输出函数)函数(字符输出函数)putchar 函数是字符输出函数,其功能是在显示器上输出单个字符。其一般形式
32、为:putchar(c) c 可以是变量或者常量例 4.1输出单个字符。#include main()结果: char a=b,b=o,c=y;b putchar(a); putchar(n);o putchar(b); putchar(n);y putchar(c); putchar(n); 2.getchar2.getchar 函数(字符输入函数)函数(字符输入函数)getchar 函数的功能是从键盘上输入一个字符。其一般形式为:getchar(); /getchar 函数没有参数,函数的值就是输入的字符例 4.2 输入单个字符。#include void main()程序最后两行可用下
33、char c;面两行的任意一行代 printf(input a charactern);替,结果相同: c=getchar();putchar(getchar(); putchar(c);printf(“%c”,getchar();3.printf3.printf 函数(格式输出函数)函数(格式输出函数)printf 函数的作用是按用户指定的格式,输出若干任意类型的数据。一般形式printf(“格式控制字符串”,输出表列)格式说明是以%开头,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。12如:“%d”表示按十进制整型输出;“%ld”表示按十进制长整型输出;“%c”表
34、示按字符型输出等。普通字符在输出时原样输出,在显示中起提示作用。格式字符(1)d 格式符。用来输出十进制整数。有几种用法:%d,按整型数据的实际长度输出。%md,m 为指定的输出字段的宽度。如果数据的位数小于 m,则左端补空格,若大于 m,则按实际位数输出。如:a=123;d=12345printf(“%4d,%4d”,a,b);结果:123,12345%ld,输出长整型数据。如long a=135790;printf(“%ld”,a);(2)o 或 lo 或 mo 格式符,以八进制形式输出整数。(3)x 或 lx 或 mx 格式符,以十六进制形式输出整数。(4)u 格式符,用来输出 unsi
35、gned 型数。(5)c 格式符,用来输出一个字符。如:char c=a;printf(“%c”,c);输出:a也可以指定输出宽度,如:printf(“%3c”,c);输出:a(6)s 格式符,用来输出一个字符串。有几种用法:%s,例如:printf(“%s”,”china”);输出 china %ms,输出的字符串占m 列,如字符串长度大于m,则按字符串实际长度输出;若字符串长度小于 m,则左补空格。%-ms,同上,右补空格。%m.ns,输出占 m 列,但只取字符串中左端 n 个字符,左补空格。 %-m.ns,输出占 m 列,但只取字符串中左端 n 个字符,右补空格。例 4.5字符串的输出。
36、main()printf(“%3s,%7.2s,%.4s,%-5.3s,n”,”china”, ”china”, ”china”, ”china”);结果为: china, ch,chin,chi(7)f 格式符,用来输出实数(包括单、双精度) ,以小数形式输出。有以下几种用法:%f,不指定字段宽度,由系统自动指定,使整数部分全部如数输出,并输出 6 位小数。例 4.6 输出实数时的有效位数。13main()float x=111111.111, y=222222.222;printf(“%f” , x+y);结果:333333.328125单精度只有 7 位有效数字。例 4.7 输出双精度数
37、时的有效位。main()double x, y; x=1111111111111.111111111; y=2222222222222.222222222;printf(“%f” , x+y);结果为:3333333333333.333010双精度只有 16 位有效数字。%m,nf 指定输出的数据占 m 列,其中有 n 位小数。如果数值长度小于 m 位,则左端补空格。 %-m,nf 同上,右端补空格。例 4.8 输出实数时指定小数位数。main()float f=123.456;printf(“%f%10f%10.2f%.2f%-10.2fn”,f,f,f,f,f);结果:123.456001
38、123.456001123.46123.46123.46 (8)e 格式符,以指数形式输出实数%e,不指定输出数据所占的宽度和数字部分的小数位数。数值按规范化指数形式输出。printf(“%e”,123.456);输出结果:1.234560e+002%m.ne 和%-m.ne设 f=123.456printf(“%e%10e%10.2e%.2e%-10.2e”,f,f,f,f);1.234560e+0021.234560e+0021.23e+0021.23e+0021.23e+002(9)g 格式符,用来输出实数,它根据数值的大小,自动选 f 格式或 e 格式(选择输出时占宽度较小的一种) ,
39、且不输出无意义的 0。f=123.456printf(“%f %e %g”,f,f,f);123.456001 1.234560e+002 123.45600114格式字符dox,xufe,eg,gcs意义以十进制形式输出带符号整数(正数不输出符号)以八进制形式输出无符号整数(不输出前缀0)以十六进制形式输出无符号整数(不输出前缀ox)以十进制形式输出无符号整数以小数形式输出单、双精度实数以指数形式输出单、双精度实数以%f或%e中较短的输出宽度输出单、双精度实数输出单个字符输出字符串在使用 printf 函数时,还有几点要说明:(1)除了 x,e,g 外,其他格式符必须用小写字母。(2) 可以
40、在 printf 函数中的“格式控制”字符串内包括“转义字符”, 如n,t,r等。(3)上面介绍的“d,o,x,u,c,s,f,e,g”等字符,用在“%”后面是格式符,不在“%”后面就是普通字符。例如:printf(“c=%cf=%fs=%s”,c,f,s);()如果想输出字符“”,则在“格式控制”字符串中用“”表示。如:printf(“%f%”,1.0/3);输出:0.333333%4.scanf4.scanf 函数函数( (格式输入函数格式输入函数) )一般形式scanf(“格式控制字符串”,地址表列);地址是由地址运算符“&”后跟变量名组成的。例如: &a, &b
41、分别表示变量 a 和变量 b 的地址。15格式doxuf或ecs字符意义输入十进制整数输入八进制整数输入十六进制整数输入无符号十进制整数输入实型数(用小数形式或指数形式)输入单个字符输入字符串说明:1)用十进制整数指定输入的宽度,系统自动按它截取所需数据。scanf(%5d,&a);输入:12345678只把 12345 赋予变量 a,其余部分被截去。2)在%后面加一个“*”符,表示该输入项,读入后不赋予相应的变量,即跳过该输入值。scanf(%d %*d %d,&a,&b);当输入为:1 2 3时,把 1 赋予 a,2 被跳过,3 赋予 b。3)长度:长度格式符为 l
42、 和 h,l 表示输入长整型数据 (如%ld) 和双精度浮点数(如%lf)。h 表示输入短整型数据。4)scanf 函数中没有精度控制,如:scanf(%5.2f,&a);是非法的。不能企图用此语句输入小数为 2 位的实数。使用 scanf 函数时应注意的问题(1)scanf 中要求给出变量地址,如给出变量名则会出错。如scanf(“%d”,a);是非法的,应改为 scnaf(“%d”,&a);才是合法的。(2)如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在输入数据时在对应位置应输入与这些字符相同的字符。scanf(“%d%d”,&a,&b);输入
43、时,两个数据之间应空 2 个或更多的空格:(3)在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。例如: scanf(%c%c%c,&a,&b,&c);输入为: def则把d赋予 a, 赋予 b, e赋予 c。只有当输入为: def时,才能把d赋于 a, e赋予 b, f赋予 c。(4)在输入数据时,遇到以下情况时该数据认为结束:16遇空格,tab 或回车作间隔。按指定宽度结束,如“%3d”,只取 3 列。遇非法输入。第五章第五章 选择结构程序设计选择结构程序设计1.1.逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式运算运算运算符运算符表达式
44、表达式逻辑“与”&operand1 & operand2逻辑“或”|operand1 | operand2逻辑“非”!operand1运算优先级 ! & |c 语言编译系统在表示逻辑运算结果时,以 1 代表“真”,以 0 代表“假”,但在判断一个量是否“真”时,是以 0 代表假,以非 0 代表真。2.if2.if 语句(条件选择语句)语句(条件选择语句)1if 语句的一般格式if(if(表达式表达式) ) 语句组语句组 1;1; else else 语句组语句组 2; 2; (1)if 语句中的“表达式”必须用“( (”和“) )”括起来。(2)else 子句(可选)是
45、 if 语句的一部分,必须与 if 配对使用,不能单独使用。(3)当 if 和 else 下面的语句组,仅由一条语句构成时,也可不使用复合语句形式(即去掉花括号) 。2if 语句的执行过程(1)缺省 else 子句时当“表达式”的值不等于 0(即判定为“逻辑真”)时,则执行语句组1,否则直接转向执行下一条。(2)指定 else 子句时当“表达式”的值不等于 0(即判定为“逻辑真”)时,则执行语句组1,然后转向下一条语句;否则,执行语句组 2。 3if 语句的嵌套与嵌套匹配原则 if 语句允许嵌套。所谓if 语句的嵌套是指,在“语句组1”或(和)“语句组2”中,又包含有 if 语句的情况。 if
46、 语句嵌套时,else 子句与 if 的匹配原则:与在它上面、距它最近、且尚未匹配的 if 配对。为明确匹配关系,避免匹配错误,强烈建议:将内嵌的if 语句,一律用花括号括起来。3.3.条件运算符与表达式条件运算符与表达式一般格式:expr1 ? expr2 : expr3条件运算符优先级高于赋值运算符 ,低于关系运算符和算术运算符。“表达式 2”和“表达式 3”不仅可以是数值表达式,还可以是赋值表达式或函数表达式。条件表达式中,表达式的类型可以与表达式和表达式的类型不同。4.switch4.switch 语句(开关分支语句)语句(开关分支语句)一般形式:17switch( 表达式) case
47、 e1:语句组 1; break; case e2:语句组 2; break;. case en:语句组 n; break; default:语句组 ;说明(1) switch 后面的“表达式”, 可以是 int、 char 和枚举型中的一种(有限的个数)。(2)每个 case 后面“常量表达式”的值,必须各不相同,否则会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的执行方案) 。(3)case 后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上 break 语句,以便结束 switch 语句。(4)各 ca
48、se 及 default 子句的先后次序,不影响程序执行结果。(5)多个 case 子句,可共用同一语句(组) 。例 如,“case10: ” 和“case9: ” 共用 语句“printf(grade=an);break;” , “case5: ”“case0: ” 共 用 语 句 “printf(grade=en);break;”。(6)用 switch 语句实现的多分支结构程序,完全可以用 if 语句或 if 语句的嵌套来实现。例 5.1void main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+; bre
49、ak; case 1: b+; break; case 2: a+;b+; break; case 3: a+;b+; printf(na=%d,b=%dn,a,b); 运行结果:a=2,b=1例 5.2 求一元二次方程 ax2+bx+c=0 的解#include main()float a,b,c,disc,x1,x2,p,q;scanf(%f,%f,%f, &a, &b, &c);printf(the equation );18if( fabs(a) = 1e-6 )printf(is not quadratic );elsedisc = b*b-4*a*c;if
50、( fabs(disc)1e-6) x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf(x1=%7.2f,x2=%7.2fn, x1, x2);elsep=-b/(2*a);q=sqrt(fabs(disc)/(2*a);printf(x1=%7.2f + %7.2f in, p, q);printf(x2=%7.2f - %7.2f in, p, q);第第 6 6 章章 循环控制循环控制1.while1.while 语句语句一般形式:循环变量的初始值;while(循环条件表达式)循环体语句;2.do-while2.do-whil
51、e 语句语句一般形式:循环变量的初始值;dodo循环体语句;whilewhile(循环条件表达式)do-whiledo-while 同同 while while 语句的重要区别语句的重要区别循环控制在循环体之前,只有当 while 后的表达式为非 0 时,才可能执行循环体,循环体有可能一次都不执行。总是先执行一次循环体, 然后再求表达式的值, 因此, 无论表达式的值是 0 还是非 0,循环体至少执行一次。3.for3.for 语句语句一般形式19for(循环变量赋初值;循环条件;循环变量增值)循环体语句;省略表达式 1相当于省去了为循环变量赋初值,此时应在 for 语句之前给循环变量赋初值省略
52、表达式 2即不判断循环条件,也就是认为表达式 2 始终为真,这时应在循环体内设法结束循环,否则将成为死循环省略表达式 3即省去修改循环变量的值,但此时应在循环体内设法结束循环省略三个表达式即不为循环变量赋初值,不设置循环条件(认为表达式 2 为真值),不修改循环变量的值,无终止地执行循环体。此时应在循环体内设法结束循环,否则会成为死循环循环的嵌套(1)while()(2)do(3)while()while()dodowhile( );while( );.while( );几种循环的比较1. 四种循环都可以用来处理同一问题,一般情况下它们可以互相代替。但一般不提倡用 goto 型循环。2. wh
53、ile 和 do-while 循环,只在 while 后面指定循环条件,在循环体中应包含使循环趋于结束的语句(如 i+,或 i=i+1 等) 。3. 用 while 和 do-while 循环时, 循环变量初始化的操作应在 while 和 do-while语句之前完成。而 for 语句可以在表达式 1 种实现循环变量的初始化。4. while 循环、do-while 循环和 for 循环,可以用 break 语句跳出循环,用continue 语句结束本次循环。而对 goto 语句和 if 语句构成的循环,不能用break 和 continue 语句进行控制。breakbreak 语句可以跳出本
54、层循环语句可以跳出本层循环continuecontinue 语句可以结束本次循环。语句可以结束本次循环。第第 7 7 章章数组数组数组是可以在内存中连续存储多个元素的结构数组中的所有元素必须属于相同的数据类型表示元素个数引用时1.1.一维数组的定义和引用一维数组的定义和引用下标从 0 开始定义方式:类型说明符数组名常量表达式;一维数组的初始化在定义数组时对数组元素赋以初值。20可以只给一部分元素赋值int a10=0,1,2,3,4;定义 a 数组元素有 10 个元素,但花括弧内只提供 5 个初值,这表示只给前面 5 个元素赋初值,后 5 个元素值为 0如果想使一个数组中全部元素值为0,可以写
55、成int a10=0,0,0,0,0,0,0,0,0,0;或int a10=0;不能写成int a10=0*10;在对全部数组元素赋初值时,可以不指定数组长度,例如:int a5=1,2,3,4,5;可以写成int a =1,2,3,4,5;但若数组长度与提供初值的个数不相同,就不能省略长度int a10=1,2,3,4,5;例 7.1用数组来处理求 fibonacci 数列问题。#include main()int i;int f20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i%5=0)printf(n);printf(%12d,f
56、i);211123581321345589144233377610987 1597 2584 4181 6765printf(n);2.2.二维数组的定义和引用二维数组的定义和引用定义方式:数据类型数组名常量表达式 1常量表达式 2;二维数组元素的引用形式:数组名下标 1下标 2/注意下标不能越界二维数组元素的初始化分行初始化:按元素排列顺序初始化例 7.2求 34 矩阵中最大元素值及其行列号。#include main()int a34=1,2,3,4,9,8,7,6,-10,10,-5,2;int i,j,row=0,colum=0,max;max=a00;for(i=0;i=2;i+)f
57、or(j=0;jmax)max=aij;row=i;colum=j;22printf(max=%d,row=%d, colum=%dn,max,row,colum);3.3.字符串处理函数字符串处理函数字符串输出函数字符串输出函数 putsputs格式:puts(字符数组)功能:向显示器输出字符串(输出完,换行)说明:字符数组必须以0结束字符串输入函数字符串输入函数 getsgets格式:gets(字符数组)功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加0说明:输入串长度应小于字符数组长度字符串连接函数字符串连接函数 strcatstrcat格式:strcat(字符数组 1,字符
58、数组 2)功能:把字符数组 2 连到字符数组 1 后面返值:返回字符数组 1 的首地址说明:字符数组 1 必须足够大连接前,两串均以0结束;连接后,串 1 的0取消,新串最后加0字符串拷贝函数字符串拷贝函数 strcpystrcpy格式:strcpy(字符数组 1,字符串 2)功能:将字符串 2,拷贝到字符数组 1 中去23返值:返回字符数组 1 的首地址说明:字符数组 1 必须足够大拷贝时0一同拷贝不能使用赋值语句为一个字符数组赋值字符串比较函数字符串比较函数 strcmpstrcmp格式:strcmp(字符串 1,字符串 2)功能:比较两个字符串比较规则:对两串从左向右逐个字符比较(asc
59、ii 码) ,直到遇到不同字符或0为止返值:返回 int 型整数,a. 若字符串 1 字符串 2, 返回正整数c. 若字符串 1= 字符串 2, 返回零说明:字符串比较不能用“=”,必须用 strcmp字符串长度函数字符串长度函数 strlenstrlen格式:strlen(字符数组)功能:计算字符串长度返值:返回字符串实际长度,不包括0在内字符串小写函数字符串小写函数 strlwrstrlwr格式: strlwr(字符串)功能:将字符串中大写字母转换成小写字母返值:返回字符串的首地址字符串大写函数字符串大写函数 struprstrupr格式:strupr(字符串)功能:将字符串中小写字母转换
60、成大写字母返值:返回字符串的首地址第第 8 8 章章函函 数数1.1.函数机制的优点函数机制的优点24使程序变得更简短而清晰有利于程序维护可以提高程序开发的效率提高了代码的重用性说明:一个源程序文件由一个或多个函数组成。一个源程序文件是一个编译单位。一个 c 程序由一个或多个源程序文件组成。c 程序的执行从 main 函数开始,调用其他函数后流程回到 main 函数,在main 函数中结束所有函数都是平行的,函数不能嵌套定义,函数间可以相互调用但不能调用main 函数从用户使用的角度看,函数有两种1.库函数:2.自定义函数:从函数形式看:无参函数:主调函数和被调函数之间不进行参数传送。此类函数通常用来完成一组指定的功能,可以返回或不返回函数值。有参函数:主调函数在调用被调用函数时,通过参数向被调用函数传递数据,供被调函数使用。执行被调用函数会得到一个函数值,供主调
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2022年大学农业工程专业大学物理下册期末考试试题C卷-含答案
- 建筑工程项目管理中的施工现场管理与优化措施分析
- 石河子大学《信息技术教学技能训练》2022-2023学年第一学期期末试卷
- 石河子大学《土力学实验》2022-2023学年第一学期期末试卷
- 石河子大学《嵌入式系统原理与应用》2022-2023学年期末试卷
- 石河子大学《单片机原理及应用》2022-2023学年期末试卷
- 沈阳理工大学《运筹学》2022-2023学年第一学期期末试卷
- 沈阳理工大学《西方近现代建筑史》2021-2022学年第一学期期末试卷
- 沈阳理工大学《汽车电器与电子控制技术》2022-2023学年期末试卷
- 沈阳理工大学《传感与测试技术》2022-2023学年第一学期期末试卷
- 建筑项目安全风险分级管控清单建筑风险分级管控清单(范例)
- 马背上的民族蒙古族少数民族蒙古族介绍课件
- 工程图学(天津大学)智慧树知到期末考试答案章节答案2024年天津大学
- 农村户改厕施工协议书
- 当代社会政策分析 课件 第十一章 残疾人社会政策
- 2023年人教版中考物理专题复习-九年级全册简答题专题
- 家政公司未来发展计划方案
- ISO28000:2022供应链安全管理体系
- 当代艺术与传统文化的交流与融合
- 《配电网保护分级配置及整定技术规范》
- 企业档案管理办法培训
评论
0/150
提交评论