全国计算机二级C基础知识重点讲解_第1页
全国计算机二级C基础知识重点讲解_第2页
全国计算机二级C基础知识重点讲解_第3页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、全国计算机等级考试二级全国计算机等级考试二级 c c 基础知识重点讲解基础知识重点讲解第一章程序设计和序设计和 c c 语言语言本章考纲本章考纲:1. 程序的构成,main 函数和其他函数。2. 头文件,数据说明,函数的开始和结束标志以及程序中的注释。3. 源程序的书写格式。4. c 语言的风格。本章知识要点本章知识要点:1. 了解程序设计的基本概念2. 熟记计算机语言的分类3. 重点掌握算法的概念及特性4. 重点掌握 c 程序构成及书写格式5. 重点掌握上机步骤及编程环境本章考试方式本章考试方式:笔试(4 分)本章内容本章内容:一、程序:是指可以被计算机连续执行的一条条指令的集合,是人与机器

2、进行对话的语言。用程序设计语言编写程序的过程称为程序设计。二、计算机语言是人与计算机进行交流的工具。分为机器语言、汇编语言和高级语言。三、算法:是为解决一个问题而采取的方法和步骤,可以采用伪代码、流程图和 n-s 图等进行算法描述。算法具有:有穷性、确定性、有效性、零个或多个输入、一个或多个输出的特性。四、三种基本的控制结构:顺序、选择、循环结构。五、c 程序构成及书写特点c 程序的基本单位是函数。一个c 程序由一个或多个函数构成,有且只能有一个主函数(main) 。不论 main 函数在整个程序中的位置如何,c 程序的执行总是从 main 开始到 main 结束,各函数之间可以相互调用,但其

3、他函数不能调用主函数。构成:1 / 29编译预处理命令返回值类型 函数名称(形参类型 形参)变量定义执行语句 /*注释*/执行语句书写格式:标识符区分大小写,一般变量采用小写,符号常量采用大写。c 语句用分号(; )表示结束。但是在预处理命令、函数头、花括号之后不能加分号。六、上机步骤及开发环境1. 编辑源程序,源程序以“.c”作为扩展名2. 编译,将源程序转换成目标代码,形成“.obj”的二进制文件3. 连接,将目标文件和库函数及其他文件连接,形成可执行的二进制文件“.exe”4. 运行开发环境:vc6.0考试真题:1、下列叙述中错误的是( d )2006 年 4 月选择第 44 题a. c

4、 语言源程序经编译后生成后缀为.obj 的目标程序b. c 语言经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件c. 用 c 语言编写的程序称为源程序, 它以 ascii 代码形式存放在一个文本文件中d. c 语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令2、下列叙述中错误的是(b)2006 年 4 月选择第 45 题a. 算法正确的程序最终一定会结束b. 算法正确的程序可以有零个输出c. 算法正确的程序可以有零个输入d. 算法正确的程序对于相同的输入一定有相同的结果3、下列叙述中错误的是(a)2006 年 9 月选择第 11 题a. 一个 c 语言程序只能

5、实现一种算法b. c 程序可以由多个程序文件组成c. c 程序可以由一个或多个函数组成d. 一个 c 函数可以单独作为一个 c 程序文件存在2 / 294、下列叙述中正确的是(d)2006 年 9 月选择第 12 题a. 每个 c 程序文件中都必须要有一个 main()函数b. 在 c 程序中 main()函数的位置是固定的c. c 程序中所有函数之间都可以相互调用,与函数所处位置无关d. 在 c 程序的函数中不能定义另一个函数5、在算法中,对需要执行的每一步操作,必须给出清楚、严格的规定,这属于算法的(c)2007 年 4 月选择第 11 题a. 正当性b. 可行性c. 确定性d. 有穷性6

6、、下列叙述中错误的是(d)2007 年 4 月选择第 12 题a. 计算机不能直接执行用 c 语言编写的源程序b. c 程序经 c 编译程序编译后,生成后缀为.obj 的文件是一个二进制文件c. 后缀为.obj 的文件,经连接程序生成后缀为.exe 的文件是一个二进制文件d. 后缀为.obj 和.exe 的二进制文件都可以直接运行7、下列叙述中错误的是(c)2007 年 4 月选择第 14 题a. c 语言是一种结构化程序设计语言b. 结构化程序由顺序、分支、循环 3 种基本结构组成c. 使用 3 种基本结构构成的程序只能解决简单问题d. 结构化程序设计提倡模块化的设计方法8、对于一个正常运行

7、的 c 程序,下列叙述中正确的是(a)2007 年 4 月选择第 15 题a. 程序的执行总是从 main 函数开始,在 main 函数结束b. 程序的执行总是从程序的第一个函数开始,在 main 函数结束c. 程序的执行总是从 main 函数开始,在程序的最后一个函数中结束d. 程序的执行总是从程序中的第一个函数开始,在程序的最后一个函数结束9、c 语言源程序名的后缀是(b)2007 年 9 月选择第 11 题a. .exeb. .cc. .objd. .cp10、下列叙述中正确的是(c)2007 年 9 月选择第 14 题a. c 语言程序将从源程序中第一个函数开始执行b. 可以在程序中由

