全国计算机等级考试二级C语言考点(完整版) 下载本文

考点3. for循环语句

for语句

for语句的一般形式为:

for(表达式1;表达式2;表达式3) 语句

说明:for是C语言中的关键字,其后的圆括号中通常是3个表达式,这3个表达式可以是C语言中任意合法表达式,它们通常用于for循环的控制。各个表达式之间用“;“隔开,且圆括号不可省略。按照语法规则,循环体只能是一条语句,如需要完成多项操作,可以用大括号({})括起来构成复合语句。 执行过程:

(1)先求表达式1的值 。

(2)求表达式2的值,若其值为真(非0),则执行for语句中指定的内嵌语句后执行下面步骤(3),若其值为假(0),则退出循环,执行 for以下的其他语句。 (3)求解表达式3的值。 (4)重复执行步骤(2)。

例:用for循环求自然数1-100的和,程序段如下: #include main() {

int i,sum=0;

for(i=0;i<=100;i++) {

sum=sum+i; }

printf(\}

考点4. 循环的嵌套

循环嵌套

在某一个循环体内部又包含了另一个完整的循环结构,称为循环的嵌套。前面介绍的3种类型的循环都可以互相嵌套,循环的嵌套可以多层,但要保证每一层循环在逻辑上必须是完整的。 例 有如下程序段: #include main() {

int i, j;

for (i=0; i<2; i++) for(j=0; j<2; j++)

printf(\}

程序显示的结果是: 0 0 0 1 1 0 1 1

考点5. 几种循环的比较

循环的比较

前面讲的几种循环都可以用来处理同一问题,一般情况下它们可以互相代替。不过最好根据每种循环的不同特点选择最适合的。

while和do … while 循环,只在while后面指定循环条件,循环体内应包含使循环趋于结束的语句,for中使循环趋于结束的操作可以包含在“表达式3“中。由while完成的循环,用for循环都能完成。在for语句“表达式1“中可以实现循环变量的初始化,而while和do…while的循环变量初始化应在while和do…while语句之前完成。

考点6. break语句和continue语句

6.1 break语句

在break后面加上分号就可以构成break语句。

在介绍选择结构时,我们已经知道break语句可以使流程跳出switch结构,继续执行switch语句下面的语句。实际上,break语句还可以用于从循环体内跳出,即提前结束循环。 说明:

(1)break语句只能出现在循环体内及switch语句内,不能用于其他语句。

(2)当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体。当break出现在循环体中,但并不在switch语句体内时,则在执行break后,跳出本层循环,当然也不再去进行条件判断。

6.2 continue语句

一般形式为:continue;其作用是结束本次循环,即跳过循环体中下面尚未执行的语句,而转去重新判定循环条件是否成立,从而确定下一次循环是否继续执行。

与break语句不同,执行continue语句并没有使整个循环终止。在while和do … while 循环中,continue语句使得流程直接跳到循环控制的条件判断部分,然后决定循环是否继续执行。在for循环中,遇到continue后,跳过循环体中余下的语句,而去求解for语句中的“表达式3“的值,然后再次对“表达式2“的条件进行判断,最后根据“表达式2“的值来决定for循环是否继续执行。continue不管是作为何种语句中的语句成分,都按上述功能执行。 continue语句和break语句的区别是: continue语句只结束本次循环,而不是终止整个循环的执行;而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。

例如 输入任意的自然数,判断此数是不是素数,有程序段如下: #include #include main() {

int m,i,k;

