搜档网
当前位置:搜档网 › 第5章循环与分支程序设计

第5章循环与分支程序设计

第5章循环与分支程序设计
第5章循环与分支程序设计

第5章循环与分支程序设计

【课前思考】

1. 编制一个汇编语言程序分哪几步?

2. 循环程序有哪两种基本结构?由几部分组成?

3. 设计算法时对可能出现的边界情况如何考虑?

4. 如何设置逻辑尺?

5. 什么是起泡排序算法?

6. 如何理解数组排序算法中采用的折半查找法?

7. 如何使用跳跃表法实现CASE结构?

【学习目标】

了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。

【学习指南】

掌握编程的四个步骤至关重要。通过多看举例,学会正确分析理解题意、选择合适的数据结构及算法、坚持先画框图、选取有效指令编程、最后应当掌握运用调试手段进行调试。

学习多重循环程序设计前应熟练掌握单层循环程序设计的各种实现方法及实现细节,如对可能出现的边界情况的处理等。

学习起泡排序算法、折半查找法、跳跃表法之前,应首先理解传统实现方法。

【难重点】

循环控制条件的选择。

考虑循环算法时注意可能出现的边界情况。

静态地预置逻辑尺。动态地修改标志位。

多重循环程序设计时应分别考虑各重循环的控制条件及其程序实现,相互之间不能混淆。另外,应该注意在每次通过外层循环再次进入内层循环时,初始条件必须重新设置。

起泡排序算法是多重循环程序设计中的一种常用方法。

数组排序算法中可以采用折半查找法来提高查找效率。

CASE结构可以使用跳跃表法实现。

【知识点】

编制一个汇编语言程序的一般步骤

5.1 循环程序设计

5.1.1 循环程序的基本结构

5.1.2 循环程序设计方法举例

循环控制条件

边界情况的处理

逻辑尺

5.1.3 多重循环程序设计举例

起泡排序算法

交换标志位

5.2 分支程序设计

5.2.1 分支程序的基本结构

5.2.2 分支程序设计方法举例——折半查找法

5.2.3 跳跃表法

一般说来,编制一个汇编语言程序的步

骤如下:

1)分析题意,确定算法。

2)根据算法,画出程序框图。

3)根据框图编写程序。

4)上机调试程序。

程序有顺序、循环、分支和子程序四种

结构形式。

顺序程序结构是指完全按顺序逐条执

行的指令序列,这在程序段中是大量存在

的,但作为完整的程序则很少见,我们不对

它们作专门讨论。

5.1 循环程序设计

5.1.1 循环程序的结构形式及组成

循环程序可以有两种结构形式,如图所

示。一种是DO_WHILE结构形式;另一种是

DO_UNTIL结构形式。

初始化:设置循环的初始状态;

循环体:循环的工作部分及修改部分;

控制条件:计数控制、特征值控制、地

址边界控制。

例5.1试编制一个程序,把BX寄存器中的二进制数以十六进制的形式显示在屏幕上。

解析:根据题目要求应将BX中的内容从左到右每4位一组显示出来,共显示4个十六进制数位。如果显示的数位是0~9,则把4位二进制数加上30H,转换成相应的ASCII码30H~39H;如果是A~F,则应加上37H(30H+7),转换成ASCII码41H~46H。显示字符可以使用DOS功能调用来实现。右图是程序框图(P162页)。

以binihex.asm为文件名,建立源程序如下:

; binihex.asm

prognam segment ; 定义代码段

main proc far

assume cs:prognam

start: ; 程序从此处开始执行

; 为正常返回DOS而设置堆栈push ds

sub ax,ax

push ax

; 下面是程序的主要部分

mov ch,4 ; 4组二进制数

rotate:

mov cl,4 ; 每组4个二进制位

rol bx,cl ; 把bx循环左移4位

mov al,bl ; 暂存bl到al中

and al,0fh ; 仅保留al的低4位

add al,30h ; 转换成ASCII码

cmp al,3ah ; 要显示的数大于9 ?

jl printit ; 如果数在0~9之间则显示

add al,7h ; 数在A~F之间则调整

printit:

mov dl,al ; 把要显示字符的ASCII码送dl

mov ah,2 ; 功能号2送ah

int 21h ; DOS功能调用

dec ch ; (ch)-1

jnz rotate ; 4组都处理完?否,循环处理下一组

ret ; 返回DOS

main endp ; 主程序main结束

prognam ends ; 代码段结束

end start ; 结束汇编

例5.2 从键盘接收十进制数并存入BX

prognam segment

main proc far

assume cs:prognam

start:

push ds

sub ax,ax

push ax

mov bx, 0

newchar:

mov ah, 1 ;键盘输入

int 21h

sub al, 30h

jl exit ;<0退出

cmp al, 9

jg exit ;>9退出

cbw

例5.3 从键盘接收十六进制数并存入BX

code segment

assume cs:code, ds:data

start:

mov ax,4c00h

int 21h ; 返回DOS

code ends

end start

例 5.4 将正数N插入一个已整序的字数组的正确位置。该数组的首地址和末地址分别为ARRAY_HEAD和ARRAY_END,其中所有数均为正数且已按递增的次序排列。

; 定义数据段

datarea segment

x dw ?

array_head dw 23,37,49,52,65,78,99

array_end dw 105

n dw 32

datarea ends

; 定义代码段

prognam segment

main proc far ; 主程序部分

assume cs:prognam,ds:datarea

start:; 程序从此处开始执行

push ds

sub ax,ax

push ax

mov ax,datarea

mov ds,ax

; 程序的主要部分

mov ax,n

mov array_head-2,0ffffh ; -1送array_head-2单元

mov si,0

compare:

cmp array_end[si],ax

jle insert

mov bx,array_end[si]

mov array_end[si+2],bx

sub si,2

jmp short compare

insert:

mov array_end[si+2],ax

ret

main endp ; 主程序main结束

prognam ends

end start

例5.5设有数组X (X1,…,X10) 和Y (Y1,…,Y10) ,编程计算数组Z (Z1,…,Z10) ,其中:Z1 = X1 + Y1

Z2 = X2 + Y2

Z3 = X3 - Y3

Z4 = X4 - Y4

Z5 = X5 - Y5

Z6 = X6 + Y6

Z7 = X7 - Y7

Z8 = X8 - Y8

Z9 = X9 + Y9

Z10 = X10 + Y10