8、用户指定任意一个函数作为主函数,程序将从此开始执行3 / 29c. c 语言规定必须用 main 作为主函数名,程序将从此开始执行,在此结束d. main 可作为用户标识符,用以命名任意一个函数作为主函数第二章第二章 数据类型及运算(记忆加理解)数据类型及运算(记忆加理解)本章考纲本章考纲:1. c 的数据类型(基本类型、构造类型、指针类型、空类型)及定义方法。2. c 运算符的种类、运算优先级和结合性。3. 不同类型数据间的转换与运算4. c 表达式类型(赋值表达式、算术表达式、关系表达式、逻辑表达式、条件表达式、逗号表达式)和求值规则。本章知识要点本章知识要点:1. 重点掌握标识符的合法性

9、判断,符号常量的使用2. 重点掌握整型变量和实型变量的分类及说明以及整型常量和实型常量的表示方法3. 熟记字符常量和字符串常量的表示,重点掌握字符运算原理4. 重点掌握数据类型的转换原理及执行过程5. 重点掌握算术运算符的分类及运算符的优先级和结合性6. 重点掌握复合的赋值表达式及表达式类型转换7. 重点掌握自增自减运算符的用法(优先级、结合性和执行过程)8. 重点掌握逗号运算符的执行过程本章考试方式本章考试方式:笔试(16 分)+上机(5 分)本章内容本章内容:一、标识符:由字母、数字和下划线组成,并且必须以字母或下划线开头。c 语言中的关键字不能用作其他用途,如不能用作变量或函数名。以下选

10、项中合法的标识符是(以下选项中合法的标识符是(20092009 年年 3 3 月)月)a a) 1_1 b 1_1 b)1-11-1 c c)_11 d_11 d)1_1_以下选项中不合法的标识符是(以下选项中不合法的标识符是(20082008 年年 4 4 月)月)a)print b)fora)print b)for c c)&a d)_00)&a d)_00可在可在 c c 程序中用做用户标识符的一组标识符是(程序中用做用户标识符的一组标识符是(20072007 年年 9 9 月)月)a a)and band b )date cdate c )hi dhi d )casec

11、ase _2007 y-m-d dr.tom bigl _2007 y-m-d dr.tom bigl按照按照 c c 语言规定的用户标识符命名规则,不能出现在标识符中的是语言规定的用户标识符命名规则,不能出现在标识符中的是 (20072007年年 4 4 月)月)a a)大写字母)大写字母 b b)连接符)连接符 c c)数字字符)数字字符 d d)下划线)下划线以下不合法的用户标识符是(以下不合法的用户标识符是(20062006年年4 4月)月)a a)j2_keyj2_keyb b)doubledoublec c) 4d) 4dd) _8_d) _8_4 / 29二、常量和变量二、常量和

12、变量在程序运行过程中,其值不能被改变的量称为常量。符号常量的表示:#define 标识符 常量#define pi 3.14159#define pi 3.14159/* pi/* pi 就是一个符号常量,代表就是一个符号常量,代表 3.14159 */3.14159 */main()main() float r,area;float r,area;r=3;r=3;area=pi*r*r;area=pi*r*r;printf(narea=%f,area);printf(narea=%f,area); 在程序运行过程中,其值可以改变的量称为变量。一个变量具有两个要素:变量名和变量值。 一个变量名

13、实质上是代表内存中的一个存储单元,该单元中的存储的内容就是变量值,通过变量名来引用变量的值。三、整型数据三、整型数据整型常量有 3 种表示方法:十进制表示法:123,-456,112l 等八进制表示法:014,077十六进制表示法:0 xa0f注: 只有十进制数可以是负数,其余进制只能是无符号数。无符号数可用后缀u(u)表示。整型变量分为以下 3 类:基本整型:用 int 表示,在 vc6 内存中占 4 个字节短整型:用 short int 或 short 表示,在内存中占 2 个字节长整型:用 long int 或 long 表示,在内存中占 4 个字节还可以加上 unsigned,将变量定

14、义为无符号型。四、实型数据四、实型数据实型常量有两种表示方式:十进制小数形式:3.1415、0.123、.145、34.、123f指数形式:6.0e3(e 或 e 之前必需有数,之后必须是整数)实型变量分 3 类:单精度:float 占 4 个字节,有 6-7 位有效位数双精度:double 占 8 个字节,有 15-16 位有效位数长双精度:long double 占 16 个字节,有 18-19 位有效位数5 / 29五、字符型数据五、字符型数据(在内存中存放的是字符量的 ascii 码)字符常量:一对单引号括起来的单个字符。 (转义字符) ,a、n字符变量:类型说明符 char,在内存中

