精华内容
下载资源
问答
  • 因 C 中对标识符只处理前 8 个字符, 超过 8 个长度的部分将 C 自动忽略掉。ABCDEFGH1和ABCDEFH2是同一个标识符标识符不要与保留字 同名,最好也不要与 C 提供的标准标识符,如库函数重名;应注意 C 语言对大...

    253b171540df25e1b84436cbe50dfc72.gifc语言程序设计基本概念考点归纳.doc

    第第 1 1 章章 程序设计基本概念考点归纳程序设计基本概念考点归纳 1.1 C1.1 C 语言的特点语言的特点 C 语言是近年来非常流行的语言,很多人宁愿放弃已经熟悉的其他语言而改用 C 语言, 其原因是 C 语言有优于其他语言的一系列特点。下面是 C 语言的主要特点 1语言简洁、紧凑,并且使用方便、灵活; 2运算符丰富; 3数据结构丰富; 4具有结构化的控制语句; 5语法限制不太严格,使程序设计比较自由; 6C 语言允许用户直接访问物理地址, 能进行位bit操作, 可以直接对硬件进行操作。 1.2 1.2 源程序的书写规则源程序的书写规则 C 语言的书写规则。C 语言书写格式自由,一行内可以写几个语句,一个语句也可以分 写在多行上。C 程序没有行号,每个语句和数据定义的最后必须有一个分号。C 语言中分号 是语句中不可少的,即使是程序中的最后一个语句也应该包含分号。C 语言中的注释可以 用/*用*/结束,注释可以在任何允许插入空格符地方插入。C 语言中注释不允许嵌 套,注释可以用西文,也可以用中文。 1.3 C1.3 C 语言的风格语言的风格 由于 C 语言对语法限制不太严格, 为了保证程序的准确性和可读性, 建议在书写程序采 用阶梯缩进格式。也就是按如下格式书写 C 语言程序 ; * ; ; ; *; 概括起来,C 语言程序具有如下的风格 C 语言程序的函数具体模块结构风格,使得程序整体结构清晰、层次清楚,为模块化 程序设计提供了强有力的支持。 C 语言的源程序的扩展名都是.C。 C 语言中的注释格式为 /*注释内容*/ /与*之间不允许有空格,注释部分允许出现在程序中的任何位置。 C 语言中的所有语句都必须以分号“;”结束。 第第 2 2 章章 C C 程序设计的初步知识考点归纳程序设计的初步知识考点归纳 2.1 2.1 程序的构成程序的构成 尽管 C 程序的内容千变万化, 但是它们的构成都是一致的, 一个完整的 C 源程序的格式 可以如下表示 编译预处理 主函数 函数 从上面中可以看出, 一个 C 源程序实际上就是若干函数的集合, 这些函数中有一个是程 序的主函数,任何 C 的源程序执行时,都是从主函数开始执行的,其它的函数最终必将被这 个主函数所调用。C 语言除了主函数规定必须取名 main 外,其它的函数名可以任取,但是 要符合 C 的标识符取名规则, 另外注意不要与保留字重名, 最好也不可与 C 语言中的库函数 或其它一些命令如编译预处另命令重名。 各个函数在程序中所处的位置并不是固定的, 但要 求一个函数是完整的、独立的。不允许出现在一个函数内部又去定义另一个函数,或是函数 格式不齐全的现象。一个完整的一般意义上的函数有一个固定的框架,编写具体的函数时, 只需在这个框架中填入相应的内容即可。框架如下 函数类型 函数名形参 形参说明 内部变量说明; 执行语句部分; 2.2 C2.2 C 语言的基本词法语言的基本词法 C 语言的基本词法由三部分组成符号集、关键字、保留字。 符号集就是一门语言中允许出现的字符的集合,C 语言的符号集就是 ASC码表中的一 些字符,在键盘上不能直接得到比如说响铃字符,C 语言引入了转义字符的概念,利用反 斜杠符号后加上字母的一个字符组合来表示这些字符, 当在源程序中遇到这类字符组 合时, 虽然这个字符组合是一个字符串的形式, 但 C 语言仍会自动将之理解成某一特定的字 符。比如,C 语言在处理这个字符组合时,会自动理解成回车换行符号。转义字符经 过进一步引申应用,形成了另外两种形式ddd和xnn,这里后的 ddd 和 xnn 分别代表三位八进制和两位十六进制数打头的x只是标明后面跟着的是十六进 制数,这两种形式不再局限于表示不可打印的字符,它们可以表示 ASC码表中的任意字 符,只要把所需表示的字符的 ASCII 码转换成八进制数或十六进制数即可。比如说字母 A,ASCII 码为 65,65 的八进制和十六进制分别为 101 和 x41,所以,字母 A 可表示为 101或x41,对转义字符应认真理解。 标识符就是用以标识的符号。正如现实生活中给每一个人都取一个名字一样,C 语言中 的每一个对象如函数、变量等都必须取一个标识符以和其它对象区别开。在 C 语言中,这 个标识符是一个字符串, 这个字符串的选定有一定的规则 必须是以字母或下划线开头的字 母与数字的序列。 除了这个基本的规则外, C 语言对标识符的命名还有几个限制需加以注意 长度最好不要超过八个字符。 因 C 中对标识符只处理前 8 个字符, 超过 8 个长度的部分将 被 C 自动忽略掉。ABCDEFGH1和ABCDEFH2是同一个标识符;标识符不要与保留字 同名,最好也不要与 C 提供的标准标识符,如库函数重名;应注意 C 语言对大小写字母是 敏感的,Abcd 和 abcd 是两个不同的标识符。 关键字实际上就是一些特殊的标识符, 又称保留字, 这些保留字不允许用户对它重新定 义。 2.3 2.3 头文件、数据说明、函数的开始和结束标志头文件、数据说明、函数的开始和结束标志 1.头文件 也称为包含文件或标题文件, 一般放在一个 C 语言程序的开头, 用include 文件名的格式,其中文件名是头文件名,一般用.h 作为扩展名。 2.数据说明C 语言中的数据分常量和变量两种。 3.常量有数值常量和符号常量两种。 4.数值常量可以分为整型常量、实型常量、浮点型常量和字符常量。 5.符号常量用一个标识符代表的一个常量,又称标识符形式的常量。 6.变量其值可以改变的量,变量名习惯上用小写字母表示。 7.标识符用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字 符序列。 8.标识符的命名规则C 语言中标识符只能由字母、数字下划线三种字符组成,且第一 个字符必须为字母或下划线。 C 语言是大小写敏感语言, 即对大小写字母认为是不同的字符。 C 语言中标识符的长度随系统不同而字,如 TURBO C 中取前 8 个字符,8 个字符后面的字符 会自动取消。 第第 3 3 章章 顺序结构考点归纳顺序结构考点归纳 3.1 3.1 表达式语句、函数调用语句和空语句表达式语句、函数调用语句和空语句 1.C 语言的语句共分五大类表达式语句、控制语句、函数调用语句、空语句和复合语 句。 2.表达式语句的一般形式为 表达式; 最典型的表达式语句是由一个赋值表达式加一个分号构成的赋值语句。 3.控制语句是 C 语言程序设计中用来构成分支结构和循环结构的语句。此类语句有 if 语句,for 语句,while 语句,do-while 语句,switch 语句等。 4.函数调用语句的一般形式为 函数名实参表; 5.空语句的一般形式为 ; 这条语句的含义是什么也不做。 凡是在 C 语句程序中出现语句的地方都可以用一个分号 来代替一条语句。 6.复合语句的一般形式为 语句 1;语句 2 复合语句在功能上相当于一条语句。 3.2 3.2 数据的输入与输出,输入输出函数的调用数据的输入与输出,输入输出函数的调用 1.C 语言本身没有提供输入、输出操作语句。C 程序的输入和输出完全依靠调用 C 语言 的标准输入、输出函数来完成。四个常用的输入、输出函数是 printf 函数、scanf 函数、putchar 函数、getchar 函数 2.printf 函数是 C 语言提供的标准输出函数, 它的作用是在终端设备或系统隐含指定 的输出设备上按指定格式进行输出。Printf 函数的一般调用形式如下 printf格式控制,输出项表 如果在 printf 函数调用之后加上;,就构成了输出语句。 格式控制参数以字符串的形式描述,由两部分组成 普通字符将被简单地显示; 格式字符将引起一个输出参数项的转换和显示,由“”引出并以一个类型描述符 结束的字符串,中间可加一些可选的附加说明项,如下表所示。 附加说明项 附加说明项 说 明 -或 用于指定是否对齐输出,具有“-”符号表示左对齐,无“-”或有“”表示右对 齐 0 用于指定是否填写 0,有此项表示空位用 0 补充,无此项表示以空格补充 m.n 用于指定输出域宽及精度,m 是指域宽,n 为精度,当指定 n 时,隐含的精度为 6 位 L 或 h 用于输出长度修正。其中,l 对于整型是指 long,对实型是 double;h 只用于整 型的格式字符,并修正为 short 型 格式字符用于指定输出项的数据类型及输入格式,如下表所示。 注意编译程序只是在检查了 printf 函数中的格式参数后,才能确定有几个输出项, 是什么类型、以什么格式输出。在编程序时,应使输出格式与输出项对应。 格式字符 格式字符 说 明 CcD 输出一个字符 d 或 I 输出带符号的十进制整型数 OoO 以八进制无符号形式输出整型数不带前导 0 x 或 X 以十六进制无符号形式输出整型数不带前导 0 x 或 0X, 对于 x, 用 abcdef 输出 十六进制数码;对于 X,用 ABCDEF 输出十六进制数码 UuU 按无符号的八进制形式输出整型数 FfF 以小数的形式输出单精度或双精度数,小数位由精度指定,隐含的精度为 6;如指 定精度为 0,则小数部分包含小数点都不输出 e 或 E 以指数形式输出单精度及双精度数,小数位数由精度指定,隐含的精度为 6;如 指定精度为 0,则小数部分包含小数点都不输出 g 或 G 由系统决定是采用f 不是采用e 格式,以便使输出宽度最小 SsS 输出字符串中的字符,直到遇到0时为止,或输出指定的字符数 PpP 输出变量的内存地址 打印一个 3.scanf 函数是 C 语言提供的标准输入函数,它的作用是在终端设备或系统隐含指定 的输入设备上输入数据。Scanf 函数的一般调用形式是 scanf格式控制,输入项表 如果在 scanf 函数调用之后加上;,就构成了输入语句。 格式控制是用双引号括起来的字符串, 称为格式控制串。 格式控制串的作用是指定输入 时的数据转换格式,即格式转换说明。格式转换说明是由符号开始,其后是格式描述 符。 输入项表中的各输入项用逗号隔开, 各输入项只能是合法的地址表达式, 即在变量之前 加一个地址符号 字符串常量是用一对双引号括起的字符序列,如abcn。 请区别字符变量和字符串常量。a是字符常量,a是字符串常量。在内存中,字 符常量占一个字节,而对字符串常量,则在字符串的后面加一个字符串结束标志,以便 系统据此判断字符串是否结束。用0即 ASCII 代码为 0 的字符,即空字符作为 字符串结束的标志。例如,a内存占两个字节,即a 0 。 6.2 6.2 字符变量字符变量 字符变量用来存放一个字符常量,字符变量用 char 来定义。如 char a,b; a0;bk; printfc c n,a,b; 将输出两个字符 ok。 不能将一个字符串常量赋给一个字符变量,如 a0;bk; 是错误的。 给字符变量赋值可以采用如下三种方法 1直接赋以字符常量,如 charA; 2赋以转义字符,如 char c; printfc,c; 输出一个字符。 3赋以一个字符的 ASCII 代码,如字符a的 ASCII 代码为 97,则 char c97; printfc,c; 将输出一个字符a。实际上,字符数据在内存中是以整数形式字符 ASCII 代码存 放的,例如,字符a的 ASCII 码为 97,在内存字节中的存放形式为 01 10 00 01 在输出时,如果指定输出字符的格式符c输出,则输出字符a在输出时先将 ASCII 码转换为字符。如果指定按输出整数的格式d输出如 printfd,c,则 输出一个整数 97。 应记住,字符数据与整型数据二者间是通用的,可以互相赋值和运算,如 int aA; char c97; printdn,c-a; 将输出一个整数 32,因为A的 ASCII 码为 65。 第第 7 7 章章 函数考点归纳函数考点归纳 7.1 7.1 库函数的正确调用库函数的正确调用 1.C 语言提供了丰富的库函数,包括常用数学函数、对字符和字符串处理函数、输入输 出处理函数等。在调用库函数时要注意以下几点 1调用 C 语言标准库函数时必须在源程序中用 include 命令, include 命令的格式是 include头文件名 include 命令必须以号开头,系统提供的头文件名都以.h 作为后缀,头文件名用一对 双引号或一对尖括号括起来。 2标准库函数的调用形式 函数名参数表 2.在 C 语言中库函数的调用可以以两种形式出现 出现在表达式中; 作为独立的语句完 成某种操作。 7.2 7.2 函数的定义方法函数的定义方法 1.C 语言函数的一般形式为 函数返回值的类型名 函数名类型名 形参 1,类型名 形参 2, 说明部分 语句部分 定义的第一行是函数的首部,中的是函数体。 2.在老的 C 语言版本中,函数的首部用以下形式 函数返回值的类型名 函数名形参 1,形参 2 形参类型说明; 新的 ANSI 标准 C 兼容这种形式的函数首部说明。 3.函数名和形参名是由用户命名的标识符。在同一程序中,函数名必须唯一。形式参数 名只要在同一函数中唯一即可,可以与函数中的变量同名。 4.C 语言规定不能在一个函数内部再定义函数。 5.若在函数的首部省略了函数返回值的类型名,把函数的首部写成 函数名类型名 形参 1,类型名 形参 2, 则 C 默认函数返回值的类型为 int 类型。 6.当没有形参时,函数名后面的一对圆括号不能省略。 7.3 7.3 函数的类型和返回值函数的类型和返回值 1.函数的类型由函数定义中的函数返回值的类型名确定, 函数的类型可以是任何简单类 型,如整型、字符型、指针型、双精度型等,它指出了函数返回值的具体类型。当函数返回 的是整型值时,可以省略函数类型名。当函数只完成特定的操作而没有或不需要返回值时, 可用类型名 void空类型。 2.函数返回值就是 return 语句中表达式的值。 当程序执行到 return 语句时, 程序的流 程就返回到调用该函数的地方通常称为退出调用函数,并带回函数值。 7.4 7.4 形式参数与实际参数,参数值的传递形式参数与实际参数,参数值的传递 1.在函数定义中,出现的参数名称为形参形式参数,在调用函数时,使用的参数值称 为实参实际参数。 2.调用函数和被调用函数之间的参数值的传递是按值进行的, 即数据只能从实参单 向传递给形参。也就是说,当简单变量作为实参时,用户不能在函数中改变对应实参的值 第第 8 8 章章 指针考点归纳指针考点归纳 8.1 8.1 指针与指针变量的概念,指针与地址运算符指针与指针变量的概念,指针与地址运算符 1.在 C 语言中, 指针是指一个变量的地址, 通过变量的地址指向的位置找到变量的 值,这种指向变量地址可形象地看作指针。用来存放指针的变量称为指针变量,它 是一种特殊的变量,它存放的是地址值。 2.定义指针变量的一般形式为 类型名 *指针变量 1,*指针变量 2,; 类型名称为基类型它规定了后面的指针变量中存放的数据类型,*号表明 后面的指针变量 1,指针变量 2等是指针变量,*号在定义时不能省略,否则就 会变成一般变量的定义了。指针变量 1,指针变量 2等称为指针变量名。 3.一个指针变量只能指向同一类型的变量。 4.与指针和指针变量有关的两个运算符 1*指针运算符或称间接访问运算符 2 则 p或 k*p;或 k*都将变量 i 中的值赋给 k。 *p10;或*都能把整数 10 赋给变量 i。这里,等号左边的表达式*p 和* 经过上面的定义和初始化后,a00,a11a99。 2初始化时可以只对一部分元素赋初值。例如 static int a100,1,2,3,4; 定义的数组有 10 个元素,但只对其中前 5 个元素赋了初值,后 5 个元素初值为 0。 3如果想使一个数组的元素值全部为 0,可以用下面的方法 static int a100,0,0,0,0,0,0,0,0,0; 不能用 static int a100*10; 如果对 static 型数组不赋初值,系统会对定义的所有数组元素自动赋以 0 值。 4在对全部数组元素赋初值时,可以不指定数组长度。 3.一维数组的引用方法是 C 语言规定不能一次引用整个数组, 引用时只能逐个元素引用, 数组元素的表示形式为 数组名下标 下标可以是整型常量或整型表达式。如 a0a5a7-a2*3; 9.2 9.2 二维数组的定义、初始化和引用二维数组的定义、初始化和引用 1.二维数组定义的一般形式为 类型说明符 数组名常量表达式常量表达式 C 语言采用上述定义方法,我们可以把二维数组看做是一种特殊的一维数组它的元素 又是一维数组。在 C 语言中,二维数组中元素的排列顺序是先按行存放,再按列存放,即 在内存中先顺序存放第一行的元素,再存放第二行的元素。 2.二维数组的初始化二维数组可以用下面的方法初始化 1分行给二维数组赋初值。如 static int a341,2,3,4,5,6,7,8,9,10,11,12; 以上赋值把第一个花括号内的数据赋给第一行元素,第二个花括号内数据赋给第二元 素,即按行赋值。 2可以将所有的数据写在一个花括号内,按数组排列的顺序对各元素赋值。 3可以对数组的部分元素赋初值。如 static int a341,5,9; 以上赋值的结果是数组第一列的元素分别赋了初值 1,5,9,其余元素的值都是 0。 4如果对二维数组的全部元素都赋初值,则定义数组时对第一维的长度可以不指定, 但第二维的长度不能省。 3.二维数组的引用二维数组的元素可以表示为 数组下标下标 在引用二维数组时,必须是单个元素,不能是整个数组名。下标可以是一个表达式,但 不能是变量。如果下标是一个表达式,注意表达式的值不能超出数组定义的上、下限。 第第 1010 章章 字符串考点归纳字符串考点归纳 10.1 10.1 字符串与字符数组字符串与字符数组 1.字符数组的定义 定义方法与前面介绍的类似,只是将数组定义为字符型即可。例如 char c10; 这里定义了一个包含 10 个元素的字符数组 c。 2.字符数组的初始化 对字符数组初始化,可以采用以下方法 1逐个字符赋给数组中各元素; 2用字符串常量使字符数组初始化。 3.字符串 在 C 语言中,字符串是作为字符数组来处理的,字符串可以存放在字符型一维数组中, 故可以把字符型一维数组作为字符串变量。 字符串常量是用双引号括起来的一串字符。 C 语言中约定用0作为字符串的结束标志, 它占内存空间, 但不计入串的长度, 0的代码值为 0。 系统对字符串常量也自动加一个0作为结束符。 例如c language共有 10 个字 符,但在内存中占 11 个字节,最后一个字节存放0。 4.字符数组的输入输出 1逐个字符输入和输出 在标准输入输出 printf 和 scanf 中使用c 格式描述符; 使用 getchar 和 putchar 函数。例如 fori0;i10;i scanfc, /*或 strigetchar;*/ stri0;/*人为加上串结束标志*/ fori0;i10;i printfc,stri;/*或 putcharstri;*/ 2字符串整体输入输出 在标准输入输出函数 printf 和 scanf 中使用s 格式描述符; 输入形式 char str6; scanfs,str; 其中 str 为字符数组名,代表着 str 字符数组的起始地址,输入时系统自动在每个字 符串后加入结束符0。若同时输入多个字符串,则以空格或回车符分隔。 输入形式 printfs,str; 输字符串时,遇第一个0即结束。但可人为控制输出串所占的域宽如 printf6s,str;/*若字符串中字符多于 6 个,仍将全部输出*/ printf-6s,str;/*只输出前 6 个字符,多余的不输出*/ 使用 gets 和 puts 函数输入输出一行 gets 函数用来从终端键盘读字符,直到遇换行符为止,换行符不属字符串的内容。 调用形式 getsstr; str 为字符数组名或字符指针,字符串输入后,系统自动将0置于串尾代替换行 符。若输入串长超出数组定义长度时,系统报错。 Puts 函数用来把字符串的内容显示在屏幕上。 调用形式 putsstr; str 的含义同上。输出时,遇到第一个0结束并自动换行,字符串中可以含转义 字符。第第 1111 章章 对函数的进一步讨论考点归纳对函数的进一步讨论考点归纳 11.1 11.1 传给传给 mainmain 函数的参数函数的参数 在此之前,我们在编写 main 函数时,其后一对圆括号是空的,没参数。其实,在支持 C 的环境中,可以在运行 C 程序时,通过运行 C 程序的命令行,把参数传送给 C 程序。 11.2 11.2 通过实参向函数传递函数名或指向函数的指针变量通过实参向函数传递函数名或指向函数的指针变量 1.指向函数的指针变量的定义 在 C 语言中函数名代表该函数的入口地址,因此可以定义一种指向函数地址的指针变 量。 2.函数名或指向函数的指针变量作为参考 函数名或指向函数的指针变量可以作为实参传送给函数。 这时, 对应的形参是类型相同 的指针变量。 11.3 11.3 函数的递归调用函数的递归调用 C 语言中的函数可以递归调用, 即 可以直接或间接地自己调用自己。 前者称简单递归, 后者称间接递归。 第第 1212 章章 C C 语言中用户标识符的作用域和存储类考点归纳语言中用户标识符的作用域和存储类考点归纳 12.1 12.1 局部变量和全局变量局部变量和全局变量 在函数内部或复合语句内部定义的变量称为局部变量。 函数的形参属于局部变量。 在函 数外部定义的变量称为全局变量。有时,局部变量也称为内部变量,全局变量也称为外部变 量。 12.2 12.2 变量的存储属性变量的存储属性 自动、静态、寄存器、外部自动、静态、寄存器、外部 ,变量的作用域和生存期,变量的作用域和生存期 C 语言中来说明变量存储属性的关键字有四个auto自动、static静态、 register寄存器、extern外部。 1.局部变量的存储属性 局部变量可以是自动类别用 auto,register 说明,也可以是静态类别用 static 说 明。形参只能是自动存储类别,不允许是 static 类别。 当局部变量未指明类别时, 被自动说明成自动auto变量。 这类局部变量称为自动变量。 其值存放在内存的动态存储区,因此在退出作用域后,变量被自动释放,其值不予保留。 当局部变量说明成寄存器register类型时, 与自动auto变量一样属于自动类别, 所 不同的是此时变量的值保留在 CPU 中的寄存器中。 当变量说明成 static静态类型时,称这样的变量为静态局部变量。在程序运行期间, 它占据一个永久的存储单元,在函数退出后,变量的值仍旧保留。 2.全局变量的存储属性 全局变量都属于静态存储类别,可以用 extern 和 static 对它们进行说明。 当一个文件中要引用另一文件中的全局变量或在全局变量定义前要引用它时,可用 extern 说明。相当于扩大全局变量的作用域。 用 static静态说明的全局变量称为静态全局变量,它仅能由本文件引用,即使在其 文件中用 extern 说明也不能使用,它相当于限制了全局变量作用域的扩展。 12.3 12.3 内部函数和外部函数内部函数和外部函数 1.在 C 语言中,所有的函数在本质上都是外部函数。 2.函数定义时用 extern 进行说明称为外部函数。函数的隐含类别为外部函数,外部函 数可以被其他文件调用。 3.定义函数时用 static 进行说明称为静态函数,也称内部函数。静态函数也是外部函 数,只是它仅局限于它所在的文件,其他文件不能调用。 第第 1313 章章 编译预处理和动态存储分配考点归纳编译预处理和动态存储分配考点归纳 13.1 13.1 宏定义宏定义 不不带参数的宏定义,带参数的宏定义带参数的宏定义,带参数的宏定义 1.编译预处理就是对 C 源程序进行编译前, 由编译预处理程序对预处理命令行进行 处理的过程。 2.C 语言中,凡是以开头的行,都称为编译预处理命令行。C 语言中的编译预 处命令有 define,undef,include,if,else,elif,endif,ifdef,ifndef,line,pragma,er ror。 这些预处理命令组成的预处理命令行必须在一行的开头以号开始, 每行的未尾不 得加;号,以区别于 C 语句、定义和说明语句。 3.不带参数的宏定义命令的一般形式为 define 标识符 字符串 定义中的标识符为用户定义的标识符,称为宏名。在预编译时,C 预编译程序将出 现的宏名替换成字符串的内容,这一过程也称为宏展开。 4.带参数的宏定义命令的一般形式为 define 宏名形式参数 字符串 定义中的字符串应包含括号中所指定的形式参数。注意宏名与括号之间不要加空 格,否则就成为不带参数的宏定义了。 5.预编译时,遇到带实参的宏名,则按命令行中指定的字符串从左到右进行置换,原则 是遇到实参则以实参代替,非形参字符原样保留,从而成展开后的内容。 13.2 13.2 “文件包含”处理“文件包含”处理 1.文件包含的一般形式为 include头文件名 include 头文件名一般由 C 语言提供,也可以是用户自己编写的,头文件通常用.h 作为后缀。 2.当头文件名用双引号括起来时, 系统首先在使用此命令的文件所在的目录中查找被包 含的文件,找不到时,再按系统指定的标准方式检索其它目录;当头文件名用尖括号括起来 时,则直接按系统指定的标准检索方式查找被包含的文件。 3.预编译时,将被包含文件的内容全部复制到包含文件中,这就是文件包含处理。 13.3 13.3 条件编译条件编译 C 语言中的条件编译命令可对源程序代码的各部分有选择地进行编译。 条件编译主要有 如下 3 种使用格式 使用格式 1 ifdef 标识符 程序段 1 else 程序段 2 endif 使用格式 2 ifndef 标识符 程序段 1 else 程序段 2 endif 使用格式 3 if 表达式 程序段 1 else 程序段 2 endif 使用格式 1 表示如果已定义了 “标识符” , 则编译 “程序段 1”, 否则编译 “程序段 2” ; 使用格式 2 表示如没有定义了“标识符”,则编译“程序段 1”,否则编译“程序段 2”; 使用格式 3 表示如“表达式”的值为“真”时,则编译“程序段 1” ,否则编译“程序段 2”。 第第 1414 章章 结构体、共同体和用户定义类型考点归纳结构体、共同体和用户定义类型考点归纳 14.1 14.1 结构体与共用体类型数据的定义方法和引用方法结构体与共用体类型数据的定义方法和引用方法 1.结构体类型数据的定义方法可以采用下面三种方法来定义 1先定义结构体类型再定义变量名 先定义一个结构体类型,一般形式为 struct 结构体名 成员列表; 2在定义类型的同时定义变量一般形式为 struct 结构体名 成员列表 变量名列表; 3直接定义结构类型变量一般形式 struct 成员列表 变量名列表; 即不出现结构体名。 2.结构体类型变量的引用 在定义了结构体变量后, 可以采用下列方法引用结构体类型 的变量 结构体变量名.成员名 这里.是成员分量运算符,它在所有的运算符中优先级最高。 3.共用体类型变量的定义形式为 union 共用体名 成员列表 变量列表; 4.共用体变量的引用可以用下面的形式引用共用体变量 共用体变量名.成员名 14.2 14.2 用指针和结构体构成链表,单向链表的建立、输出、删除与插入用指针和结构体构成链表,单向链表的建立、输出、删除与插入 1.链表是一种常用的重要的数据结构,它是动态地进行存储分配的一种结构。 2.所谓建立链表是指从无到有地建立起一个链表, 即一个一个地输入各结点数据, 并建 立起前后相链的关系。 3.所谓输出链表就是将链表各结点的数据依次输出。 4.所谓删除链表事实上就是删除链表中的某个结点。 5.所谓插入链表就是在链表中某个位置插入一个或几个结点。 第第 1616 章章 文件考点归纳文件考点归纳 16.1 16.1 文件类型指针文件类型指针FILEFILE 类型指针类型指针 C 语言中的文件分缓冲型文件和非缓冲型文件两种,此处只讨论缓冲型文件。对于缓冲 型文件, 每个被使用的文件都在内存中开辟一个区, 用来存放文件的有关信息如文件名字、 文件状态及文件当前位置等。这些信息保存在有关结构体类型的变量中。该结构体类型由 系统定义,取名为 FILE。 16.2 16.2 文件的打开与关闭文件的打开与关闭,fclose,fclose 1.和其他高级语言一样,C 语言对文件读写之前应该打开该文件,在使用结束之后 应关闭该文件。 2.C 语言中打开文件用 函数,函数的调用方式通常为 FILE *fp; fp文件名,使用文件方式; 文件的操作方式如下所示 文件操作方式 操作方式 属性 操作方式的功能 rrr 只读 为输入打开一个字符文件

    展开全文
  • 8、请编写函数fun,经的功能是求出11000之内能7或11整除、但能同时补7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。void funint *a,int *n int i,m0;fori1;i1000;i ifi70i0i70i0ami;...

    全国计算机等级考试二级C语言上机答题技巧1.doc

    全国计算机等级考试二级C语言上机答题技巧一、上机改错题的特点和注意事项 1上机改错的试题中通常包含两个或三个错误需要修改。2试题中用found/来提示在下一行或下面第二行有错。3错误的性质基本分语法错和逻辑错两种,也有些试题要求把语句添加在下划线处。4特别要注意的是只能在出错的行上进行修改,不要改动程序行的顺序,更不要自己另编程序。二、上机改错测试时,建议按以下步骤进行1首先仔细审题,了解试题的要求,看清楚试题给出的输入和输出例示,以便检验改错后程序运行的结果是否正确。2当在Visual C6.0环境下调出源程序后,审视所在函数,根据题义理解程序所采用的基本算法,做到心里有数。3先按CTRLF7对测试程序进行检查是否有语法错误。当编译提示有语法错时,可参考编译提示来查找并改正错误。4当不再出现语法错时,使用F7执行,看结果使用CTRLF5,按照试题的示例给出的数据进行试算,若试算的结果与给出的输出结果相同时,该题就做对了;若试算的结果与给出的输出结果不同,就应进一步检查程序中的逻辑错误。5当程序存在逻辑错误时,首先应当理解题意、读懂程序的算法,必要时可按步检查数据的流程,以便确定错误所在。例如,题目要求数据按由小到大排序,而结果数据是按由大到小进行了排序,问题可能出现在条件判断上。又如,输出的字符串比预期的短,就有可能字符串的结束标志放错了位置。再如做循环的时候数组上限下限错误了,基数是从0开始而不是1开始的。修改程序中的逻辑错时,要求考生认真读懂程序代码。6修改完成,得到正确结果后,一定不要忘记把修改后的程序存盘。三、上机编程题的特点和说明1在二级C程序设计上机考试中,要求完成一个独立的函数的编程。目前教育部考试中心已出版了上机考试习题集,这些有助于学习编程,但考生应当在学习过程中理解基本的算法,通过实际上机操作积累经验,才能掌握基本的编程能力。四、进行编程测试时,建议按以下步骤进行1首先仔细审题,了解试题的要求,记下试题给出的输入和输出例示,以便检验在完成指定的函数后程序运行的结果是否正确。2当在Visual C6.0环境下调出源程序后,应对照函数首部的形参,审视主函数中调用函数时的实参内容,以便明确在函数中需要处理的数据对象。3理解试题的要求,审视主函数中调用函数的方式,若在表达式中调用函数如把函数值赋给某个对象,则要求有函数值返回,需注意函数的类型,并在函数中用return语句返回函数值;若主函数中仅用语句形式调用函数,则需要通过形参间接地返回所得结果。4选择适当的算法进行编程,输入程序语句。不要忘记及时存盘5编译程序,直到没有语法错误。6调试程序,利用试题中给出的例示数据进行输入若要求输入的话,运行程序,用例示的输出数据检验输出结果,直到结果相同。1.书写标识符时,忽略了大小写字母的区别。mainint a5;printfd,A;编译程序把a和A认为是两个不同的变量名,而显示出错信息。C认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。2.忽略了变量的类型,进行了不合法的运算。mainfloat a,b;printfd,ab;是求余运算,得到a/b的整余数。整型变量a和b可以进行求余运算,而实型变量则不允许进行“求余”运算。3.将字符常量与字符串常量混淆。char c;ca和,而把它赋给一个字符变量是不行的。4.忽略了“”与“”的区别。在许多高级语言中,用“”符号作为关系运算符“等于”。如在BASIC程序中可以写if a3 then 但C语言中,“”是赋值运算符,“”是关系运算符。如if a3 ab;前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。5.忘记加分号。分号是C语句中不可缺少的一部分,语句末尾必须有分号。a1b2编译时,编译程序在“a1”后面没发现分号,就把下一行“b2”也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。 zx y;tz/100;printff,t;对于复合语句来说,最后一个语句中最后的分号不能忽略不写。6.多加分号。对于一个复合语句,如 zx y;tz/100;printff,t复合语句的花括号后不应再加分号,否则将会画蛇添足。又如if a30;I ;本是如果3整除a,则I加1。但由于if a30后多加了分号,则if语句到此结束,程序将执行I 语句,不论3是否整除a,I都将自动加1。再如for I0;I5;I ;scanfd,x;printfd,x;本意是先后输入5个数,每输入一个数后再将它输出。由于for后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它。7.输入变量时忘记加地址运算符“”。int a,b;scanfdd,a,b;这是不合法的。Scanf函数的作用是按照a、b在内存的地址将a、b的值存进去。“a”指a在内存中的地址。8.输入数据的方式与要求不符。scanfdd,a,b;输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法3,4输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab。scanfd,d,a,b;C规定如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。下面输入是合法的3,4此时不用逗号而用空格或其它字符是不对的。3 4 34又如scanfad,bd,a,b;输入应如以下形式a3,b49.输入字符的格式与要求不一致。在用“c”格式输入字符时,“空格字符”和“转义字符”都作为有效字符输入。scanfccc,c1,c2,c3;如输入a b c字符“a”送给c1,字符“”送给c2,字符“b”送给c3,因为c只要求读入一个字符,后面不需要用空格作为两个字符的间隔。10.输入输出的数据类型与所用格式说明符不一致。例如,a已定义为整型,b定义为实型a3;b4.5;printffdn,a,b;编译时不给出出错信息,但运行结果将与原意不符。这种错误尤其需要注意。11.输入数据时,企图规定精度。scanf7.2f,a;这样做是不合法的,输入数据时不能规定精度。12.switch语句中漏写break语句。例如根据考试成绩的等级打印出百分制数段。switchgrade case Aprintf85100n;case Bprintf7084n;case Cprintf6069n;case Dprintf60 ;defaultprintferror ;由于漏写了break语句,case只起标号的作用,而不起判断作用。因此,当grade值为A时,printf函数在执行完第一个语句后接着执行第二、三、四、五个printf函数语句。正确写法应在每个分支后再加上“break;”。例如case Aprintf85100 ;break;13在定义数组时,将定义的“元素个数”误认为是可使的最大下标值。mainstatic int a101,2,3,4,5,6,7,8,9,10;printfd,a10;C语言规定定义时用a10,表示a数组有10个元素。其下标值由0开始,所以数组元素a10是不存在的。16.在不应加地址运算符的位置加了地址运算符。scanfs,str; C语言编译系统对数组名的处理是数组名代表该数组的起始地址,且scanf函数中的输入项是字符数组名,不必要再加地址符。应改为scanfs,str;1、编一个函数funchar *s,函数的功能是把字符串中的内容逆置。例子如字符串中原有的内容为abcdefg,则调用该函数后,串中的内容为gfedcbafunchar *s int i0,t,nstrlens;for;s it*s i;*s i*s n-1-i;*s n-1-it;注该题的算法是先分别找出字符串的两头,然后同时逐一往中间移动,每移动一次都进行两字符的位置对换,直到中间字符(用s i地址,因此要注意把它的内容取出再进行换位。即先进行取内容运算*)2、请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按降序排列。例如,原来的字符串为CEAedca,排序后输出为CedcEAa。int funchar *s,int num int i,j,t;fori1;iforji 1;jifs ts;ssj;sjt;该题采用的排序法是选择法进行降序排序,算法是用外for循环从字符串的前端往后端走动,每走动一个字符都用内嵌的for)循环在该字符后找出最小的字符与该字符进行换位。直到外for循环走到最后一个字符。此外,此题还要注意把首尾字符除开,即在最外层for循环中从1开始,只到num-2即可。3、请编写一个unsigned fununsigned w,w是一个大于10的无符号整数,若w是n(n2)位的整数,函数求出w的后n-1位的数作为函数值返回。例如w值为5923,则函数返回923;w值为923则函数返回23。unsigned fun unsigned w ifw10000 return w000;ifw1000 return w00;ifw100 return w0;return w; 注由于unsigned型整数在0-65535这间,只要它大于10000则对10000求余即得出后面4位,否则如果大于1000则对1000求余得出后3位数,这样一层一层往小的判断。由于return的作用除了返回值以外,还有当执行到return时就跳出该程序,所以可以连续的用if语句。4、请编一函数void funint ttMN,int ppN,tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中,二维数组中的数已在主函数中赋予。define M 3define N 4void funint ttMN,int ppN int i, j;fori0;i pptt0;forj0;jifttj5、请编一个函数fun,其中n所指存储单元中存放了数组中元素的个数。函数的功能是删除所有值为y的元素。数组元素中的值和y的值由主函数通过健盘读入。试题程序。define M 20void fun int bb, int *n,int y int i,j0;for i0; i*n; i ifbby bbj bb;*nj;6、 请编写一个函数int funint x,它的功能是判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数。x的值由主函数从健盘读入,要求不大于100。int fun int x int xxx * x;ifxxxxxxxx0 x return 1;else return 0;7、请编写函数fun,它的功能是求出ss所指字符串中、指定字符的个数,并返回此值。例如若输入字符串123412132,输入字符为1,则输出3。define M 81int funchar *ss,char cint num0;while*ss0if*ssc num ;ss ;returnnum;8、请编写函数fun,经的功能是求出1到1000之内能被7或11整除、但不能同时补7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。void funint *a,int *n int i,m0;fori1;i1000;i ifi70i0i70i0ami;m 1;*nm;10、要求程序的功能是把20个随机数存入一个数组,然后输出该数组中的最小值。其中确定最小值的下标的操作在fun函数中实现,请给出该函数的定义。试题程序。includeincludedefine VSIZE 20int vectorVSIZE;int funint list,int size int i,j0; fori1;isize;i iflistilistj ji; return j;/*注该题的算法是用一个变量(j来存储最小值元素的下标,在循环过程中让每个元素都与原最小值元素进行大小比较。改错题策略与技巧一般有23处错误,均在以“*found*”下按CtrlF7编译出现多个错误,由前向后修改。错误分两大类一. 语法错误 丢失分号,或误写成逗号关键字拼写错误,如小写变大写语句格式错误,如for句中多写或少写分号表达式声明错误,如少了()函数类型说明错误函数形参类型声明错误,如少*号运算符,书写错误,如写成二. 逻辑错误(语义错误) 变量初值错误循环次数不对下标越界运算类型不匹配编程题策略与技巧一认真阅读试题 题目所给出的限制条件一些术语解释题目提供的算法程序的执行结果二清晰地理解fun函数 函数的功能函数反回值类型参数传递方式运行结果三调试运行程序 先调试程序运行程序利用好VC调试工具

    展开全文

空空如也

空空如也

1
收藏数 2
精华内容 0
关键字:

返回值被忽略scanf,scanfs找不到标识符

友情链接: alumni-record.zip