; 定义数据段

datarea segment

x dw

x1,x2,x3,x4,x5,x6.x7,x8,x9,x10

y dw y1,y2,y3,y4,y5,y6,y7,y8,y9,y10

z dw z1,z2,z3,z4,z5,z6,z7,z8,z9,z10

logic_rule dw 00dch

datarea ends

; 定义代码段

prognam segment

main proc far

assume cs:prognam,ds:datarea

start:

push ds

sub ax, ax

push ax

mov ax, datarea

mov ds, ax

mov bx, 0

mov cx, 10

mov dx, logic_rule

next:

mov ax, x[bx]

shr dx, 1

jc subtract

add ax, y[bx]

jmp short result

subtract:

sub ax, y[bx]

result:

mov z[bx], ax

add bx, 2

loop next

ret

main endp

prognam ends

end start

这种设置逻辑尺的方法是很常用的。

例如,在矩阵运算中,为了跳过操作数为0的计算,经常采用这种方法。又如,把一组数据存入存储器时,如果其中数值为0的元素很多,也可用这种方法设立一个每位表示一个下标的逻辑尺(这样的逻辑尺可能占有几个字,由数组的长度确定。),0元素就可不占有存储单元了。在例5.5中,每个标志只占一位,如果要表示的特征数更多,则每个标志可占有几位,而在处理方法上是完全相同的。

设立标志位的方法除了如逻辑尺那样可静态地预置外,还可以在程序中动态地修改标志位的值,以达到控制的目的,下例将说明这种方法。

例5.5 试编制一程序:从键盘输入一行字符,要求第一个键入的字符必须是空格符,如不是,则退出程序;如是,则开始接收键入的字符并顺序存放在首地址为BUFFER的缓冲区中(空格符不存入),直到接收到第二个空格符时退出程序。

这一程序要求接收的字符从空格符开始又以空格符结束,因此程序中必须区分所接收的字符是否是第一个字符。为此,设立作为标志的存储单元FLAG。一开始将其置为0,接收第一个字符后可将其置1。整个程序的框图如图所示。

; 定义数据段

datarea segment

buffer db 80 dup(?)

flag db ?

datarea ends

; 定义代码段

prognam segment

main proc far

assume cs:prognam,ds:datarea

start:

push ds

sub ax,ax

push ax

mov ax,datarea

mov ds,ax

lea bx,buffer

mov flag,0

next:

mov ah,01

int 21h

test flag,01h

jnz/jne follow

cmp al,20h

jnz/jne exit

mov flag,1

jmp next

follow:

cmp al,20h

jz/je exit

mov [bx],al

inc bx

jmp next

exit:

ret

main endp

prognam ends

end start

例5.6有一个首地址为A的N字数组,请编制程序使该数组中的数按照从小到大的次序整序。

解析:这里采用起泡排序算法实现数组整序。从第一个数开始依次对相邻两个数Ki和Ki+1进行比较,若Ki≤Ki+1,Ki的位置不动,Ki+1继续和Ki+2比较;若Ki>Ki+1,则两者交换位置,Ki+1(交换前的Ki)继续和Ki+2比较。(P172页)

(气泡算法,多重循环)32,85,16,15, 8

; 定义数据段

dseg segment

n equ 5 ; 数组中数的个数

a dw n dup(?)

dseg ends

; 定义代码段

cseg segment

main proc far

assume cs:cseg, ds:dseg

start:

mov ax,dseg

mov ds,ax

mov cx,n

dec cx ; 设置count1

loop1:

mov di,cx ; 保存count1

mov si, 0 ; 初始化si

loop2:

mov ax,a[si]

cmp ax,a[si+2] ; Ki与Ki+1比较

jle continue ; 如果Ki≤Ki+1,不交换xchg ax,a[si+2]

mov a[si],ax ; 如果Ki>Ki+1,交换continue:

add si,2 ; 修改地址

loop loop2 ; 内循环

mov cx,di ; 恢复count1

loop loop1 ; 外循环

mov ax,4c00h

int 21h

main endp

cseg ends

end start

5.2 分支程序设计

分支程序有两种基本结构,如图所示。

它们分别相当于高级语言中的IF_THEN_ELSE语句和CASE语句,适用于要求根据不同条件作不同处理的情况。IF_THEN_ELSE语句可以引出两个分支,CASE语句则可以引出多个分支,不论哪一种形式,它们的共同特点是:运行方向是向前的,在某一种特定条件下,只能执行多个分支中的一个分支。

cseg segment

main proc near

assume cs:cseg, ds:data start:

mov ax,dseg

mov ds,ax

exit: mov ax,4c00h

int 21h

main endp

cseg ends

end start

例:试根据AL寄存器中哪一位为1(从低位到高位)把程序转移到8个不同的程序分支中去。

branch_addresses segment ; 定义数据段

branch_table dw routine_1

dw routine_2

dw routine_3

dw routine_4

dw routine_5

dw routine_6

dw routine_7

dw routine_8

branch_addresses ends

procedure_select segment ; 定义代码段

main proc far ; 定义主程序main

assume cs:procedure_select,ds:branch_addresses

start:

push ds

sub bx,bx

push bx

mov bx,branch_addresses

mov ds,bx

; 程序的主要部分(寄存器相对寻址)

cmp al,0 ; (al)=0?

je continue ; (al)为0则转到continue_main_line

mov si,0

l: shr al,1 ; 把al逻辑右移1位

jnc not_yet ; CF=0转到not_yet

jmp branch_table[si] ; CF=1转到相应程序分支

not_yet: add si,type branch_table ; 修改地址add si,2

jmp l ; 无条件跳到l

continue: ; 其它程序段

routine_1:

… ; 程序段1

routine_2:

… ; 程序段2

ret

main endp ; 主程序main结束

procedure_select ends

end start

用寄存器间接寻址方式实现跳跃表法的程序如下(仅给出修改后的程序的主要部分):

……

cmp al,0

je continue

lea bx,branch_table ; branch_table的偏移地址送bx

l: shr al,1

jnc not_yet ; CF=0转到not_yet

jmp word ptr[bx] ; CF=1转到相应程序分支

not_yet: add bx,type branch_table ; 修改地址

jmp l ; 无条件跳到l

continue:

……

用基址变址寻址方式实现跳跃表法的程序如下(仅给出修改后的程序的主要部分),与前两种寻址方式的主要区别是这里使用了逻辑左移指令,即从al的高位向低位判断,而前两段程序是从

