文档库 最新最全的文档下载
当前位置:文档库 › WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)

WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)

WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)
WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)

WHILE循环语句的翻译程序设计

1 问题描述

1.1实现思想:

本次设计用java高级语言,识别的是C语言的while循环语句的文法,通过良好的用户界面实现相应的输入和输出。。

1.2语法分析器构造:

该程序的语法分析器能对输入的语法进行分析,判断输入语句能否满足while循环语句的文法。通过递归下降的方法对语句进行分析,看能否通过开始符号推导出来。

1.3语义分析器构造:

该程序的语义分析器就是对分析结果进行输出,要求输出结果是三地址形式的。

2 文法描述

2.1文法描述

::= while (<条件表达式>) (<赋值语句> | )

2.2递归文法

while语句文法:

S -> while (B) S | i=E

B -> E relop E

relop -> < | = | >

E -> E+E | E-E | E*E | E/E | (E) | i | n

在编写程序的时候用到的是递归下降法,而递归下降法对文法的要求是不能包含左递归,对上述的文法进行消除左递归之后,得到如下的递归文法:

S -> while (B) S | i=E

B -> E relop E

relop -> < | = | >

E -> (E)

F | iF | nF

F -> +EF | -EF | *EF | /EF | ε

3 语法分析方法描述

3.1实现思想

递归下降识别程序是由一组子程序组成,每个子程序对应于一个非终结符号(S,B,E,F,relop)。该子程序处理相应句型中相对于此非终结符号的产生式。在定义文法时,是递归定义的,所以这些子程序也是递归的。当一个子程序调用另一个子程序时,总是先执行被调用的子程序,然后再执行后继的程序。程序中5个子程序,其中S 是开始符号,也是递归下降分析的入口,通过调用词法分析器进行单词分析,并通过Getsymbol()函数返回当前所分析到的单词,然后在递归语法分析中根据这个单词分析下一步要执行的子程序。3.2具体设计

一下图示反映了在程序调用过程中,遇到终结符符时调用的函数次序,具体的步骤在概要设计时具体体现.(见下图):

4 中间代码形式的描述

4.1三地址代码

在本程序中用到了三地址语句的输出包括以下的种类: 赋值语句:x:= y op z 复制语句:x:= y

条件转移语句:if x relop y goto L

例如,本程序中语句while (B) S ,可以输出三地址代码为:if B goto L else goto Lnext ; 而E -> (E)F 可以输出三地址代码为:E1:= (E2) F 。

4.2本程序中的三地址代码

S

while ( B )

i

=

E

B E relop E

relop

< = > > E

(

E ) F

i F n

F

F

+

E - E * E /

E

S -> while (B) S L0:=if (B) goto L1 else goto Lnext

S -> i=E L:= i=E

B -> E relop E B:= E1 relop E2

relop -> < relop:= <

relop -> = relop:= =

relop -> > relop:= >

E -> (E)

F E1:= (E2) F

E -> i

F E:= I F

E -> n

F E:= n F

F -> +EF F1:= +E F2

F -> -EF F1:= -E F2

F -> *EF F1:= *E F2

F -> /EF F1:= /E F2

F ->εF:= ε

图2 三地址代码

5 概要设计

5.1简要分析

递归下降分析技术就是通过对每个非终结符编写一个子程序来实现它的操作,然后通过递归的调用来实现对输入字符串的分析,这其中还包括对输入字符串的词法分析。在词法分析的时,得到的字符单词要和关键字比较,看是否是关键字,根据比较结果进行返回相应的单词类型。单词类型主要包括变量,关键字,常量,各种符号等,每种符号都是一种类型。在语法分析程序中,根据词法得到的结果,进行判断是否是当前需要的单词类型,如果不是就说明输入字符串不能由该文法推导出来;如果是当前需要的类型,就相应得做该单词类型分支程序。

根据文法可以得到这个递归下降程序可以分析包含有while嵌套的语句,在文法的开始符号S中就嵌套了S本身,因此这个文法的递归中就要考虑到while的自身嵌套。在递归子程序中,在嵌套调用其他子程序时都是有一定条件的,当满足这个条件的时候该程序可以按照满足的条件执行下去,当没有满足程序中的条件时就会报错。

5.2程序的概要设计