15、占一个字节。c 语言允许对整型变量赋字符值,也允许对字符变量赋整型值。main()main() char c1,c2;char c1,c2;c1=a;c2=b;c1=a;c2=b;c1=c1-32;c2=c2-32;c1=c1-32;c2=c2-32;printf(%c %cn,c1,c2);printf(%c %cn,c1,c2);printf(%d %d,c1,c2);printf(%d %d,c1,c2); 以下选项中不属于字符常量的是(以下选项中不属于字符常量的是(20082008 年年 4 4 月)月)a)ca)c b)b)c c)xcc0 d)072c c)xcc0 d)072以下

16、合法的字符常量的是以下合法的字符常量的是a a)x13)x13 b) b)081081 c) c)6565 d)” d)”nn” ”转义算一个字符已知大写字母已知大写字母 a a 的的 asciiascii 码是码是 6565,小写字母,小写字母 a a 的的 asciiascii 码是码是 9797。下列不。下列不能将变量能将变量 c c 中的大写字母转换为对应小写字母的语句是(中的大写字母转换为对应小写字母的语句是(20072007 年年 4 4 月)月)a)c=(c-a)c=(c- a a )%26+)%26+ a a b)c=c+32b)c=c+32c)c=c-c)c=c- a a +

17、 + a a d d)c=()c=( a a +c)%26-+c)%26- a a 以下选项中,值为以下选项中,值为 1 1 的表达式的表达式_。(。(20062006 年年 9 9 月)月)a a)1-1-00 b b)1-1- 00c c)11-0 d-0 d) 00- -00六、字符串常量六、字符串常量:用一对双撇号括起来的零个或多个字符序列。如:”china”在存储字符串时, 系统会在字符串的末尾自动加上一个0作为字符串的结束标志,所以“china”在内存中实质是占 6 个字节的空间。c 语言没有字符串变量,对字符串的处理都是通过字符数组来完成。以下选项中,能用作数据常量的是(以下选项

18、中,能用作数据常量的是(20092009 年年 3 3 月)月)a a)o115 bo115 b) 0118 c 0118 c)1.5e1.51.5e1.5 d d) 115l 115la 如果是 0115 就是一个合法的 8 进制常量,不过以 o 开头就成了变量名b 以 0 开头是八进制,不过八进制只能是 07,于是错误c 的尾数是 1.5 正确,但是阶码为 1.5 错误,只能为整数d 的后缀 l 代表长型,115l 则表示长整型,因此正确以下选项中不能作为以下选项中不能作为 c c 语言合法常量的是(语言合法常量的是( ) 。a a)cd bcd b)0.1e+6 c0.1e+6 c)a

19、da d)011011以下不合法的数值常量是以下不合法的数值常量是a a)011 b011 b )lellelc c) 8.0 e0.5 d) 0 xabcd) 8.0 e0.5 d) 0 xabcd6 / 29c c 源程序中不能表示的数制是()源程序中不能表示的数制是() 。(。(20082008年年9 9月)月)a a)二进制二进制 b b)八进制)八进制 c c)十进制)十进制 d d)十六进制)十六进制%d 十进制,%o 八进制,%x 十六进制以下关于以下关于 longlong、intint 和和 shortshort 类型数据占用内存大小的叙述中正确的是类型数据占用内存大小的叙述中

20、正确的是(20072007年年9 9月)月)a)a)均占均占4 4个字节个字节 b b)根据数据的大小来决定所占内存的字节数)根据数据的大小来决定所占内存的字节数c c)由用户自己定义)由用户自己定义 d d)由)由 c c 语言编译系统决定语言编译系统决定以下选项中,合法的一组以下选项中,合法的一组 c c 语言数值常量是(语言数值常量是(20072007年年9 9月)月)a)028a)028b b)12. c).177 d)0 x8a)12. c).177 d)0 x8a. 5e-3 0xa23 4e1.5 10,000. 5e-3 0xa23 4e1.5 10,000-0 xf 4.5e

21、0 0abc 3.e5-0 xf 4.5e0 0abc 3.e5a 中028是八进制,不该出现8,c 中4e1.5错了,e 后面不该是小数,d 中10,000错误,没有这种写法。七、变量的定义七、变量的定义c 语言规定,变量在使用时必须先定义后使用。变量定义形式:数据类型变量名 1,变量名 2,.;如:int sum,a; float score,b; char c;变量在定义时可以初始化,如: int sum=0,a=1; float score=0.0,b=1.5; char c=a;此赋初值错误:int sum=a=1;赋初值只能对单个变量进行。以下选项中正确的定义语句是(以下选项中正确

22、的定义语句是( ) 。(。(20082008年年9 9月)月)a a)doubledouble a;a; b;b; b b)doubledouble a=b=7;a=b=7; c c)doubledouble a=7,a=7, b=7;b=7; d d)double,double,a, b;a, b;b 中 b 应先定义再使用以下定义语句中正确的是(以下定义语句中正确的是(20082008 年年 4 4 月)月)a)int a=b=0 ;a)int a=b=0 ; b b)char a=65+1,b=b;)char a=65+1,b=b;7 / 29c)float a=1,*b=&a,

