C语言复习材料_第1页
C语言复习材料_第2页
C语言复习材料_第3页
C语言复习材料_第4页
C语言复习材料_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言复习材料第1章 C语言概述1.计算机语言经历了四代发展:第一代:机器语言, 二进制0、1构成的面向特定机器的低级语言。计算机可以直接执行。第二代:汇编语言。又称符号语言, 对机器指令进行简单的符号化。第三代:高级语言,完全接近人类习惯,各种机器指令用英文单词表示。如:BASIC,FORTRAN, C,PASCAL等。第四代:甚高级语言,是一种面向对象或面向问题的高级语言。如:Visual Basic, 简称VB Visual C+, 简称VC。2.语言的发展历程73年 贝尔实验室 D.M.Ritchie设计出C语言,用C改写 UNIX 内核77年 出现不依赖于具体机器的 C 语言编译文本

2、(系统)80年代初,美国国家标准化协会(ANSI),根据语言问世以来各种版本对语言的发展和扩充,制定了ANSI C 标准1987年 ANSI公布C新标准87 ANSI C1990年 ISO(国际标准化组织)接受上述87 ANSI C标准,作为ISO的 C 标准80年代 C 普及和 C+ 推出3.语言的特点(1)语言简洁、紧凑,使用方便、灵活。 32个关键字、9种控制语句,程序形式自由。(2)运算符丰富。34种运算符 。(3)数据类型丰富,具有现代语言的各种数据结构。(4)具有结构化的控制语句 ,是完全模块化和结构化的语言。 (5)语法限制不太严格,程序设计自由度大。(6)允许直接访问物理地址,

3、能进行位操作,能实现汇编语言的大部分功能,可直接对硬件进行操作。兼有高级和低级语言的特点 。(7)目标代码质量高,程序执行效率高。(8)程序可移植性好(与汇编语言比)。基本上不做修改就能用于各种型号的计算机和各种操作系统。 32个关键字auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef unsigned union void

4、 volatile while一、第2章9种控制语句if( )else for( ) while( )dowhile( )continue break switchgoto Return 34种运算符算术运算符:+ - * / % + -关系运算符:< <= = > >= !=逻辑运算符:! && |位运算符 : << >> | &赋值运算符:= 及其扩展条件运算符:?:逗号运算符:,指针运算符:* &求字节数 :sizeof强制类型转换:(类型)分量运算符:. ->下标运算符:其它 :( ) -4. 简单的

5、C语言程序介绍以 # 开始的语句称为预处理器指令以.h为后缀的文件被称为头文件,可以是 C 程序中现成的标准库文件,也可以是自定义的库文件。C 程序中的一个语句可以跨越多行,并且用分号通知编译器该语句已结束。 语言程序的结构 1.一个完整的语言程序,是由一个main()函数(又称主函数)和若干个其它函数结合而成的,或仅由一个main()函数构成。 。2. 一个语言程序,总是从main()函数开始执行,而不论其在程序中的位置。当主函数执行完毕时,亦即程序执行完毕。习惯上,将主函数main()放在最前头。3.函数是语言程序的基本单位。 语言程序体现了结构程序设计的特征。4.函数的一般结构 任何函数

6、(包括主函数main())都是由函数说明和函数体两部分组成。其一般结构如下: 函数类型 函数名(函数参数表) 说明语句部分; 执行语句部分; 1.函数说明 函数说明由三部分组成: (1)函数类型 (2)函数名 (3)函数参数表,其中函数参数表的格式为: 数据类型 形参, 数据类型 形参2 函数类型 函数名 函数参数表 int max ( int x , int y )2.函数体 函数体一般由说明语句和可执行语句两部分构成。 在函数说明部分的下面,一对 内的部分。大括号必须配对使用 。 (1)说明语句部分 说明语句部分由变量定义、自定义类型定义、自定义函数说明、外部变量说明等组成。 int a,

