信息学奥赛培训课件 第4课 c++基础语法for循环结构(第一课时)_第1页
信息学奥赛培训课件 第4课 c++基础语法for循环结构(第一课时)_第2页
信息学奥赛培训课件 第4课 c++基础语法for循环结构(第一课时)_第3页
信息学奥赛培训课件 第4课 c++基础语法for循环结构(第一课时)_第4页
信息学奥赛培训课件 第4课 c++基础语法for循环结构(第一课时)_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

顺序选择循环结构化程序例

考虑如何输出1—50的整数?循环结构-FOR三for(表达式A;表达式B;表达式C)

循环语句D;for(循环变量赋初值;循环条件;循环变量增值)

{

循环体语句1;

循环体语句2;

……

}

for(inti=1;i<=50;i++)

printf(“%d“,i);循环体D判断表达式B求表达式C求表达式A真假ABDCBDCBDC………………B循环次数可定,for循环又可以叫计数循环!说明:

(1)循环体部分由多个语句构成,应由一对花括号括起来,只有一句语句时不需要花括号{}。

(2)构成一个语句块的形式程序风格提示:写for循环语句时,循环体的语句相对于for缩进。

(3)3个表达式可以省略(或省略某个或省略某两个)。写成for(;;)。表达式3可以作为循环体的一部分,效果一样。

(4)表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式(包含一个以上的表达式,中间用逗号隔开);也可以有与循环控制变量无关的表达式。#include<cstdio>intmain(){for(

inti=1;i<=50;i++)

printf(“%d“,i);

return0;}这个程序你看懂了吗?有没有疑问?例

说一说?for(i=1;i<=100;++i)for(i=100;i>=1;--i)for(i=7;i<=77;i+=7)for(i=20;i>=2;i-=2)将控制变量从1变到100,增量为1将控制变量从100变到1,增量为-1控制变量从7变到77,增量为7控制变量从20变到2,增量为-2for(inti=1,j=2;i<=99&&j<=100;i+=2,j+=2)按所示数列改变控制变量值:99、88、77、66、55、44、33、22、11、0,增量为-11for(intj=99;j>=0;j-=11)控制变量i和j共同进行循环控制,i从1变到99,j从2变到100,增量均为2。利用for循环,计算输出1+2+…+100的值。问题分析:单纯的100个数相加问题。操作数在变,而操作符“+”不变。算法设计:第一个数是1,最后一个是100,循环次数为100次。说明:放算术和的变量必须初始化为0;放算术积的变量必须初始化为1。例1求s=1+2+…+100的值的多种方法利用for循环,分别计算1—100中奇数的和、偶数的和。例2我们也可以在for循环初始化或增值表达式部分中放一条以上的语句,中间用逗号隔开。问题分析:字母顺序为abc…xyz,逆序为zyx…cba。算法设计:循环变量为字符型,顺序循环变量从’a’到’z’每次加1;逆序循环变量从’z’到’a’,每次减1。例3编写程序,按字母的顺序和逆序输出字母。求10个数中的最大值和最小值。问题分析:在n个数中寻找最大数和最小数的问题。算法设计:放最大值和最小值的变量在未赋值之前的值是什么是不确定的,一般给其赋初值有两种方法:第一种是用常量定义一个足够大的数,这个数最起码远远大于本程序中用到的数。例如:0x7fffffff。第二种是把本程序中第一个数赋给最大值和最小值作为初值,再拿着其它数与之比较,从而找出最大值和最小值。本程序这是用了这种方法。例4利用for循环计算n!的值。问题分析:n!=1*2*3…*n提示:注意数据溢出!例5如果记不住数值范围,怎么办?如何printf输出longlong数据?说明:1、n不能定义为longlong,否则for语句死循环。2、当n>13时,s值超过了int类型的表示范围。3、放n!的变量s为longlong时,最多到20的阶乘,再往后为负数。4、输入输出longlong也可以借助于printf和scanf语句,但对应的占位符却是和平台与编译器相关的:在linux和win64中,用%lld;在windows32中用%I64d。考试时longlong使用%lld还是%I64d,试卷上都会有说明。Printf函数:longlongint输出格式符scanf("%lld",&a);printf("%lld",a);longlonga;cin>>a;cout<<a;scanf("%I64d",&a);printf("%I64d",a);scanf(ll,&a);printf(ll,a);Win32系统下:%I64dWin64、Linux等系统下:%lld//条件编译#ifdefWIN32#defineLL“%I64d”#else#defineLL“%lld”#endif1、求整数的和与均值读入:n(1<=n<=10000)个整数,求它们的和与均值。训练输入:输入第一行是一个整数n,表示有n个整数。第2~n+1行每行包含1个整数。每个整数的绝对值均不超过10000。输出:输出一行,先输出和,再输出平均值(保留到小数点后5位),两个数间用单个空格分隔。样例输入:4344222343222样例输出:1131282.750002、判断一个正整数n是否是素数(质数),所谓素数就是指除了1和它本身之外没有其他约数的数。问题分析:我们可检查从2到n-1之间的数,判断这些数有无n的约数,如果找到一个n的约数,则说明n不是素数;如果没有找到n的约数,则说明n是素数。标识变量(标签):在判断开始时假设n就是素数,标识变量ans=1;然后检查2——n-1间的所有数,如果发现某个数i为n的约数,则ans=0;最后根据ans的取值来得出结论训练判断素数优化1