al的低位向高位判断。

……

cmp al,0

je continue

lea bx,branch_table

mov si,7*type branch_table ; 14送si

mov cx,8 ; 循环次数8送cx

l: shl al,1 ; 把al逻辑左移1位

jnb not_yet ; CF=0转到not_yet

jmp word ptr[bx][si] ; CF=1转到相应程序分支 not_yet: sub si,type branch_table ; 修改地址

loop l ; 循环

continue:

……

以上多个例子都是既有分支结构又有循环结构,实际上,多数程序都是各种程序结构的组合。而且,循环结构可以看作分支结构的一种特例,它只是多次走一个分支,只在满足循环结束条件时,走另一个分支罢了。

【本章小结】

编制一个汇编语言程序的步骤如下:

1)分析题意,确定算法。

2)根据算法,画出程序框图。

3)根据框图编写程序。

4)上机调试程序。

程序有顺序、循环、分支和子程序四种结构形式。

循环程序有两种基本结构:一种是DO_WHILE结构;另一种是DO_UNTIL结构。一般由以下四个部分组成:

(1)初始化部分

(2)循环体

(3)修改部分

(4)控制部分

算法和循环控制条件的选择对程序的工作效率有很大的影响,而循环控制条件的选择又是很灵活的,应该根据具体情况来确定。考虑算法时必须把可能出现的边界情况考虑在内。

设置逻辑尺是循环控制中很常用的一种方法。除了静态地预置外,还可以在程序中动态地修改标志位的值,以达到控制的目的。

循环可以有多层结构。多重循环程序设计的基本方法和单重循环程序设计是一致的,应分别考虑各重循环的控制条件及其程序实现,相互之间不能混淆。另外,应该注意在每次通过外层循环再次进入内层循环时,初始条件必须重新设置。

起泡排序算法是多重循环程序设计中的一种常用方法。

分支程序结构可以有两种形式。分别相当于高级语言中的IF_THEN_ELSE语句和CASE语句,适用于要求根据不同条件作不同处理的情况。

IF_THEN_ELSE语句可以引出两个分支,CASE语句则可以引出多个分支,不论哪一种形式,它们的共同特点是:运行方向是向前的,在某一种特定条件下,只能执行多个分支中的一个分支。

数组排序算法中可以采用折半查找法来提高查找效率。

CASE结构可以使用跳跃表法实现,使程序能根据不同的条件转移到多个程序分支中去。跳跃表法是一种很有用的分支程序设计方法。

顺序结构选择结构和循环结构的程序设计典型例题分析与解答

顺序结构、选择结构和循环结构的程序设计典型例题分析与解答 1 在三种选择结构中,能用2个条件,控制从3个操作中选择一个操作执行的选择结构是______选择结构 【分析】能用1个条件,控制某个操作做或不做的选择结构是单分支结构;能用1个条件,控制从2个操作中选择一个操作执行的选择结构是双分支结构;能用n(n>l)个条件,控制从n+ l个操作中选择一个操作执行的选择结构是多分支结构。【答案】多分支 2 在三种循环结构中,先执行循环操作内容(即循环体),后判断控制循环条件的循环结构是______循环结构。 【分析】当型循环结构是先判断控制循环的条件,条件成立,执行循环体;条件不成立,则退出循环体。次数型循环结构也是先判断是否达到循环次数,没有达到循环次数,执行循环体;达到循环次数的,退出循环。只有直到型循环结构才是先执行循环体,然后再判断控制循环的条件,如果条件成立,进行循环;条件不成立,退出循环。 【答案】直到型 3 使用“getchar( )”函数时,程序的开头必须写一条包含命令为____________。 【分析】凡是使用系统函数的程序,都要在程序的开头写一条包含命令,包含命令中的“头函数.h”是一个文件,其中有关于该系统函数的定义。系统函数“getchar( )”是在名为“stdio.h(标准输入输出函数)”的头函数文件中定义的。【答案】#include"stdio.h"或#include<stdio.h> 4 执行输入语句“scanf("x=%c,y=%d",&x,&y);”,要使字符型变量X的值为'A'、整型变量y的值为12,则从键盘上正确的输入是( ) ①'A'/②A/③x=A/ ④x=A,y=12/ 12/ 12/ y=12/ 说明:备选答案中的"/"表示回车换行键 【分析】输入语句的格式控制符串中的“x=”、“,”、“y=”都是非格式控制符, 在输入时必须原样位置输人,所以只有备选答案④才符合这个要求。【答案】④ 5 设有下列程序段,则执行该程序段后的输出是( ) int i=012; float f=1.234E-2; printf("i=%-5df=%5.3f",i,f); ... ①i=__012f=1.234 ②i=10___f=0.012 ③10___O.012 ④___100.012 注:答案中的_代表一个空格。 【分析】输出语句的格式控制符串中的“i=”、“f=”都是非格式控制符,在输出时必须原样,原位置输出,所以只有备选答案①和②才符合这个要求;格式控制符“%-5d”的格式控制是数据左对齐、宽度为5的整型数据,备选答案①中的数据是右对齐的;此外,该答案中的实数“1.234E-2”应该代表“0.01234”,而不是“1.234”。只有备选答案②符合题意。【答案】② 6 在Turbo C的主屏幕中,将当前编辑的源程序以原名存盘,可以选用___________菜单项,也可以直热键________。 【分析】如果选用“File/Save”菜单项,或者使用热键(f12),当前编辑的源程序将以原来的文件名存盘;如果选用“File /Write to”,当前编辑的源程序将以新的文件名存盘。 【答案】File/Save F2 7 下列各种选择结构的问题中,最适合用if-else语句来解决的是( ) ①控制单个操作做或不做的问题 ②控制两个操作中选取一个操作执行的问题 ③控制三个操作中选取一个操作执行的问题 ④控制10个操作中选取一个操作执行的问题 【分析】if-else语句是专门解决“双分支结构”的,而“双分支结构”的问题就是用单个条件控制从两个操作中选取一个操作来执行的问题。 【答案】② 8 下列程序是输入一个小写字母,转换成对应大写字母的后一个字母输出。例如:'a'将转换成’B’、…、‘y’将转换成’Z’,其中的’Z’将转换成’A’。请填写程序中所缺少的语句。 main() {char ch ; scanf(”%c”,&ch〕; ch=ch- 32+1; ___________________; printf("%c\n",ch); } 【分析】分析程序库中的“ch=ch- 32+ 1;”语句,可知是将字符型变量 ch中的小写字母转换成对应的大写字母(- 32)的后一个字母(+ l)。如果ch中的字母是' a'、' b'、··,'y',转换结果都不会出错,但是,如果 ch中的字母是'Z',则-32后是大写字母'Z',再+l后将不是大写字母了。为了使其转换成'A',需要用一个单分支结构来实现:如果ch的值等于'Z'+ l,则硬性将 ch的值改成'A'。完成这个任务的语句是一条单分支语句,正是所缺少的语句。 【答案】 if (ch=='Z'+l) h='A'; 9不能正确计算下列分段函数的程序段是_________ |-1 x<0 y=|0 x=0 x>0 ① switch(x< 0)② if(x> 0) {case1:y=-1;break; y=1; case 0:switch(x==0)else {casel:y=0;break;if(x==0) case 0: y= l;y=0 } else } &ny=-l ③ y= l;④ y= l; if(x==0)if(x<0) y=0; y =-l; else else y=- l; if(x== 0) y=0; 【分析】先来分析备选答案①:表达式“x<0”的值只有两种可能性,成立值为1、不成立值为on如果“x<0”的值为 1(即 x< 0),则执行“easel:”后的语句“y=-l”后,退出 switch语句,符合分段函数要求。如果“x<0”的值为0(即x>=0),则执行“case 0:”后的switch语句。该switch语句的表达式是“x==0”,结果也有两种:成立为1、不成立为0.如果“x==0”的值为1(即x=0),则执行“case l:”后的语句“y=0”后,退出 switch语句,符合分段函数要求。如果“x==0”的值为0(即x>0),则执行“case 0:”后的语句“y=1”,也符合分段函数要求。再分析备选答案②:这是标准的用嵌套双分支结构来实现三分支的分段函数,结果显然是能求解分段函数的。分析备选答案③:双分支语句的条件是“x==0”,条件成立时,y值为0,符合分段函数的要求,条件不成立时(包含x>0和x<0两种情况),结果y值为-l,显然不符合分段函数的要求,所以本题要选该答案。至于备选答案④,是能正确计算分段函数的,首先置y为1;接着用双分支结构处理“x<0”和“x>=0”的两种情况:前者使得y值为一l;后者再执行一个单分支结构,如果“x==0”则使y值为0,否则不改变y值,保持y的原值1,符合分段函数的要求。 【答案】③ 10 三种循环语句都能解决循环次数已经确定的次数型循环,其中__________循环语句最适合。 【分析】当“for(表达式 1;表达式 2;表达式 3)语句;”中的表达式1为:整型变量 k=l;表达式 2为:整型变量 k<= n;表达式 3为:整型变量 k++;则这个 for循环就是次数为n次的标准次数型循环结构。 【答案】for 11执行下列程序段后的输出是() x=l; while(x<=3) x++,y=x+++x; printf("%d,%d",x,y); ① 6,10 ②5,8 ③4,6 ④3,4 【分析】我们可以使用逐步记录运行结果的方法来获得输出结果,记录如下: x=1; 进入循环,条件满足执行循环体:计算x+十得x为2,计算y=x+++x,得y为4、x为3; 继续循环,条件满足执行循环体:计算x+十得x为4,计算y=x+++x,得y为8、x为5; 继续循环,条件不满足退出循环; 输出x和y的值为5,8。 【答案】② 12 执行下列程序段,其中的do-while循环一共执行_次。 static int x; do x+=x*x; while (x); 【分析】对静态型变量,不赋初值也有值,对整型变量,其值为 0。执行循环语句 do-while 的循环体,x+=x* x是x=x+(x*