在本程序中,Getsymbol()子程序就是对当前输入的字符串进行词法分析,包括对变量,常量,关键字,各种符号的分析。主程序main()主要就是进行各种变量的初始化,调用递归分析程序的入口子程序。子程序间的嵌套关系如下:

void main()

{ S(); }

void Getsymbol(){ … }

void ERROR(){ … }

void S()

{ re=Getsymbol();

if(re==‘while’(关键字)) { B(); S();}

else(re==i(变量))

{re=Getsymbol();

if(re== =) E();} }

void B()

{ E(); relop(); E();}

void E()

{ re=Getsymbol();

if(re== ( )

{ E();re=Getsymbol();if(re==)) F();}

else if(re==i) F();

else if(re==n) F();}

void F()

{ re=Getsymbol();

if(re==+){ E(); F();}

else if(re==-){ E(); F();}

else if(re==*){ E(); F();}

else if(re==/){ E(); F();}}

6 详细的算法描述(流程图或伪代码)

6.1文件及其相应函数构成

recursion.java------main()----------组织整个程序流程,包括初始化界面

face.java-----------按钮事件驱动----通过界面接受源程序,触发词法分析器,并读取

词法分析结果,进行递归下降语法语义分析

lexical.java------- wordAnalysis()—接受源程序,进行词法分析,结果依符号表的形

式保存在相应文件

调用次序:

recursion.java main()--->face.java face()--->cfPanel---> lexical.java wordAnalysis()

S()

6.2 public boolean wordAnalysis(String s)子程序的算法描述

public boolean wordAnalysis(String s)

{char[] str=s.toCharArray(); // 用数组存储源程序

while(没有达到数组上界)

{if(str[count]是空格,换行符,制表符) {count++;continue;}

if(str[count]是字母) {从这个字母开始,将接下来的字母都保存在临时数组中,再跟关

键字表比较,不是关键字就是标志符;分别置标号}

if(str[count]是数字) {从这个数字开始,将接下来的数字都保存在临时数组中,置标号} if(str[count]是运算符) {若为单目,直接保存;若为双目,则向后看一位,用临时数组记录;

若为三目,则依次向后看两位,用临时数组记录;分别置标号}

if(str[count]是界符) {直接保存,置标号}

}

}

6.3 public int Getsymbol()子程序的算法描述

