找回密码
 注册

QQ登录

只需一步,快速开始

查看: 961|回复: 0

大工20春《c&c++语言程序设计》六

[复制链接]
发表于 2021-2-25 12:40:27 | 显示全部楼层 |阅读模式
C/C++语言程序设计辅导资料六
一、主题:循环结构二、学习时间:2020年5月4日-5月10日“不忘初心、牢记使命”主题理论学习:
我们党要始终成为时代先锋、民族脊梁,始终成为马克思主义执政党,自身必须始终过硬。全党要更加自觉地坚定党性原则,勇于直面问题,敢于刮骨疗毒,消除一切损害党的先进性和纯洁性的因素,清除一切侵蚀党的健康肌体的病毒,不断增强党的政治领导力、思想引领力、群众组织力、社会号召力,确保我们党永葆旺盛生命力和强大战斗力。
摘选自《决胜全面建成小康社会,夺取新时代中国特色社会主义伟大胜利》三、知识脉络:
第5章 循环结构
5.0 导学
5.1 循环语句
5.2 循环条件
5.3 循环嵌套
5.4 循环中的跳转
5.5 综合案例分析四、学习要求:
理解循环结构及分类
了解常用循环语句
掌握while语句基本语法
掌握do-while语句基本语法
掌握for语句基本语法
了解流程图的画法
掌握计数器控制循环的方法
理解标记控制循环的方法
理解嵌套循环
理解内层循环及外层循环执行顺序
掌握嵌套结构的的设计方法
掌握break语句基本用法
理解continue语句的基本用法
了解goto语句
理解各种循环语句的特点
掌握用循环语句构造穷举算法
掌握用循环语句构造迭代算法五、重点难点:
while语句
do-while语句
for 语句
计数器控制循环
标记控制循环
循环嵌套
循环中的跳转
穷举法
迭代法
六、主要内容:
1.循环的概念
为解决某一问题,或求取某一计算结果,特定的条件下,程序中反复按某一模式进行操作。2.循环语句
循环语句是控制程序执行循环结构的语句,特定的条件下,程序中反复按某一模式进行操作。
while
do-while
for
while语句
语句形式
while( 表达式 )
{
         循环体 ;
}
执行流程
在循环结构外设置条件变量
测试循环条件,若其值为假则执行步骤(6);
执行循环体中的语句;
更新条件变量的值;
重复(2)~(4)步骤
结束循环
do-while语句
语句形式
do
{
      循环体 ;
} while( 表达式 );
执行流程
在循环结构外设置条件变量
执行循环体中的语句;
更新条件变量的值;
测试循环条件,若其值为假则执行步骤(6);
重复(2)~(4)步骤
结束循环
for语句
语句形式
for ( 表达式1; 表达式2 ; 表达式3  )
{     循环体 ;    }
执行流程
求解表达式1;
求解表达式2;
若其值为逻辑真,则执行循环体中的语句;若其值为假则结束循环,转到第(6)步;
求解表达式3;
重复执行步骤(2)和(3)中的操作;
循环结束,执行for语句后的语句。3.循环条件
为合理使用循环结构实现算法,必须正确设计循环条件。以避免死循环发生!
一般循环条件表达式的值由某个变量控制,根据控制变量的性质,循环分为两类:
计数器控制循环 (counter)
标记控制循环  (flag)
若能知道循环将执行的确切次数,就使用计数器控制循环。
执行次数不确定的循环可采用标记控制循环。4.循环嵌套
结构化程序由顺序、选择和循环结构组成,三种基本可以按堆栈和嵌套的形式构成任何算法。
循环嵌套:一个循环体中又包含另一个完整的循环结构。内嵌的循环中还可以嵌套循环。
各种循环语句都可以嵌套:while、do-while和for三种循环语句可分别构成嵌套结构。

三种循环语句可相互嵌套:在while循环、do-while循环和for循环体内,包含上述任一循环结构。

