文章教程

全国计算机等级考试二级C语言6.4循环的嵌套

8/22/2020 10:24:52 PM 人评论 次浏览

6.4 循环的嵌套

考点4 循环的嵌套

真考链接

在选择题考试中考点4也是必考内容,属于重点理解重点掌握的知识点,考查形式主要是读程序题,要求选择程序运行结果,考核概率为60%。在上机考试中的考查形式主要有修改题和编程题。考核概率为10%。

在某一个循环体内部又包含了另一个完整的循环结构,称为循环的嵌套。前面介绍的3种类型的循环都可以互相嵌套,循环的嵌套可以多层,但要保证每一层循环在逻辑上必须是完整的。

例如,下面都是合法的形式。

(1)while()

while()

{…}

(2)for(;;)

while()

{…}

(3)do

for(;;)

{…}

while();

常见问题

程序是如何执行嵌套循环的?

执行多重循环时,对外层循环变量的每一个值,内层循环的循环变量都要从初值变化到终值。每执行一次外层循环,内层的循环就要完整执行一遍。

真题精选

【例1】以下程序的输出结果是(  )

#include <stdio.h>

main()

{ int k=0,m=0;

int i,j;

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

{ for(j=0;j<3;j++)

k++;

k- =j;

m=i+j;

printf("k=% d,m=% d",k,m);

A.k=0,m=3    B.k=0,m=5    C.k=1,m=3    D.k=1,m=5

【答案】B

【解析】本例考查一个二重循环结构。只要留意在一个循环终止时循环控制变量的变化即可。很明显,外层循环执行两次。这两次执行循环的情形如下:在i=0时,内层循环执行3次(j=0,1,2),直到j=3时终止。由于每次内层循环使k加1,故循环结束时k=3。再执行k-=j语句,在i=1时,内层循环仍执行原操作,使j=3,k=0。现在,计算表达式i=2,表达式i<2为假,外层循环结束,执行m=i+j=2+3=5。

【例2】以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出,程序如下:

#include <stdio.h>

main()

{ int n,k;

float score,sum,ave;

sum=0.0;

for(n=1;n< =10;n++)

{ for(k=1;k< =4;k++)

{ scanf("% f",&score);

sum+ =score;

ave=sum/4.0;

printf("NO% d:% f\n",n,ave);

上述程序运行后结果不正确,调试中发现有一条语句出现在程序中的位置不正确。 这条语句是(  )。

A.sum=0.0;    B.sum+=score;

C.ave=sum/4.0;    D.printf("NO%d:%f\n",n,ave);

【答案】A

【解析】本题考查的是for循环语句的嵌套结构。

【例3】以下程序的输出结果是(  )

int i,j,m=0;

for(i=1;i< =15;i+ =4)

for(j=3;j< =19;j+ =4)

m++;

printf("% d\n",m);

A.12    B.15    C.20    D.25

【答案】C

【解析】本题所示的程序段包含了一个双重循环。外层的循环控制变量是i,其初值是1,每循环一次,i的值增4。在执行时,i的值依次是1、5、9、13,当i的值达到17时,外层的循环就结束,去执行最后的printf语句,因此外层循环执行4次。外层的循环体内只包含了一条语句,也是一个for循环,此内层的循环控制变量是j,其初值是3,每循环一次,j的值增4,j的值依次为3、7、11、15、19,内循环体执行5次。内循环体也只包含一条语句m++;,即每执行一次内循环体,m的值增1。因为m的初值为0,所以m的值就是内循环总的循环次数。内循环总的执行次数是4 (外循环执行次数)×5(内循环次数)=20,所以 m的值为20。

【例4】请编写函数fun(),其功能是:找出2 ×M整型二维数组中最大元素的值,并将此值返回调用函数

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。

试题程序

#define M 4

#include <stdio.h>

int fun(int a[][M])

void main()

{ int arr[2][M] ={5,8,3,45,76,-4,12,

82};

printf("max=% d\n",fun(arr));

【答案】int fun(int a[ ][M])

{ int i,j,max=a[0][0];

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

for(j=0;j<M;j++)

if(max<a[i][j])

max=a[i][j];

return max;

【解析】本题要求数组的最大值,需要运用循环语句,因为数组是二维数值,所以应使用二层加for循环嵌套。使用for循环语句时需要注意循环变量的取值范围。

此类求最大值或最小值的问题,我们可以采用逐个比较的方式,要求对数组中所有元素遍历一遍,并且从中找出数组最大值或最小值。首先定义变量max存放数组中的第一个元素的值,然后利用for循环逐个找出数组中的元素,并与max比较,如果元素值大于max,则将该值赋予max,循环结束后max的值即为数组最大值,最后将该值返回。

教程类别