判断一个数是否为素数,我们从2开始,找i的第一个约数,若找到第一个约数,则i必然不是素数。从2开始找,找到什么时候结束呢?有没有必要找到i-1呢?一直找到i/2是否可以?对于任意整数i,根据素数定义,我们从2开始,到sqrt(i),找i的约数,若找到一个约数,则i必然不是素数。判断素数优化2

还可以怎么优化?三个程序中断语句breakcontinuereturnbreak

continue

return

判断素数优化3

还可以怎么优化?样例输入:19样例输出:4181训练3:菲波那契数菲波那契数列是指这样的数列:数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数k,要求菲波那契数列中第k个数是多少。输入:输入一行,包含一个正整数k。(1<=k<=46)输出:输出一行,包含一个正整数,表示菲波那契数列中第k个数的大小。样例输入:2样例输出:3.5000训练4:求分数序列和【1.5编程基础之循环控制29】有一个分数序列q1/p1,q2/p2,q3/p3,q4/p4,q5/p5,...,其中

qi+1=qi+pi,pi+1=qi,p1=1,q1=2。比如这个序列前6项分别是2/1,3/2,5/3,8/5,13/8,21/13。求这个分数序列的前n项之和。输入:输入有一行,包含一个正整数

n(n<=30)输出:输出有一行,包含一个浮点数,表示分数序列前n项的和,精确到小数点后4位。例输出1—1000内能同时被3、5、7同时整除的数循环结构的嵌套1:For循环嵌套if语句样例输入:715样例输出:55

训练1:奇数求和计算非负整数m到n(包括m和n)之间的所有奇数的和,其中,m不大于n,且n不大于300。例如m=3,n=12,其和则为:3+5+7+9+11=35。输入:两个数m和n,两个数以一个空格分开,其中0<=m<=n<=300。输出:输出一行,包含一个整数,表示m到n(包括m和n)之间的所有奇数的和。样例输入:6308759样例输出:9训练2:最大跨度值给定一个长度为n的非负整数序列,请计算序列的最大跨度值(最大跨度值=最大值减去最小值)。输入:一共2行,第一行为序列的个数n(1<=n<=1000),第二行为序列的n个不超过1000的非负整数,整数之间以一个空格分隔。输出:输出一行,表示序列的最大跨度值。循环结构的嵌套2:For循环嵌套For循环求S=1!+2!+3!+....+10!例S=1!+2!+3!+....+10!优化版

说明:以上程序是一个for循环的嵌套。这种方法是比较容易想到的,但实际上对于求i!,我们可以根据求出的(i-1)!乘上i即可得到,而无需重新从1再累乘到i。说明:显然第二个程序的效率要比第一个高得多。第一个程序要进行1+2+3+…+10=55次循环,而第二程序进行10次循环。若题目中求的是1!+2!+…+1000!,则两个程序的效率区别更明显。训练3:输出100-200之间所有的素数4:利用for循环语句输出下图中的三角形。训练5:求100-999中的水仙花数。若三位数ABC,ABC=A3+B3+C3,则称ABC为水仙花数。例如153,13+53+33=1+125+27=153,则153是水仙花数。问题分析:根据题意,采用三重循环来求解。

算法设计:由于循环次数一定,用for循环最为简单说明:思考哪种方法更优?训练6:打印九九乘法表。训练样例输入:10样例输出:2.7182818011训练7:求出e的值利用公式e=1+1/1!+1/2!+1/3!+...+1/n!,求e的值,要求保留小数点后10位。输入:输入只有一行,该行包含一个整数n(2<=n<=15),表示计算e时累加到1/n!。输出:输出只有一行,该行包含计算出来的e的值,要求打印小数点后10位。样例输入:77@0样例输出:训练8:根据参数,画矩形【1.5编程基础之循环控制37】输入:输入一行,包括四个参数:前两个参数为整数,依次代表矩形的高和宽(高不少于3行不多于10行,宽不少于5列不多于10列);第三个参数是一个字符,表示用来画图的矩形符号;第四个参数为1或0,0代表空心,1代表实心。输出:输出画出的图形。训练9:统计满足条件的4位数给定若干个四位数,求出其中满足以下条件的数的个数:个位上的数字减去千位上的数字,再减去百位上的数字,再减去十位上的数字的结果大于零。【输入】两行,第1行为四位数的个数n(n<=100),第2行为n个四位数【输出】一行,包含一个整数,表示满足条件的四位数的个数【样例输入】【样例输出】5312341349611921235017训练10:幂的末尾幂ab的末3位数是多少?【输入】

两个正整数a,b(1<=a<=100,1<=b<=10000)。【输出】

从高位到低位输出幂的末三位数字,中间无分隔符。

若幂本身不足三位,在前面补零。【样例输入】【样例输出】

72011743P1085不高兴的津津题目描述津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。训练输入格式:输入包括7行数据,分别表示周一到周日的日程安排。每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。输出格式:一个数字。如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。P1534不高兴的津津(升级版)题目描述津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每天妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。这次与NOIp2004普及组第一题不同的是:假设津津不会因为其它事不高兴,但是她的不高兴会(当然高兴也会)持续到第二天。请你帮忙检查一下津津以后n天的日程安排,看看以后n天她会不会不高兴(计算方法:用昨天不高兴程度加上今天上课总时间减去8后得到的数作为今天不高兴程度);输出以后n天结束后不高兴程度和是多少。训练输入格式:第1行:一个数n第2行~第n+1行:每行两个数,表示这天上学时间和课外补习班时间输出格式:一个数,这n天过后的不高兴程度和P1089津津的储蓄计划题目描述津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论