分支与循环程序设计实验报告

分支与循环程序设计实验-报告

————————————————————————————————作者: ————————————————————————————————日期:

实验名称 分支与循环程序设计实验 指导教师 罗志祥 专业班级 光电1406 姓名 段昳晖 学号 U2014***** 联系电话 137******** 一、任务要求 1. 设有8bits 符号数X 存于外部RA M单元,按以下方式计算后的结果Y 也存于外部RAM 单元,请按要求编写完整程序。 264/2 106410 X X Y X X X X ?≥? =<

实验2-循环结构程序设计

实验2 循环结构程序设计 一、实验目的 1.学习循环语句for、while和do-while语句的使用方法。 2.学习用循环语句实现各种算法,例如穷举法、迭代法等。 3.进一步熟悉C语言集成环境的使用方法 二、实验内容 1.用while循环实现数据统计问题。:从键盘输入一批任意数量的整数,统 计其中不大于100的非负数数值的个数。 2.编写并调试程序,使用do-while循环控制语句实现上面的数据统计问 题。调试数据仍参照上面给出的几种情况设计使用。 3.编写并调试程序,使用for循环控制语句实现上面的数据统计问题。 4.阶乘累加问题。编写程序,求1+2!+3!+…+n!的值。 三、实验指导 1.用while循环实现数据统计问题。 ?编程分析 由于输入数据个数是不确定的,因此每次执行程序时,循环次数都是不确定的。在进行程序设计时,确定循环控制的方法是本实验的一个关键问题。循环控制条件可以有多种确定方法: (1).使用一个负数作为数据输入结束标志。 (2).输入一个数据后通过进行询问的方式决定是否继续输入下一个数 据。 ?参考程序 参考程序一 /* 使用负数作为数据输入结束标志的程序 */ #include "stdio.h" void main()

{ int m,counter=0; while(1) { printf("请输入一个整数:"); scanf("%d",&m); if(m<0) break; if(m<=100) counter++; printf("\n"); } printf("符合要求的整数个数为: %d\n",counter); } 参考程序二 /* 通过进行询问的方式决定是否继续输入下一个数据的程序 */ #include int main() { int m,counter=0; char ask; while(1) { printf("请输入一个整数:"); scanf("%d",&m); getchar(); if(m>=0&&m<=100) counter++; printf("继续输入下一个数据?(Y/N)"); ask=getchar();

分支与循环程序设计实验报告汇总

分支与循环程序设计实 验报告汇总 集团标准化工作小组 [Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN]