7、 b; float k, h; (2)可执行语句,一般由若干条可执行语句构成。3.函数体说明 (1)如果不需要,也可以缺省变量定义语句。例如,例1.1 程序中缺省变量定义语句。 (2)函数体中的变量定义语句,必须在所有可执行语句之前。下面程序中变量定义语句“ int x; ”的位置是非法的: 4. C语言程序使用英文小写字母书写。 C语言区分字母大小写,大写字母一般符号常量或特殊用途使用。5. 所有语句都必须以分号“ ; ”结束,作为语句之间的分隔符。函数的最后一个语句也必须以分号“ ; ”结束。6. 程序行的书写格式自由。既允许1行内写几条语句,也允许1条语句分写在几行上。7. C语言程序不

8、使用行号。8. C语言本身没有输入输出语句。输入和输入操作是由库函数scanf和printf等函数来实现的。 9.在源程序中,凡是用“/*”和“*/”括起来的文字,都是注释。 C语言的注释格式为: /* */ (1) “/*” 和 “*/” 必须成对使用,且 “/” 和 “*”、以及 “*” 和 “/” 之间不能有空格,否则都出错。 (2)注释的位置,可以单占1行,也可以跟在语句的后面。 (3)如果1行写不下,可另起1行继续写。 (4)注释中允许使用汉字。在非中文操作系统下,看到的是一串乱码,但不影响程序运行。第 2 章 程序的灵魂算法1. 算法的特性 (1)有穷性:一个算法总是执行有限步后结

9、束, 每一步在有限时间内完成(2)确定性:算法中每一个步骤应当是确定的,而不能应当是含糊的、模棱两可的。输入:一个算法有0个或多个输入的外界量 。输出,一个算法有一个或多个输出的量,它们是与输入有某种关系的量。(3)有效性:算法中每一个步骤应当能有效地执行,并得到确定的结果。 2.一个流程图包括以下几部分:(1)表示相应操作的框;(2)带箭头的流程线;(3)框内外必要的文字说明注意:流程线不要忘记画箭头.用流程图表示算法直观形象,比较清楚地显示出各个框之间的逻辑关系。3.三种基本结构的表示(1)顺序结构 (2)选择结构 (3)循环结构 a) 当型循环 b) 直到型循环4.三种基本结构的特点(1

10、)只有一个入口 (2)只有一个出口 (3)不存在死语句 (4)不存在死循环5.结构化程序设计思想自顶向下、逐步细化、模块化自顶向下:先从全局、整体设计逐步细化:将一个问题分解成几个较小的问题解决模块化:将一个大任务分解成若干个较小的部分,每个部分承担一定功能,称为“功能模块”第3章 数据类型、运算符与表达式1.常量.常量:在程序运行过程中,其值不能改变的量称为常量, 可为任意数据类型.符号常量:标识符代表常量 定义格式: #define <符号常量名> <常量>变量: 在程序运行过程中,其值可以被改变的量称为变量。可以为任意数据类型.变量定义的一般格式: 数据类型 变量

11、1,变量2,变量n;变量的三个要素: (1)变量名。每个变量都必须有一个名称。(2)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。(3)变量的类型标识符命名规则语言中,用标识符来区分不同文件、函数、变量。(1)标识符有效字符:只能由字母、数字和下划线组成,且以字母或下划线开头。(2)标识符有效长度:TC V2.0标识符的有效长度为个字符。随系统而异,但至少前个字符有效。如果超长,则超长部分被舍弃。(3)C语言的关键字不能用作变量名。(4)标识符命名通常应选择能表示数据含义的英文单词(或缩写)作变量名,或汉语拼音字头作变量名。通过变量名就知道变量值的含义,做到

12、“见名知意”。注意:C语言对英文字母的大小敏感,即同一字母的大小写,被认为是两个不同的字符。变量名total与变量名TOTAL、ToTaL、totAl等不是同一个变量,习惯上,变量名和函数名中的英文字母用小写,以增加可读性。整型数据在内存中的存放,数值是以补码表示的。 一个正数的补码与原码相同; 一个负数的补码求法:原码的二进制形式,取反求得反码,再加1,得到负数的补码。2.整型变量的分类有符号基本整型 (signed)int 有符号短整型 (signed)short (int )有符号长整型 (signed) long (int)无符号基本整型 unsigned int无符号短整型 unsi

