当前位置:首页 >> 理化生 >>

41504199-第三次实验作业2016


第三次实验内容:循环结构程序设计
实验内容 1
练习题一

实验课本第四次实验部分

程序运行结果

思考题及问题 ① 将程序中的“sum=0; ”语句去掉可以吗? 不可以,否则 m 为随机值

② 将 while 循环语句改为 do-while 循环语句。 程序如下: #incl

ude <iostream> using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char** argv) { int n,sum; n=1; sum=0; do { sum=sum+n; n=n+2; } while (n<=99); cout<<"sum="<<sum<<endl; return 0; }

2.练习题二
程序运行结果 ① 方法一:用穷举法求最大公约数。



方法二:用辗转相除法求最大公约数。

思考题及问题 ① 将 if (m < n) { r=m; m=n; n=r; } 去掉,分别按 m 的值小于 n 的值情况输入数据,程序运行结果如下:

② 分别输入 m 或 n 的值为负数,程序运行结果如下:

③ 为什么在用辗转相除法求最大公约数时,输出结果是 m,而不是 r。 这里的 r 为 m 和 n 的余数,最后的计算结果为 0;m 为最后一次的计算的约数,所以最 后输出 m; ④ 试将辗转相除法中的 do-while 循环语句,改为 while 循环语句实现。程序如下: #include <iostream> #include <cmath> using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char** argv) { int x,y; int m,n,r,g; cout<<"输入 2 个数 x,y:"; cin>>x>>y; m=abs(x); n=abs(y); if(m<n) {r=m; m=n; n=r; } while (r!=0) { r=m%n; m=n; n=r; } cout<<"辗转相除法求最大公约数:"<<m<<endl; g=abs(x)*abs(y)/m; cout<<"最小公倍数:"<<g<<endl; return 0; }

3.练习题三
程序运行结果

思考题及问题 ① 更改初值,程序运行结果:

4.练习题四
思考题及问题 ① 如果输出 9 行的图形,应如何修改程序?运行结果如下:



如果输出图形向右平移 25 个字符位置,程序应该如何实现?运行结果如下:

③ 如果需将输出的两个图形并排打印,程序应如何实现?以输出图①和图②为例,应 输出以下图形,程序代码如下:

#include <iostream> #include <cmath>

using namespace std; int main(int argc, char** argv) { int i,j,k; for(i=1;i<=9;i++) { for(j=1;j<=i;j++) cout<<" "; for(j=19-2*i;j>0;j--) cout<<"*"; for(k=-4;k<=i;k++) cout<<" "; for(k=10-i;k>0;k--) cout<<"*"; cout<<"\n"; } cout<<"\n"; for(i=1;i<=9;i++) { for(j=10-i;j>0;j--) cout<<" "; for(j=1;j<=i;j++) cout<<2*j-1; if(i<=5) {for(j=15-i;j>0;j--) cout<<" "; for(j=1;j<=2*i-1;j++) cout<<(char)('A'+i-1); cout<<"\n"; } else { cout<<" "; for(j=9-2*(i-5);j>0;j--) cout<<(char)('E'-i+5); cout<<'\n'; } } cout<<"\n"; return 0; }

程序设计自测练习
1.自测练习一
编写一个程序,统计输出各位数之和为 9,且能被 5 整除的五位数的个数。

#include <iostream> #include <cmath> using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char** argv) { int i,s,j,p; for(i=10000,s;i<100000;i+=5) { for(j=1,p=10000,s=0;j<=4;j++) { s=s+(i/p%10); p/=10; } if(s==9) cout<<i<<'\t'; } return 0; }

提示: ? 遍历所有的五位数,对每一个五位数判定是否符合“输出各位数之和为 9,且能被 5 整除” 。 ? 设 n 为 一 个 五 位 数 , 则 其 个 位 数 为 n%10 , 十 位 数 为 n/10%10 , 百 位 数 为 n/100%10……

2.自测练习二
编写一个程序,求 s=1+(1+2)+(1+2+3)+?+(1+2+3+?+n)的值。 #include <iostream> #include <cmath> using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char** argv) { int i,n,s,p,j; cout<<"请输入一个整数"; cin>>n; for(i=1,s=0,p;i<=n;i++) { for(j=1,s=0;j<=i;j++) { p=p+j; } s+=p; } cout<<"sum="<<s<<endl; return 0; }

提示:

? 思路一:用双重循环,外层循环重复 n 次,内层循环求(1+2+3+…+i), 将结果累加到 s 中。 ? 思路二:用单层循环,通过累加变量 p,每次循环都将 p 累加一个 i,则

p 即为(1+2+3+…+i),再将 p 累加到 s 中。