实验名称分支与循环程序设计实验 指导教师罗志祥 专业班级光电1406 姓名段昳晖学号 U2014***** 联系电话 137******** 一、任务要求 1. 设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写完整程序。 2. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过 P0、P1、P2端口输出(以压缩BCD码的形式)。为低电平时开始计时,为高电平时停止计时。设计1s延时子程序(延时误差小于10us,晶振频率12MHz)。 二、设计思路 1. 设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写完整程序。 将外部单元1000H中的X,通过分支判断,分别执行不同的语句,三条语句分别为标记为 L1、L2、L3,先比较X与64的大小关系,再判断X与10的大小关系,主要利用比较转移指令CJNE,以及执行CJNE指令后的进位位CY,进一步比较大小,分别跳转至对应语句。将结果存于外部单元的1001H以及1002H。 2.利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过 P0、P1、P2端口输出(以压缩BCD码的形式)。为低电平时开始计时,为高电平时停止计时。设计1s延时子程序(延时误差小于10us,晶振频率12MHz)。 主程序设计三层循环,分别对应时、分、秒,最内层安放一秒延时程序。利用R0、R1、R2计数,R3保存分钟数、R4保存小时数,最内层循环60次,中循环循环1次,中循环60秒,外循环循环1次,外循环循环24次,清零。其中对端口显示的秒数、分钟数、时间数,进行二进制修正。 利用循环来设计延时程序,合理计算语句长度,以及循环次数。

循环结构程序设计练习题

第三单元循环结构练习题 选择题: 1、有以下程序执行后的输出结果是()。 main( ) { int i,s=0; for(i=1;i<10;i+=2) s+=i+1; printf("%d\n",s);} A.自然数1~9的累加和 B.自然数1~10的累加和 C.自然数1~9中的奇数之和 D.自然数1~10中的偶数之和 2、以下关于for语句的说法不正确的是()。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先判断表达式,后执行循环体语句 C. for循环中,可以用break跳出循环体 D. for循环体语句中,可以保含多条语句,但要用花括号括起来 3、若i和k都是int类型变量,有以下for语句 for(i=0,k=-1;k=1;k++) printf("*****\n"); 下面关于语句执行情况的叙述中正确的是()。 A.循环体执行两次 B.循环体执行一次 C.循环体一次也不执行 D.构成无限循环 4、已知 int t=0; while(t=1){...} 则以下叙述正确的是()。 A)循环控制表达式的值为0 B)循环控制表达式的值为1 C)循环控制表达式不合法 D)以上说法都不对 5、设有以下程序段 int x=0,s=0; while(!x!=0)s+=++x; printf("%d",s); 则 A)运行程序段后输出0 B)运行程序段后输出1 C)程序段中的控制表达式是非法的 D)程序段执行无限次 6、设i,j,k均为int型变量,则执行完下面的for语句后,k的值为()。for(i=0, j=10; i<=j; i++, j- -) k=i+j; A.6 B.9 C.10 D.11 7、C语言中,break; 语句可以用于循环语句和( )语句中。 A.if B.switch C.for D.while 8、for(i=0; i<=15; i++) printf("%d", i ); 循环结束后,i 的值为()。 A.14 B.15 C.16 D.17 9、与语句“while(!x)”等价的语句是()。 A. while(x==0) B. while(x!=0) C. while(x==1) D. while(x!=1) 10、下述程序段中,while循环执行次数是()。 int k=0;

实验5_循环结构程序设计2题目及解答

4.3 循环结构程序设计2 【注意事项: (1)题中页码均为《C语言程序设计教程》中的页码 (2)题后为原程序文件名 (3)仅提交名为【*.c】的源程序文件,可一起提交,也可逐题提交 调试程序中常见问题及处理方法: (1)出现死循环时:关闭运行窗口即可。 】 1、按照下面的流程图书程序,用for语句实现。 【提示:参见p97—例4.23 ,并按照下面的左流程图书写007张三511.c,右流程图书写007张三512.c 程序运行结果: s=2550 】 2、用for语句编程,求300~500之间的水仙花数(如135:153=13+53+33)。(007张三52.c) 【程序运行结果: 300~500之间的全部水仙花数如下:??370??371??407 】 3、判断输入的数是否为素数。【提示:素数是只能被1和其自身和整除的数,】(007张三53.c) 【提示:参见p114—例4.36 程序运行时:程序运行结果: 请输入一个正整数:25?25不是素数 请输入一个正整数:12?125不是素数 请输入一个正整数:13?13是素数 】 4、判断输入的一个不超过32767的正整数是几位数。(007张三54.c)【提示:按照右侧的N-S图编程 运行时:运行结果: 请输入一个正整数(1~32767): 135?135是3位数请输入一个正整数(1~32767): 1356?1356是4位数请输入一个正整数(1~32767): 28906?28906是5位数】

附加题: 1、求出100~200间的所有素数。(007张三5附加1.c )。 【 运行结果: 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 】 2、根据以下公式求π值(直到最后一项小于10 –6 为止)(007张三5附加2.c ) 【 运行结果: pi=3.141590 】 3、百钱百鸡问题中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?(007张三5附加3.c ) 【提示:在编程之前,需先根据题意列出方程, 如: 设鸡翁x 只,鸡母y 只,鸡雏z 只 则有下列方程: x+y+z=100 和 5x+3y+z/3=100 因为2个方程,3个未知数,故为不定方程,需用穷举法解题。 运行结果: x=0??? y=25??z=75?? x=4??? y=18??z=78?? x=8??? y=11??z=81?? x=12?? y=4???z=84?? 】 参考解答: 1、~2、略 3、 #include void main( ) { int x, I, k; printf(“请输入一个正整数:”); scanf("%d", &x); k=x/2; while ( i <=k ) { if( x%i ==0 ) break; } if ( i>k ) { printf(“%d is \n”, x); } ??????+???+??+?++=9 4 73523173523152313112π

C语言练习2(选择和循环结构)

C语言(分支和循环结构) 一、选择题 1.以下程序输出结果是( ) main() { int m=5; if(m++>5) printf("%d\n",m); else printf("%d\n",m--);} A)7 B)6 C)5 D)4 2以下程序的输出结果为( ) # include main ( ) { int i=0, j=0, a=6; if ((++i>0)&&(++j>0)) a++; printf ("i=%d, j=%d, a=%d\n", i,j,a);} A) i=0, j=0, a=6 B) i=1, j=1, a=7 C) i=1, j=0, a=7 D) i=0, j=1, a=7 3有如下程序 main() { int a=2,b=-1,c=2; if(a