13、gned short (int)无符号长整型 unsigned long (int)整数类型的有关数据类型 类型说明符 长度 数的范围 基本型 int 2字节 -3276832767 短整型 short 2字节 -215215-1 长整型 long 4字节 -231231-1 无符号整型 unsigned 2字节 065535 无符号短整型 unsigned short 2字节 065535 无符号长整型 unsigned long 4字节 0(232-1)整型常量的类型(1)一个整数,如果其值在-32768+32767范围内,认为它是int型,它可以赋值给int型和long int型变量。

14、(2) 一个整数,如果其值超过了上述范围,而在-2147483637+2147483647范围内,则认为它是为长整型。可以将它赋值给一个long int型变量。 (3) 一个整常量后面加一个字母u或U,认为是unsigned int型,如12345u,在内存中按unsigned int规定的方式存放(存储单元中最高位不作为符号位,而用来存储数据)。如果写成-12345u,则先将-12345转换成其补码53191,然后按无符号数存储。(4) 在一个整常量后面加一个字母l或L,则认为是long int型常量。用于函数调用中。如果函数的形参为long int型,则要求实参也为long int型。规范

15、化的指数形式:在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字.3.浮点型变量浮点型变量的分类浮点型变量分为单精度(float型)、双精度(double型)和长双精度型(long double)三类形式。类型 位数 数的范围 有效数字float 32 10-37 10-38 67 位double型 64 10-30710-308 1516位long double 128 10-493110-4932 1819位说明:一个浮点型变量只能保证的有效数字是7位有效数字,后面的数字是无意义的,并不准确地表示该数。应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会

16、“丢失”小的数4.字符型数据字符常量:用单引号包含的一个字符是字符型常量,只能包含一个字符转义字符:有些以“”开头的特殊字符称为转义字符转义字符含义转义字符含义n换行t水平制表v垂直制表b退格r回车f换页a响铃反斜线单引号“双引号ddd3位8进制数代表的字符xhh2位16进制数代表的字符注意事项:单撇号中的字符不能是或者一个字符占一个字节,字符常量的值:该字符的ASCII码值思考:9和9的区别5.字符变量字符型变量用来存放字符常量,注意只能放一个字符。字符变量的定义形式如下:char c1,c2;在本函数中可以用下面语句对c1,c2赋值:c1a;c2 b ;一个字符变量在内存中占一个字节。 字

17、符数据在内存中的存储形式及其使用方法一个字符常量存放到一个字符变量中,实际上并不是把该字符的字型放到内存中去,而是将该字符的相应的ASCII代码放到存储单元中。这样使字符型数据和整型数据之间可以通用。例3.6 向字符变量赋以整数。 说明:在第和第4行中,将整数97和98分别赋给c1和c2,它的作用相当于以下两个赋值语句:c1;c2;因为a和b的ASCII码为97和98#include <stdio.h>void main() char c1,c2; c1=97; c2=98; printf(“%c %cn”,c1,c2); printf(“%d %dn”,c1,c2); 例3.7

18、大小写字母的转换. 说明:程序的作用是将两个小写字母a和b转换成大写字母A和B。从代码表中可以看到每一个小写字母比它相应的大写字母的ASCII码大32。语言允许字符数据与整数直接进行算术运算。 #include <stdio.h>void main() char c1,c2; c1=a; c2=b;c1=c1-32;c2=c2-32; printf(“c c,c1,c2); 6.字符串常量字符串常量是一对双撇号括起来的字符序列.是字符常量,”是字符串常量,二者不同。不能把一个字符串常量赋给一个字符变量。规定:在每一个字符串常量的结尾加一个 “字符串结束标志”,以便系统据此判断字符串