3.自测练习三
编写一个程序,求 s=4!+6!+8! 。 #include <iostream> #include <cmath> using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char** argv) { int i,n,s,p,j; for(i=4,s=0,p;i<=8;i+=2) { for(j=1,p=1;j<=i;j++) { p=p*j; } s+=p; } cout<<"sum="<<s<<endl; return 0; }

4.自测练习四
编写一个程序,求出 1~1000 之间的所有完全数。所谓完全数是指:该数的各因子之和 正好等于该数本身,如 6=1+2+3。 提示: ? 遍历 1~1000 之间的所有整数,对每一个整数 i 测试其是否为完全数。 ? 对整数 i 而言,若 i%j=0,则 j 为 i 的因子。对从 1~sqrt(i)的每一个 j 进行测试其是 否为 i 的因子。

#include <iostream> #include <cmath> using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char** argv) { int i,n,p,j; for(i=1,p;i<=1000;i++) { for(j=1,p=0;j<i;j++) { if(i%j==0) p=p+j ; } if(p==i) cout<<i<<'\t'; } return 0; }

5.自测练习五
计算π 的近似值,π 的计算公式为:

? ? 2?

22 42 62 (2n) 2 ,要求:精度为10-5,并输出n的大小 ? ? ? ?? ? 1? 3 3 ? 5 5 ? 7 (2n ? 1) ? (2n ? 1)
? ? 采用while循环, 若前后两次计算的π 的近似值的绝对值小于10-5, 则结束循环。 求绝对值用fabs函数(需include <cmath>)

#include <iostream> #include <cmath> using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char** argv) { double y1=2,y2=0,n=1; while(fabs(y1-y2)>1e-5) { y1*=(2*n*2*n/(2*n-1)/(2*n+1)); y2=y1/(2*n*2*n/(2*n-1)/(2*n+1)); n++; } cout<<n-1<<endl; cout<<y1<<endl; return 0; }

6.自测练习六
煤球数目 有一堆煤球,堆成三角棱锥形。具体: 第一层放 1 个, 第二层 3 个(排列成三角形) , 第三层 6 个(排列成三角形) , 第四层 10 个(排列成三角形) , 如果一共有 100 层,共有多少个煤球?

#include <iostream> #include <cmath> using namespace std; int main(int argc, char** argv) { int i, s,p,j; for(i=1,s=0,p;i<=100;i++) { for(j=1,s=0;j<=i;j++) { p=p+j; } s+=p; } cout<<"sum="<<s<<endl; return 0; }

7.自测练习七
某君从某年开始每年都举办一次生日 party, 并且每次都要吹熄与年龄相同根数的蜡烛。 现在算起来,他一共吹熄了 236 根蜡烛。 请问,他从多少岁开始过生日 party 的?

#include <iostream> #include <cmath> using namespace std; int main(int argc, char** argv) { int i, s,p,j; for(i=1,s=0;s!=236;i++) { for(j=i,s=0;s<=236;j++) { s+=j; if(s==236) {cout<<i<<endl;break;} } } return 0; }

8.自测练习八

这个算式中 A~I 代表 0~9 的数字,不同的字母代表不同的数字。比如:6+8/3+952/714 就是 一种解法,5+3/1+972/486 是另一种解法。打印出所有可能的算式 #include <iostream> #include <iomanip> #include <cmath> #include <cstring> using namespace std; int main(int argc, char** argv) { float a,b,c,d,e,f,g,h,i; for(a=0;a<10;a++) { for(b=0;b<10;b++) { if(b!=a)for(c=1;c<10;c++) { if(c!=b&&c!=a)

for(d=0;d<10;d++) { if(d!=c&&d!=b&&d!=a) for(e=0;e<10;e++) { if(e!=a&&e!=b&&e!=c&&e!=d) for(f=0;f<10;f++) { if(f!=a&&f!=b&&f!=c&&f!=d&&f!=e) for(g=0;g<10;g++) { if(g!=a&&g!=b&&g!=c&&g!=d&&g!=e&&g!=f) for(h=0;h<10;h++) { if(h!=a&&h!=b&&h!=c&&h!=d&&h!=e&&h!=f&&h!=g) for(i=0;i<10;i++) {if(i!=a&&i!=b&&i!=c&&i!=d&&i!=e&&i!=f&&i!=g&&i!=h&&(a+b/c+(d*100+e*10+f)/( g*100+h*10+i)==10)) cout<<a<<" "<<b<<" "<<c<<" "<<d<<" "<<e<<" "<<f<<" "<<g<<" "<<h<<" "<<i<<" "<<endl; } } } } } } } } } return 0; }

9.自测练习九
任何一个自然数 m 的立方可以写成 m 个连续奇数之和,如 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13 +15+17+19 输入一个 n,输出组成 n^3 的连续奇数。

