第4章循环结构C版

上传人:cel****460 文档编号:240440796 上传时间:2024-04-10 格式:PPTX 页数:81 大小:983.42KB
返回 下载 相关 举报
第4章循环结构C版_第1页
第1页 / 共81页
第4章循环结构C版_第2页
第2页 / 共81页
第4章循环结构C版_第3页
第3页 / 共81页
点击查看更多>>
资源描述
第4章循环结构C版第1页,共81页。第一节 for语句一、语句格式一、语句格式格式1说明:语句1是for循环语句的循环体,它将在满足条件的情况下被重复执行。格式2说明:循环体局部由多个语句构成,应由一对花括号括起来,构成一个语句块的形式程序风格提示:写for循环语句时,循环体的语句相对于for缩进两格。第2页,共81页。第一节 for语句二、语句执行过程for语句的执行过程可由以下4步来描述。(1)执行“控制变量初始化语句,使控制变量获得一个初值。(2)判断控制变量是否满足“条件表达式,假设满足条件那么执行一遍循环体,否那么完毕整个for语句,继续执行for循环下面的句子。(3)根据增量表达式,计算出控制变量所得到的新值(4)自动转到第2步。第3页,共81页。第一节 for语句三、语句格式举例三、语句格式举例 (1)(1)将控制变量从将控制变量从1 1变到变到100100,增量为,增量为1 1 for(i=1;i=100;+i)for(i=1;i=1;-i)for(i=100;i=1;-i)(3)(3)控制变量从控制变量从7 7变到变到7777,增量为,增量为7 7 for(i=7;i=77;i+=7)for(i=7;i=2 for(int i=20;i=2;i-=2)i-=2)(5)(5)按所示数列改变控制变量值:按所示数列改变控制变量值:9999、8888、7777、6666、5555、4444、3333、2222、1111、0 0,增量为,增量为-11-11 for(int j=99;j=0;j-=11)for(int j=99;j=0;j-=11)(6)(6)控制变量控制变量i i和和j j共同进展循环控制,共同进展循环控制,i i从从1 1变到变到9999,j j从从2 2变到变到100100,增量均为,增量均为2 2。for forint i=1,j=2;i=99&j=100int i=1,j=2;i=99&j=100;i+=2,j+=2i+=2,j+=2需要说明的是:可以在需要说明的是:可以在forfor循环循环“控制变量初始化语句中声明变量如上面最后控制变量初始化语句中声明变量如上面最后3 3个例子,这些变量只在个例子,这些变量只在forfor循环构循环构造中有效,离开了该造中有效,离开了该forfor构造,变量就无效了。构造,变量就无效了。第4页,共81页。第一节 for语句例例4.1 4.1 输出输出11001100之间所有偶数。之间所有偶数。#include#include using namespace std;using namespace std;int main()int main()for(int i=2;i=100;i+=2)for(int i=2;i=100;i+=2)cout i ;cout i ;return 0;return 0;例例 利用利用forfor循环循环,计算输出计算输出1+2+1001+2+100的和的和#include#include using namespace std;using namespace std;int main()int main()int sum=0;int sum=0;for(int i=1;i=100;+i)for(int i=1;i=100;+i)sum+=i;sum+=i;cout sum;cout sum;return 0;return 0;第5页,共81页。第一节 for语句例例4.3 4.3 利用利用forfor循环计算循环计算n n!的值。!的值。分析:分析:n n!1*2*3*n1*2*3*n#include#include using namespace std;using namespace std;int main()int main()long long s;/Noip2021 long long s;/Noip2021 开场开场C+C+语言中语言中long longlong long类型允许使用类型允许使用 int n;/n int n;/n 不能定义为不能定义为long longlong long,否那么,否那么forfor语句死循环语句死循环 s=1;s=1;scanf(%d,&n);scanf(%d,&n);for(int i=1;i=n;+i)/for(int i=1;i=13n=13时,时,s s值超过了值超过了intint类型的表示范围。还有一种比类型的表示范围。还有一种比intint更大的类型,称为更大的类型,称为long longlong long,它的表示范围是,它的表示范围是-263-263263-1263-1,比,比-1019-101910191019略窄,而我们一直使用的略窄,而我们一直使用的intint范围是范围是-231-231231-1,231-1,只比只比-2*109-2*1092*1092*109略宽。略宽。输入输出输入输出long longlong long也可以借助于也可以借助于printfprintf和和scanfscanf语句,但对应的占位符却是和平台与编译器相关的:在语句,但对应的占位符却是和平台与编译器相关的:在linuxlinux中,中,gccgcc很统一的用很统一的用%lld%lld;在;在windowswindows中,中,MinGWMinGW的的gccgcc和和VC6VC6可用可用%I64d%I64d;高版本编译器下;高版本编译器下windowswindows可以使用可以使用%lld%lld。第6页,共81页。第一节 for语句 利用利用forfor循环循环,分别计算分别计算11001100中奇数的和、偶数的和。中奇数的和、偶数的和。#include#include using namespace std;using namespace std;int main()int main()int jssum=0;int jssum=0;int ossum=0;int ossum=0;for(int js=1,os=2;js=99&os=100;js+=2,os+=2)for(int js=1,os=2;js=99&os=100;js+=2,os+=2)jssum+=js;jssum+=js;ossum+=os;ossum+=os;cout the sum of odd numbers 1 to 100 is:jssumendl;cout the sum of odd numbers 1 to 100 is:jssumendl;cout the sum of even numbers 1 to 100 is:ossumendl;cout the sum of even numbers 1 to 100 is:ossumendl;return 0;return 0;说明:说明:我们也可以在我们也可以在forfor循环初始化或增值表达式局部中放一条以上的语句,中间用逗号隔开。循环初始化或增值表达式局部中放一条以上的语句,中间用逗号隔开。第7页,共81页。【上机练习】1.求平均年龄【求平均年龄【1.5编程根底之循环控制编程根底之循环控制01】班上有学生假设干名,给出每名学生的年龄整数,求班上所有学生的平均年龄,保班上有学生假设干名,给出每名学生的年龄整数,求班上所有学生的平均年龄,保存到小数点后两位。存到小数点后两位。输入输入:第一行有一个整数第一行有一个整数n1=n=100,表示学生的人数。其后,表示学生的人数。其后n行每行有行每行有1个整数,表个整数,表示每个学生的年龄,取值为示每个学生的年龄,取值为15到到25。输出输出:输出一行,该行包含一个浮点数,为要求的平均年龄,保存到小数点后两位。输出一行,该行包含一个浮点数,为要求的平均年龄,保存到小数点后两位。样例输入样例输入:2 18 17样例输出样例输出:17.50第8页,共81页。【上机练习】2.均值【均值【1.5编程根底之循环控制编程根底之循环控制02】给出一组样本数据,包含给出一组样本数据,包含n个浮点数,计算其均值,准确到小数点后个浮点数,计算其均值,准确到小数点后4位。位。输入输入:输入有两行,第一行包含一个整数输入有两行,第一行包含一个整数nn小于小于100,代表样本容量;第二行包含,代表样本容量;第二行包含n个绝个绝对值不超过对值不超过1000的浮点数,代表各个样本数据。的浮点数,代表各个样本数据。输出输出:输出一行,包含一个浮点数,表示均值,准确到小数点后输出一行,包含一个浮点数,表示均值,准确到小数点后4位。位。样例输入样例输入:2样例输出样例输出:第9页,共81页。【上机练习】3.求整数的和与均值【求整数的和与均值【1.5编程根底之循环控制编程根底之循环控制03】读入读入n(1=n=10000)个整数,求它们的和与均值。个整数,求它们的和与均值。输入输入:输入第一行是一个整数输入第一行是一个整数n,表示有,表示有n个整数。个整数。第第2n+1行每行包含行每行包含1个整数。每个整数的绝对值均不超过个整数。每个整数的绝对值均不超过10000。输出输出:输出一行,先输出和,再输出平均值输出一行,先输出和,再输出平均值(保存到小数点后保存到小数点后5位位),两个数间用单个空格分隔。,两个数间用单个空格分隔。样例输入样例输入:4 344 222 343 222样例输出样例输出:第10页,共81页。【上机练习】4.最高的分数【最高的分数【1.5编程根底之循环控制编程根底之循环控制04】孙教师讲授的孙教师讲授的?计算概论计算概论?这门课期中考试刚刚完毕,他想知道考试中取得的最高分数。因为这门课期中考试刚刚完毕,他想知道考试中取得的最高分数。因为人数比较多,他觉得这件事情交给计算机来做比较方便。你能帮孙教师解决这个问题吗?人数比较多,他觉得这件事情交给计算机来做比较方便。你能帮孙教师解决这个问题吗?输入输入:输入两行,第一行为整数输入两行,第一行为整数n1=n 100,表示参加这次考试的人数,表示参加这次考试的人数.第二行是这第二行是这n个学生个学生的成绩,相邻两个数之间用单个空格隔开。所有成绩均为的成绩,相邻两个数之间用单个空格隔开。所有成绩均为0到到100之间的整数。之间的整数。输出输出:输出一个整数,即最高的成绩。输出一个整数,即最高的成绩。样例输入样例输入:5 85 78 90 99 60样例输出样例输出:99第11页,共81页。【上机练习】5.最大跨度值【最大跨度值【1.5编程根底之循环控制编程根底之循环控制05】给定一个长度为给定一个长度为n的非负整数序列,请计算序列的最大跨度值的非负整数序列,请计算序列的最大跨度值(最大跨度值最大跨度值=最大最大值减去最小值值减去最小值)。输入输入:一共一共2行,第一行为序列的个数行,第一行为序列的个数n1=n=1000),第二行为序列的,第二行为序列的n个不超过个不超过1000的的非负整数,整数之间以一个空格分隔。非负整数,整数之间以一个空格分隔。输出输出:输出一行,表示序列的最大跨度值。输出一行,表示序列的最大跨度值。样例输入样例输入:6 3 0 8 7 5 9样例输出样例输出:9第12页,共81页。【上机练习】6.奥运奖牌计数【奥运奖牌计数【1.5编程根底之循环控制编程根底之循环控制06】2021年北京奥运会,年北京奥运会,A国的运发动参与了国的运发动参与了n天的决赛工程天的决赛工程(1n17)。现在要统计一下。现在要统计一下A国所获得的金、国所获得的金、银、铜牌数目及总奖牌数。输入第银、铜牌数目及总奖牌数。输入第1行是行是A国参与决赛工程的天数国参与决赛工程的天数n,其后,其后n行,每一行是该国某一天获行,每一行是该国某一天获得的金、银、铜牌数目。输出得的金、银、铜牌数目。输出4个整数,为个整数,为A国所获得的金、银、铜牌总数及总奖牌数。国所获得的金、银、铜牌总数及总奖牌数。输入输入:输入输入n1行,第行,第1行是行是A国参与决赛工程的天数国参与决赛工程的天数n,其后,其后n行,每一行是该国某一天获得的金、行,每一行是该国某一天获得的金、银、铜牌数目,以一个空格分开。银、铜牌数目,以一个空格分开。输出输出:输出输出1行,包括行,包括4个整数,为个整数,为A国所获得的金、银、铜牌总数及总奖牌数,以一个空格分开。国所获得的金、银、铜牌总数及总奖牌数,以一个空格分开。样例输入样例输入:3 1 0 3 3 1 0 0 3 0样例输出样例输出:4 4 3 11第13页,共81页。【上机练习】7.奇数求和【奇数求和【1.5编程根底之循环控制编程根底之循环控制07】计算非负整数计算非负整数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 之间的所有奇数的和之间的所有奇数的和样例输入样例输入:7 15样例输出样例输出:55第14页,共81页。【上机练习】8.满足条件的数【满足条件的数【1.5编程根底之循环控制编程根底之循环控制08】将正整数将正整数m和和n之间之间(包括包括m和和n)能被能被17整除的数累加,其中整除的数累加,其中0mn1000。输入输入:一行,包含两个整数一行,包含两个整数m和和n,其间,以一个空格间隔。,其间,以一个空格间隔。输出输出:输出一行,包行一个整数,表示累加的结果。输出一行,包行一个整数,表示累加的结果。样例输入样例输入:50 85样例输出样例输出:204第15页,共81页。【上机练习】9.整数的个数【整数的个数【1.5编程根底之循环控制编程根底之循环控制09】给定给定k(1k100)个正整数,其中每个数都是大于等于个正整数,其中每个数都是大于等于1,小于等于,小于等于10的数。写程序的数。写程序计算给定的计算给定的k个正整数中,个正整数中,1,5和和10出现的次数。出现的次数。输入输入:输入有两行:第一行包含一个正整数输入有两行:第一行包含一个正整数k,第二行包含,第二行包含k个正整数,每两个正整数用个正整数,每两个正整数用一个空格分开。一个空格分开。输出输出:输出有三行,第一行为输出有三行,第一行为1出现的次数,第二行为出现的次数,第二行为5出现的次数,第三行为出现的次数,第三行为10出现的次数。出现的次数。样例输入样例输入:5 1 5 8 10 5 样例输出样例输出;1 2 1第16页,共81页。【上机练习】10.与指定数字一样的数的个数【与指定数字一样的数的个数【1.5编程根底之循环控制编程根底之循环控制10】输出一个整数序列中与指定数字一样的数的个数。输入包含输出一个整数序列中与指定数字一样的数的个数。输入包含2行:第行:第1行为行为N和和m,表示整数序列的长,表示整数序列的长度度(N=100)和指定的数字;第和指定的数字;第2行为行为N个整数,整数之间以一个空格分开。输出为个整数,整数之间以一个空格分开。输出为N个数中与个数中与m一样的数一样的数的个数。的个数。输入输入:第第1行为行为N和和m,表示整数序列的长度,表示整数序列的长度(N=100)和指定的数字,和指定的数字,中间用一个空格分开;中间用一个空格分开;第第2行为行为N个整数,整数之间以一个空格分开。个整数,整数之间以一个空格分开。输出输出:输出为输出为N个数中与个数中与m一样的数的个数。一样的数的个数。样例输入样例输入:3 2 2 3 2样例输出样例输出:2第17页,共81页。【上机练习】11.乘方计算【乘方计算【1.5编程根底之循环控制编程根底之循环控制11】给出一个整数给出一个整数a和一个正整数和一个正整数n(-1000000=a=1000000,1=n=10000),求乘方,求乘方an,即乘方结果。最终结果的绝对值不超过,即乘方结果。最终结果的绝对值不超过1000000。输入输入:一行,包含两个整数一行,包含两个整数a和和n。-1000000=a=1000000,1=n=10000。输出输出:一个整数,即乘方结果。题目保证最终结果的绝对值不超过一个整数,即乘方结果。题目保证最终结果的绝对值不超过1000000。样例输入样例输入:2 3样例输出样例输出:8第18页,共81页。【上机练习】12.人口增长【人口增长【1.5编程根底之循环控制编程根底之循环控制12】我国现有我国现有x亿人口,按照每年亿人口,按照每年0.1%的增长速度,的增长速度,n年后将有多少人?保存小数点后四位。年后将有多少人?保存小数点后四位。输入输入:一行,包含两个整数一行,包含两个整数x和和n,分别是人口基数和年数,以单个空格分隔。,分别是人口基数和年数,以单个空格分隔。输出输出:输出最后的人口数,以亿为单位,保存到小数点后四位。输出最后的人口数,以亿为单位,保存到小数点后四位。1=x=100,1=n=100。样例输入样例输入:13 10样例输出样例输出:第19页,共81页。【上机练习】13.菲波那契数【菲波那契数【1.5编程根底之循环控制编程根底之循环控制13】菲波那契数列是指这样的数列菲波那契数列是指这样的数列:数列的第一个和第二个数都为数列的第一个和第二个数都为1,接下来每个数都,接下来每个数都等于前面等于前面2个数之和。给出一个正整数个数之和。给出一个正整数k,要求菲波那契数列中第,要求菲波那契数列中第k个数是多少。个数是多少。输入输入:输入一行,包含一个正整数输入一行,包含一个正整数k。1=k=46输出输出:输出一行,包含一个正整数,表示菲波那契数列中第输出一行,包含一个正整数,表示菲波那契数列中第k个数的大小个数的大小样例输入样例输入:19样例输出样例输出:4181第20页,共81页。【上机练习】14.鸡尾酒疗法【鸡尾酒疗法【1.5编程根底之循环控制编程根底之循环控制15】鸡尾酒疗法,指鸡尾酒疗法,指“高效抗逆转录病毒治疗。人们在鸡尾酒疗法的根底上又提出了很多种改进的疗法。高效抗逆转录病毒治疗。人们在鸡尾酒疗法的根底上又提出了很多种改进的疗法。为了验证这些治疗方法是否在疗效上比鸡尾酒疗法更好,可用通过临床对照实验的方式进展。假设鸡尾酒为了验证这些治疗方法是否在疗效上比鸡尾酒疗法更好,可用通过临床对照实验的方式进展。假设鸡尾酒疗法的有效率为疗法的有效率为x,新疗法的有效率为,新疗法的有效率为y,如果,如果y-x大于大于5%,那么效果更好,如果,那么效果更好,如果x-y大于大于5%,那么效果更,那么效果更差,否那么称为效果差不多。下面给出差,否那么称为效果差不多。下面给出n组临床对照实验,其中第一组采用鸡尾酒疗法,其他组临床对照实验,其中第一组采用鸡尾酒疗法,其他n-1组为各种组为各种不同的改进疗法。请写程序判定各种改进疗法效果如何。不同的改进疗法。请写程序判定各种改进疗法效果如何。输入:输入:第一行为整数第一行为整数n1n=20;其余;其余n行每行两个整数,第一个整数是临床实验的总病例数行每行两个整数,第一个整数是临床实验的总病例数(小于等于小于等于10000),第二个疗效有效的病例数。这,第二个疗效有效的病例数。这n行数据中,第一行为鸡尾酒疗法的数据,其余各行为各种改进疗法行数据中,第一行为鸡尾酒疗法的数据,其余各行为各种改进疗法的数据。的数据。输出:输出:有有n-1行输出,分别表示对应改进疗法的效果:如果效果更好,输出行输出,分别表示对应改进疗法的效果:如果效果更好,输出better;如果效果更差,输出;如果效果更差,输出worse;否那么输出;否那么输出same。样例输入样例输入:样例输出样例输出:5 same 125 99 worse 112 89 better 145 99 same 99 97 123 98 第21页,共81页。【上机练习】15.救援【救援【1.5编程根底之循环控制编程根底之循环控制16】救生船从大本营出发,营救假设干屋顶上的人回到大本营,屋顶数目以及每个屋顶的坐标和人数都将由救生船从大本营出发,营救假设干屋顶上的人回到大本营,屋顶数目以及每个屋顶的坐标和人数都将由输入决定,求出所有人都到达大本营并登陆所用的时间。输入决定,求出所有人都到达大本营并登陆所用的时间。在直角坐标系的原点是大本营,救生船每次从大本营出发,救了人之后将人送回大本营。在直角坐标系的原点是大本营,救生船每次从大本营出发,救了人之后将人送回大本营。坐标系中的点代表屋顶,每个屋顶由其位置坐标和其上的人数表示。救生船每次从大本营出发,坐标系中的点代表屋顶,每个屋顶由其位置坐标和其上的人数表示。救生船每次从大本营出发,以速度以速度50 米米/分钟驶向下一个屋顶,到达一个屋顶后,救下其上的所有人,每人上船分钟驶向下一个屋顶,到达一个屋顶后,救下其上的所有人,每人上船1分钟,船分钟,船原路返回,到达大本营,每人下船原路返回,到达大本营,每人下船0.5分钟。假设原点与任意一个屋顶的连线不穿过其它屋顶。分钟。假设原点与任意一个屋顶的连线不穿过其它屋顶。输入:输入:第一行,一个整数,表示屋顶数第一行,一个整数,表示屋顶数n。接下来依次有。接下来依次有n 行输入,每一行上包含两个表示屋顶相对于大本营的平面坐行输入,每一行上包含两个表示屋顶相对于大本营的平面坐标位置的实数标位置的实数(单位是米单位是米)、一个表示人数的整数。、一个表示人数的整数。输出:输出:救援需要的总时间,准确到分钟救援需要的总时间,准确到分钟(向上取整向上取整)。样例输入样例输入:1 30 40 3样例输出样例输出:7 第22页,共81页。【上机练习】16.津津的储蓄方案【津津的储蓄方案【1.5编程根底之循环控制编程根底之循环控制19】Noip2021提高组第提高组第1题题 津津的零花钱一直都是自己管理。每个月的月初妈妈给津津津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的一样。总能做到实际花销和预算的一样。为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上会加上20还给津津。因此津津制定了一个储蓄方案:每个月的月初,在得到妈妈给的零花钱还给津津。因此津津制定了一个储蓄方案:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于后,如果她预计到这个月的月末手中还会有多于100元或恰好元或恰好100元,她就会把整百的钱存在元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。妈妈那里,剩余的钱留在自己手中。例如例如11月初津津手中还有月初津津手中还有83元,妈妈给了津津元,妈妈给了津津300元。津津预计元。津津预计11月的花销是月的花销是180元,那么她就会在妈妈那里存元,那么她就会在妈妈那里存200元,自己留下元,自己留下183元。到了元。到了11月月末,津津手中会剩下月月末,津津手中会剩下3元钱。元钱。现在请你根据现在请你根据2004年年1月到月到12月每个月津津的预算,判断会不会出现这种情况。如果不会,月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到计算到2004年年末,妈妈将津津平常存的钱加上年年末,妈妈将津津平常存的钱加上20还给津津之后,津津手中会有多少钱。还给津津之后,津津手中会有多少钱。输入:输入:包括包括12行数据,每行包含一个小于行数据,每行包含一个小于350的非负整数,分别表示的非负整数,分别表示1月到月到12月津津的预算。月津津的预算。输出:输出:只包含一个整数。如果储蓄方案实施过程中出现某个月钱不够用的情况,输出只包含一个整数。如果储蓄方案实施过程中出现某个月钱不够用的情况,输出-X,X表示出现这种情况的第一表示出现这种情况的第一个月;否那么输出到个月;否那么输出到2004年年末津津手中会有多少钱。年年末津津手中会有多少钱。第23页,共81页。【上机练习】样例输入样例输入:样例样例#1:29023028020030017034050 90 80 20060样例输出样例输出:样例样例#1:-7样例样例#2:1580样例样例#2:290 230 280 200 300 170 330 50 90 80 200 60第24页,共81页。【上机练习】17.药房管理【药房管理【1.5编程根底之循环控制编程根底之循环控制20】随着信息技术的蓬勃开展,医疗信息化已经成为医院建立中必不可少的一局部。计算机可以很好地辅助随着信息技术的蓬勃开展,医疗信息化已经成为医院建立中必不可少的一局部。计算机可以很好地辅助医院管理医生信息、病人信息、药品信息等海量数据,使工作人员能够从这些机械的工作中解放出来,将医院管理医生信息、病人信息、药品信息等海量数据,使工作人员能够从这些机械的工作中解放出来,将更多精力投入真正的医疗过程中,从而极大地提高了医院整体的工作效率。更多精力投入真正的医疗过程中,从而极大地提高了医院整体的工作效率。对药品的管理是其中的一项重要内容。现在药房的管理员希望使用计算机来帮助他管理。假设对于任意一种药品,每天对药品的管理是其中的一项重要内容。现在药房的管理员希望使用计算机来帮助他管理。假设对于任意一种药品,每天开场工作时的库存总量,并且一天之内不会通过进货的方式增加。每天会有很多病人前来取药,每个病人希望取走不同数开场工作时的库存总量,并且一天之内不会通过进货的方式增加。每天会有很多病人前来取药,每个病人希望取走不同数量的药品。如果病人需要的数量超过了当时的库存量,药房会拒绝该病人的请求。管理员希望知道每天会有多少病人没有量的药品。如果病人需要的数量超过了当时的库存量,药房会拒绝该病人的请求。管理员希望知道每天会有多少病人没有取上药。取上药。输入:输入:共共3行行,第一行是每天开场时的药品总量第一行是每天开场时的药品总量m。第二行是这一天取药的人数第二行是这一天取药的人数n(0n=100)。第三行共有第三行共有n个数,分别记录了每个病人希望取走的药品数量个数,分别记录了每个病人希望取走的药品数量(按照时间先后的顺序按照时间先后的顺序)。输出:输出:只有只有1行,为这一天没有取上药品的人数。行,为这一天没有取上药品的人数。样例输入样例输入:30 6 10 5 20 6 7 8样例输出样例输出:2第25页,共81页。【上机练习】18.正常血压【正常血压【1.5编程根底之循环控制编程根底之循环控制21】监护室每小时测量一次病人的血压,假设收缩压在监护室每小时测量一次病人的血压,假设收缩压在90-140之间并且舒张压在之间并且舒张压在60-90之间之间(包含端点值包含端点值)那么称之为那么称之为正常,现给出某病人假设干次测量的血压值,计算病人保持正常血压的最长小时数。正常,现给出某病人假设干次测量的血压值,计算病人保持正常血压的最长小时数。输入:输入:第一行为一个正整数第一行为一个正整数n(n100),其后有,其后有n行,每行行,每行2个正整数,分别为一次测量的收缩压和舒张压。个正整数,分别为一次测量的收缩压和舒张压。输出:输出:输出仅一行,血压连续正常的最长小时数。输出仅一行,血压连续正常的最长小时数。样例输入样例输入:4 100 80 90 50 120 60 140 90样例输出样例输出:2第26页,共81页。【上机练习】19.统计满足条件的统计满足条件的4位数【位数【1.5编程根底之循环控制编程根底之循环控制23】给定假设干个四位数,求出其中满足以下条件的数的个数:个位数上的数字减去千位数上的给定假设干个四位数,求出其中满足以下条件的数的个数:个位数上的数字减去千位数上的数字,再减去百位数上的数字,再减去十位数上的数字的结果大于零。数字,再减去百位数上的数字,再减去十位数上的数字的结果大于零。输入:输入:输入为两行,第一行为四位数的个数输入为两行,第一行为四位数的个数n,第二行为,第二行为n个的四位数。个的四位数。(n=100)输出:输出:输出为一行,包含一个整数,表示满足条件的四位数的个数。输出为一行,包含一个整数,表示满足条件的四位数的个数。样例输入样例输入:5 1234 1349 6119 2123 5017样例输出样例输出:3第27页,共81页。【上机练习】20.求分数序列和【求分数序列和【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位。位。样例输入样例输入:2样例输出样例输出:第28页,共81页。【上机练习】21.计算分数加减表达式的值【计算分数加减表达式的值【1.5编程根底之循环控制编程根底之循环控制30】编写程序,输入编写程序,输入n的值,求的值,求 1/1-1/2+1/3-1/4+1/5-1/6+1/7-1/8+.+(-1)(n-1)1/n 的值。的值。输入输入:输入一个正整数输入一个正整数n。1=n=1000。输出输出:输出一个实数,为表达式的值,保存到小数点后四位。输出一个实数,为表达式的值,保存到小数点后四位。样例输入样例输入:2样例输出样例输出:第29页,共81页。【上机练习】227647 余数一样问题【小学奥数余数一样问题【小学奥数7647】三个正整数三个正整数a,b,c。现有一个大于。现有一个大于1的整数的整数x,将其作为除数分别除,将其作为除数分别除a,b,c,得到的余数一样。,得到的余数一样。请问满足上述条件的请问满足上述条件的x的最小值是多少?数据保证的最小值是多少?数据保证x有解。有解。输入:输入:一行,三个不大于一行,三个不大于1000000的正整数的正整数a,b,c,两个整数之间用一个空格隔开。,两个整数之间用一个空格隔开。输出:输出:一个整数,即满足条件的一个整数,即满足条件的x的最小值。的最小值。样例输入样例输入:300 262 205样例输出样例输出:19第30页,共81页。【上机练习】23分苹果【小学奥数分苹果【小学奥数7826】把一堆苹果分给把一堆苹果分给n个小朋友,要使每个人都能拿到苹果,而且每个人拿到的苹果数都不同的个小朋友,要使每个人都能拿到苹果,而且每个人拿到的苹果数都不同的话,这堆苹果至少应该有多少个?话,这堆苹果至少应该有多少个?输入输入:一个不大于一个不大于1000的正整数的正整数n,代表小朋友人数。,代表小朋友人数。输出输出:一个整数,表示满足条件的最少苹果个数。一个整数,表示满足条件的最少苹果个数。样例输入样例输入:8样例输出样例输出:36第31页,共81页。【上机练习】24求小数的某一位【小学奥数求小数的某一位【小学奥数7830】分数分数a/b化为小数后,小数点后第化为小数后,小数点后第n位的数字是多少?位的数字是多少?输入输入:三个正整数三个正整数a,b,n,相邻两个数之间用单个空格隔开。,相邻两个数之间用单个空格隔开。0ab 100,1=n=10000。输出输出:一个数字。一个数字。样例输入样例输入:1 2 1样例输出样例输出:5第32页,共81页。【上机练习】25计算星期几【小学奥数计算星期几【小学奥数7831】假设今天是星期日,那么过假设今天是星期日,那么过ab天之后是星期几?天之后是星期几?输入输入:两个正整数两个正整数a,b,中间用单个空格隔开。,中间用单个空格隔开。0a=100,0b=10000。输出输出:一个字符串,代表过一个字符串,代表过ab天之后是星期几。天之后是星期几。其中,其中,Monday是星期一,是星期一,Tuesday是星期二,是星期二,Wednesday是星期三,是星期三,Thursday是星期四,是星期四,Friday是是星期五,星期五,Saturday是星期六,是星期六,Sunday是星期日。是星期日。样例输入样例输入:3 2000样例输出样例输出:Tuesday第33页,共81页。【上机练习】26幂的末尾【小学奥数幂的末尾【小学奥数7833】幂幂ab的末的末3位数是多少?位数是多少?输入:输入:两个正整数两个正整数a,b。1=a=100,1=b=10000。输出:输出:从高位到低位输出幂的末三位数字,中间无分隔符。假设幂本身缺乏三位,在前面补零。从高位到低位输出幂的末三位数字,中间无分隔符。假设幂本身缺乏三位,在前面补零。样例输入样例输入:7 2021样例输出样例输出:743第34页,共81页。第二节 while语句一、语句格式一、语句格式格式1 说明:循环体局部由多个语句构成,应由一对花括号括起来,构成一个语句块的形式。程序风格提示:写while循环语句时,循环体的语句相对于while缩进两格。说明:语句说明:语句1是是while循环语句的循环体,它将在满足条件的情况下被重复执行。循环语句的循环体,它将在满足条件的情况下被重复执行。格式2第35页,共81页。第二节 while语句二、语句执行过程二、语句执行过程(1)(1)计算作为循环控制条件表达式的值,得到逻辑真或假,假定用计算作为循环控制条件表达式的值,得到逻辑真或假,假定用M M表示。表示。(2)(2)假设假设M M为真,那么执行了一遍循环体,否那么离开循环,完毕整个为真,那么执行了一遍循环体,否那么离开循环,完毕整个whilewhile语句的执语句的执行。行。(3)(3)循环体的所有语句执行完毕后,自动转向第循环体的所有语句执行完毕后,自动转向第(1)(1)步执行。步执行。三、格式举例三、格式举例(1)i=0;(1)i=0;while(i10)while(ix;(2)cinx;while whilex0 xx;cinx;功能:当输入的数据小于功能:当输入的数据小于0 0时,重复读数据。时,重复读数据。第36页,共81页。第二节 while语句例例4.5 4.5 求求s=1+2+3+ns=1+2+3+n,当加到第几项时,当加到第几项时,s s的值会超过的值会超过10001000?程序如下:#include using namespace std;int main()int n=0,s=0;while(s=1000)+n;s+=n;coutn;return 0;第37页,共81页。第二节 while语句例例4.6 4.6 求两个正整数,的最大公约数。求两个正整数,的最大公约数。分析:求两个整数的最大公约数可以采用辗转相除法。以下是辗转相除法的算法:分别用分析:求两个整数的最大公约数可以采用辗转相除法。以下是辗转相除法的算法:分别用m m,n n,r r表示表示被除数、除数、余数;被除数、除数、余数;1)1)求求m m除以除以n n的余数的余数r r;2)2)当当r!=0,r!=0,执行第执行第3)3)步;假设步;假设r=0r=0,那么,那么n n为最大公约数为最大公约数,算法完毕。算法完毕。3)3)将将n n的值赋给的值赋给m m,将,将r r的值赋给的值赋给n n;再求;再求m m除以除以n n的余数的余数r r。4)4)转到第转到第2)2)步步#include#include using namespace std;using namespace std;int main()int main()int m,n,r;int m,n,r;cinmn;cinmn;r=m%n;r=m%n;while(r!=0)/while(r!=0)/也可以使用也可以使用 while(r),c+while(r),c+中中 非非0 0即真即真 m=n;m=n;n=r;n=r;r=m%n;r=m%n;cout cout最大公约数最大公约数=nendl;=n=51+1/2+1/3+1/n=5的最小的最小n n值。值。分析:此题不等式的左边是一个求和的算式,该和式中的数据项个数是未知的,也正是要求出的。对于和式中的每个数分析:此题不等式的左边是一个求和的算式,该和式中的数据项个数是未知的,也正是要求出的。对于和式中的每个数据项,对应的通式为据项,对应的通式为1/i1/i,i=1i=1,2 2,nn。所以可采用循环累加的方法来计算出它的值。设循环变量为所以可采用循环累加的方法来计算出它的值。设循环变量为i i,它应从,它应从1 1开场取值,每次增加开场取值,每次增加1 1,直到和式的值不,直到和式的值不小于小于5 5为止,此时的为止,此时的i i值就是所求的值就是所求的n n。设累加变量为。设累加变量为s s,在循环体内把,在循环体内把1/i1/i的值累加到的值累加到s s上。上。根据以上分析,采用根据以上分析,采用whilewhile循环编写出程序如下:循环编写出程序如下:#include#include using namespace std;using namespace std;int main()int main()int i=0;int i=0;float s=0;float s=0;while(s5)/while(s5)/当当s s的值还未超过的值还未超过5 5时时 +i;+i;s+=1.0/i;s+=1.0/i;couti;couti;return 0;return 0;假设采用for循环来写,那么如下所示:#include using namespace std;int main()int i;float s=0;for(i=1;s5;+i)s+=1.0/i;couti-1;return 0;第39页,共81页。第二节 while语句 数据统计数据统计 输入一些整数,求出它们的最小值、最大值和平均值保存输入一些整数,求出它们的最小值、最大值和平均值保存3 3位小数。输入保证这些数都位小数。输入保证这些数都是不超过是不超过10001000的整数。的整数。样例输入:样例输入:2 8 3 5 1 7 3 62 8 3 5 1 7 3 6【参考程序】【参考程序】#include#includeint main()int main()int x,n=0,min,max,s=0;int x,n=0,min,max,s=0;while(scanf(%d,&x)=1)while(scanf(%d,&x)=1)s+=x;s+=x;if(xmin)min=x;if(xmax)max=x;if(xmax)max=x;+n;+n;printf(%d%d%.3lfn,min,max,(double)s/n);printf(%d%d%.3lfn,min,max,(double)s/n);return 0;return 0;第40页,共81页。第二节 while语句【优化程序】#include#define INF 100000000int main()int x,n=0,min=INF,max=-INF,s=0;while(scanf(%d,&x)=1)/scanf(%d,&x)!=EOF,如果没数据可读,scanf返回EOF s+=x;if(xmax)max=x;+n;printf(%d%d%.3lfn,min,max,(double)s/n);return 0;第41页,共81页。第二节 while语句 最后,我们来更仔细地研究一下输入输出。研究对象就是经典的“A+B问题:输入假设干对整数,输出每对之和。假设每个整数不超过109,一共不超过106个数对。第1种方法是:#include int main()int a,b;while(scanf(%d%d,&a,&b)=2)printf(%dn,a+b);return 0;第2种方法也许更加常用你再也不用记住%d、%lf等恼人的占位符了:#include using namespace std;int main()int a,b;while(cin a b)cout a+b endl;return 0;第42页,共81页。【上机练习】1.1.球弹跳高度的计算【球弹跳高度的计算【1.51.5编程根底之循环控制编程根底之循环控制1717】一球从某一高度一球从某一高度h h落下落下(单位米单位米),每次落地后反跳回原来高度的一半,再落下。编程计算气球在第,每次落地后反跳回原来高度的一半,再落下。编程计算气球在第1010次落地时,次落地时,共经过多少米共经过多少米?第第1010次反弹多高?次反弹多高?输出包含两行,第输出包含两行,第1 1行:到球第行:到球第1010次落地时,一共经过的米数。第次落地时,一共经过的米数。第2 2行:第行:第1010次弹跳的高度。次弹跳的高度。输入输入:输入一个整数输入一个整数h h,表示球的初始高度。,表示球的初始高度。输出输出:第第1 1行:到球第行:到球第1010次落地时,一共经过的米数。次落地时,一共经过的米数。第第2 2行:第行:第1010次弹跳的高度。次弹跳的高度。注意:结果可能是实数,结果用注意:结果可能是实数,结果用doubledouble类型保存。类型保存。提示:输出时不需要对精度特殊控制,用提示:输出时不需要对精度特殊控制,用cout ANSWERcout ANSWER,或者,或者printf(%g,ANSWER)printf(%g,ANSWER)即可。即可。样例输入样例输入:20 20样例输出样例输出:1313第43页,共81页。【上机练习】2.2.角谷猜测【角谷猜测【1.51.5编程根底之循环控制编程根底之循环控制1818】谓角谷猜测,是指对于任意一个正整数,如果是奇数,那么乘谓角谷猜测,是指对于任意一个正整数,如果是奇数,那么乘3 3加加1 1,如果是偶数,那么除以,如果是偶数,那么除以2 2,得到的结果再按照上,得到的结果再按照上述规那么重复处理,最终总能够得到述规那么重复处理,最终总能够得到1 1。如,假定初始整数为。如,假定初始整数为5 5,计算过程分别为,计算过程分别为1616、8 8、4 4、2 2、1 1。程序要求输入一个整数,。程序要求输入一个整数,将经过处理得到将经过处理得到1 1的过程输出来。的过程输出来。输入输入:一个正整数一个正整数N(N=2,000,000)N(N=2,000,000)输出输出:从输入整数到从输入整数到1 1的步骤,每一步为一行,每一部中描述计算过程。最后一行输出的步骤,每一步为一行,每一部中描述计算过程。最后一行输出EndEnd。如果输入为。如果输入为1 1,直接输,直接输出出EndEnd。样例输入样例输入:5 5样例输出样例输出:5*3+1=16 5*3+1=16 16/2=8 16/2=8 8/2=4 8/2=4 4/2=2 4/2=2 2/2=1 2/2=1 End End第44页,共81页。【上机练习】3.3.级数求和【级数求和【1.51.5编程根底之循环控制编程根底之循环控制2424】Noip2002Noip2002普及组第普及组第1 1题题 :Sn=1Sn=11/21/21/31/31/n1/n。显然对于任意一个整数。显然对于任意一个整数K K,当,当n n足够大的时候,足够大的时候,SnSn大于大于K K。现给出一个。现给出一个整数整数K K1=k=151=k=15,要求计算出一个最小的,要求计算出一个最小的n n,使得,使得SnSnK K。输入输入:一个整数一个整数K K。输出输出:一个整数一个整数n n。样例输入样例输入:1 1样例输出样例输出:2 2第45页,共81页。【上机练习】4.4.别离整数的各个数【别离整数的各个数【1.51.5编程根底之循环控制编程根底之循环控制2525】给定一个整数给定一个整数n(1=n=100000000)n(1=n=100000000),要求从个位开场别离出它的每一位数字。从个位开场按照从低位,要求从个位开场别离出它的每一位数字。从个位开场按照从低位到高位的顺序依次输出每一位数字。到高位的顺序依次输出每一位数字。输入输入:输入一个整数,整数在输入一个整数,整数在1 1到到100000000100000000之间。之间。输出输出:从个位开场按照从低位到高位的顺序依次输出每一位数字。数字之间以一个空格分开。从个位开场按照从低位到高位的顺序依次输出每一位数字。数字之间以一个空格分开。样例输入样例输入:123 123样例输出样例输出:3 2 1 3 2 1第46页,共81页。【上机练习】5.5.数字反转【数字反转【1.51.5编程根底之循环控制编程根底之循环控制2626】Noip2021Noip2021普及组第普及组第1 1题题 给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否那么反转后得到的新数的最高位数字不应为零,例如输入定的原数为零,否那么反转后得到的新数的最高位数字不应为零,例如输入-380-380,反转后得到的新数为,反转后得到的新数为-83-83。输入输入:输入共输入共 1 1 行,一个整数行,一个整数N N。-1,000,000,000 N 1,000,000,000 -1,000,000,000 N 1,000,000,000。输出输出:输出共输出共 1 1 行,一个整数,表示反转后的新数。行,一个整数,表示反转后的新数。样例输入样例输入:样例样例#1#1:123123样例样例#2#2:-380-380样例输出样例输出样例样例#1#1:321321样例样例#2#2:-83-83第47页,共81页。【上机练习】6.6.含含k k个个3 3的数【的数【1.51.5编程根底之循环控制编程根底之循环控制2727】输入两个正整数输入两个正整数m m和和k k,其中,其中1m1000001m100000,1k5 1k5,判断,判断m m 能否被能否被1919整除,且恰好含有整除,且恰好含有k k个个3 3,如果满足条件,那么输出,如果满足条件,那么输出YESYES,否那,否那么,输出么,输出NONO。例如,输入:例如,输入:43833 343833 3,满足条件,输出,满足条件,输出YESYES。如果输入:。如果输入:39331 339331 3,尽管有,尽管有3 3个个3 3,但不能被,但不能被1919整除,也不满足条件,应整除,也不满足条件,应输出输出NONO。输入输入:m m 和和 k k 的值,中间用单个空格间隔。的值,中间用单个空格间隔。输出输出:满足条件时输出满足条件时输出 YES YES,不满足时输出,不满足时输出 NO NO。样例输入样例输入:43833 3 43833 3样例输出样例输出:YES YES第48页,共81页。第三节 do-while语句一、语句格式一、语句格式格式1说明:语句1是do-while的循环体。格式2说明:循环体局部由多个语句构成,应由一对花括号括起来,构成一个语句块的形式。二、语句执行过程二、语句执行过程(1)(1)执行一遍循环体。执行一遍循环体。(2)(2)求出作为循环条件的求出作为循环条件的“条件表达式的值,假设为逻辑值真那么自动转向第条件表达式的值,假设为逻辑值真那么自动转向第(1)(1)步,否那步,否那么完毕么完毕dodo循环的执行过程,继续执行其后面的语句。循环的执行过程,继续执行其后面的语句。在在dodo语句的循环体中也可以使用语句的循环体中也可以使用breakbreak语句,用它来非正常完毕循环的执行。语句,用它来非正常完毕循环的执行。第49页,共81页。第三节 do-whi
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 中学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!