23、*c=&b ; d)double a=0.0c)float a=1,*b=&a,*c=&b ; d)double a=0.0;b=1.1;b=1.1;a 错在 b 未定义 应改为 int a,b; a=b=0;b 正确c 错,错在无法初始化 convert from float * to float *d 错 应该为 double a=0.0,b=1.1;把分号改为逗号下列定义变量的语句中错误的是下列定义变量的语句中错误的是_。(。(20062006 年年 9 9 月)月)a a)intint_int; b_int; b)double int_;double int_;

24、c c)char for;char for; d d)float us$float us$八、不同数据类型之间的转换八、不同数据类型之间的转换一个运算符两边的运算数类型不一致时,需转换成相同类型,即较低类型转换成教高类型(此过程编译系统自动完成) 。doublefloat类型转换图:longunsignedchar,shortint可以使用强制类型转换,格式: (类型说明符) (表达式)如: (double)a;(int) (x+y) ;(int)x+y;main()main() float x;int i;float x;int i;x=3.6; i=(int)x;x=3.6; i=(int

25、)x;printf(x=%f,i=%d,x,i);printf(x=%f,i=%d,x,i); 结果:x=3.600000,i=3main()main() float x,y;float x,y;int i,j;int i,j;x=3.6; y=3.8;x=3.6; y=3.8;i=(int)x+(int)y;i=(int)x+(int)y;j=(int)(x+y);j=(int)(x+y);printf(i=%f,j=%d,i,j);printf(i=%f,j=%d,i,j); 九、算术运算符九、算术运算符8 / 29加(+) 、减(-) 、乘(*) 、除(/) 、求余(%) 、自增(+)

26、、自减(-)注:当两个整数进行除法运算时,得到的结果仍然为整数,如5/2=2,要想得到小数,必须将分子或分母中的任意一个转换成浮点数,如1.0/2=0.5。求余运算要求两侧的操作数均为整型。运算符都有优先级和结合性,见书后附录。除单目运算、赋值运算符和条件运算符是右结合性外,其他运算都是左结合性。表达式(表达式(intint)()(doubledouble)()(5/25/2)+2.5+2.5)的值是【)的值是【6 6】(】(2002009 9 年年 3 3 月)月)答案:答案:4 4以下不能正确表示代数式以下不能正确表示代数式2 2ab/cdab/cd(2002008 8年年9 9月)月)的

27、的 c c 语言表达式是(语言表达式是( ) 。a a)2*a*b/c/d b2*a*b/c/d b)a*b/c/d*2 ca*b/c/d*2 c)a/c/d*b*2a/c/d*b*2 d d)2*a*b/c*d2*a*b/c*d以下选项中,当以下选项中,当 x x 为大于为大于 1 1 的奇数时,值为的奇数时,值为 0 0 的表达式的表达式a)x%2= =1 b)x/2 c)x%2!=0a)x%2= =1 b)x/2 c)x%2!=0 d d)x%2= =0)x%2= =0表达式表达式3.6-5/2+1.2+5%23.6-5/2+1.2+5%2的值是(的值是(2002006 6年年4 4月)

28、月)a a)4.34.3b) 4.8b) 4.8c) 3.3c) 3.3d)d) 3.8 3.8十、赋值运算符合表达式十、赋值运算符合表达式c 语言中的赋值运算符是“=” ,其功能是将右侧表达式的值赋给左侧的变量如:a=5;b=c=8;复合的赋值表达式:变量 operater=表达式,operater 代表运算符。如:a+=5,等价于 a=a+5;a+=x+y,等价于 a=a+(x+y)设变量已正确定义并赋值,以下正确的表达式是(2002008 8 年年 4 4 月)月)a)x=y*5=x+z b)int(15.8%5)c)x=y+z+5,+y d)x=25%5.0若变量均已正确定义并赋值,以

29、下合法的c 语言赋值语句是(2002007 7 年年 9 9 月)月)a)x=y=5; b)x=n%2.5; c)x+n=i; d)x=5=4+1;若变量 x、y 已正确定义并赋值,以下符合c 语言语法的表达式是_。(20062006年年 9 9 月)月)a)+x,y=x- b)x+1=yc)x=x+10=x+y d)double(x)/10设变量 a 和 b 已正确定义并赋初值。请写出与 a-=a+b 等价的赋值表达式 【6】 。(20082008 年年 9 9 月)月)答案:a=-b;十一、自增和自减运算十一、自增和自减运算+和-运算,其功能是使变量的值自动加和减 1。如:a+,等价于 a

30、=a+1自增和自减有两种用法:前置运算:如+a,其运算规则是先使变量的值增(减) 1,然后再以变化后的表9 / 29达式值参与其他运算。后置运算: 如 a+, 其运算规则是变量先参与其他运算, 然后再使变量的值增 (减)1。设有定义:设有定义:int x=2;int x=2;,以下表达式中,值不为,以下表达式中,值不为 6 6 的是(的是(20092009 年年 3 3 月)月)a a) x*=x+1 b x*=x+1 b) x+,2*x c x+,2*x c)x*=x*=(1+x1+x)d d)2*x,x+=22*x,x+=2设有定义:设有定义:int k=0;,int k=0;,以下选项的