19、是否结束。规定以字符作为字符串结束标志。字符常量 ' A '与字符串常量 " A "的区别:(1)定界符不同: 字符常量使用单引号'A' , 而字符串常量使用双引号 " " ;(2)存储要求不同: 字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志 ' 0 ' 。7.变量赋初值 (1)语言允许在定义变量的同时使变量初始化.(2)可以使被定义的变量的一部分赋初值。如: int a,b,c=5; 表示指定、为整型变量,但只对初始化,c的初值为(3)如果对几个变量赋以

20、同一个初值, 应写成:int a=3,b=3,c=3; 表示、的初值都是。 不能写成 int a=b=c=3;注意:初始化不是在编译阶段完成的而是在程序运行时执行本函数时赋初值的,相当于有一个赋值语句。 8.算术运算符和算术表达式基本的算术运算符+加法运算或正值运算符-减法运算或负值运算符*乘法运算符/除法运算符,求商,两个整数相除结果为整数%模运算符,求余,要求两侧均为整型数据9.赋值运算符和赋值表达式 如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。将浮点型数据(包括单、双精度)赋给整型变量时,舍弃浮点数的小数部分。如:为整型变量,执行“i=3.56”的结果

21、是使的值为,以整数形式存储在整型变量中.将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中 如: 将23赋给float变量,即执行23,先将23转换成2300000,再存储在中。将23赋给double型变量,即执行23,系统将23补足有效位数字为23000,然后以双精度浮点数形式存储到变量中。 将一个double型数据赋给float变量时,截取其前面7位有效数字,存放到float变量的存储单元(4个字节)中。但应注意数值范围不能溢出。 如:float f;double d=123.456789e100; f=d;就出现溢出的错误。 如果将一个float型数据赋给double变

22、量时,数值不变,有效位数扩展到16位,在内存中以8个字节存储.字符型数据赋给整型变量时,由于字符只占1个字节,而整型变量为个字节,因此将字符数据(个二进位)放到整型变量存储单元的低位中。第一种情况:低位对应、高位补零 第二种情况:符号扩展将一个int、short、long型数据赋给一个char型变量时,只将其低8位原封不动地送到char型变量(即截断)。例如:int i=289;char c=a;c=i;将带符号的整型数据(int型)赋给long型变量时,要进行符号扩展,将整型数的16位送到long型低16位中:如果int型数据为正值(符号位为),则long型变量的高16位补;如果int型变量

23、为负值(符号位为),则long型变量的高16位补,以保持数值不改变。 反之,若将一个long型数据赋给一个int型变量,只将long型数据中低16位原封不动地送到整型变量(即截断)。 将unsigned int型数据赋给long int型变量时,不存在符号扩展问题,只需将高位补即可。将一个unsigned类型数据赋给一个占字节数相同的非unsigned型整型变量(例如:unsigned int ->int,unsigned long->long,unsigned short->short),将unsigned型变量的内容原样送到非unsigned型变量中,但如果数据范围超过相

24、应整型的范围,则会出现数据错误。复合的赋值运算符 a += b (其中a为变量,b为表达式) a += b(将有下划线的“a+”移到“=”右侧) |_ a = a + b (在“=”左侧补上变量名a) 如果是包含若干项的表达式,则相当于它有 括号。如: x %= y+3 x %= (y+3)语言规定可以使用种复合赋值运算符:,*,<<,>>,| 左值 (lvalue) : 赋值运算符左侧的标识符 变量可以作为左值; 而表达式就不能作为左值(如a+b); 常变量也不能作为左值, 右值 (lvalue) :出现在赋值运算符右侧的表达式 左值也可以出现在赋值运算符右侧,因而左

25、值都可以作为右值。赋值表达式中的“表达式”,又可以是一个赋值表达式。例如: a=(b=5) 分析:括弧内的“b=5”是一个赋值表达式,它的值等于5。执行表达式“a=(b=5)”相当于执行“b=5”和“ab”两个赋值表达式。 赋值运算符按照“自右而左”的结合顺序,因此,“(b5)”外面的括弧可以不要,即“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)是左值。注意:在

