32 基本语句与结构化程序设计.docx

上传人:b****2 文档编号:17331857 上传时间:2023-07-24 格式:DOCX 页数:17 大小:84.34KB
下载 相关 举报
32 基本语句与结构化程序设计.docx_第1页
第1页 / 共17页
32 基本语句与结构化程序设计.docx_第2页
第2页 / 共17页
32 基本语句与结构化程序设计.docx_第3页
第3页 / 共17页
32 基本语句与结构化程序设计.docx_第4页
第4页 / 共17页
32 基本语句与结构化程序设计.docx_第5页
第5页 / 共17页
32 基本语句与结构化程序设计.docx_第6页
第6页 / 共17页
32 基本语句与结构化程序设计.docx_第7页
第7页 / 共17页
32 基本语句与结构化程序设计.docx_第8页
第8页 / 共17页
32 基本语句与结构化程序设计.docx_第9页
第9页 / 共17页
32 基本语句与结构化程序设计.docx_第10页
第10页 / 共17页
32 基本语句与结构化程序设计.docx_第11页
第11页 / 共17页
32 基本语句与结构化程序设计.docx_第12页
第12页 / 共17页
32 基本语句与结构化程序设计.docx_第13页
第13页 / 共17页
32 基本语句与结构化程序设计.docx_第14页
第14页 / 共17页
32 基本语句与结构化程序设计.docx_第15页
第15页 / 共17页
32 基本语句与结构化程序设计.docx_第16页
第16页 / 共17页
32 基本语句与结构化程序设计.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

32 基本语句与结构化程序设计.docx

《32 基本语句与结构化程序设计.docx》由会员分享,可在线阅读,更多相关《32 基本语句与结构化程序设计.docx(17页珍藏版)》请在冰点文库上搜索。

32 基本语句与结构化程序设计.docx

32基本语句与结构化程序设计

第3章基本语句与结构化程序设计

3.4循环结构程序设计

循环的必要性:

3数排序=》n数排序

重复的操作步骤:

循环结构、归纳思维。

循环思路的来源:

归纳

程序设计方法:

先定框架,后写语句。

共同例子:

计算1+2+....+100

例子之后的扩展:

计算1+3+5+....+99

计算1*2*....*10

3.4.1goto语句及语句标号

循环技术重点之一:

循环框架。

条件在前的框架

voidmain()

{inti=1;sum=0;

loop:

if(i<=100)

{sum=sum+i;i++;

gotoloop;

}

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

}

条件在后的框架

voidmain()

{inti=1;sum=0;

loop:

sum=sum+i;i++;

if(i<=100)

gotoloop;

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

}

循环技术重点之二:

循环变量及相关变量的变化。

循环变量

循环变量的增量

部分和

部分积

I

i++

i=i+2

sum=0

sum+=……

sum=1

sum*=……

循环技术重点之三:

结束的条件。

因循环变量结束循环

if(i<=100)

gotoloop;

因其他变量结束循环

if(sum>=100)

gotoloop;

3.4.2while语句框架

voidmain()

{inti=1,sum=0;

while(i<=100)

{sum=sum+i;

i++;

}

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

}

尝试其他运算的循环,理解循环的结果。

各式各样的while循环:

voidmain()

{inti=1,sum=0;

while(i<=100)

sum=sum+i++;

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

}

voidmain()

{inti=1,sum=0;

while(sum=sum+i,i++<=100);

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

}

3.4.3for语句框架

for(i=1,sum=0;i<=100;i++)sum+=i;

执行次序:

①②④③

初始化条件循环变量循环体

voidmain()

{inti,sum;

for(i=1,sum=0;i<100;i++)

sum+=i;

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

}

各式各样的for循环:

voidmain()

{inti=1,sum=0;

for(;i<100;i++)

sum+=i;

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

}

voidmain()

{inti=1,sum=0;

for(;i<100;)

sum+=i++;

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

}

示例:

代码意义?

voidmain()

{charc;

for(;(c=getchar())!

='\n';)

putchar(c);

}

3.4.4do…while语句框架

inti=1,sum=0;

voidmain()

{inti=1,sum=0;

do

{sum+=i;

i++;

}while(i<=100);

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

}

各式各样的do…while循环:

voidmain()

{inti=1,sum=0;

do

sum+=i++;

while(i<=100);

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

}

voidmain()

{inti=1,sum=0;

do

{sum+=i;

i++;

}while((sum+=i,i++)<100);

printf("%d,%d\n",i,summ);

}

3.4.5小结

功能上可相互替代。

选择依据:

对于某个问题,哪种形式更加逻辑清晰。

3.4.6转向语句

break

直接跳出循环体。

continue

立即终止本次循环,开始下次循环。

程序测试:

使用break实现1+2+……+100

voidmain()

{inti=1,sum=0;

for(;;)/*while

(1)*/

{sum+=i++;

if(i>100)break;

}

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

}

程序测试:

使用break实现更多探索性的任务

voidmain()

{inti=1,sum=0;

for(;;)

{sum+=i++;

if(sum>1000)break;

}

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

}

程序测试:

使用continue

voidmain()

{inti=1,sum=0;

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

{if(i%3==0)continue;

sum+=i;

}

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

}

练习:

以下程序的输出是什么?

voidmain()

{inti,j,a=0;

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

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

{if(j%2==1)

break;//continue;

a++;

}

a++;

}

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

}

3.5程序设计举例

例1、字符分类统计。

从键盘输入的一组字符中,统计出大写字符的个数和小写字符的个数。

voidmain()

{intm=0,n=0;

charc;

while((c=getchar())!

='\n')

{if(c>='A'&&c<='Z')m++;

if(c>='a'&&c<='z')n++;

}

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

}

