《循环结构程序设计》PPT课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
a=a+b; b=a-b; } if(n%2==0) cout<<-1*a<<'/'<<b<<endl;
循环语句的嵌套
for( ; ;)
三外嵌嵌禁w{e….种层套套止中循h(.}i)…循循循循从l又环e环 环 环 环 外(…包语)w可可的的层…h{}…i互包执跳跳含句l.相含行转入循的嵌两流:内d(.}环嵌套 个 程 只 层o{.w).h,以:能、语套;il{}层上外跳禁ew句:…(h数内层转止d…i…)ol一不循循出跳;…e…限环环本入个。,执层同w{(循h}但行循层i)环l;不一环的e(…{}…能次。另语)w…hd……相,一io句l….互 内 循e的交层环叉循和循{…e(…。环向()环)要上;{体执跳…{}w}d…wh行转…ohi………il完。le 。
{
for循环语句
格式:
for (<表达式1 >;<表达式2 >;<表达式3>) {
语句序列 }
表达式1
0 表达式2 非0 语句序列
表达式3
语句序列称为循环体。 当语句序列只有单条语句,表示复合语句的{}可以省略。 表达式1一般为赋值表达式,给控制变量赋初值;如果省略表达式1 表达式2一般为关系表达式或逻辑表达式,称为循环控制条件 表达式3一般为赋值表达式,给控制变量增量或减量 for(;;)。

5

0
• 爱因斯坦走楼梯:有一条长阶梯,若每步跨2阶,则最后剩1阶;若每步跨3阶,则最后 剩2阶;若每步跨5阶,则最后剩4阶;若每步跨6阶,则最后剩5阶;若每步跨7阶,则 最后正好一阶不剩;问该楼梯最少有多少阶?
#include<iostream> using namespace std; int main() {
121 -12321
100 输出样例:No
Yes Yes No
素数因子
• 问题描述:输入一个整数,输出它的所有素数因子 • 输入要求:输入一系列的整数(0,1,-1除外),每行一个 • 输出要求:输出所有的素数因子,每个因子之间用1个空格分
开,最后一个因子后面没有空格 • 输入样例: 8
30 125 • 输出样例:2 2 2 235 555
break;
}
}
q_flag=1;
if(p_fla
g==1)
for(i=2;i<=sqrt(q);
i++)
{
if(q%i==0)
绝对素数
问题描述:如果一个正整数是素数,它的反位数也是素 数,这称这样的数为绝对素数。
输入要求:输入一些正整数n,每个占一行
输出要求:占一行,输出1到n之间名绝对素数的个数。
}
6174数字黑洞
• 问题描述:任意一个每位数字不完全相同的4位正整数, 将各位上数字重新组合成一个最大数和一个最小数相减, 重复这个过程,必定得到6174。
• 输入要求:输入一系列的4位正整数,占一行。
• 输出要求:占一行,最终得到6174的变换次数。
• 输入样例:1234

1000

