文章教程

全国计算机等级考试二级C语言6.3for语句

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

6.3 for语句

考点3 for语句

真考链接

在选择题中考点3是必考内容,考查形式主要以读程序题的形式。此考点属于重点理解重点掌握的知识点。在操作题中,主要在编程题中进行考查,用于程序各种算法的实现。考核概率为100%。

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)for语句中的表达式可以部分或者全部省略,但两个“;”是不可省略的。例如:

for(;;)printf("hello");

这条语句是正确的,但因为缺少判断条件,将会形成死循环。

(2)for后的一对括号中的表达式可以是任意有效的C语言表达式。

常见问题

如何强行退出for循环体?

在有些情况下,并不一定要完全执行完for后面括号内的设定的循环次数,如果程序达到运算目的,可以在for语句的循环体内加入break语句,强行退出。

真题精选

【例1】有以下程序:

#include <stdio.h>

main()

{ int y = 9;

for(;y > 0;y--)

if(y % 3 == 0)printf("% d",--y);

程序的运行结果是(  )。

A.741    B.963    C.852    D.875421

【答案】C

【解析】本题考查for循环和自加“++”、自减“--”的问题。当y的值为9、6或3时,if语句的条件成立,执行输出语句,输出表达式--y的值,y的自减要先于输出语句执行,故输出结果为852。

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

#include <stdio.h>

main()

{ int i,sum;

for(i=1;i<6;i++)

sum+ =sum;

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

A.15    B.14    C.不确定    D.0

【答案】C

【解析】本题中包含一个for循环,循环变量由1变化到5,所以其循环体执行5次。for循环体内只有一条语句“sum+=sum;”,它相当于“sum=sum+sum;”,此表达式的值只与变量sum有关,并执行5次。观察sum的值,可以发现程序没有给它赋初值,因此在第一次执行sum+sum时,sum的值是不确定的;在运行此程序时,系统会给出警告信息,提示用户:sum在使用前没有确定的值。

【例3】若x是int型变量,以下程序的输出结果是(  )

for(x=3;x<6;x++)

printf((x% 2)?("* * % d\n"):("##% d\n"),x);

A.**3 ##4 **5   B.##3 **4 ##5    C.##3    D.**3

   **4    ##4

   ##5    **5

【答案】D

【解析】以上for循环的循环控制变量x的值依次为3、4、5,因此循环体执行3次。也就是说,循环体中的printf语句进行3次输出。调用printf进行输出时,其后面的括号中的第一项应当是一个格式控制字符串。在本题的printf()函数调用中,第一项似乎是一个条件表达式,但进一步分析可知,在?号之前“表达式1”的值无论是1还是0,此条件表达式的值总是一个字符串,或者为“** %d”,或者为“##%d\n”,因此是符合printf()函数调用的语法的。根据以上分析,当x的值为奇数时,使(x%2)的值为1,输出所用的格式串是“**%d”;当x的值为偶数时,(x%2)的值为0,输出所用的格式串是“##%d\n”。已知x的值是3、4、5,当x的值为3时,输出 **3,且不输出换行符,接着输出 ##4,输出一个换行符,最后当x的值为5时,从新的一行开始输出 **5,然后退出循环。

【例4】设i和x都是int类型,则以下for循环语句(  )。

for(i=0,x=0;i< =9&&x!=876;i++)scanf("% d",x);

A.最多执行10次 B.最多执行9次 C.是死循环 D.循环体一次也不执行

【答案】A

【解析】此题中for循环的执行次数取决于关系表达式(i=0,x=0;i<=9&&x!=876;i++)的结果。只要 i<=9 且x!=876,循环就将继续执行。结束循环取决于两个条件:或者i>9,或者x=876。只要在执行scanf语句时,从终端输入876,循环就将结束。如果从终端一直未输入876,则i值的增加使i>9,从而结束循环。按照题中所给定的for语句,每执行一次循环,i自动增1,因此执行10次循环后,i的值为10,循环最终也将结束。

【例5】以下for循环语句(  )

int i,k;

for(i=0,k= -1;k=1;i++,k++)

printf("* * *");

A.判断循环结束的条件非法    B.是死循环

C.只循环一次    D.一次也不循环

【答案】B

【解析】本例的关键是赋值表达式k=1。由于表达式2是赋值表达式k=1,为真,因此执行循环体,使k增1,但循环再次计算表达式2时,又使k为1,如此反复循环。

【例6】以下是计算n!值的程序,空格处应选(  )。

#include <stdio.h>

main()

{ int i,s,n;

s=1;

printf("Enter n:");scanf("% d",&n);

for(i=1;i< =n;i++)______;

printf("s=% d",s);

A.s=s*i    B.s*i    C.s=s+i    D.s+i

【答案】A

【解析】以上程序是典型的连乘算法。与累加一样,连乘也是程序设计中基本的算法之一,程序中i从1变化到n,每次增1。在循环体内应该有一个能表达连乘的式子。变量s的初值为1,可以用此变量存放每次i增1后连乘的结果。在上述空格处填上s=s*i就可以满足要求。

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

#include <stdio.h>

main()

{ int x,i;

for(i=1;i< =100;i++)

{ x=i;

if(++x% 2==0)

if(++x% 3==0)

if(++x% 7==0)

printf("% d",x);

printf("\n");

A.3981    B.4284    C.2668    D.2870

【答案】D

【解析】for循环的循环控制变量i由1变化到100,循环体将执行100次。循环体每执行一次,首先把i的值赋给了x,即在循环的过程中,x的值由1变化到100。接着执行了一条嵌套的if语句,在各层的条件表达式中,x的值在增1后,如果满足了指定的条件,才能执行到最内层的printf语句。在执行最外层的if语句时,若条件表达式++x%2==0的值为1,这时的x中的值为偶数。执行第二层if语句时,若条件表达式++x%3==0的值为1,这时的x中的值必定是上述偶数加1后能被3除尽的奇数,这些数是3,9,15,21,27,33,39,45,51,57,63,69,75,81,87,93, 99。执行最内层if语句时,若条件表达式++x%7==0的值为1,这时的x中的值必定是上述奇数加1后能被7除尽的偶数。由以上列出的数中,可以看到能满足此条件的数只有28和70

教程类别