public int Getsymbol(){

While(词法分析结果文件不为空)

{String s1; // 保存取出的一个词法分析结果中的单词;

if(s1是关键字”while”) return 16;

Else if(s1是标志符)return 13;

Else if(s1是常量) return 12;

Else if(s1是/) return 1;

Else if(s1是*) return 2;

Else if(s1是-) return 3;

Else if(s1是+) return 4;

Else if(s1是<) return 11;

Else if(s1是=) return 10;

Else if(s1是>) return 9;

Else if(s1是;) return 20;

}

该程序就是对词法分析结果(保存在lexical.txt文件中)进行分析,提取对本次while 循环语句中的关键单词,分析到不同的数据类型就相应返回它的机内码,这样方便在语法分析中进行分析。

6.3 S()子程序的算法描述

void S()

{ re=Getsymbol(); //取下一个字符的机内码

if(re==关键字) //执行S->while (B) S

{re=Getsymbol(); //取下一个字符的机内码

if(re==左括号)

{调用B();

re=Getsymbol(); //取下一个字符的机内码

if(re==右括号)

调用S();

}}

Else if(re==变量) //执行S->i = E

{ re=Getsymbol(); //取下一个字符的机内码

If(re==等号)

调用E();}

Else

ERROR();

}

该程序就是对通过Getsymbol()得到的单词,进行不同的程序语句执行。当得到了while是就分析下一个是不是(,是的话就调用B();否则就出错。取下一个单词,是)就调用S();否则也出错。当得到的是变量i时,去下一个单词,如果是=就调用E()。

6.4 B()和relop()子程序的算法描述

在B()子程序中,不用判断任何的单词,就依次调用E(),relop(),E(),执行B->E relop E Void relop()

{ re=Getsymbol(); //取下一个字符的机内码

if(sym==大于号) ; //执行relop-><

Else if(sym==等于号) ;//执行relop->=

Else if(syn==小于号) ; //执行relop->>

Else

ERROR();

}

在relop程序中就主要上判断当前取得的单词是不是条件运算符。

6.5 E()子程序的算法描述

Void E()

{ re=Getsymbol(); //取下一个字符的机内码

if(re==左括号) //执行E->(E)F

{ E();

re=Getsymbol(); //取下一个字符的机内码

if(re==右括号)

F();

}

Else if(re==变量) //执行E->iF

F();

Else if(re==常量) //执行E->nF

F();

}

6.6 F()子程序算法描述

Void F()

{ re=Getsymbol(); //取下一个字符的机内码

If(re==加号) //执行F->+EF

{ E(); F();}

Else if(re==减号) //执行F->-EF

{ E(); F();}

Else if(re==乘号) //执行F->*EF

{ E(); F();}

Else if(re==除号) //执行F->/EF

{ E(); F();}

}

这个子程序和E()合起来就是一个完整的可递归的算术操作运算,但由于递归下降分析方法不能含有左递归文法,所以消去左递归后就成了两个子程序。

7 软件的测试方法和测试结果

7.1 测试方法---黑盒测试

本次设计由于程序结构和处理算法比较简单,并没有按照程序内部的逻辑测试程序,检

测程序中的主要执行通路是否都能按预定要求正确工作,所以没有采取白盒测试方法. 7.2 测试用例和测试结果

主要测试步骤是进行模块测试和系统测试,具体到设计中是对词法分析结果和语法测试结果分别测试,具体的测试用例是:

7.2.1 测试词法分析器

输入字符串:int i=0; abc=abc+k;

测试分析:依此分析词法分析是否能识别关键字,标志符,界符,关键字

测试结果:

图4 输出结果

7.2.2 测试词法分析器

输入字符串:while (i=2) abc=(i+j)*k;

测试分析:这个输入字符串是正确的,是最简单的while语句

测试结果:

图4 输出结果

输入字符串:while (i<=2) i=j+k;

测试分析:该字符串不符合本程序的文法,条件符号只有< > = 测试结果:

图5 输出结果

输入字符串:while (i<2) while (j<9) abc=(i+abc)*j; 测试分析:该字符串符合文法,它嵌套了while语句

测试结果:

图6 测试结果

输入字符串:while (i<2) while a=b+c23;

测试分析:在嵌套的语句中,第二个while没有条件表达式测试结果:

图7 测试结果

8 研制报告

8.1研制过程

在做本次实验之前我对LL(1)文法的构成,递归下降原理不是很了解,在查阅了相关资料后,对此有了深入了解.在整个设计过程中,将词法分析做为一个单独的模块,它可以被任何语法分析调用,提高独立性.并且在编程之前就已经将程序的概要设计都做出来了,所以在编写程序的时候相对比较容易。词法分析,语法分析都是很容易的,只要理解了分析方法的实现原理,编写程序判断输入字符串是否满足给定的文法是比较简单的。

8.2本设计的评价

在本次设计中,程序具有良好的用户界面,独立的词法与语法接口,并且在语法分析过程中可以准确指出语句中有错误的位置。在编制整个设计的过程中,利用了所学的软件工程,软件设计面向对象的方法。

9 参考文献

[1]陈火旺.刘春林等著,编译原理,北京:国防工业出版社,2002.6

[2]陈意云.编译原理与技术(第二版).中国科学技术大学出版社.2002年1月

[3]张幸儿.计算机编译原理—编译程序构造实践:科学出版社,2005.7

[4]王毅.JA V A程序设计自学手册:人民邮电出版社,2005.9

while循环

while 循环 语法形式: while(条件) { 需要循环执行的语句; } while 是“当”的意思。 请首先和if语句作一个比较: if(条件) { 条件成立时执行的语句; } 二者除了关键字不一样以外,结构完全一样。但一定要注意,在条件成立时,if语句仅仅执行一遍,而while语句则将反复执行,直到条件不再成立。 请看while循环的流程图: 程序从“前面的语句”开始执行,然后进行条件判断,如果条件成立,则执行一次“每次循环执行 的语句”,再后请特别注意红色部分,这是我们碰上的,第一次会往后走流程:红线就像汽车拐弯, 掉头到条件处(并不包括前面的语句),然后再进行下一次的条件判断……直到某一次判断时条件不 成立了,程序“继续后面的语句”。

我们用while的语法套用生活中的实际例子,可以直观地看出while的用法。 假设有一个爱哭的小娃娃,有一天她要求父母给买一条小红裙,可惜父母不同意,于是她就开始一个循环: while ( 父母不给买小红裙) { 我哭; } 这段“代码”的意思是:当“父母不给买小红裙”,那么,小女孩就一遍一遍地哭。 这就是我们和循环流程的第一个遭遇战。所举的例子看似直观:“小孩一遍遍地哭,直到父母给买裙”,但真正要用程序的语言来正确地表达出来,需要很多方面要考虑到,必竟,程序是严谨的。 首先,一个合适的判断是否继续的条件相当重要。小女孩要继续哭,仅仅“父母不给买小红裙”,这显示不符合事实,想想我们小时候,再会哭,最终也有累的时候,所以,要想继续哭,我们的条件有两个:“父母不给买小红裙”并且“我还没有哭累”。 while ( 父母不给买小红裙&& 我还没有哭累) { 我哭; } 其次,大多数情况下,条件需要被恰当地改变。小女孩在不停地哭,那么她如何知道父母是否买了红裙呢?所以,她不能只顾哭,还得在哭的间隙观察大人是否同意买裙。至于是否哭累,我们假设小女孩有一个疲劳度,每哭一次疲劳度加1,当疲劳度到达200时,可怜的小女孩累了…… while(父母不给买小红裙&& 疲劳度< 200) { 我哭; 我偷看爸妈是否同意买裙; 疲劳度++; } 例一:用while 语句实现求从1到100的累加和。 求1+2的和,我们可以写a = 1 + 2;求1加到100,我们当然可以这样写a = 1 + 2 + 3 + ... 100.不过这样写显然太累人了,要从1写到100啊!所以聪明如高斯的你,当然也知道这样写:a = (1+100) * 50;这确实是个在任何时候都值得称赞的,又快又简的方法,只是今天我们想让计算机累一点,老老实实地从1加到100。首先用我们先学的while式的循环。 请同学们打开CB,然后新建一空白的控制台程序,在main()函数体加入下面黑体部分代码。然后按F9运行。查看运行结果以加深印象。 //--------------------------------------------------------------------------- #include #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused int main(int argc, char* argv[])

while循环结构例题

引子 #include "stdio.h" main() { int i=1; for(i=1;i<=10000;i++) printf(“%d\t”,i); } 题型1 输入输出多个数据 eg1、输出1~10000之间所有的整数#include "stdio.h" main() { int i=1; while(i<=1000) {printf(“%d\t”,i); i++;} } 拓展:1、换成所有的奇数 2、换成所有的偶数 题型2 有限个数连加和连乘

eg2.1、求1+2+3+4+………+100的值 #include "stdio.h" main() { int i=1,s=0; while(i<=100) {s=s+i; i++;} printf(“%d\n”,s); } 拓展:1、求1+2+3+4+………+n的值 2、求12+22+32+………+n2的值 3、求1+1/2+1/3+………+1/n的值eg2.2、求n!的值 #include "stdio.h" main() { int i=1,n,p=1; scanf(“%d”,&n); while(i<=n) {p=p*i; i++;} printf(“%d\n”,p); }

拓展:求1!+2!+3!+………+n!的值 #include "stdio.h" main() { int i=1,n,p=1,s; scanf(“%d”,&n); while(i<=n) {p=p*i; s=s+p; i++;} printf(“%d\n”,s); } 题型3 无限个数连加 eg3、求1-1/3+1/5-1/7+………的近似值,要求精度要达到10-4 #include "stdio.h" #include "math.h" main() { float n=1,s=0,f=1,t=1; while(fabs(t)>=1e-4) {t=f/(2*n-1); s=s+t;

while循环练习

一、选择题 1.设有程序段 int k=10; while(k=0)k=k-1; 这下面描述中正确的是_________. a)while循环执行10次 b)循环是无限循环 c)循环体语句以此也不执行 d)循环体语句执行一次 a)E==0 b)E!=1 c)E!=0 d)E==1 2.语句while(!E);中的表达式!E等价于________. 3.下面程序段的运行结果是__________. int n=0; while(n++<=2);printf("%d",n); a)2 b)3 c)4 d)有语法错 4.下面程序的运行结果是____. #include main() { int num=0; while(num<=2) { num++; printf("%d\n",num); } } a)1 b)1 c)1 d)1 2 2 2 3 3 4 二、编程计算 1、求1~100中所有偶数的和。 2、下面程序的功能是输出1至100之间每位数的乘积大于每位数的和的数。 3、计算并输出1-3+5-7+……-99+101的值。