4若i为int型,且有程序如下,则输出结果是( ) i=111; if(i%3==0) printf("####"); printf("****"); A) #### B) **** C) ####**** D) 无输出结果 5若运行时x=12,则运行结果为( ) {int x, y; scanf("%d", &x); y=x>12 ? x+10:x-12; printf("%d\n", y);} A) 0 B) 22 C) 12 D) 10 6以下程序的输出结果是( ) main() { int i=0, j=0, k=6; if ((++i>0)||(++j>0)) k++; printf("%d, %d, %d\n", i, j, k); } A) 0, 0, 6 B) 1, 0, 7 C) 1, 1, 7 D) 0, 1, 7 7若变量都已正确说明,则以下程序段输出为( ) int a=1,b=2,c=3; if(a>b) a=b; b=c; c=a; printf("a=%d b=%d c=%d\n",a,b,c);

【测试】分支循环测试作业(VB第五章测试题)

我的试卷 测试得分: 88.0 分 1. 单选题:(4.0分) 有如下程序: Private Sub Command1_Click() x = InputBox("input value") Select Case x Case Is > 0 y = x + 1 Case Is = 0 y = x + 2 Case Else y = x + 3 End Select Print x; y End Sub 假设运行时从键盘上输入-5,输出结果是_______。 A. -5 -2 B. -5 -4 C. -5 -3 D. -5 -5 解答:A 参考答案: A 2. 单选题:(4.0分) 下列程序段的执行结果是_______。 X = 2 Y = 1 If X * Y < 1 Then Y = Y - 1 Else Y = -1 Print Y - X > 0 A. True

B. False C. -1 D. 1 解答:B 参考答案: B 3. 单选题:(2.0分) 关于语句If x=1 Then y=1,下列说法正确的是_______。 A. x=1和y=1均为赋值语句 B. x=1和y=1均为关系表达式 C. x=1为关系表达式,y=1为赋值语句 D. x=1为赋值语句,y=1为关系表达式 解答:C 参考答案: C 4. 单选题:(2.0分) Select Case 语句结构中,测试项可以有三种形式,以下使用正确的是_______。 A. Case 20>Is B. Case x<=8 ,10 to 25 C. Case Is>9 And Is<25 D. Case Is>x 解答:D 参考答案: D 5. 单选题:(4.0分)

循环结构程序设计课后习题及答案

循环结构程序设计习题及答案1、循环语句的三要素分别 是、、。 2、for语句括号内的3个表达式的作用分别 是、、。 3、在2层循环嵌套中,外层循环语句的每个执行周期中,内层循环语句都要完整地,只有当时,才结束整个循环。 4、在循环结构中,break语句的作用是;continue语句的作用是。 5、当循环条件一开始就为假时,对于while语句、do…while语句、for 语句,分别执行循环体次、次、 次。 6、下面程序段的执行次数: int a=0; while(a=0) { printf("good\n"); a--; } 7、下面程序段的执行次数: int a=0; while(a==0)

{ printf("good\n"); a--; } 8、下面程序段的执行次数: int a=1; while(a=1) { printf("good\n"); a++; } 9、下面程序段的执行次数: int a=1; while(a==1) { printf("good\n"); a++; } 10、下列程序段的运行结果是。 for(i=5;i>=0;i--) printf(“%d “,i); 11、下列程序段的运行结果是。 for(n=1;n<20;n=n+3) printf(“%d “,n); 12、下列程序段的运行结果是。

for( ch='a' ;ch<='e' ;ch++) printf(“%d“,ch-97); 13、下列程序段的运行结果是。 for(i=1,j=5 ; i

微机原理实验之_分支程序、循环程序设计

实验三分支程序、循环程序设计实验 一、实验目的 1.掌握分支程序的结构。 2.掌握分支程序的设计、调试方法。 3.加深对循环结构的理解。 4.掌握循环结构程序设计的方法以及调试方法。 二、实验设备 PC机一台,TD-PITE实验装置一套。 三、实验内容: 设计一数据块间的搬移程序。设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存储区(称为目的数据块)。源数据块和目的数据块在存储中可能有三种情况,如图1所示。 图3-1 源数据块与目的数据块在存储中的位置情况 对于两个数据块分离的情况,如图3-1(a),数据的传送从数据块的首地址开始,或从数据块的末地址开始均可。但是对于有重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭到破坏,可有如下结论: 当源数据块首地址<目的块首地址时,从数据块末地址开始传送数据,如图3-1(b)所示。 当源数据块首地址>目的块首地址时,从数据块首地址开始传送数据,如图3-1(c)所示。 参考流程:如图3-2所示。

图3-2 程序流程图 实验程序 STACK SEGMENT STACK DW 64 DUP() STACK ENDS CODE SEGMENT ASSUME CS:CODE START: MOV CX, 0010H MOV SI, 3100H MOV DI, 3200H CMP SI, DI JA A2 ADD SI, CX ADD DI, CX DEC SI DEC DI A1: MOV AL, [SI] MOV [DI], AL DEC SI DEC DI DEC CX JNE A1 JMP A3 A2: MOV AL, [SI] MOV [DI], AL INC SI INC DI DEC CX

分支与循环程序设计

实验名称分支及循环程序设计成绩 指导教师****** 专业班级****** 姓名白*** 学号******* 联系电话******** 一、任务要求 1.熟练掌握Keil环境下汇编语言程序的调试方法,加深对汇编 语言指令、机器码、寻址方式等基本内容的理解,掌握分支程 序和简单程序的设计及调试方法,了解并行IO口的使用。 2.设有8bits符号数X存于外部RAM单元,按以下方式计算后 的结果Y也存于外部RAM单元,请按要求编写完整程序。 3.利用51系列单片机设计一个24小时制电子时钟,电子时钟 的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩 BCD码的形式)。P3.0为低电平时开始计时,为高电平时停