31、四个表达式中与其他三个表达式的值不相同以下选项的四个表达式中与其他三个表达式的值不相同的是的是 (20072007 年年 4 4 月)月)a a)k k+ b)k+=1 c)+k d)k+1+ b)k+=1 c)+k d)k+1k+意味着 0 赋予该表达式然后 k 加 1。 像 printf(%d,k+)它要输出的是后十二、逗号表达式十二、逗号表达式表达式 1,表达式 2,表达式 3,.,表达式 n其计算过程是从左到右逐个求每个表达式的值, 取最右边一个表达式的值作为该逗号表达式的值。#include #include void main()void main()int a,b;int a,b

32、; a=1; a=1; b=(a+,a+3); b=(a+,a+3); printf(a=%dn,a); printf(a=%dn,a); printf(b=%dn,b); printf(b=%dn,b); 有以下程序(有以下程序(20062006 年年 9 9 月)月)main()main()int x,y,z;int x,y,z;x=y=1;x=y=1;z=x+,y+,+y;z=x+,y+,+y;printf(%d,%d,%dn,x,y,z);printf(%d,%d,%dn,x,y,z); 程序运行后的输出结果是程序运行后的输出结果是_。a a)2,3,3 b2,3,3 b)2,3,22

33、,3,2c c)2,3,1 d2,3,1 d)2,2,12,2,1=(右结合)的优先级比, (左结合)高1 级优先级 左结合() 圆括号 下标运算符- 指向结构体成员运算符 . 结构体成员运算符2 级优先级 右结合! 逻辑非运算符 按位取反运算符10 / 29+ 自增运算符- 自减运算符- 负号运算符(类型) 类型转换运算符* 指针运算符& 地址与运算符sizeof 长度运算符3 级优先级 左结合* 乘法运算符/ 除法运算符% 取余运算符4 级优先级 左结合+ 加法运算符? 减法运算符5 级优先级 左结合 右移运算符6 级优先级 左结合、= 关系运算符7 级优先级 左结合= 等于运算符

34、!= 不等于运算符8 级优先级 左结合& 按位与运算符9 级优先级 左结合 按位异或运算符10 级优先级 左结合| 按位或运算符11级优先级 左结合& 逻辑与运算符12 级优先级 左结合13 级优先级 右结合? : 条件运算符11 / 2914 级优先级 右结合=+= -=*=/=%=&=|= 全为赋值运算符15 级优先级 左结合, 逗号运算符设变量已正确定义为整型,则表达式设变量已正确定义为整型,则表达式 n=i=2,+i,i+n=i=2,+i,i+的值为的值为 答案:答案:3 3以下程序输出结果是以下程序输出结果是 (20072007 年年 4 4 月)月)main

35、()main() int a=10;int a=10;a=(3*5,a+4);a=(3*5,a+4);printf(printf(“ “a=%dna=%dn” ”,a);,a); 答案:答案:1414第三章第三章 基本语句基本语句本章考纲:1. 表达式语句、空语句、复合语句。2. 输入输出函数的调用,正确输入数据并正确设计输出格式。本章知识要点:1. 重点掌握各种语句的使用。2. 熟记 scanf 和 printf 函数的格式3. 重点理解 scanf 函数中地址列表的含义,重点掌握格式控制串中不同字符的作用。4. 点理解 printf 函数中格式控制串的含义,重点掌握格式控制串中不同字符的作

36、用。5. 重点理解 getchar 和 putchar 函数的作用。本章考试方式:笔试(7 分)+上机(15 分)本章内容:一、c 语句分类c 语句可以分为 5 类:1. 控制语句:用来实现对程序流程的选择、循环、转向和返回等进行控制。如:if 等2. 函数调用语句,如:printf(this is a c program”);3. 表达式语句:在表达式的末尾加上分号构成的语句。如:a=a+4;4. 空语句:单独的一个分号“; ”构成的语句。空语句的执行不产生任何动作,有时用来作流程的转向点,也可以用来作循环语句的循环体。5. 复合语句:由一对花括号“”把一些语句括起来,在语法上作为一个整体1

37、2 / 29对待,相当于一条语句。如:z=x+y;z+;若函数中有定义语句:若函数中有定义语句:int kint k;,则(;,则(20092009 年年 3 3 月)月)a a)系统将自动给)系统将自动给 k k 赋初值赋初值 0 0b b)这时)这时 k k 中值无定义中值无定义c c)系统将自动给)系统将自动给 k k 赋初值赋初值-1-1d d)这时)这时 k k 中无任何值中无任何值以下能正确定义且赋初值的语句是(以下能正确定义且赋初值的语句是() 。 (20052005 年年 9 9 月)月)a a)int n1=n2=10;int n1=n2=10;b b)char c=32;c