三、写一个小型计算器。 界面如下: 要求: 1.有简单运算选择界面 2.采用循环实现菜单显示 3.采用switch结构实现菜单的选择 4.运算对象为两个操作数,从键盘输入 5.运算结果输出 1、计算下列式子的值: (1)1+3+……+99 (2)1+2+4+8+……+128+256 2、输入一个整数,计算它各位上数字的和。(注意:是任意位的整数) 3、输入一整数A,判断它是否质数。(提示:若从2到A的平方根的范围内,没有一个数能整除A,则A是质数。) 4、求两个数的最小公倍数和最大公约数。(提示:公约数一定小于等于两数中的小数,且能整除两数中的大数。公倍数一定大于等于两数中的大数,且是大数的倍数,又能给两数中的小数整除。) 5、编写一个译码程序,把一个英语句子译成数字代码。译码规则是以数字1代替字母A,数字2代替字母B,……,26代替字母Z,如遇空格则打印一个星号…*?,英文句子以….…结束。 6、求水仙花数。所谓水仙花数,是指一个三位数abc,如果满足a^3+b^3+c^3=abc,则abc 是水仙花数。 7、“百钱买百鸡”是我国古代的著名数学题。题目这样描述:3文钱可以买1只公鸡,2文钱可以买一只母鸡,1文钱可以买3只小鸡。用100文钱买100只鸡,那么各有公鸡、母鸡、小鸡多少只?与之相似,有"鸡兔同笼"问题。