6174
• 输出样例:3
#include<iostream> using namespace std; int main() {
int m,k=2; cin>>m; if(m<0) {
cout<<'-'; m=-m; } while(k<m) if(m%k==0) {
cout<<k<<' '; m=m/k; } else k++; cout<<m<<endl; return 0;
角谷猜想
• 问题描述:定义这样一个整数函数f(n),当n是偶数时,f (n)=n/2;当n是奇数时,f(n)=(3n+1)/2。这个猜想是说 :对于任意的整数n,计算f(n),f(f(n)),f(f(f(n))),… ….,若干步之后,总会得到1。对于给定的n,求出数字 序列中第一次出现1的步数。
3 5 2
Cantor表
问题描述:现代数学的著名证明之一是Georg Cantor证明了有理数是 可以枚举的。他利用下面一张表来证明这一命题: 1/1 1/2 1/3 1/4 1/5 …… 2/1 2/2 2/3 2/4…… 3/1 3/2 3/3 …… 4/1 4/2 …… 5/1 …… 我们以Z字型给上表每一项编号 。第1项是1/1 ,然后第2项是1/2,2/ 1,3/1,2/2……. 输入描述:整数N(1≤N≤10000000) 输出描述:表中的第N项 样例输入: 7 样例输出: 1/4
n=n+7; cout<<n<<endl; return 0; }
do while 循环语句
格式:
do {
语句序列 } while(表达式);
语句序列
0 表达式 非0
最大公约数和最小公倍数
问题描述:从键盘上输入两个整数,求它们的最大公约数和最小 公倍数。
输入要求:每行输入两个整数,每个整数之间用一个空格分开。 输出要求:第一行输出最大公约数,第二行输出最小公倍数 输入样例:3 6
int k; for(k=100;k<=2 00;k++) { if(k%3==0)
continue; cout<<k<< “ “; } return 0; }
• break语句
• 格式:break; • 功能:跳出switch结构或结束本层循环。 • 说明:break语句只能用于switch或循环结构中
输入要求:输入一些 正整数n(n<50),分别占一行。 输出要求:占一行,表示分数数列中的对应项。 输入样例:3
26 输出样例:5/3
-317811/196418
#include<iostream> using namespace std; int main() {
int a=2,b=1,i; int n; cin>>n; for(i=2;i<=n;i++) {
break; cout<<area<<endl; } return 0; }
阶乘之和
问题描述:求非负整数的阶乘之和 输入要求:输入一个非负整数n(n<13),占一行 输出要求:占一行,阶乘的和 输入样例:0
5 12 输出样例:1 154 522956314
#include<iostream> #include<stdlib.h> using namespace std; int main() {
第3讲循环结构程序设计
循环的定义
反复执行相同的语句序列
假 条件 真
A
A
假 条件 真
while循环
格式:
while(表达式) {
语句序列 }
0 表达式 非0 语句序列
语句序列称为循环体,当为一条语句时,表示复合语句的{}可以省略。 表达式可以为任何类型 先判断,后执行,若条件不成立,有可能一次也不执行。 语句序列中必须有改变while后面括号的表达式值的语句,否则有可能死循环。
int i,sum,p,n; while(cin>>n) { sum=0; p=1;
if(n<0) exit(0);
for(i=1;i<=n;i++) {
p=p*i; sum=sum+p; } cout<<sum+1<<endl;
分数数列
问题描述:已知分数数列 2/1,-3/2,5/3,8/5, …… 对于输入的正整数n,输出对应项的分数。
int main()
#include <iostream
{
>
int i,sum=0;
using namespace st
cin>>i;
d;
do
int main3;=i;
int i,sum=0;
i++;
cin>>i;
}while(i<=10);
while(i<=10)
cout<<sum<<endl;
• 输入要求:输入一些正整数n,每个正整数占一行。
• 输出要求:占一行,输出对应n得到1的步数。
• 输入样例:5

10
• 输出样例:4

5
while语句和do…while语句 比较
while语句是先判断后执行,只要不满足条件,循环体语 句根本不会执行
#uisnid环cnolg体…udn语weahm句ie<lsi总epo语会as句ct执er是e行sa先tm一d>执;次行后判断,不管条件是否满足,循
p=p+1
q=n-p
非0 p是素数 p_flag=1
0 p_flag=0
非0 q是素数
0
q_flag=1
q_flag=0
非0 p_flag*q_flag==0
0 输出p和q
结束
#include<iostream> #include<math.h> #include<stdlib.h> using namespace std; int main() {
#include<iostream> using namespace std; int main() {
int n,i,j; cin>>n; i=0;//斜线序号 j=n;//第n项在某行的位置 do {
i++; j=j-i; }while(j>0); j=j+i; if(i%2==0) cout<<j<<"/"<<i+1-j<<endl;
0 表达式1 非0 语句序列1
表达式2 0
非0 break
语句序列2
后续语句
#include<iostream> using namespace std; #define PI 3.1415926 int main() {
int r; double area; for(r=1;r<=10;r++) { area=PI*r*r; if(area>100.0)
哥德巴赫猜想
问题描述:哥德巴赫猜想被称为数学上的皇冠,至今 都没有被证明,其主要描述的是:任一充分大(大于4) 的偶数,可以用两个素数之和表示 。
输入要求:输入一些偶数(>4),每个数占一行。 输出要求:占一行,两个素数的和。 输入样例:4
20 输出样例:2+2
3+17
开始
输入n p=1
24 13 输出样例:3
6 1 312
开始
输入a,b
r=a%b a=b b=r
非0
0 r!=0
输出a 结束
• 问题描述:计算与正整数n相等的二进制代码中有1和0的 个数。
• 输入要求:输入一些正整数,每个占一行 • 输出要求:占两行,第一行是1的个数,第二行是0的个数
。 • 输入样例:8
93 • 输出样例:1
• 输入实例:1

50 90 87 67 84 99 56 74 82 94 -1
• 输出实例:10
100
50
78.3
回文数
问题描述:输入一个整数,判断一个该数是否为回文数。 输入要求:输入一系列的整数n,n<100000000 输出要求:如果是回文数输出Yes,如果不是回文数输出
No 输入样例:1234
转移语句
• continue语句 • 形式:continue; • 功能:结束本次循环,开始下一次循环 • continue只能用在循环结构中,而不能用于其它控制结构
0 表达式1 非0 语句序列1
表达式2 0
非0 continue
语句序列2
后续语句
#include<iostream> using namespace std; int main() {
int n=7; while((n%2!=1)||(n%3!=2)||(n%5!=4)||(n%6!=5))
n=n+7; cout<<n<<endl; return 0; }
#include<iostream> using namespace std; int main() {
int n=7; while(!((n%2==1)&&(n%3==2)&&(n%5==4)&&(n%6==5)))
输入样例:10
20
输出样例:
4
7
#include<iostream> #include<math.h> using namespace std; int main() {
int i,p,q,n,p_flag,q_ flag;
while(cin>>n){ if((n%2==1)||n<4) {
//cout<<"数据输入 出错\n”;
exit(0); }
{
p=p+1;q=n-p;p_flag=
1;
for(i=2;i<=sq
rt(p);i++)
{
if(p%i==0)
{
p_flag=0;
• 问题描述:笑笑作为数学课代表,每次考试后,数学老师都会让他统 计成绩,老师并不关心具体某个人的成绩,而只关心参加考试的人数 、平均成绩、最低分和最高分。
• 输入要求:第1行输入T,表示组数,第二行输入一些 整数,表示学生 的成绩,每个数之间用一个空格分开,-1表示输入结束。
• 输出要求:占4行,第一行表示学生人数n,第二行表示最高分,第三行 表示最低分,第四行表示平均分,其中只有平均分是小数(只保留一 位小数),其余为整数
相关文档
最新文档