38、har c=32;c c)float f=f+1.1;float f=f+1.1;d d)double x=12.3e2.5;double x=12.3e2.5;二、scanf 函数用来从标准输入设备(键盘)输入数据到计算中。一般格式:scanf(scanf(格式控制串,地址表列格式控制串,地址表列) )如:如:scanf(scanf(“%d%f%c%d%f%c”,&a,&b,&c);,&a,&b,&c);“格式控制串”用来指定每个输入项的输入格式。通常由若干个格式说明组成,格式说明由 “%”开头,后跟格式字符,如“%d” , “%c”等。“地址

39、表列”需要读入的是所有变量的地址或字符串的首地址。使用说明:1.除了格式说明符和附加格式字符外,如果还有其他字符,则在输入数据时要求按一一对应的位置原样输入这些字符。形式 1:scanf(“%d,%d”,&a,&b);正确的输入方式:12,35形式 2:scanf(“a=%d,b=%d”,&a,&b);正确的输入方式:a=12,b=352.可以指定输入数据所占的列数,系统自动按指定的数据截取所需的数据。如:scanf(“%4d%4d”,&a,&b);当输入 12345678 时,系统自动将 1234 赋给 a,将 5678 赋给 b。如:scan

40、f(“%4c”,&ch);如果从键盘输入 xyz3 个字符,由于 ch 只能接收一个字符,系统自动将第一个字符x赋给 ch。3.输入的数值数据之间用间隔符(空格、制表符或回车符)隔开,间隔符数量不限,如果在格式说明中认为制定宽度时,也可以使用此方式。4.在%后有一个“*”附加格式字符,表示跳过它指定的列数。5.地址表应该是变量的地址,因此,应该在变量名前加上取地址的运算符“&”6.在用“%c”格式输入字符时,空格和转义字符都将作为有效字符进行输入。13 / 29如:scanf(“%c%c%c”,&c1,&c2,&c3);如果输入 a b 后按下回车键,则

41、 c1、c2、c3 的值分别为 a、空格、b7.键盘输入数据的个数应该与格式要求的个数相同,少于要求个数时,函数等待输入,直到满足要求或遇到非法字符为止;多于要求个数时,多余的数据将留在缓冲区作为下一次输入操作的输入数据。8.在输入数据时,遇到以下情况时该输入结束遇到空格,或按回车键或按跳格(tab)键按指定的宽度结束遇到非法输入若有定义语句:若有定义语句:double x,y,*px,*py,double x,y,*px,*py,执行了执行了 px=&x, py=&y;px=&x, py=&y;之后,正确之后,正确的输入语句是(的输入语句是(20092009

42、年年 3 3 月)?月)?a a)scanfscanf(“%f%f”,x,y)(“%f%f”,x,y); ;b b) scanf scanf(“%f%f”,&x,&y)(“%f%f”,&x,&y); ;c c) scanf scanf(“%lf%le”,px,py)(“%lf%le”,px,py); ;d d) scanf scanf(“%lf%lf”,x,y)(“%lf%lf”,x,y); ;%f 用来输入 float 类型变量%lf 用来输入 double 类型便类%le 表示用科学计数法输入 double程序段:程序段:int x=12;int x=12;

43、doubledouble y=3.141593;y=3.141593; printfprintf(“%d%8.6f”,x,y);的输出结果是(“%d%8.6f”,x,y);的输出结果是(20092009年年 3 3 月)月)a a)123.141593123.141593b b)12 3.14159312 3.141593c c)1212,3.1415933.141593d d)123.141593123.1415938.6f 输出是浮点数,域宽为8,保留六位小数有以下程序(有以下程序(20092009 年年 3 3 月)月)#include#includemainmain()() int a

44、1,a2;char c1,c2; int a1,a2;char c1,c2;scanfscanf(“%d%c%d%c”,&a1,&c1,&a2,&c2)(“%d%c%d%c”,&a1,&c1,&a2,&c2); ;printfprintf(“%d,%c,%d,%c”,&(“%d,%c,%d,%c”,&a1,c1,a2,c2a1,c1,a2,c2); ; 若想通过键盘输入,若想通过键盘输入, 使得使得 a1a1 的值为的值为 12,a212,a2 的是为的是为 3434, c1c1 的值为字符的值为字符 a,c2a,

45、c2的值为字符的值为字符 b,b,程序输出结果是:程序输出结果是:12,a,34,b,12,a,34,b,则正确的输入格式是(以下则正确的输入格式是(以下_ _代表空格,代表空格,代表回车)代表回车)a a)12a34b12a34bb b)12_a34_b12_a34_bc c)12,a,34,b12,a,34,b14 / 29d d)12_a34_b12_a34_b若变量已正确定义为若变量已正确定义为 intint 型,要通过语句型,要通过语句 scanf(%d,scanf(%d, %d,%d, %d,%d, &a,&a,&b,&b, &c)&

46、c);给;给 a a 赋值赋值1 1、给、给 b b 赋值赋值2 2、给、给 c c 赋值赋值3 3,以下输入形式中错误,以下输入形式中错误的是(的是( 代表一个空格符)代表一个空格符) ( ) 。 (20082008年年9 9月)月)a a) 1,2,3 1,2,3 b b)1 1 2 2 3 3 c c)1,1, 2, 2, 3 3 d d)1,2,31,2,3 若在定义语句:若在定义语句:int a,b,c,*p=&c;int a,b,c,*p=&c;之后,接着执行以下选项中的语句,之后,接着执行以下选项中的语句,则能正确执行的语句是则能正确执行的语句是a a)scanf