while语句的一般形式为

while语句的一般形式为: while(表达式)语句,其中表达式是循环条件,语句为循环体。 while语句的语义是:计算表达式的值,当值为真(非0)时。执行循环体语句。当值为假(等于0)时,跳出循环体。 while语句格式为: while(表达式) 语句;/*循环体*/ 这里的表达式是循环能否继续下去的条件,而语句是循环体。只要表达式为真,则执行循环体内语句。否则终止循环,执行循环体外语句 while常用于循环次数未知, for常用于已知循环次数 for循环语句 1.1 for表达式 表达式1:一般为赋值表达式,给控制变量赋初值; 表达式2:关系表达式或逻辑表达式,循环控制条件; 表达式3:一般为赋值表达式,给控制变量增量或减量。 语句:循环体,当有多条语句时,必须使用复合语句。 1.2 for语句格式为: for(表达式1;表达式2;表达式3) 循环语句:/*循环体*/ 1.3 for语句执行过程如下: ①先对表达式1赋初值; ②判别表达式2是否满足给定条件,若其值为真,满足循环条件,则执行循环体内语句,然后执行表达式3,进入第二次循环,再判别表达式2……;否则判断表达式2的值为假,不满足条件,就终止for循环,执行循环体外语句。 在c语言中开关语句switch中case是什么意思 switch(表达式) { case 常量表达式1: 语句1;

break; case 常量表达式2: 语句2; break; …… case 常量表达式n: 语句n; break; default: 语句n+1; break; } (资料素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)

WHILE循环语句的翻译程序设计课设报告