止计时。设计1s延时子程序(延时误差小于10us,晶振频 率12MHz)。 4.1)实现4位十进制加、减1计数,千位、百位由P1口输出; 十位、个位由P2口输出。利用P3.7状态选择加、减计数方 式。 2)利用P3口低四位状态控制开始和停止计数,控制方式自 定。 二、设计思路 1.先在外部RAM取数,然后判断该符号数是否为负数,若为负 数,则取相反数并存数;若为正数,则接着判断该数是否大于 等于64,若满足,则求平方并存数,先存低位,后存高位; 若小于64,则接着判断该数是否大于10,若满足,则求该数 的一半并存数;若小于等于10,则取相反数并存数。 2.第一步先编可以延时1S的子程序DELAY;接着判断P 3.O 是否满足开始计数条件,若不满足,则重复判断;若满足,则 对时分秒分别赋值,调用延时子程序,判断是否满足计时条件,若不满足,则重复判断直至满足;若满足,则秒钟自加一,循 环,判断秒钟循环满60次后出循环,对分钟自加一,然后继 续循环,最后判断分钟循环满60次后出循环,对时钟自加一,然后判断时钟循环满24则回到初值,时分秒重新赋值并重新 开始循环。

循环结构程序设计典型例题

循环结构程序设计典型例题 例1:有数列2/3、4/5、6/9、10/15……求此数列前30项的和。 算法分析: 对于数列的题,首先要找出通项公式,或前后项的计算关系公式,根据公式求所需。由于数列的题一般执行次数能确定,用for语句来编写比较方便。 此题,前后项的关系是:后一项的分子是前一项的分母加1,后一项的分母是前一项的分子加分母。解题思路是用循环语句求各项,并把值累加,因为是求前30项的和,循环执行30次。 1. 初值i=2,j=3,s=0; 2. 用n从1到30循环 3. s=s+ i/j; 4. c=i; i=j+1; j=c+j; 5.输出s; 程序: #include<> main( ) { int i=2,j=3,n,c; float s=0; for(n=1;n<=30;n++) { s=s+(float)i/j; c=i; i=j+1; j=c+j; } printf(“\n%f”,s); } 此题中的n与循环体中的执行语句没有数值上的联系,仅仅用做决定循环执行的次数。 例2:下面这个程序,想想它实现的是什么功能? #include<> main( ) { int i,s=0; for(i=1;i<=100;i++) {if(i%5==0) continue; s=s+i; } printf(“\n%d”,s); } 在左边的程序中,i从1到100循环,当i是5的倍数时,直接进入下一个i,当i不是5的倍数时,把i累加到s,最后输出s。所以,这个程序实现的是求1~100中间所有非5的倍数的数之和。 例3:输出n~m中(0

2.2.10循环结构程序设计 - 循环结构程序设计_教学案例

【教学案例一】 1. 实验目的 熟练使用for语句控制循环。 2. 实验任务 (1)实验内容:打印输出所有"水仙花数"。所谓"水仙花数"是指一个三位的正整数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=13+53+33。 (2)实验要求:没有输入,输出所有"水仙花数"。 程序输出以下4个"水仙花数": 153 370 371 407 3. 实验分析 (1)问题分析:用循环语句循环测试每一个三位数是否符合"水仙花数"的规则。即对所有100至999的数,把每个数分解出个位数,十位数和百位数,再判断是否符合条件。 (2)实现要点:用一次穷举循环就可以了。因为是固定次数的循环,一般采用for语句。对于每个当前的整数,用取余和整除运算分解出各位的数字。对于三位的正整数n,个位数g = n%10,十位数s = (n%100)/10,百位数b = n/100。 4. 参考代码 #include int main(void) { int n, g, s, b; for (n=100; n<=999; n++) { b = n / 100; s = n / 10 % 10; g = n % 10; if ( g*g*g + b*b*b + s*s*s==n) printf("%d ",n); } return 0; } 5. 思考题 什么情况下采用穷举循环是比较合适的? 【教学案例二】 1. 实验目的 (1)熟练使用while 语句和理解该语句的执行顺序,掌握累加和计算的算法。 (2)熟练运用断点调试。 2. 实验任务 74

(1)实验内容:根据下面关系式,求π的值,直到最后一项的值小于epsilon 。epsilon 的值由键盘输入。 12!3!!12335357357n p =++++???????…+…(2n+1) (2)实验要求:改正下面的错误程序,达到满足如下表的运行示例结果。测试用例: /* 1 */ #include /* 2 */ int main(void)/* 3 */ { /* 4 */double sum,item;/* 5 */double epsilon;/* 6 */int i; /* 7 */printf("Enter Epsilon:");/* 8 */scanf("%lf",&epsilon);/* 9 */item = 1; /* 10*/sum = 0; /*调试时设置断点*//* 11*/while (item >= epsilon)/* 12*/{/* 13*/sum += item;/* 14*/i++;/* 15*/item *= i;/* 16*/item /=(2*i-1);/* 17*/} /* 18*/printf("Pi=%.6lf\n",2*sum); /*调试时设置断点*//* 19*/return 0; /* 20*/ } 3. 实验分析 (1)程序分析:这是一个求累加和的问题。为解决这个问题,首先抽取出具有共性的算式:sum=sum + item ,其中sum 存放累加和,item 表示第i 项的内容。题目没有显式地给出循环次数,只是提出了精度要求。在反复计算累加的过程中,一旦第i 项的绝对值小于Epsilon ,就达到了给定的精度,计算终止,这说明精度要求实际上给出了循环的结束条件,

分支和循环程序设计实验报告

实验名称 分支与循环程序设计实验 指导教师 罗志祥 专业班级 光电1406 段昳晖 学号 U2014***** 联系电话 137******** 一、任务要求 1. 设有8bits 符号数X 存于外部RAM 单元,按以下方式计算后的结果Y 也存于外部RAM 单元,请按要求编写完整程序。 2 64/2 106410 X X Y X X X X ?≥?=<

2. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD 码的形式)。P 3.0为低电平时开始计时,为高电平时停止计时。设计1s 延时子程序(延时误差小于10us ,晶振频率12MHz )。 主程序设计三层循环,分别对应时、分、秒,最内层安放一秒延时程序。利用R0、R1、R2计数,R3保存分钟数、R4保存小时数,最内层循环60次,中循环循环1次,中循环60秒,外循环循环1次,外循环循环24次,清零。其中对端口显示的秒数、分钟数、时间数,进行二进制修正。 利用循环来设计延时程序,合理计算语句长度,以及循环次数。 程序运行时修正P3.0的值,可以实现暂停计数和继续的功能。 提高部分(选做): 1)实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。利用P3.7状态选择加、减计数方式。 2)利用P3口低四位状态控制开始和停止计数,控制方式自定。 初始化P1、P2,,计数循环中插入一秒延时程序。R1存千百位、R2存个十位,P3.7=0时,进行加1计数,取出R2中的数存于A ,对A 加1,同时进行十进制修正,存于P2,达到99,则进位对千百位进行加1。P3.7=1时,进行减一操作,取出R1中的数存于A ,对A 减1,同时进行十进制修正,存于P1,达到0,则对P2,对R2进行减一。 计数循环前判断P3.0的值,当P3.0=1时,开始计数,P3.0=0时,原地循环,停止计数,直到P3.0=1,可以实现随时停止与开始。 三、资源分配 1. 设有8bits 符号数X 存于外部RAM 单元,按以下方式计算后的结果Y 也存于外部RAM 单元,请按要求编写完整程序。 2 64/2 106410 X X Y X X X X ?≥?=<