scanf(\

k=sqrt(m); /*此公式用于求m开根号*/ for(i=2;i<=k;i++)

if(m%i==0) break; if(i>=k+1)

printf(\ else

printf(\}

第 五 章 函数

考点1. 函数概述

在前面各章的例子及读者自己编写的C语言程序中都用到了以“main“开头的主函数,并且在程序中频繁地调用了C语言提供的用于输入输出的库函数( scanf( )和printf( )函数)。

函数是C源程序的基本模块,通过对函数模块的调用实现特定的功能。一个C程序可由一个主函数和若干个其他函数构成,并且只能有一个主函数。由主函数来调用其他函数,其他子函数之间也可以互相调用。

C程序的执行总是从main( )函数开始。调用其他函数完毕后,程序流程回到main( )函数,继续执行主函数中的其他语句,直到main( )函数结束,则整个程序的运行结束。main( )函数是由系统定义的。所有的函数都是平行的,即在函数定义时它们是互相独立的,函数之间并不存在从属关系。也就是说,函数不能嵌套定义(这是与PASCAL不同的),函数之间可以互相调用,但不允许调用main( )函数。 从用户的使用的角度看,函数有两种:

(1) 标准函数,即库函数。这些函数由系统提供,可以直接使用。 (2) 自定义的函数。用以解决用户需要时设计定义的函数。 从函数的形式看,函数分为两类: (1)无参函数。 (2)有参函数。

考点2. 函数定义的一般形式

函数的定义

C语言中函数定义的一般形式如下:

函数返回值的类型名 函数名(类型名 形式参数1,类型名 形式参数2, … ) {

说明部分; 语句部分; }

说明:函数名和各个形式参数都是由用户命名的合法标识符,与普通变量名的定义规则相同。在同一程序中,函数名必须唯一,不能出现重名的情况。形式参数名只要在同一函数中唯一即可,由于形式参数的作用域不相同,因此形式参数名可以与其他函数中的变量名同名。C语言规定,不能在一个函数内部再定义函数,也就是说函数不能嵌套定义。

(1)若在函数的首部省略了函数返回值的类型名,可以把函数首部写成:

函数名(类型名 形式参数1 ,类型名 形式参数2 ,…,类型名 形式参数n)

(2)紧跟在函数名之后的圆括号中的内容是形式参数和类型说明表,在每个形参之前都要有类型名,以标识形式参数的类型。各形参的定义之间用逗号分隔。 例如,求两整数和的函数: int add(int a ,int b) {

int t; /* 函数体中声明部分 */ t=a+b; return t; }

若所定义的函数没有形参,函数名后的一对圆括号依然不能省略。本例中函数体中的语句是用来完成求和的功能。在某些情况下,函数体可以是空的,例如: fun() { }

该函数中没有任何语句,什么工作也不做,没有任何实际作用。之所以要在主调函数上这样写,是为了表明此处要调用一个函数,而现在这个函数的具体功能可能还没有设计好,没有起作用,等以后扩充函数功能时补充上即可。 (3)在函数体中,除形参外,用到的其他变量必须在说明部分进行定义,这些变量(包括形参)只在函数被调用时才被临时分配内存单元,当退出函数时,这些临时开辟的存储单元全部被释放掉,即在该函数体内部定义的变量都将不

存在。因此,这些变量只在函数体内部起作用,与其他函数体内的变量并不相关。

考点3. 函数参数和函数返回值

3.1 形式参数和实际参数

在程序中调用函数时,绝大多数情况下,主调函数和被调函数之间会发生数据传递关系,这就要用到前面提到的有参函数。在定义函数时,函数名后面括号中的变量称为“形式参数“(简称“形参“);在主调函数中,函数名后面括号中的参数(可以是一个表达式)称为“实际参数“(简称“实参“)。 说明:

(1)实参可以是常量、变量或表达式。 (2)在被定义的函数中必须指定形参类型。 (3)实参与形参的类型应相同或赋值相兼容。

(4)C语言规定,实参变量对形参变量的数据传递是“值传递“,即单向传递。只能由实参传给形参,而不能由形参返回来给实参。在内存中,实参单元与形参单元是不同的单元。

(5)在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参。调用结束后,形参单元被释放,实参单元仍保留并维持原值。

3.2 函数的返回值

函数的返回值就是通过函数调用使主调函数能得到一个确定的值。函数的值通过return语句返回,return语句的形式如下:

return 表达式; 或return(表达式); 或return;

return 语句中的表达式的值就是所求的函数值。此表达式值的类型必须与函数首部所说明的类型一致。若类型不一致,则以函数值的类型为准,由系统自动进行转换。

例如 通过函数调用的方法求1到自然数n(n>1)自然数的和,有程序段如下 #include int s(int n) {

int i,sum=0;

for(i=1;i<=n;i++) sum+=i; return sum; }

main() {

int n;

printf(\ scanf(\ n=s(n);

printf(\到n的和为:%d\\n\}

考点4. 函数的调用

4.1 函数调用的一般形式

函数调用的一般形式为: 函数名(实参表列);

函数的调用可以分为调用无参函数和调用有参函数两种,如果是调用无参函数,则不用“实参表列“,但括号不能省略。在调用有参函数时,若实参列表中有多个实参,各参数间用逗号隔开。实参与形参要求类型一致。