设计嵌套的循环要点
合理设计和安排各个循环的嵌套关系,在保证逻辑正确性;
循环嵌套不能交叉,即在一个循环体内必须完整的包含着另一个循环嵌套的循;
内层和外层循环控制变量不应同名!
最好采用右缩进格式书写。5.循环中的跳转
跳转语句可用于控制程序的转移,在选择结构和循环结构中协助改变程序执行的流程。
break语句         
continue语句           
goto语句
break语句:常用于提前从循环推出或跳出switch结构。无条件地结束switch、while、do while或for循环结构,转向执行该结构的后续语句。
continue语句:continue语句用来跳过循环的一部分,继续执行下一轮循环操作。它并不跳出整个循环结构,而是跳过循环体中剩余的语句,结束本轮循环。
continue语句只用在循环体中,常与 if 条件语句一起使用,用来加速循环。
包含continue的循环结构,代码的可读性不好,可以用其他形式代替该跳转语句。
goto语句:goto语句一般为无条件跳转语句,程序直接跳转到标号所指示的语句。
使用跳转能力强的goto语句可以直接从内层循环中直接跳到外层循环后。
goto不利于结构化编程,应尽量少使用 !  七、习题:
1.设有程序段
int k=10;
while(k=0)k=k-1;
这下面描述中正确的是_________.
A.while循环执行10次
B.循环是无限循环
C.循环体语句一此也不执行
D.循环体语句执行一次
答案:C2.对于 for( 表达式1; ;表达式3) 可理解为__________。
A.or( 表达式1;0;表达式3)
B.for( 表达式1;1;表达式3)   
C.for( 表达式1;表达式1;表达式3)
D.for( 表达式1;表达式3;表达式3)
答案:B3.C语言中, 下列说法正确的是_________。
A.不能用do-while语句构成循环
B.do-while语句构成循环必须用break语句才能退出  
C.do-while语句构成循环,当while语句中的表达式为非零时结束循环
D.do-while语句构成循环,当while语句中的表达式为零时结束循环
答案:D4.执行for(x = 0, y = 0; (y != 123) && (x < 4); x ++); 的结果为________。
A.无限循环
B.循环次数不定
C.执行4次
D.执行3次
答案:C5.以下while循环中,循环体执行的次数是__________。
k=1;
while( - - k) k = 10;
A.执行10次
B.执行无限次
C.一次也不执行
D.执行1次
答案:C6.有以下程序段,其中x 为整形变量
int x = -1;
do
{
;
} while(x++);
printf("x = %d",x);
以下正确的是____________。
A.该循环没有循环体,程序错误
B.输出 x = 1     
C.输出 x = 0
D.输出 x = -1
答案:B7.以下程序的输出结果是________。
x = -1;
do
{
x = x * x
} while( !x );
A.死循环
B.循环执行2次
C.循环执行一次
D.有语法错误
答案:C8.下面程序的执行结果是__________。
#include<stdio.h>
void main()
{
        int i = 1;
        switch(i)
        {
        case 0: i ++;
        case 1:
        case 2: i ++;
        case 3: i ++; break;
        default: i ++;
        }
        printf(“%d\n”,i);
}
A.2
B.3
C.4
D.5
答案:B9.下面程序的执行结果是__________。
#include<stdio.h>
void main()
{
        int j, x;
        for( j = 1, x = 1; j <= 50; j ++)
        {
                if(x >= 10)
                {
                        break;
                }
                if(x % 2 == 1)
                {
                        x += 2;
                        continue;
                }
        }
        printf(“%d\n”,j);
}
A.1
B.2
C.5
D.6
答案:D10.下面程序的执行结果是__________。
#include<stdio.h>
void main()
{
        int i;
        for( i = 0; i < 5; i ++)
        {
                if( i % 2)
                {
                        printf("*");
                }
                else
                        continue;
                printf("#");
        }
        printf("$\n");
}
A.*#*#*#$
B.#*#*#*$
C.*#*#$
D.#*#*$
答案:C11.下面程序的执行结果是__________。
#include<stdio.h>
void main()
{
        int y = 10;
        do
y - -;
while(y--);
        printf(" %d \n" , y--);
}
A.程序错误
B.死循环
C.-1
D.0
答案:B12.下面程序的执行结果是__________。
#include<stdio.h>
void main()
{
        int x = 3, y = 6, a = 0;
        while(x ++ != ( y -= 1))
        {
                a += 1;
                if( y < x ) break;
        }
        printf(" x = %d, y = %d, a = %d \n", x, y, a);
}
A.x = 4, y = 4, a = 1
B.x = 5, y = 4, a = 3
C.x = 5; y = 4; a = 3
D.x = 5, y = 4, a = 1
答案:D13.下面程序段的运行结果是__________.
int n=0;
while(n++<=2);
printf("%d",n);
A.2
B.3
C.4
D.有语法错
答案:C14.以下程序段________.
x=-1;
do{
   x=x*x;
   } while(!x);
