C语言阶段性知识点总结4.docx

上传人:b****5 文档编号:8237850 上传时间:2023-01-30 格式:DOCX 页数:13 大小:41.93KB
下载 相关 举报
C语言阶段性知识点总结4.docx_第1页
第1页 / 共13页
C语言阶段性知识点总结4.docx_第2页
第2页 / 共13页
C语言阶段性知识点总结4.docx_第3页
第3页 / 共13页
C语言阶段性知识点总结4.docx_第4页
第4页 / 共13页
C语言阶段性知识点总结4.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

C语言阶段性知识点总结4.docx

《C语言阶段性知识点总结4.docx》由会员分享,可在线阅读,更多相关《C语言阶段性知识点总结4.docx(13页珍藏版)》请在冰豆网上搜索。

C语言阶段性知识点总结4.docx

C语言阶段性知识点总结4

石家庄市求实电脑职业培训学校

全国计算机等级考试二级C语言程序设计

阶段性知识点总结(4)

知识点范围:

第五章

第五章循环结构

根据条件的成立与否,某些语句被执行多次的结构被称为“循环结构”

知识点1while当型循环的使用方法:

【教程第50页~55页】

1、格式1:

前测试当型循环。

while(条件)

{循环体;

}

2、格式2:

后测试当型循环。

do

{循环体;

}while(条件);

3、【累加器】计算1+2+3+……+100的结果。

变量

初值

……

退出

i

0

1

2

3

......

99

100

101

sum

0

=0+0+1+2+3+……+99+100

inti=0,sum=0;

while(i<=100)

{sum=sum+i;

i++;

}

printf(“sum=%d\n”,sum);

可将程序变为:

变量

初值

……

退出

i

2

3

4

5

......

99

100

101

sum

1

=1+2+3+4+5+……+99+100

inti=2,sum=1;

while(i<=100)

{sum=sum+i;

i++;

}

printf(“sum=%d\n”,sum);

4、【连乘器】计算1*2*3*……*10的结果。

inti=2;

doubles=1;

while(i<=10)

{s=s*i;

i++;

}

printf(“s=%lf\n”,s);

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

知识点2for计数循环的使用方法【教程第55页~57页】

一、格式:

for(表达式1;表达式2;表达式3)

{循环体;

}

执行流程:

(1)计算表达式1;

(2)计算表达式2,看表达式2是否成立。

成立(表达式2结果为非0),转向执行(3)。

不成立(表达式2结果为0),转向执行(5)。

(3)执行循环体。

(4)计算表达式3,并转向执行

(2)。

(5)退出循环,执行for循环以下的句子。

二、利用for循环实现累加器:

inti,sum=0;

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

sum=sum+i;

printf(“sum=%d\n”,sum);

分析:

1、for循环一般需要一个循环变量(例如:

i)。

2、表达式1决定了循环变量的初值。

3、表达式2决定了循环变量的终值。

4、表达式3决定了循环变量的步长。

根据循环头分析循环体的执行次数:

for(i=1;i<=10;i++)循环体执行次数:

10次。

for(i=0;i<=10;i++)循环体执行次数:

11次。

for(i=1;i<10;i++)循环体执行次数:

9次。

for(i=1;i<=10;i+=2)循环体执行次数:

5次。

结论:

循环体执行次数=

(1)初值<终值,则步长>0。

(2)初值<终值,则步长<0。

三、实例1:

输出所有的水仙花数。

【各个位的立方和等于本身的三位数】

问题1:

如何表示三个数字的立方和。

方法1:

a*a*a+b*b*b+c*c*c

方法2:

利用math.h(数学头文件)所含有的库函数。

abs(x),返回整型数据x的绝对值。

fabs(x),返回实型数据x的绝对值。

sqrt(x),返回x的算术平方根。

pow(x,y),返回x的y次方。

exp(x),返回自然对数底e的x次方。

问题2:

如何表示三位数的各个位。

设三位数为i,则:

个位:

i%10

十位:

i/10%10

百位:

i/100

#include

#include

main()

{inti;

intgw,sw,bw;

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

{gw=i%10;

sw=i/10%10;

bw=i/100;

if(pow(gw,3)+pow(sw,3)+pow(bw,3)==i)

printf(“%d\t”,i);

}

}

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

知识点3分析利用for循环实现的累加器程序。

inti,sum=0;

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

sum=sum+i;

printf(“sum=%d\n”,sum);

1、for循环的三个表达式中,表达式1只执行了1次;表达式3的执行次数与循环体相同。

2、依据上述分析,表达式1可以删除,放在for循环以外;表达式3可以删

除,放在循环体以内。

但是分号不能少。

inti=0,sum=0;

for(;i<=100;)

{sum=sum+i;

i++;

}

printf(“sum=%d\n”,sum);

将分号删除的同时把for换为while,程序与利用while实现的累加器完全相同。

说明for循环和while循环是可以互相转换的。

3、表达式2也可以删除,需要借助break形成非正常化出口。

inti=0,sum=0;

for(;;)

{sum=sum+i;

i++;

if(i>100)break;

}

printf(“sum=%d\n”,sum);

4、结论:

break只可以用于swithc体和循环体,在循环体中的功能为退出循环体,执行循环以下的语句。

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

知识点4素数问题。

【质数:

只能被1和它本身整除的数】

一、输出100以内的所有素数:

inti;

printf(“1\t2\t3\t5\t7\t”);

for(i=11;i<=97;i+=2)

if(i%3!

=0&&i%5!

=0&&i%7!

=0)printf(“%d\t”,i);

注意:

该种方法只适用于计算100以内的素数。

二、通用算法:

1、让任意数字x与2、3、4、……,

相除,若余数均不为0,则x为素数。

2、让任意数字x与2、3、4、……,

相除,若余数均不为0,则x为素数。

【算法1】利用循环终值判断循环是否正常退出。

#include

#include

main()

{intx,i;

printf(“请输入一个整数:

”);

scanf(“%d”,&x);

for(i=2;i<=sqrt(x);i++)

if(x%i==0)break;

if(i<=sqrt(x))

printf(“Yes\n”);

else

printf(“No\n”);

}

【算法2】利用标志变量判断循环是否正常退出。

#include

#include

main()

{intx,i,f=0;

printf(“请输入一个整数:

”);

scanf(“%d”,&x);

for(i=2;i<=sqrt(x);i++)

if(x%i==0)

{f=1;

break;

}

if(f==0)

printf(“Yes\n”);

else

printf(“No\n”);

}

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

 

知识点5斐波那契数列问题。

数列:

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

数列特征:

数列中任意数为相邻前两数之和。

分析:

在已知规律的情况下,至少知道前两个数,数列才可以依次排开。

intf1=1,f2=1,f;

f=f1+f2;

f1=f2;

f2=f;

【题型1】输出该数列的前20项,每五项一行。

#include

main()

{intf1=1,f2=1,f;

inti=3;

printf(“%d\t%d\t”,f1,f2);

while(i<=20)

{f=f1+f2;

f1=f2;

f2=f;

printf(“%d\t”,f);

if(i%5==0)printf(“\n”);

i++;

}

}

【题型2】输出该数列的第20项。

#include

main()

{intf1=1,f2=1,f;

inti=3;

while(i<=20)

{f=f1+f2;

f1=f2;

f2=f;

i++;

}

printf(“fib(20)=%d”,f);

}

【题型3】计算该数列前20项的和。

#include

main()

{intf1=1,f2=1,f;

inti=3,sum=f1+f2;

while(i<=20)

{f=f1+f2;

sum=sum+f;

f1=f2;

f2=f;

i++;

}

printf(“fsum(20)=%d”,sum);

}

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

知识点6循环嵌套的使用。

*****

*****

*****

*****

【例题1】完成利用星号构成的矩形的输出。

inti,j;

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

{for(j=1;j<=5;j++)

printf(“*”);

printf(“\n”);

}

【例题2】完成利用星号构成的直角三角形的输出。

*

**

***

****

*****

inti,j;

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

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

printf(“*”);

printf(“\n”);

}

结论:

利用循环嵌套实现特殊形状的输出,外层循环控制行(外行),内存循环控制列(内列)。

【例题3】完成利用星号构成的平行四边形的输出。

****

****

****

****

分析:

1—3s—4*

2—2s—4*

3—1s—4*

4—0s—4*

inti,j;

for(i=3;i>=0;i--)

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

printf(“”);

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

printf(“*”);

printf(“\n”);

}

【例题4】完成利用星号构成的等腰三角形的输出。

*

***

*****

*******

分析:

1—3s—1*

2—2s—3*

3—1s—5*

4—0s—7*

解法1:

已知行数和空格个数与星号个数之间的对应关系。

inti,j;

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

{for(j=1;j<=4-i;j++)

printf(“”);

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

printf(“*”);

printf(“\n”);

}

解法2:

找不到对应的关系。

inti,j;

intt=1;

for(i=3;i>=0;i--)

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

printf(“”);

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

printf(“*”);

*

***

*****

*******

*****

***

*

t+=2;

printf(“\n”);

}

【例题5】完成利用星号构成的菱形的输出。

#include

main()

{inti,j;

ints=1,t=5;

for(i=3;i>=0;i--)

{for(j=1;j<=i;j++)printf(“”);

for(j=1;j<=s;j++)printf(“*”);

s+=2;

printf(“\n”);

}

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

{for(j=1;j<=i;j++)printf(“”);

for(j=1;j<=t;j++)printf(“*”);

t-=2;

printf(“\n”);

}

}

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

知识点7continue的使用。

一、continue的作用:

退出本次循环,执行下一次循环。

当continue用于

for循环体内时,需要先计算表达式3,再执行下一次循环。

二、利用continue实现素数问题。

#include

#include

main()

{intx,i,f=0;

printf(“请输入一个整数:

”);

scanf(“%d”,&x);

for(i=2;i<=sqrt(x);i++)

if(x%i!

=0)

continue;

else

{f=1;

break;

}

if(f==0)

printf(“Yes\n”);

else

printf(“No\n”);

}

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

知识点8闰年问题。

1、判断一年是否为闰年的算法:

(1)公元年数如能被4整除,而不能被100整除,则是闰年。

(2)公元年数能被400整除也是闰年。

2、程序:

#include

main()

{intyear,i=0;

for(year=2000;year<=3000;year++)

{if(year%4==0&&year%100!

=0)

{printf(“%d,”,year);

i++;

}

if(year%400==0)

{printf(“%d,”,year);

i++;

}

if(i%10==0)printf(“\n”);

}

}

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

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1