实验6 循环结构程序设计(2)

实验6 循环结构程序设计(2) 一、实验目的: 1、继续熟悉循环程序设计,掌握不确定次数循环判定条件的设置; 2、掌握多重循环的使用,能够熟悉应用穷举法、迭代法、判定素数、求最大公约定等典型算法; 3、熟悉break语句和continue语句在循环中的应用,并区分两者的不同。 二、实验内容 1、(基础题)编写程序,输出从公元2000年到3000年所有闰年的年份,每行输出10个年份。判定闰年的条件是: (1)年份能被4整除,但不能被100整除,则是闰年; (2)年份能被400整除也是闰年。 (提示:循环变量从2000变化到3000,然后去判断每一个年份是否为闰年,若是,则输出。由于每行只能输出10年份,还要定义一个整型变量用于计数) 程序运行效果图如下图所示: 2、在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目。请根据题目要求完善代码。

思路:①循环次数不确定,但最多循环1000次:在循环体中累计捐款总数,用if语句检查是否达到10万元,如果达到就不再继续执行循环,终止累加;②计算人均捐款数。 #include ______________//定义符号常量SUM,值为100000 int main() { float amount,aver,total; int i; for (i=1,total=0;i<=1000;i++) { printf("please enter amount:"); scanf("%f",_____);//输入用户捐款数额,存入amount变量 ___________;//用户捐款数额累加进total变量中 if(total>=SUM) //判断捐款数额是否已够 _______; } //计算平均每人捐款的数目 if(i>1000) //循环正常结束 aver=total/(i-1); else //循环提前结束 ________; printf("num=%d\naver=%10.2f\n",i,aver); return 0; }

江苏省二级VB 第五章 选择分支与循环嵌套

第五章选择分支与循环嵌套 5.1 分支结构与分支结构语句(2个例子) 5.2 循环结构与循环结构语句(6个例子) 5.3 程序实例(10个例子) 习题练习(11个例子) 5.1 分支结构与分支结构语句 5.1.1 IF-Then-Else-End If 结构语句 结构一般如下: If e Then [ A组语句 ] Else [ B组语句 ] End If e 为判决条件,可以是逻辑变量,关系表达式或逻辑表达式。 当A组语句仅有一个时,可简化为:If e Then < 语句 > 例如,程序代码:If Text1.Text = “” Then Text1.SetFocus End If 可以简化为:‘当文本框中文本为空时,则使得文本框成为焦点。 If Text1.Text = “” Then Text1.Setfocus (省去End If) 较为复杂的结构如下: If e1 Then ‘如果e1为True,则执行A1组语句 A1 组语句 ElseIf e2 Then ‘如果e2为True,则执行A1组语句 A2 组语句 … End If [ 例题5-1 ] 已知三角形的三边长度,设计求此三角形面积的程序。 问题分析:a + b > c & a + c > b & b + c > a , S = sqr(p(p-a)(p-b)(p-c)) , p= (a+b+c)/2 算法设计:开始——输入a、b、c——判断a + b > c & a + c > b & b + c > a,通过则求p,求S,否则提示:“输出数据错误信息”——结束。 设计程序代码如下: Private Sub Command1?_Click( ) Dim a As single, b As single, c As single a = Val(Text1.text) ‘Text 属性为字符串型,转为数值型 b = Val(Text2.text)

循环结构程序设计练习题__内含答案概要

第三单元循环结构练习题 选择题:(有答案) 1、有以下程序执行后的输出结果是()。 main( ) { int i,s=0; for(i=1;i<10;i+=2) s+=i+1; printf("%d\n",s);} A.自然数1~9的累加和 B.自然数1~10的累加和 C.自然数1~9中的奇数之和 D.自然数1~10中的偶数之和 2、以下关于for语句的说法不正确的是()。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先判断表达式,后执行循环体语句 C. for循环中,可以用break跳出循环体 D. for循环体语句中,可以保含多条语句,但要用花括号括起来 3、若i和k都是int类型变量,有以下for语句 for(i=0,k=-1;k=1;k++) printf("*****\n"); 下面关于语句执行情况的叙述中正确的是()。 A.循环体执行两次 B.循环体执行一次 C.循环体一次也不执行 D.构成无限循环 4、若运行以下程序时,输入2473↙,则程序的运行结果是:() main ( ) { int c; while ((c=getchar( )) ! =’\n’) switch (c-‘2’) { case 0 : case 1 : putchar (c+4) ; case 2 : putchar (c+4) ; break ; case 3 : putchar (c+3) ; default : putchar (c+2) ; break ; } pr intf(“\n”); } A)668977 B)668966 C)66778777 D)6688766 5、以下for循环的执行次数是:()。 for (x=0,y=0; (y=123) && (x<4) ; x++) ; A)无限循环 B)循环次数不定 C)4次 D)3次 6、已知 int t=0; while(t=1){...} 则以下叙述正确的是()。 A)循环控制表达式的值为0 B)循环控制表达式的值为1 C)循环控制表达式不合法 D)以上说法都不对 7、设有以下程序段() int x=0,s=0; while(!x!=0)s+=++x; printf("%d",s); 则 A)运行程序段后输出0 B)运行程序段后输出1 C)程序段中的控制表达式是非法的 D)程序段执行无限次 8、设i,j,k均为int型变量,则执行完下面的for语句后,k的值为()。for(i=0, j=10; i<=j; i++, j- -)k=i+j; A.6 B.9 C.10 D.11 9、C语言中,break; 语句可以用于循环语句和( )语句中。 A.if B.switch C.for D.while 10、for(i=0; i<=15; i++) printf("%d", i ); 循环结束后,i 的值为()。 A.14 B.15 C.16 D.17

相关主题