A.是死循环
B.循环执行二次
C.循环执行一次
D.有语法错误
答案:C15.下面程序的运行结果是______.
#include<stdio.h>
main()
  {
int y=10;
     do
{
y--;
} while(--y);
     printf("%d\n", y--);
   }
A.-1
B.1
C.8
D.0
答案:D16.若i为整型变量,则以下循环执行次数是_____.
for(i=2; i==0;)
printf("%d", i- -);
A.无限次
B.0次
C.1次
D.2次
答案:B17.执行语句for(i=1;i++<4; );后变量i的值是______.
A.3
B.4
C.5
D.不定
答案:C18.以下正确的描述是_______.
A.continue语句的作用是结束整个循环的执行
B.只能在循环体内和switch语句体内使用break语句
C.在循环体内使用break语句或continue语句的作用相同
D.从多层循环嵌套中退出时,只能使用goto语句
答案:B19.下列程序的输出结果是:      .
void main()
{        int i;
        for(i=1;i<10;i++)
        {
if(i%5==0)break;
printf("%d ",i);
        }
        printf("end\n");
}
A. end
B.1 2 3 4 5 end
C.1 2 3 4 5
D.1 2 3 4 end
答案:D20.下列程序的输出结果是:          .
void main()
{
        int i;
        for(i=1;i<10;i++)
        {
            if(i%5==0)continue;
            printf("%d ",i);
        }
        printf("end\n");
}
A.1 2 3 4 end
B.5 6 7 8 end
C.1 2 3 4 6 7 8 9 end
D.end
答案:C21.下列程序的输出结果是:       。
void main()
{
        int i=5;
        do{
                switch(I % 2)
                {
                        case 0: i--;break;
                        case 1: i--;continue;
                }
                if(i==3)break;               
                printf("%d ",i);
        }while(i>0);
        printf("end\n");
}
A.0 end
B.1 end
C.end
D.3  end
答案:C22.“百鸡问题”:鸡公一,值钱伍;鸡母一,值钱三;鸡雏三,值钱一。凡百钱买鸡百只,问鸡公、母、雏各几何?思路一: int cocks,hens,chicken; for (cocks=1; cocks<100; ++cocks) for (hens=1; hens<100; ++hens) for (chicken=3; chicken<100; chicken+=3) {     if( 5*cocks+3*hens+ chicken/3==100 /*百钱*/        && cocks+hens+ chicken==100 ) /*百鸡*/         printf("cocks=%d,hens=%d,chicken=%d\n",
             cocks, hens, chicken); }思路二: int cocks,hens,chicken; for (cocks=1; cocks<20; ++cocks)   for (hens=1; hens<33; ++hens)    {       if (5*iCocks+3*iHens+ iChicken/3-100)  continue;       if (iCocks+iHens+iChicken-100) continue;        printf("cocks=%d,hens=%d,chicken=%d\n",                cocks, hens, chicken);    }
南开答案可以联系QQ 761296021

QQ|手机版|小黑屋|网站地图|无忧答案网 ( 冀ICP备18010495号-1 )

GMT+8, 2024-5-4 12:03

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表