47、(%d,a,b,c); b)scanf(%d%d%d,a,b,c);scanf(%d,a,b,c); b)scanf(%d%d%d,a,b,c);c c)scanf(%d,p); d)scanf(%d,&p);)scanf(%d,p); d)scanf(%d,&p);有以下程序段(有以下程序段(20072007 年年 9 9 月)月)int j; float y; char name50;int j; float y; char name50;scanf(%2d%f%s,&j,&y,name);scanf(%2d%f%s,&j,&y,name);

48、当执行上述程序段,从键盘上输入当执行上述程序段,从键盘上输入 55566 7777abc55566 7777abc 后,后,y y 的值为的值为a a)55566.055566.0 b b)566.0 c566.0 c)7777.0 d7777.0 d)566777.0566777.0设变量均已正确定义,设变量均已正确定义, 若要通过若要通过 scanf(scanf( “%d%c%d%c%d%c%d%c” ,&a1,&c1,&a2,&c2);,&a1,&c1,&a2,&c2);语句为变量语句为变量 a1a1 和和 a2a2 赋数值

49、赋数值 1010 和和 2020,为变量,为变量 c1c1 和和 c2c2 赋字符赋字符 x x 和和 y y。以下。以下所示的输入形式正确的是(注:代表空格字符)所示的输入形式正确的是(注:代表空格字符) (20072007 年年 4 4 月)月)a a)1010x x2020y y回车回车 b b)1010x20x20y y回车回车c c)1010x x回车回车 d d)10x10x回车回车2020y y回车回车20y20y回车回车各个输入之间可以是空格、回车、制表符。空格也是字符设有定义:设有定义:int a; float b;int a; float b;执行执行 scanf(%2d%

50、f,&a,&b);scanf(%2d%f,&a,&b);语句时,语句时,若从键盘输若从键盘输入入 876 543.0876 543.0 ,a a 和和 b b 的值分别是的值分别是_。(。(20062006 年年 9 9 月)月)a a)876876 和和 543.000000543.000000 b b)8787 和和 6.0000006.000000c c)8787 和和 543.000000 d543.000000 d)7676 和和 543.000000543.000000执行以下程序时输入执行以下程序时输入 1234567,1234567,则输出结果是

51、则输出结果是_._. (20072007 年年 9 9 月)月)#include#includemain()main() int a=1,b; int a=1,b;scanf(%2d%2d,&ascanf(%2d%2d,&a,&b);printf(%d %dn,a,b);&b);printf(%d %dn,a,b); 15 / 29答案:答案:12 3412 34三、printf 函数用于按指定得格式在屏幕上输出若干任意类型的数据。一般格式:printf(printf(格式控制串,输出表列格式控制串,输出表列) );如:如:printf(printf(“a=%d

52、,b=%dna=%d,b=%dn”,a,b);,a,b);“格式控制串” 用来指定每个输出项的输出格式。组成格式控制串的字符通常由格式说明、转移字符和按原样输出的字符 3 部分组成。格式说明由“%”开头,后跟格式字符( p46 页) ,用来指定数据的输出格式。输出格式中的格式说明的个数和输出表列中的数据个数应一样。转义字符是以“”开始的字符,用来实现换行、跨越指标为或输出单引号、双引号等。除了以上两类字符之外,在格式串中的其他字符将按原样输出。输出表列是要输出的各项数据,可以是常量、变量、函数或表达式,其具体类型有格式控制串中的格式字符决定。使用说明:1. 掌握格式字符和附加格式字符的作用。2

53、. 在格式控制串中,格式说明和输出项在类型上必须一一对应。并且格式说明的个数和输出项的个数应该相同,如果不同,系统则作以下处理:如果格式说明的个数小于输出项数,多余的数据项不显示如果格式说明的个数多于输出项数,对多余的格式将输出不定值或 0 值有以下程序段(有以下程序段(20082008 年年 4 4 月)月)char ch; int k;char ch; int k;ch=a; k=12;ch=a; k=12;printf(%c,%d,ch,ch,k); printf(k=%dn,k);printf(%c,%d,ch,ch,k); printf(k=%dn,k);已知字符已知字符 a a 的