例2、分解整数。

计算一个整数的各位数字之和。

voidmain()

{intn,m=1;

scanf("%d",n);

while(n!

=0)

{m+=n%10;

n/=10;

}

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

}

思考:

判断回文数。

例3、分解因子。

打印一个整数的所有因子。

voidmain()

{intnum,i;

scanf("%d",&num);

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

if(num%i==0)

printf("%d,",i);

}

例4、判断素数。

判断一个整数是否是素数。

#include

voidmain()

{intnum,i,sqrt_num;

scanf("%d",&num);

sqrt_num=sqrt(num);

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

if(num%i==0)break;

if(i>sqrt_num)

printf("%disPrime\n",num);

else

printf("%disnotPrime\n",num);

}

思考:

打印100…200之间所有的素数。

例5、计算数列之和。

已知

,求π值?

voidmain()

{floatpi=0,tmp=1;

inti,s=1;

for(i=1;tmp>1e-6;i=i+2)

{tmp=1./i;

pi=pi+s*tmp;

s=-s;

}

pi=4*pi;

printf("pi=%f\n",pi);

}

例6、计算数列之和。

用迭代法

,迭代公式:

,迭代精度为

#include"math.h"

main()

{floata=5;

floatx1=a,x2;

while

(1)

{x2=(x1+a/x1)/2;

if(fabs(x1-x2)<1e-6)break;

x1=x2;

}

printf("x=%f\n",x2);

}

例7、计算、打印Fibonacci数列的前20项

1,1,2,3,5,8,13,21,……

voidmain()

{inta=1,b=1;

for(i=3;i<20;i++)

{c=a+b;

printf("%d,",c);

a=b;b=c;

}

}

例8、计算数列之和。

计算

前20项的和?

每一项由前二项决定=》变量a1,a2,b1,b2

voidmain()

{inti,a1,a2,b1,b2,tmp;

floatsum=0.0;

a1=2;a2=3;

b1=1;b2=2;

sum=sum+(float)a1/b1+(float)a2/b2;

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

{tmp=a2;a2=a1+a2;a1=tmp;

tmp=b2;b2=b1+b2;b1=tmp;

sum=sum+(float)a2/b2;/*注意(float)*/

}

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

}

例9、求最大公约数

欧几里德的算法:

(a,b)=(b,a%b)

voidmain()

{inta,b,tmp;

a=177*13;b=177*15;

if(a

{tmp=a;a=b;b=tmp;}

while(a%b!

=0)

{a=a%b;

tmp=a;a=b;b=tmp;

}

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

}

思考:

分数的计算。

3.6嵌套循环的程序举例

例2、求100~200间的所有素数

判断数i是否是素数:

内循环。

#include

voidmain()

{intnum,i,sqrt_num;

for(num=101;num<=200;num+=2)

{sqrt_num=sqrt(num);

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

if(num%i==0)break;

if(i>sqrt_num)

printf("%d,",num);

}

}

每行打印5个素数

voidmain()

{intnum,i,sqrt_num,n_line=0;

for(num=101;num<=200;num+=2)

{sqrt_num=sqrt(num);

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

if(num%i==0)break;

if(i>sqrt_num)

{printf("%d,",num);n_line++;

if(n_line%5==0)printf("\n");

}

}

}

例3、打印图形

*

***

*****

*******

*****

***

*

*

**

**

**

**

**

*

第i行:

空格数?

星号数?

voidmain()

{intline,i,j;

scanf("%d",&line);

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

{for(j=1;j<=line-i+1;j++)printf("");

for(j=1;j<=2*i-1;j++)printf("*");

printf("\n");

}

for(i=line;i>=1;i--)

{for(j=1;j<=line-i+1;j++)printf("");

for(j=1;j<=2*i-1;j++)printf("*");

printf("\n");

}

}

例4、打印图形

**

******

**********

**************

*****************

*********************

空格数

星号数

空格数

星号数

第1行

5

1

10

1

第2行

4

3

8

3

...

...

...

...

...

第6行

0

11

0

11

第i行

6-i

2*i-1

2*(6-i)

2*i-1

N-i

2*i-1

2*(N-i)

2*i-1

#defineN6

main()

{inti,j;

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

{for(j=1;j<=N-i;j++)printf("");

for(j=1;j<=2*i-1;j++)printf("*");

for(j=1;j<=2*(N-i);j++)printf("");

for(j=1;j<=2*i-1;j++)printf("*");

}

}

例5、计算数列之和。

计算

使用双层循环,内循环用于计算

voidmain()

{doublee=1,e1;

inti,j;

for(i=1;;i++)

{e1=1;

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

e1=e1/j;

e+=e1;

if(fabs(e1)<1e-5)break;

}

printf("e=%f\n",e);

}

改进版本:

只用一层循环。

voidmain()

{doublee=1,e1;

inti,j;

e1=1;

for(i=1;;i++)

{e1=e1/i;

e+=e1;

if(fabs(e1)<1e-5)break;

}

printf("e=%f\n",e);

}

练习:

计算

3.7对程序结构的简化

例1、分支结构的简化

原结构

简化结构

if(A)

if(B)

if(C)e1;

else;

else;

else

if(B)

if(C)e2;

elsee3;

else;

if(B)

{if(A&&C)e1;

if(!

A&&C)e2;

if(!

A&&!

C)e3;

}

例2、循环结构的简化

原结构

简化结构

while(A)

{if(B)continue;

C;

}

while(A)

if(!

B)C;

例3、循环结构的简化

原结构

简化结构

do

{if(!

A)continue;

elseB;

C;

}while(A);

while(A);

{B;

C;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2