26、对赋值表达式(a=3*5)求解后,变量a得到值15执行(a=3*5)=4*3时,实际上是将4*3的积12赋给变量a,而不是赋给3*5。赋值表达式也可以包含复合的赋值运算符。如:a+=a-=a*a分析:此赋值表达式的求解步骤如下 先进行“*”的运算, 它相当于*,a的值为144132。再进行“”的运算,相当于=a+(-132),a的值为132-132-264。10.逗号运算符和逗号表达式逗号运算符:将两个表达式连接起来,又称为“顺序求值运算符”一般形式: 表达式,表达式求解过程:先求解表达式,再求解表达式。整个逗号表达式的值是表达式的值。 例:逗号表达式*5,* 分析:赋值运算符的优先级别高于逗

27、号运算符, 因此应先求解*5。一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式如:(*,*),a+5赋值表达式,将一个逗号表达式的值赋给,的值等于 3*5先计算出的值等于,再进行*的运算得60(但值未变,仍为15),再进行得,即整个表达式的值为。逗号运算符是所有运算符中级别最低的例: (,*)逗号表达式,包括一个赋值表达式和一个算术表达式,的值为,整个逗号表达式的值为18。 ,*3 例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 /逗号表达式,

28、表达式值18,x=3例3 a=1;b=2;c=3; printf(“%d,%d,%d”,a,b,c); /1,2,3 printf(“%d,%d,%d”,(a,b,c),b,c); /3,2,3例4 printf(“%d,%d,%d”,a,b,c) ; /其中逗号起分隔作用 printf(“%d,%d,%d”,(a,b,c),b,c) /其中逗号为逗号运算符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; k=j+; /k=

29、3,j=4 j=3; printf(“%d”,+j); /4 j=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,则(i+) + (i+) + (i+) 结果:9,i6例

30、3: 如i3,则(+ i) + (+ i) + (+ i) 结果:18,i6第四章 最简单的C程序设计顺序程序设计C语言本身不提供输入输出语句,输入和输出操作是由C函数库中的函数来实现的字符输入函数: getchar 字符输出函数:putchar格式输入函数: scanf 格式输出函数: printf字符串输入函数:gets 字数串输出函数:puts1.putchar 函数(字符输出函数)putchar 函数是字符输出函数,其功能是在显示器上输出单个字符。其一般形式为:putchar(c) c可以是变量或者常量例4.1输出单个字符。#include <stdio.h>main()结

31、果:Boy char a='B',b='o',c=y' putchar(a); putchar(n); putchar(b); putchar(n); putchar(c); putchar(n); 2.getchar函数(字符输入函数)getchar函数的功能是从键盘上输入一个字符。 其一般形式为:getchar(); /getchar函数没有参数,函数的值就是输入的字符例4.2 输入单个字符。#include <stdio.h> void main()程序最后两行可用下面两行的任意一行代替,结果相同:putchar(getchar();p