54、的 ascllascll 十进制代码为十进制代码为 9797,则执行上述程序段后输出结果是,则执行上述程序段后输出结果是a)a)因变量类型与格式描述符的类型不匹配输出无定值因变量类型与格式描述符的类型不匹配输出无定值b)b)输出项与格式描述符个数不符,输出为零值或不定值输出项与格式描述符个数不符,输出为零值或不定值c)a,97,12k=12c)a,97,12k=12 d d)a,97,k=12)a,97,k=12有以下程序,其中有以下程序,其中%u%u 表示按无符号整数输出(表示按无符号整数输出(20072007 年年 4 4 月)月)main()main()unsigned int x=0

55、xffff;/* xunsigned int x=0 xffff;/* x 的初值为十六进制数的初值为十六进制数 */ */printf(printf(“%un%un”,x);,x); 程序运行后的输出结果是程序运行后的输出结果是a a)-1-1 b b)65535 c65535 c)32767 d32767 d)0xffff0xffff16 / 29有以下程序(有以下程序(20062006 年年 9 9 月)月)main()main()int a=0,b=0;int a=0,b=0;a=10; /*a=10; /*给给 a a 赋值赋值b=20;b=20; 给给 b b 赋值赋值 */ */

56、printf(a+b=%dn,a+b); /*printf(a+b=%dn,a+b); /* 输出计算结果输出计算结果 */ */ 程序运行后输出结果是程序运行后输出结果是_。a a)a+b=0a+b=0 b b)a+b=30a+b=30c c)30 d30 d)出错)出错注意换行符的位置若变量若变量 x x、y y 已定义为已定义为 intint 类型且类型且 x x 的值为的值为 9999,y y 的值为的值为 9 9,请将输出语句,请将输出语句printfprintf ( 【7 7】 , x/yx/y) ; ;补充完整,补充完整, 使其输出的计算结果形式为:使其输出的计算结果形式为:x/

57、y=11x/y=11(20092009年年 3 3 月)月)答案:答案:” ”x/y=%dx/y=%d” ”若整型变量若整型变量a a 和和b b 中的值分别为中的值分别为7 7 和和9 9, 要求按以下格式输出要求按以下格式输出a a 和和b b 的值:的值:(20082008年年9 9月)月)a=7a=7b=9b=9请完成输出语句:请完成输出语句:printf (printf ( 【7 7】 ,a,b); ,a,b);答案:答案:a=%dnb=%dna=%dnb=%dn以下程序运行后的输出结果是以下程序运行后的输出结果是 【7 7】 。main()main() int m=011,n=11

58、;int m=011,n=11;printf(%dprintf(%d%dn,+m,n+);%dn,+m,n+); 答案:答案:10101111若变量若变量 a,ba,b已定义为已定义为 intint类型并赋值类型并赋值 2121和和 5555, 要求用要求用 printfprintf函数以函数以 a=21,b=55a=21,b=55的形式输出,请写出完整的输出语句的形式输出,请写出完整的输出语句_6_6_。 (20062006 年年 4 4 月)月)答案:答案:printf(printf(“ “a=%d,b=%da=%d,b=%d” ”,a,b);,a,b);四、getchar 函数其功能是从

59、键盘上输入一个字符,格式为: getchar(); getchar();函数值就是从输入设备得到的一个字符。17 / 29如:a=getchar() ;说明:1. 输入回车符时才结束,回车前的所有字符都会逐个显示在屏幕上。2. 此函数将输入的第一个字符作为函数的返回值。通常将寒暑的返回值赋给一个字符型变量或整型数据。五、putchar 函数作用是向输出设备上输出一个字符,格式为:putcharputchar(chch) ;其中 ch 可以使常量、变量、转义字符或表达式等,其数据类型可以是字符型或整型。当用户要求输入的字符串中含有空格时,应使用的输入函数是(当用户要求输入的字符串中含有空格时,应

60、使用的输入函数是( 20072007 年年 9 9月)月)a)scanf() b)getchar()a)scanf() b)getchar() c c)gets() d)getc()gets() d)getc()最重要的区别是 gets 读一行,getchar()读一个字符。先看原型:char * gets(char * ptr);int getchar(void);作用是:gets()用于从标准输入流 stdin 读入一个整行(以n或 eof)结束,写入ptr指向的字符数组,并返回这个指针;出错或遇到文件结束时则返回 null。行末的n从流中取出,但不写入数组。gets()不检查被写入的数组

61、大小。getchar()用于从标准输入流 stdin 读入一个字符,并返回这个字符。如果读到文件结尾, 则返回 eof。 注意到 eof 不能用 char 类型表示, 所以 getchar()函数返回的是一个 int 型的数。使用时也应该注意这一点。已知字符已知字符 a a 的的 asciiascii 码值为码值为 6565, 以下程序运行时若从键盘输入:以下程序运行时若从键盘输入: b33b33 ,则输出结果是则输出结果是 #include #include “stdio.hstdio.h” main() main() char a,b; char a,b;a=getchar();a=getchar();scanf(scanf(“%d%d”,&b);,&b);a=a-a=a-a a+ +0 0; ;b=b*2;b=b*2;

温馨提示

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

最新文档

评论

0/150

提交评论