1.题目:将WHILE语句转换成四元式的程序实现 设计内容及要求:设计一个语法制导翻译器,将WHILE语句翻译成四元式。要求:先确定一个定义WHILE语句的文法,为其设计一个语法分析程序,为每条产生式配备一个语义子程序,按照一遍扫描的语法制导翻译方法,实现翻译程序。对用户输入的任意一个正确的WHILE语句,程序将其转换成四元式输出(可按一定格式输出到指定文件中)。 1、系统描述 通过设计、编制、调试一个WHILE循环语句的语法及语义分析程序,加深对语法 及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。用语法 制导完成语义分析,并将形成的中间代码以四元式的形式输出。 2 、文法及属性文法的描述 2.1 文法的描述 该文法的产生式如下所示: (1)S->while(B){E} (2)E->AE (3)E->A (4)A->iPA (5)A->i (6)B->iTi (7)B->i 其中while、( 、) 、{ 、} 、P、T 、;和i均为终结符,而S、A、B、E这些大写字母均为非终结符。T表示比较运算符,P表示算术运算符,i表示合法标识符。 2.2 属性文法的描述 对该文法的属性文法描述如下: (1) S->while(B){E}prinf(if B goto E else goto next) (2) E->AE print(E.val = A.val·E.val) (3) E->A print(E.val = A.val) (4) A->i P A print(A= i.Val P A.Val) (5) A->i; A.Val = i;

(7) B->i B.Val = i 3 、语法分析方法描述及语法分析表设计3.1 语法分析表设计 3.1.1 文法的DFA