32、rintf(“%c”,getchar(); char c; printf("input a charactern"); c=getchar(); putchar(c);3.printf函数(格式输出函数)printf函数的作用是按用户指定的格式,输出若干任意类型的数据。一般形式 printf(“格式控制字符串”,输出表列)格式说明是以%开头,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。如:“%d”表示按十进制整型输出; “%ld”表示按十进制长整型输出; “%c”表示按字符型输出等。普通字符在输出时原样输出,在显示中起提示作用。格式字符(1)d格

33、式符。用来输出十进制整数。有几种用法:%d,按整型数据的实际长度输出。%md,m为指定的输出字段的宽度。如果数据的位数小于m,则左端补空格,若大于m,则按实际位数输出。如:a=123;d=12345printf(“%4d,%4d”,a,b);结果:V123,12345%ld,输出长整型数据。如long a=135790;printf(“%ld”,a);(2)o或lo或mo格式符,以八进制形式输出整数。(3)x或lx或mx格式符,以十六进制形式输出整数。(4)u格式符,用来输出unsigned型数。(5)c格式符,用来输出一个字符。如:char c=a;printf(“%c”,c);输出:a也可

34、以指定输出宽度,如:printf(“%3c”,c);输出:VVa(6)s格式符,用来输出一个字符串。有几种用法:%s,例如:printf(“%s”,”CHINA”);输出 CHINA %ms,输出的字符串占m列,如字符串长度大于m,则按字符串实际长度输出;若字符串长度小于m,则左补空格。%-ms,同上,右补空格。%m.ns,输出占m列,但只取字符串中左端n个字符,左补空格。 %-m.ns,输出占m列,但只取字符串中左端n个字符,右补空格。例4.5 字符串的输出。main()printf(“%3s,%7.2s,%.4s,%-5.3s,n”,”CHINA”, ”CHINA”, ”CHINA”, ”

35、CHINA”);结果为: CHINA, VVVVVCH,CHIN,CHIVV (7)f格式符,用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:%f,不指定字段宽度,由系统自动指定,使整数部分全部如数输出,并输出6位小数。例4.6 输出实数时的有效位数。main()float x=111111.111, y=222222.222; printf(“%f” , x+y);结果:333333.328125 单精度只有7位有效数字。例4.7 输出双精度数时的有效位。main()double x, y; x=1111111111111.111111111; y=2222222222222

36、.222222222; printf(“%f” , x+y);结果为:3333333333333.333010 双精度只有16位有效数字。%m,nf 指定输出的数据占m列,其中有n位小数。如果数值长度小于m位,则左端补空格。 %-m,nf 同上,右端补空格。例4.8 输出实数时指定小数位数。main()float f=123.456; printf(“%fVV%10fVV%10.2fVV%.2fVV%-10.2fn”,f,f,f,f,f);结果:123.456001VV123.456001VVVVVV123.46VV123.46VV123.46 VVVV(8)e格式符,以指数形式输出实数%e,

37、不指定输出数据所占的宽度和数字部分的小数位数。数值按规范化指数形式输出。printf(“%e”,123.456); 输出结果:1.234560e+002%m.ne和%-m.ne 设f=123.456printf(“%eVV%10eVV%10.2eVV%.2eVV%-10.2e”,f,f,f,f);1.234560e+002VV1.234560e+002VVV1.23e+002 VV1.23e+002VV1.23e+002V(9)g格式符,用来输出实数,它根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的0。f=123.456printf(“%f %e %g”,

38、f,f,f);123.456001 1.234560e+002 123.456001格式字符意 义d以十进制形式输出带符号整数(正数不输出符号)o以八进制形式输出无符号整数(不输出前缀0)x,X以十六进制形式输出无符号整数(不输出前缀Ox)u以十进制形式输出无符号整数f以小数形式输出单、双精度实数e,E以指数形式输出单、双精度实数g,G以%f或%e中较短的输出宽度输出单、双精度实数c输出单个字符s输出字符串在使用printf函数时,还有几点要说明:(1)除了X,E,G外,其他格式符必须用小写字母。(2)可以在printf函数中的“格式控制”字符串内包括“转义字符”,如n,t,r等。(3)上面介

39、绍的“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.scanf函数(格式输入函数)一般形式 scanf(“格式控制字符串”,地址表列); 地址是由地址运算符“&”后跟变量名组成的。例如: &a, &b 分别表示变量a和变量b 的地址。 格式字符意义d输入十进制整数o输入八进制整数x输入十六进制整数u输入无符号十进制整数f或e输

40、入实型数(用小数形式或指数形式)c输入单个字符s输入字符串说明:1)用十进制整数指定输入的宽度,系统自动按它截取所需数据。scanf("%5d",&a);输入: 只把12345赋予变量a,其余部分被截去。2)在%后面加一个“*”符,表示该输入项,读入后不赋予相应的变量,即跳过该输入值。scanf("%d %*d %d",&a,&b);当输入为:1 2 3时,把1赋予a,2被跳过,3赋予b。3)长度:长度格式符为l和h,l表示输入长整型数据(如%ld) 和双精度浮点数(如%lf)。h表示输入短整型数据。 4)scanf函数中没有精度