#include <iostream> #include <cmath> using namespace std; int main(int argc, char** argv) { int n,m; cout<<"请输入一个整数"; cin>>n; for(m=1;m<=n*n*n;m++) { if(2*n*m+n*n-2*n==n*n*n) { for(int j=1;j<=n;j++) { cout<<2*m+2*j-3<<'\t'; } } } return 0; }

10.自测练习十
四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多 4 个正整数的平方和。 如果把 0 包括进去, 就正好可以表示为 4 个数的平方和。 比如: 5 = 0^2 + 0^2 + 1^2 + 2^2 7 = 1^2 + 1^2 + 1^2 + 2^2(^符号表示乘方的意思) 程序输入为一个正整数 N (N<5000000),要求输出 4 个非负整数,中间用空格分开 例如,输入:5 则程序应该输出:0 0 1 2 再例如,输入:12

则程序应该输出:0 2 2 2 再例如,输入:773535 则程序应该输出:1 1 267 838 #include <iostream> #include <cmath> using namespace std; int main(int argc, char** argv) { int n,a,b,c,d; cout<<"请输入一个整数"; cin>>n; for(a=0;a<=sqrt(n/4);a++) { for(b=a;b<=sqrt(n/3);b++) { for(c=b;c<=sqrt(n/2);c++) { for(d=c;d<=sqrt(n);d++) { if(a*a+b*b+c*c+d*d==n) { cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl; } } } } } return 0; }

11.自测练习十一
输出九九乘法表

#include <iostream>

#include <iomanip> #include <cmath> #include <cstring> using namespace std; int main(int argc, char** argv) { int a[9][9],i,j,n,m; for(i=0,j=0;i<9;i++) { for(j=0;j<9;j++) { a[i][j]=(i+1)*(j+1); } } for(n=0;n<9;n++) { for(m=0;m<n+1;m++) cout<<n+1<<"*"<<m+1<<"="<<a[n][m]<<'\t'; cout<<'\n'; } cout<<"请输入一个整数"; return 0; }


相关文章:
交大网络计算机组成原理第三次作业-2016完整版
交大网络计算机组成原理第三次作业-2016完整版_教育学_高等教育_教育专区。1.堆栈是一种特殊的数据寻址方式,基于原理。B A. FIFOB.BFILOC(先进后出).C LIFOD...
...2016年春学期在线作业(三)—实验报告
暂无评价|0人阅读|0次下载|举报文档中国石油大学2016华东《电工电子学》2016年春学期在线作业(三)—实验报告_教育学_高等教育_教育专区。中国石油大学(华东)现代远...
2016年物权法第三次作业及答案
2016年物权法第三次作业及答案_自考_成人教育_教育专区。题目 1 下列关于用益物权的表述中,正确的是 选择一项: A. 用益物权仅以他人之物而设定 B. 用益物权...
2016电大简明中国古代史网上第三次作业答案
2016 电大简明中国古代史网上第三次作业答案 名词解释: (共 4 题 每题 5 分) 1、奴尔干都司 明成祖于 1402 年,在特林设置奴尔干都司,下设许多卫、所,...
大学语文2016秋季第三次作业
大学语文2016秋季第三次作业_文学_高等教育_教育专区。大学语文练习题 大学语文 2016 秋季第三次作业单选题 (共 50 道题) 1.(2.0 分) 《诗经》的传统分类是...
财务管理第第三次作业
财务管理第三次作业 暂无评价 1页 免费 《财务管理》第3次作业 2页 免费 财务管理第三次阶段作业 暂无评价 4页 免费 财务管理第三次作业1113... 3页 1下载...
山西省实验中学2015-2016第三次月考物理试题及答案
山西省实验中学2015-2016第三次月考物理试题及答案_高三理化生_理化生_高中教育_教育专区。山西省实验中学 2015-2016 学年度高三第一学期第三次月考物理试题物 ...
《房屋建筑学》2016年第三次大作业
《房屋建筑学》2016第三次作业_教育学_高等教育_教育专区 暂无评价|0人阅读|0次下载|举报文档《房屋建筑学》2016第三次作业_教育学_高等教育_教育专区...
2016年秋电大《社会学概论》形考第三次作业
2016年秋电大《社会学概论》形考第三次作业_电大_成人教育_教育专区。2016年秋电大《社会学概论》形考第三次作业100%正确 2016 年秋电大社会学概论第三次作业 ...
西南大学2016 财务管理学 第三次作业答案
西南大学2016 财务管理学 第三次作业答案_管理学_高等教育_教育专区。1:[单选题]7.下列哪一项不可作为企业的清算财产( ). A:相当于担保债务数额的担保财产 B...
更多相关标签: