计算机一级C语言复习资料知识点大全【精品】.doc
-1-计算机一级计算机一级 C 语言复习资料语言复习资料第一章第一章 C 语言概述语言概述第二章变量及表达式第二章变量及表达式二二 教学重点,难点分析教学重点,难点分析1.C C 语言概述语言概述知识点知识点所占分值所占分值考核几率考核几率专家点评专家点评C 语言概述语言概述0-1 分分20%简单识记简单识记C 语言程序的构成语言程序的构成0-1 分分30%简单识记简单识记标识符标识符1-2 分分60%简单,属重点识记知识点简单,属重点识记知识点常量常量1-2 分分80%简单,属重点识记知识点简单,属重点识记知识点变量变量2-3 分分100%难度适中,重点理解重点掌握难度适中,重点理解重点掌握注意注意:从几年的试题分析看从几年的试题分析看 C 语言的概述和程序的构成合起来考试已经语言的概述和程序的构成合起来考试已经是一个惯例了。是一个惯例了。2.运算符与表达式运算符与表达式知识点知识点所 占 分所 占 分值值考核几率考核几率专家点评专家点评C C 运算符简介运算符简介0-0-1 1 分分10%10%简单识记简单识记运算符的结合和优先级运算符的结合和优先级0-10-1 分分60%60%简单识记简单识记强制类型转换运算符强制类型转换运算符0-10-1 分分30%30%简单识记简单识记逗号运算符和逗号表达式逗号运算符和逗号表达式0-10-1 分分40%40%简单,属重点识记知识点简单,属重点识记知识点基本的算术运算符基本的算术运算符1-21-2 分分100%100%简单,属重点识记知识点简单,属重点识记知识点算术表达式和运算符的算术表达式和运算符的1-21-2 分分100%100%难度适中,重点理解重点掌握难度适中,重点理解重点掌握优先级与结合优先级与结合、自增自减运算符自增自减运算符2-32-3 分分100%100%难度适中,重点理解重点掌握难度适中,重点理解重点掌握赋值运算符和赋值表达式赋值运算符和赋值表达式2-42-4 分分100%100%简单,重点掌握重点理解简单,重点掌握重点理解复合的赋值运算符复合的赋值运算符1-21-2 分分80%80%偏难,不是重点偏难,不是重点赋值运算中的类型转换赋值运算中的类型转换0-10-1 分分75%75%偏难,不是重点偏难,不是重点位运算符和位运算位运算符和位运算0-10-1 分分80%80%偏难,属重点识记知识点偏难,属重点识记知识点-2-三三 教学讲点教学讲点1.C 语言的基本构成和格式语言的基本构成和格式#include“stdio.h”main()int a,b,sum;/*定义变量定义变量*/a=10;/*把整数把整数 10 赋值给变量赋值给变量 a*/b=20;/*把整数把整数 20 赋值给变量赋值给变量 b*/sum=a+b;/*把两数之和赋值给变量把两数之和赋值给变量 sum*/printf(“a=%d,b=%d,sum=%dn”,a,b,sum);/*输出计算结果输出计算结果*/(1).C 程序由函数组成,一个程序必须且只能有一个主函数程序由函数组成,一个程序必须且只能有一个主函数(main(),C 程序总是程序总是从主函数开始执行,在主函数中结束。从主函数开始执行,在主函数中结束。(2).定义函数时函数名后必须有一对小括号,函数体必须放在一对花括号内,在定义函数时函数名后必须有一对小括号,函数体必须放在一对花括号内,在函数体中,函数体有两个部分:定义部分和执行部分。定义语句必须出现在执函数体中,函数体有两个部分:定义部分和执行部分。定义语句必须出现在执行语句之前,我们先定义了行语句之前,我们先定义了 a,b,sum,然后才给它们赋值。然后才给它们赋值。(3).C 语言中每条语句都以分号语言中每条语句都以分号“;”结束,分号时结束,分号时 C 语句的一部分。即使是程语句的一部分。即使是程序的最后一个语句也不例外。分号是语句结束的标志。序的最后一个语句也不例外。分号是语句结束的标志。(4).一行可以写多条语句一行可以写多条语句,一条语句也可以分在多行上写一条语句也可以分在多行上写,但是但是,不能将一个整不能将一个整体分开。体分开。例如:例如:i nt 是错误的,而是错误的,而 int 正确。正确。(5).C 语言的注释必须放在语言的注释必须放在“/*”和和“*/”之间之间,“/”和和“*”之间不允许有空格之间不允许有空格。“/*”和和“*/”之间不允许再插入之间不允许再插入“/*”或或“*/”。注释可以出现在程序中的任意注释可以出现在程序中的任意位置。注释部分不被执行。位置。注释部分不被执行。(6).C 语言程序书写格式自由,语句可以从任一列开始书写,一行内可语言程序书写格式自由,语句可以从任一列开始书写,一行内可以写多个语句以写多个语句。但是过于但是过于“自由自由”的程序书写格式往往使人们很难读懂的程序书写格式往往使人们很难读懂程序,初学者应该从一开始就养成好的习惯,是程序便于阅读。程序,初学者应该从一开始就养成好的习惯,是程序便于阅读。2.标识符标识符(1)标识符只能由字母、数字和下划线组成。标识符只能由字母、数字和下划线组成。(2)标识符的第一个字符必须是字母或下划线。标识符的第一个字符必须是字母或下划线。(3)标识符的大小写字母是有区别的,如标识符的大小写字母是有区别的,如 abc 和和 ABC 是两个完全不是两个完全不同的标识符。同的标识符。(3)标识符的分类:标识符的分类:关键字关键字:关键字是具有特定的含义的关键字是具有特定的含义的、专门用来说明专门用来说明 C 语言特定成分的语言特定成分的一类标识符。详细的查阅附录二。一类标识符。详细的查阅附录二。预定义标识符:在预定义标识符:在 C 语言中它也有特定的含义。预定义标识符可语言中它也有特定的含义。预定义标识符可以用位以用位“用户表标识符用户表标识符”使用,只是这将使这些标识符失去了原使用,只是这将使这些标识符失去了原来的意义。来的意义。用户标识符:由用户根据需要定义的标识符被成为用户标识符。用户标识符:由用户根据需要定义的标识符被成为用户标识符。用户标示符用来给变量、函数、数组或者指针等命名。用户标示符用来给变量、函数、数组或者指针等命名。-3-3.C 语言的数据类型语言的数据类型3.1数据可以分为常量和变量。常量是指在程序执行中不变的量,常量数据可以分为常量和变量。常量是指在程序执行中不变的量,常量分为:整型常数、实型常数、字符常量、字符串常量。分为:整型常数、实型常数、字符常量、字符串常量。整型数据:整型数据:进制间的转换进制间的转换3.11.二、八、十六进制转为十进制二、八、十六进制转为十进制规则规则:“按权相加按权相加”3.12.十进制转为二、八、十六进制十进制转为二、八、十六进制规则:规则:整数部分:基数除取余,逆序排列整数部分:基数除取余,逆序排列小数部分:基数乘取整,顺序排列小数部分:基数乘取整,顺序排列3.13.二进制转为八、十六进制二进制转为八、十六进制规则:三(四)合一,按序相拼(整数部分,从右向左取,小数部分从左向右规则:三(四)合一,按序相拼(整数部分,从右向左取,小数部分从左向右取,位数不足补零取,位数不足补零)。3.14.八、十六进制转为二进制八、十六进制转为二进制规则:一分三(四规则:一分三(四),按序相拼,按序相拼3.2 整型数据在内存中的存放形式整型数据在内存中的存放形式1 字节字节8 位,位,1Byte8bit字长:指字长:指 CPU 能同时处理的二进制位数。由能同时处理的二进制位数。由 CPU 的型号而定。如:的型号而定。如:16 位微机位微机的字长就是的字长就是 16 位或位或 2 字节。字节。1GB=1024MB,1MB=1024KB,1KB=1024BB:表示字节表示字节,字节是表示存储容量的最小单位字节是表示存储容量的最小单位。位位(bit):是计算机中信息表示是计算机中信息表示的最小单位。的最小单位。3.21.正整数在内存中用正整数在内存中用“原码原码”形式存放形式存放。(直接转换为二进制即可(直接转换为二进制即可)。如:如:50000000000000101二字节能存放的最大数是二字节能存放的最大数是:327670111111111111111对带符号数,最高位是符号位,用对带符号数,最高位是符号位,用 0 表示正,用表示正,用 1 表示负。表示负。3.22.负整数在内存中用负整数在内存中用“补码补码”形式存放。形式存放。取补码的步骤:取补码的步骤:(1)忽略负号,求出原码。忽略负号,求出原码。(2)将原码按位取反(将原码按位取反(0、1 互换互换)。-4-(3)在第二步的基础上加在第二步的基础上加 1。如:取如:取-5 的补码。的补码。(1)0000000000000101(2)1111111111111010(3)1111111111111011将补码转换成相应的整数的步骤:将补码转换成相应的整数的步骤:(1)将补码按位取反加将补码按位取反加 1。(2)将步骤将步骤 1 得到的二进制数转换成十进制数,然后加上负号即可。得到的二进制数转换成十进制数,然后加上负号即可。例如:例如:1000000000000000按位取反加按位取反加 1011111111111111111000000000000000转换成十进制:转换成十进制:121532768加负号:加负号:-32768几个特殊的带符号整数:几个特殊的带符号整数:1000000000000000-327680111111111111111327671111111111111111-13.23.无符号整数:只有正整数,没有负整数,无符号整数:只有正整数,没有负整数,最高位不表示符号位,每一位均最高位不表示符号位,每一位均参与转换。参与转换。二进制二进制带符号整数带符号整数无符号整数无符号整数1111111111111111-1655351000000000000000-3276832768例例 2-12:若有:若有:int a=-1;unsigned b=65535;则则printf(“%d,%u,%d,%u”,a,a,b,b);输出结果是:输出结果是:-1,65535,-1,65535数据益出问题:数据益出问题:例例 2-13:若有若有 int a=32767;则则 a=a+1 的结果是:的结果是:-32768例例 2-14:若有若有 unsigned b=65536;则则 b 的值是:的值是:0分析:分析:32767:01111111111111111+1100000000000000将将 100000000000000 按照带符号数转为十进制为按照带符号数转为十进制为-3276865535:1111111111111111+11111111111111111+110000000000000000-5-65536unsigned b=655536;而而 b 属于无符号整型,在内存中只占两字节,所以属于无符号整型,在内存中只占两字节,所以只能包括只能包括 16 位。位。标准标准 C 没有具体要求规定各类型数据所占内存的字节数没有具体要求规定各类型数据所占内存的字节数,现以这次考试标现以这次考试标准准 viusal c+6.0 为例,说明各类型变量所占的位数。为例,说明各类型变量所占的位数。类型类型所占位所占位数数所占字所占字节数节数类型类型所占位所占位数数所占字节所占字节数数shortshort16162 2unsignedunsignedintint32324 4intint32324 4unsignedunsignedlonglong32324 4longlong32324 4floatfloat32324 4unsignedunsignedshortshort16162 2doubledouble64648 83.3 实型数据(浮点数)实型数据(浮点数)3.31.实型常量实型常量(1)小数形式:由数字和小数点组成,必须有小数点,小数点的某一侧可以没有小数形式:由数字和小数点组成,必须有小数点,小数点的某一侧可以没有数字。如:数字。如:.23,123.876,123.(2)指数形式:用指数形式:用“e”或或“E”后接一个整数,表示以后接一个整数,表示以 10 为底的幂数。为底的幂数。注意注意:“e”或或“E”之前之后必须有数字之前之后必须有数字,且之后的数字必须是整数且之后的数字必须是整数。他们和他们和前后的数字之间不能有空格。前后的数字之间不能有空格。例如:例如:例例 2-15:下列合法的常量是(下列合法的常量是()。A.-32169B.0128C.0XDEFGD.13E0.5例例 2-16:下列合法的实型常量是(下列合法的实型常量是()。(A)0Xff(B)124E(C)1.23E5.0(D)3.E2(E)1.25E+2(F).23e+023.32.实型变量实型变量单精度型单精度型 float 占占 4 字节字节双精度型双精度型 double 占占 8 字节字节长双精度长双精度 long double 占占 16 字节(较少用)字节(较少用)4.表达式与运算符表达式与运算符4.1 算术运算符及其表达式:算术运算符及其表达式:+-*/%:(求余运算)(求余运算)注意:注意:(1)%两边必须是整型数据。两边必须是整型数据。12.0%3 表达式是错误的。表达式是错误的。(2)求余(求余(%)的方法是:忽略符号,求出余数,再将所得余数的符号定为与被)的方法是:忽略符号,求出余数,再将所得余数的符号定为与被-6-除数相同。除数相同。例如:例如:17%3 结果是:结果是:217%-3 结果是:结果是:2,-17%3 结果是:结果是:-2,-17%-3 结果是:结果是:-24.2 强制类型转换强制类型转换强制类型表达式强制类型表达式:(类型名)表达式(类型名)表达式注意:类型名(表达式)这种形式是注意:类型名(表达式)这种形式是 C+的强制类型表达方式。的强制类型表达方式。5.赋值运算符及其表达式赋值运算符及其表达式5.1.赋值运算符赋值运算符=格式:变量名格式:变量名=表达式表达式功能:将表达式的值赋给左边的变量。功能:将表达式的值赋给左边的变量。注:注:(1)赋值运算符左边只能是一个变量,不能是常量,也不能是表达式。赋值运算符左边只能是一个变量,不能是常量,也不能是表达式。a+b=34=3 是非法的表达式是非法的表达式a=6a+(b=3)都是合法的表达式都是合法的表达式a=b=20a=(b=10)/(c=2)都是合法的表达式都是合法的表达式(2)实型数据赋给整型变量时,小数部分被舍去,整型数据赋给实型变量时,系实型数据赋给整型变量时,小数部分被舍去,整型数据赋给实型变量时,系统自动将整型数据转换为实型数据。统自动将整型数据转换为实型数据。例如:例如:float a;int b;表达式表达式 a=10%3 的值是的值是 1.0表达式表达式 b=a=10%3 的值是的值是 15.2.复合赋值运算符及其表达式:复合赋值运算符及其表达式:+=-=*=/=%=&=|=例如:例如:a+=3 相当于相当于 a=a+3,a/=b+4 相当相当 a/=(b+4)或或 a=a/(b+4)例例:若若 a=12,则执行表达式则执行表达式 a+=a-=a+a 后后 a 的值是多少?的值是多少?分析:分析:a+=a-=(a+a)/*a 的值是的值是 12*/a+=a-=24/*a 的值是的值是 12*/a+=a=a-24/*a 的值是的值是 12*/a+=a=-12/*a 的值是的值是 12*/a+=-12/*a 的值是的值是-12*/a=a+(-12)/*a 的值是的值是-12*/a=-24/*a 的值是的值是-24*/5.3.自增、自减运算符及其表达式自增、自减运算符及其表达式+-注意:注意:(1)只能用于变量,不能用于常量和表达式。只能用于变量,不能用于常量和表达式。-7-如:如:6+(a+b)-都是错误的。都是错误的。(2)当它们用于变量名前时,表达式的值为变量的值加一或减一。当位于变量名当它们用于变量名前时,表达式的值为变量的值加一或减一。当位于变量名后时,表达式的值为变量原来的值。不论位于变量名前还是变量名后,只要进后时,表达式的值为变量原来的值。不论位于变量名前还是变量名后,只要进行了自增、自减运算,变量的值都会在原来的基础上加行了自增、自减运算,变量的值都会在原来的基础上加 1 或减或减 1。如:如:a=3 则则 a+表达式的值是表达式的值是 3 运算之后变量的值是运算之后变量的值是 4a=3 则则+a 表达式的值是表达式的值是 4 之后变量的值是之后变量的值是 4a=3 则则 a-表达式的值是表达式的值是 3 之后变量的值是之后变量的值是 2a=3 则则-a 表达式的值是表达式的值是 2 之后变量的值是之后变量的值是 2(3)口诀:口诀:j=i+;这个表达式是先引用后增值。即:先把这个表达式是先引用后增值。即:先把 i 的初始值给变量的初始值给变量 j,然后,然后 i 再再自加自加 1。j=+i;这歌表达式是先增值后引用。即:这歌表达式是先增值后引用。即:i 先自加先自加 1,然后再将我们自加后的,然后再将我们自加后的值赋值给变量值赋值给变量 j。但是记住它们是一起执行的,就是说:例如但是记住它们是一起执行的,就是说:例如 j=i+先引用后增值实际上是一先引用后增值实际上是一起执行的起执行的,它们之间不存在先后关系它们之间不存在先后关系,我们只是位了好记才用到了上面的方法我们只是位了好记才用到了上面的方法。老师在上课的时候先不要说,但是你们必须知道。老师在上课的时候先不要说,但是你们必须知道。j=i-,j=-i 和上面和上面 j=i+,j=+i的方法是一样。的方法是一样。5.4 逗号运算符及其表达式逗号运算符及其表达式1.格式:表达式格式:表达式 1,表达式,表达式 2,表达式,表达式 n注意:注意:1.逗号表达式的值是整个逗号表达式中最后一个表达式的值。逗号表达式的值是整个逗号表达式中最后一个表达式的值。2.求值顺序是从左到右依次求解。求值顺序是从左到右依次求解。例如:例如:a(3,b1)的值是)的值是 1 运算结束后运算结束后 a 的值是的值是 1,b 的值是的值是 1。四四 相关试题相关试题1.2008 年年 4 月相关试题月相关试题(11)以下叙述中正确的是)以下叙述中正确的是A)C程序中的注释只能出现在程序的开始位置和语句的后面程序中的注释只能出现在程序的开始位置和语句的后面B)C程序书写格式严格,要求一行内只能写一个语句程序书写格式严格,要求一行内只能写一个语句C)C程序书写格式自由,一个语句可以写在多行上程序书写格式自由,一个语句可以写在多行上D)用用C语言编写的程序只能放在一个程序文件中语言编写的程序只能放在一个程序文件中(12)以下选项中不合法的标识符是)以下选项中不合法的标识符是A)print B)FOR C)&a D)_00(13)以下选项中不属于字符常量的是以下选项中不属于字符常量的是A)CB)CC)xCC0D)072(14)设变量已正确定义并赋值,以下正确的表达式是设变量已正确定义并赋值,以下正确的表达式是A)x=y*5=x+z B)int(15.8%5)C)x=y+z+5,+y D)x=25%5.0-8-填空填空(7)设变量已正确定义为整型,则表达式)设变量已正确定义为整型,则表达式n=i=2,+i,i+的值为【的值为【7】。2.2007年年9月相关试题月相关试题(11)C 语言源程序名的后缀是语言源程序名的后缀是A).exeB).CC).objD).cp(12)可在)可在 C 程序中用作用户标识符的一组标识符是程序中用作用户标识符的一组标识符是A)andB)DateC)HiD)case_2007y-m-dDr.TomBig1(13)以下选项中,合法的一组)以下选项中,合法的一组 C 语言数值常量是语言数值常量是A)028B)12.C).177D)0 x8A.5e-30Xa234e1.510,000-0 xf4.5e00abc3.e5(14)以下叙述中正确的是)以下叙述中正确的是A)C 语言程序将从源程序中第一个函数开始执行语言程序将从源程序中第一个函数开始执行B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行行C)C 语言规定必须用语言规定必须用 main 作为主函数名,程序将从此开始执行,在此结作为主函数名,程序将从此开始执行,在此结束束D)main 可作为用户标识符,用以命名任意一个函数作为主函数可作为用户标识符,用以命名任意一个函数作为主函数(16)以下关于)以下关于 long、int 和和 short 类型数据占用内存大小的叙述中正确的是类型数据占用内存大小的叙述中正确的是A)均占)均占 4 个字节个字节B)根据数据的大小来决定所占内存的)根据数据的大小来决定所占内存的字节数字节数C)由用户自己定义)由用户自己定义D)由)由 C 语言编译系统决定语言编译系统决定(17)若变量均已正确定义并赋值,以下合法的)若变量均已正确定义并赋值,以下合法的 C 语言赋值语句是语言赋值语句是A)x=y=5;B)x=n%2.5;C)x+n=i;D)x=5=4+1;3.2007年年4月相关考题月相关考题(12)下列叙述中错误的是()下列叙述中错误的是(D)A)计算机不能直接执行用)计算机不能直接执行用 C 语言语言编写的源程序编写的源程序B)C 程序经程序经 C 编译程序编译后,生成后缀为编译程序编译后,生成后缀为.obj 的文件是一个二进制文件的文件是一个二进制文件C)后缀为)后缀为.obj 的文件,经连接程序生成后缀为的文件,经连接程序生成后缀为.exe 的文件是一个二进制文件的文件是一个二进制文件D)后缀为)后缀为.obj 和和.exe 的二进制文件都可以直接运行的二进制文件都可以直接运行(13)按照按照 C 语言规定的用户标识符命名规则语言规定的用户标识符命名规则,不能出现在标识符中的是不能出现在标识符中的是(B)A)大写字母)大写字母B)连接符)连接符C)数字字符)数字字符D)下划线)下划线(14)以下叙述中错误的是()以下叙述中错误的是(C)A)C 语言是一种结构化程序设计语言语言是一种结构化程序设计语言B)结构化程序有顺序、分支、循环三种基本结构组成)结构化程序有顺序、分支、循环三种基本结构组成C)使用三种基本结构构成的程序只能解决简单问题)使用三种基本结构构成的程序只能解决简单问题D)结构化程序设计提倡模块化的设计方法)结构化程序设计提倡模块化的设计方法(15)对于一个正常运行的)对于一个正常运行的 C 程序,以下叙述中正确的是(程序,以下叙述中正确的是(A)A)程序的执行总是从)程序的执行总是从 main 函数开始,在函数开始,在 main 函数结束函数结束B)程序的执行总是从程序的第一个函数开始,在)程序的执行总是从程序的第一个函数开始,在 main 函数结束函数结束C)程序的执行总是从)程序的执行总是从 main 函数开始,在程序的最后一个函数中结束函数开始,在程序的最后一个函数中结束D)程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束)程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束-9-(19)有以下程序,其中)有以下程序,其中%u 表示按无符号整数输出(表示按无符号整数输出(B)main()()unsigned int x=0 xFFFF;/*x 的初值为十六进制数的初值为十六进制数*/printf(“%un”,x);/*注意:注意:x 是占两个字节是占两个字节*/程序运行后的输出结果是程序运行后的输出结果是A)-1B)65535C)32767D)0 xFFFF第三章第三章 顺序结构顺序结构一教学重点、难点一教学重点、难点知识点知识点所 占 分所 占 分值值考核几率考核几率专家点评专家点评C C 语句分类语句分类0-10-130%30%简单识记简单识记字符输出函数字符输出函数 putchar()putchar()1-21-270%70%难度适中,重点掌握难度适中,重点掌握字符输入函数字符输入函数 getchar()getchar()1-21-270%70%难度适中,重点掌握难度适中,重点掌握格式输入函数格式输入函数 printf()printf()3-43-4100%100%难度适中难度适中,重点理解重点掌重点理解重点掌握握格式输出函数格式输出函数 scanf()scanf()3-43-4100%100%难度适中难度适中,重点理解重点掌重点理解重点掌握握二教学内容二教学内容1.语句语句C 语句共分为语句共分为 5 类:类:1.1 控制语句控制语句1.2 函数调用语句:函数调用语句:printf(“thisis a c statement”);1.3 表达式语句表达式语句每一个合法的表达式后加上分号(每一个合法的表达式后加上分号(;)就构成了表达式语句。)就构成了表达式语句。-10-+a;i+j;语句和表达式的区别:语句和表达式的区别:表达式有唯一确定的值,而语句没有值。表达式有唯一确定的值,而语句没有值。1.4 赋值语句赋值语句格式:赋值表达式;格式:赋值表达式;i=1,j2 是逗号表达式是逗号表达式i=1;j2;是两条赋值语句;是两条赋值语句i+;i-;+i;-i;都是赋值语句;都是赋值语句等价于等价于 ii+1;或;或 i=i-1;1.5 空语句:只有一个单独的分号构成的语句。如:空语句:只有一个单独的分号构成的语句。如:;就是一条空语句。;就是一条空语句。1.6 复合语句:用一对将若干语句括起来构成一条复合语句。复合语句:用一对将若干语句括起来构成一条复合语句。2.输入输出语句输入输出语句在使用库函数时必须先用预编译命令在使用库函数时必须先用预编译命令#include 或或#include“头文件头文件名名”将相应的头文件包含到源程序中。将相应的头文件包含到源程序中。如:如:#include2.1.printf()函数()函数格式:格式:printf(“格式控制格式控制”,输出列表,输出列表);功能:按格式控制指定的格式输出数据。功能:按格式控制指定的格式输出数据。注意:格式控制包括以开头的注意:格式控制包括以开头的“格式说明符格式说明符”和原样输出的普通字符。和原样输出的普通字符。如:如:printf(“ad,a+bd”,30,4+7);输出结果是:输出结果是:a30,a+b11(1)d 格式格式d:按实际长度输出十进制整数。:按实际长度输出十进制整数。md:输出占:输出占 m 列,若小于列,若小于 m 列,左边补空格,若大于列,左边补空格,若大于 m 列,按实际输出。列,按实际输出。-md:输出占:输出占 m 列,若小于列,若小于 m 列,右边补空格,若大于列,右边补空格,若大于 m 列,按实际输出列,按实际输出。ld:输出长整型数据,输入输出长整型数据时必须用该格式。:输出长整型数据,输入输出长整型数据时必须用该格式。例如:例如:printf(“%d,%6d,%-6d,%ld”,386,1234,3456,12345L);输出结果:输出结果:386,1234,3456,12345printf(“%2d”,12345);输出结果:输出结果:12345(2)u 格式格式u:以无符号十进制形式输出整数。:以无符号十进制形式输出整数。printf(“%u”,-1);65535ptintf(“%u”,-32768);32768(3)o 格式格式o:以无符号八进制形式输出整数,不输出前导符:以无符号八进制形式输出整数,不输出前导符 0。printf(“%d,%o”,-1,-1);-1,177777(4)x 或或 X 格式格式x 或或X 以无符号十六进制形式输出整数以无符号十六进制形式输出整数。不输出前导符不输出前导符 0 x 或或 0X,小写对小小写对小写,大写对大写。写,大写对大写。printf(“%d,%x,%X,%x”,-1,-1,0 xabc,0XAbc);-11-1,ffff,ABC,abc注注:若要输出十六进制和八进制的前导符若要输出十六进制和八进制的前导符,则要用则要用o 和和x、X 格式格式。printf(“%#o,%#x,%#X”,-1,-1,0 xaBc);0177777,0 xffff,0XABC(5)c 格式格式c 用来输出一个字符,不输出单引号定界符。用来输出一个字符,不输出单引号定界符。c 和和d 可以相互转换。可以相互转换。printf(“%c,%d”,a,a);a,97printf(“%c,%d”,100,100);d,100(6)s 格式格式用来输出一个字符串,不输出双引号和字符串结束符。用来输出一个字符串,不输出双引号和字符串结束符。s:输出字符串的有效字符。:输出字符串的有效字符。printf(“%s”,”china0yunnan”);china%ms:输出占输出占 m 列,若小于列,若小于 m 列,左边补空格,大于列,左边补空格,大于 m 列,按实际输出。列,按实际输出。printf(“%5s,%-5s,%2s”,”swfc”,”swfc”,”swfc”);swfc,swfc,swfc%m.ns:输出占输出占 m 列,只输出字符串的左列,只输出字符串的左 n 个字符到个字符到 m 列的右端。列的右端。如:如:printf(“%7.5s”,”yunnan”);yunna(7)f 格式:按小数形式输出实型数据。格式:按小数形式输出实型数据。f:默认输出:默认输出 6 位小数。位小数。如:如:printf(“%f,%f”,543.12,5.4312e+2);543.120000,543.120000%m.nf:输出占输出占 m 列,其中有列,其中有 n 位小数。若超过位小数。若超过 m 列,确保列,确保 n 位小数后按实际位小数后按实际输出。注意四舍五入问题。输出。注意四舍五入问题。如:如:printf(“%7.3f,%-7.3f,%4.2f”,3.1415726,3.1415926,314.5926);3.142,3.142,314.59(8)e 格式格式以指数形式输出一个实数。小数点前只有一位非零数,以指数形式输出一个实数。小数点前只有一位非零数,5 位小数,位小数,3 位指数。位指数。如:如:printf(“%e,%e”,123.4,123.45e-7);234000e+002,1.234500e-005(9)g 格式格式自动在自动在f 和和e 中选择较短的一种输出,对于小数部分不输出无意义的中选择较短的一种输出,对于小数部分不输出无意义的 0。如:如:printf(“%g,%g”,123.45,123.45e-2);123.45,1.2345printf(“%g”,123000000.0);23e+08小结:小结:(1)表示输出一个。表示输出一个。如:如:printf(“%d=%d”,10,10);%d=10(2)除了除了 x,e,g 大小写均可外,其它都只能小写。大小写均可外,其它都只能小写。如:如:printf(“%d=%D”,20,20);20=%D(3)输出格式说明符所能操作的数据类型必须与输出项的类型一致。输出格式说明符所能操作的数据类型必须与输出项的类型一致。-12-如:如:printf(“%d”,1.234);/*出错出错*/2.2.scanf()函数函数格式:格式:scanf(“格式控制格式控制”,地址列表,地址列表);注意:注意:(1)可指定数据所占的列数,输入后由系统自动截取相应的位数。)可指定数据所占的列数,输入后由系统自动截取相应的位数。如:如:scanf(“%3d%2d”,&a,&b);若输入:若输入:3863018则:则:a 的值是:的值是:386b 的值是:的值是:30若输入:若输入:3863a 的值是:的值是:386b 的值是:的值是:3scanf(“%3c%2d”,&ch,&c);若输入:若输入:3863018则:则:ch 的值是:的值是:3b 的值是:的值是:30(2)*md:表示跳过表示跳过 m 列不读。列不读。如:如:scanf(“%*3d%3d%4d”,&a,&b);若输入:若输入:123456则:则:a 的值是:的值是:456b 的值是:原来的值。的值是:原来的值。(3)不能在)不能在 scanf()函数中指定输入数据的小数位数。函数中指定输入数据的小数位数。如:如:scanf(“%7.5f”,&a);/*出错出错*/在在 scanf()函数中,输入时普通字符原样输入。函数中,输入时普通字符原样输入。如:如:scanf(“a=%d,b=%d”,&a,&b);若要给若要给 a 赋值赋值 5,b 赋值赋值 10,正确的输入是:,正确的输入是:a5,b10scanf(“%d*,%d#,%d”,&a,&b,&c);若要让若要让 a,b,c 分别得到分别得到 1,2,3,正确的输入是:,正确的输入是:1*,2#,3若两个格式说明符之间没有其它字符,则在输入数据时,两数据之间要用回车若两个格式说明符之间没有其它字符,则在输入数据时,两数据之间要用回车或空格分隔,回车或空格可以是多个。但是,或空格分隔,回车或空格可以是多个。但是,c 格式除外。格式除外。如:如:scanf(“%d%d”,&a,&b);若想让若想让 a 的值为的值为 5,b 的值为的值为 10。则正确的输入是:。则正确的输入是:5 空格空格 10 或或 510或或 5 空格空格 空格空格 空格空格 10(6)多个多个%c 格式之间没有其它字符,仍然不能用回车或空格来分隔。格式之间没有其它字符,仍然不能用回车或空格来分隔。如:如:scanf(“%c%c%c”,&a,&b,&c);若输入:若输入:a 空格空格 b 空格空格 ca 的值是的值是a,b 的值是空格,的值是空格,c 的值是的值是b。(7)格式说明符所能操作的数据类型必须与对应变量的类型相同。)格式说明符所能操作的数据类型必须与对应变量的类型相同。如:如:int a;scanf(“%f”,&a);/*出错出错*/-13-总结:总结:1.普通字符原样输入,原样输出。普通字符原样输入,原样输出。2.对于对于d 格式,指定宽度小于输出宽度,原样输出。格式,指定宽度小于输出宽度,原样输出。3.#o,#x,#X 表示要输出八进制的前导符数字表示要输出八进制的前导符数字 0,和十六进制的前导,和十六进制的前导符符0 x,0X。4.x,X 格式,小写对小写,大写对大写。格式,小写对小写,大写对大写。5.*md:表示跳过相应的输入项。表示跳过相应的输入项。6.注意进制间的转换,以及无符号数和带符号数之间的转换。注意进制间的转换,以及无符号数和带符号数之间的转换。7.在在 scanf()函数中,给()函数中,给 double 类型变量输入数据时,应该使用类型变量输入数据时,应该使用lf 类型说明类型说明符,而输出时,可以用符,而输出时,可以用lf,也可以用,也可以用lf。三三 试题分析试题分析1.2008年年4月试题分析月试题分析(16)有以下程序段有以下程序段char ch;int k;ch=a;k=12;printf(%c,%d,ch,ch,k);printf(k=%dn,k);已知字符已知字符a的的ASCll十进制代码为十进制代码为97,则执行上述程序段后输出结果是,则执行上述程序段后输出结果是A)因变量类型与格式描述符的类型不匹配输出无定值因变量类型与格式描述符的类型不匹配输出无定值B)输出项与格式描述符个数不符,输出为零值或不定值输出项与格式描述符个数不符,输出为零值或不定值C)a,97,12k=12D)a,97,k=122.2007年年9月试题分析月试题分析(15)若在定义语句:)若在定义语句:inta,b,c,*p=&c;之后,接着执行以下选项中的语句,之后,接着执行以下选项中的语句,则能正确执行的语句是则能正确执行的语句是A)scanf(%d,a,b,c);B)sc