41、控制,如:scanf("%5.2f",&a);是非法的。 不能企图用此语句输入小数为2位的实数。使用scanf函数时应注意的问题(1)scanf中要求给出变量地址,如给出变量名则会出错。如 scanf(“%d”,a);是非法的,应改为scnaf(“%d”,&a);才是合法的。(2)如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在输入数据时在对应位置应输入与这些字符相同的字符。 scanf(“%dVV%d”,&a,&b);输入时,两个数据之间应空2个或更多的空格:(3)在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字

42、符均为有效字符。 例如: scanf("%c%c%c",&a,&b,&c);输入为: dVeVf则把'd'赋予a, 'V' 赋予b, 'e'赋予c。只有当输入为: def时,才能把'd'赋于a, 'e'赋予b, 'f'赋予c。 (4)在输入数据时,遇到以下情况时该数据认为结束:遇空格,TAB或回车作间隔。按指定宽度结束,如“%3d”,只取3列。遇非法输入。 第五章 选择结构程序设计1.逻辑运算符和逻辑表达式运算运算符表达式逻辑“与”&&op

43、erand1 && operand2逻辑“或”|operand1 | operand2逻辑“非”!operand1运算优先级 ! && |C语言编译系统在表示逻辑运算结果时,以1代表“真”,以0代表“假”,但在判断一个量是否“真”时,是以0代表假,以非0代表真。 2.if语句(条件选择语句)1if语句的一般格式 if(表达式) 语句组1; else 语句组2; (1)if语句中的“表达式”必须用“(”和“)”括起来。(2)else子句(可选)是if语句的一部分,必须与if配对使用,不能单独使用。(3)当if和else下面的语句组,仅由一条语句构成时,也可不使用复

44、合语句形式(即去掉花括号)。 2if语句的执行过程(1)缺省else子句时 当“表达式”的值不等于0(即判定为“逻辑真”)时,则执行语句组1,否则直接转向执行下一条。(2)指定else子句时当“表达式”的值不等于0(即判定为“逻辑真”)时,则执行语句组1,然后转向下一条语句;否则,执行语句组2。 3if语句的嵌套与嵌套匹配原则 if语句允许嵌套。所谓if语句的嵌套是指,在“语句组1”或(和)“语句组2”中,又包含有if语句的情况。 if语句嵌套时,else子句与if的匹配原则:与在它上面、距它最近、且尚未匹配的if配对。为明确匹配关系,避免匹配错误,强烈建议:将内嵌的if语句,一律用花括号括起

45、来。3.条件运算符与表达式一般格式:expr1 ? expr2 : expr3条件运算符优先级高于赋值运算符 ,低于关系运算符和算术运算符。“表达式2”和“表达式3”不仅可以是数值表达式,还可以是赋值表达式或函数表达式。条件表达式中,表达式的类型可以与表达式和表达式的类型不同。4.switch语句(开关分支语句)一般形式:switch( 表达式) case E1: 语句组 1; break; case E2: 语句组 2; break; . case En: 语句组 n; break; default: 语句组 ; 说明(1)switch后面的“表达式”,可以是int、char和枚举型中的一种

46、(有限的个数)。(2)每个case后面“常量表达式”的值,必须各不相同,否则会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的执行方案)。(3)case后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束switch语句。(4)各case及default子句的先后次序,不影响程序执行结果。(5)多个case子句,可共用同一语句(组)。例如, “case 10: ”和“case 9: ”共用语句“printf("grade=An"); break;”,“case 5: ”

47、“case 0: ”共用语句“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+; break; 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 求一元二次方程ax

48、2+bx+c=0的解#include <math.h>main()float a,b,c,disc,x1,x2,p,q;scanf("%f,%f,%f", &a, &b, &c);printf("The equation ");if( fabs(a) <= 1e-6 )printf("is not quadratic ");elsedisc = b*b-4*a*c;if ( fabs(disc)<=1e-6 )printf("x1=x2=%7.2fn", -b/(2*a);elseif (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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论