While 循环 例子

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace while循环 { class Program { static void Main(string[] args) { int i =0; while(i<10) { i++; Console.WriteLine(i); } // i) 计算1到100之间整数的和 int i=0; int sum =0; while(i<=100) { sum = sum + i; i++; } Console.WriteLine("0-100所有整数和为{0}",sum); // ii) 要求用户输入用户名和密码,只要不是admin 888888 就一直提示重新输入。 string username ="admin"; string pwd ="888888"; string input_username; string input_pwd; do { Console.WriteLine("请输入用户名:"); input_username = Console.ReadLine(); Console.WriteLine("请输入密码:"); input_pwd = Console.ReadLine(); if(username != input_username || pwd != input_pwd) { Console.WriteLine("错误!请重新输入!"); }

else { Console.WriteLine("恭喜!输入正确!"); } }while(username != input_username || pwd != input_pwd); // iii) 不断要求用户输入一个数字,然后打印这个数字的2倍,当用户输入q 的时候,程序退出。 while(true) { Console.WriteLine("请输入一个数字:"); string s1 = Console.ReadLine(); if(s1=="q") { return; } else { int i1 = Convert.ToInt32(s1); Console.WriteLine("这个数的2倍是:{0}", i1 *2); } } // iv) 不断要求用户输入一个数字,当用户输入end时显示刚才输入数字的最大值。 int max =0; while(true) { Console.WriteLine("请输入一个数字:(结束请输入end)"); string s1 = Console.ReadLine(); if(s1 =="end") { Console.WriteLine("你输入的数字中,最大的数是:{0}",max); Console.ReadLine(); return; } int num = Convert.ToInt32(s1); if(num>max) {

while语句的用法

while语句用法 while(表达式) {}/*循环体*/ 要学会WHILE很简单首先记住不要拼写错误 表达式的值是1就继续进行{}这个循环体,否则就退出循环 WHILE(1)不能说是无限循环,因为还不知道函数体的组成 退出循环,有种中方法 1.表达试的值是假的(值为0) 2.循环体里执行了BREAK语句 3.在循环题内返回了某值 至于while(k)是什么意思,这一类的问题,就要读者自己思考了 因为要放到程序里才能明白它的实际意思 LZ的程序里while(k)的意思是,如果K小于1那么就退出循环 使用while语句 使用while语句,可以在一个布尔表达式为true的前提下重复运行一个语句。 while语句的语法如下: while(booleanExpression) statement 首先会对布尔表达式进行求值,如果为true,就运行语句,然后再次求值布尔表达式。如果表达式仍为true,就再次运行语句,并再次求值表达式。这个过程会反复进行下去,直到布尔表达式求值为false;届时,while语句将退出,并从while之后的第一个语句继续。while语句在语法上与if语句有许多相似的地方(事实上,两者除了关键字不同,语法是完全一样的): l表达式必须是一个布尔表达式。 l布尔表达式必须放在圆括号内。 l假如首次求值时,布尔表达式为false,语句不会运行。 l假如想要在一个while的控制下执行两个或者更多的语句,必须使用大括号将语句分组到一个块中。 以下while语句向控制台写入0~9的值: int i=0; while(i!=10) { Console.WriteLine(i); i++; } 所有while语句都应该在某个时候终止。新手常犯的错误是忘记添加一个特别的语句,它最终能造成布尔表达式求值为false并终止循环。在上例中,i++;就属于这种情况。

while循环教学设计

第7课《while循环》教学设计 【教学目标】 1.知识与技能:巩固Python语言中的if-else语句和取余运算符%;了解并学会while循环结构及其用法,学会使用计数变量控制循环次数。会用while循环重复打印相同的语句,会用while循环找到100以内的奇数和偶数。 2.过程与方法:鼓励学生通过自主探究、小组合作等方法解决问题,在学习中不断经历分析思考、实践求证、反馈调适的计算思维过程,进一步熟悉Python语言的编程环境。 3.情感态度价值观:培养学生学习计算机科学的兴趣,体验信息技术与生活的密切联系,养成严谨的科学态度。 【教学重难点】 重点:while循环结构的组成和用法,进一步熟悉Python语言的编程环境。难点:理解在while循环结构中用计数变量控制循环次数。 【教学过程】 一、复习旧知,引入新课 师:上一节课,我们学习了在Python中用if-else语句解决问题(点击课件出示),妈妈说如果我能数学考100并且英语考100,就给我买自行车。否则没门!你能试着补全程序吗?指名学生回答,师根据回答课件出示答案。 课件出示if-else语句的基本格式,让学生说一说使用if-else语句时,

格式上要注意哪些问题? 师:指名学生回答,师根据回答出示课件。 9%3==?9%5==?a%b==0表示a能被b整除。a%b==x 表示a除以b余数是x。说说运算结果?%是什么运算符? 二、主动探究,学习新知 (-)用while循环重复打印5次“love mom” 师:同学们,这个星期天就是母亲节了,如果想用python跟妈妈说一百遍“妈妈,我爱您!”课件出示。追问:要输入100条print语句麻不麻烦?有没有一种简便的方法一次搞定?当然有! 课件出示: x = 1 while x<=100: print (“妈妈,我爱您!”) x =x+ 1 我们运行一下来看看。在教师机上运行一下。追问:用while语句是不是很快很方便?这就是让我们的python循环起来的while语句(板贴课题)。While读两遍,拼两遍。While在英语中有当……的时候的意思,在python 中是一种循环语句,只要条件成立,就可以重复执行很多次。相当于scratch 中的重复执行。 我们再来看个例子: 万米跑,围着足球场跑道(400米一圈)不停地跑,每跑一圈打印一次“running!”一共要跑25圈。

C语言while循环教案——钟智君2013180502

第五章循环结构程序设计 用while语句实现循环 【课程】:C语言程序设计 【课题】:循环结构程序设计 【授课对象】:职高高二计算机专业学生 【授课时数】:45分钟 【教学目标】: 认知目标 了解while循环的概念。 熟练掌握while循环的基本用法。 技能目标 能够正确分析问题,并得出解决方案 能够正确使用while循环 能够运用while循环解决一些必要的问题 情感和价值观目标 培养学生分析错误、独立思考、解决问题的能力 让学生学会合理规划生活,做事不断坚持的毅力 【教学重点】:while循环的基本思想 【教学难点】:循环到底怎么使用 【教学方法】:以实践法为主,其他方法为辅,尽量少讲理论性知识,将原理更简单的交给学生。 【教学步骤】:

1、复习引导 2、讲授新课 3、示例训练 4、课堂总结 5、作业布置 【教具】:黑板、粉笔、多媒体 【使用教材】:《C程序设计》第四版谭浩强著 清华大学出版社

【教学过程】: 1、复习引导 全班有30个学生,统计各学生三门课的平均成绩。 输入学生1的三门课成绩,并计算平均值后输出 要: scanf(“%f,%f,%f”,&s1,&s2,&s3); aver=(s1+s2+s3)/3; printf(“aver=%7.2f”,aver); 从键盘输入一个小于100的正整数,要求输出它的平方根.(若平方根不是整数,则输出其整数部分) 要求: 在输入数据后先对其进行检查是否为小于100的正整数。若不是,则要求重新输入。 #include #include #define M 1000 int main(){ int i,k; printf("请输入一个小于%d的整数i:",M); scanf("%d",&i); if (i>M){ printf("输入数不合要求,请重新输入一个小于%d的整数i:",M); scanf("%d",&i); } k=sqrt(i);

相关文档