《C++程序设计》课程设计报告
Problem 1 水仙花数
简要题意:
输出所有在m和n范围内的水仙花数。
解题思路:
现将定义域内(100<=m<=n<=999)所有数存入数组中,如果为水仙花数,则该位置即为该水仙花数,否则赋值为0。输入给定范围区间,判断区间内数组的每个数值是否为0,若全部为0则输出no,否则输出对应不为0的水仙花数。
细节处理:
- 在主函数前定义数组,数组直接默认初始化,不需再在后面单独赋值0。
- 输出时,注意空格的输出(最后一个数输出后没有空格)。
源代码:
#include<iostream>
using namespace std;
int f[1010], g[1010];
int main()
{int m, n, a, b, c;for(int i=100;i<=1010;i++){a=i/100;b=(i-a*100)/10;c=(i-a*100-b*10);if(i==a*a*a+b*b*b+c*c*c) f[i]=i;}while(cin>>m>>n){int d=0;for(int i=m;i<=n;i++){if(f[i]!=0) g[d++]=f[i];}if(d==0) cout<<"no"<<endl; else{for(int i=0;i<d-1;i++)cout<<g[i]<<" ";cout<<g[d-1]<<endl;}}return 0;
}
Problem 2 素数公式
简要题意:
对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数。
解题思路:
首先判断输入的数据是否为终止数据(x=0,y=0),将x赋值给n,开始循环判断,循环次数为y-x+1次,通过公式将n转化为m(m= n^2+n+41),判断m是否为素数,只要有一个m不是素数,就可以输出“Sorry”,若全为素数则输出“OK”。
细节处理:
- 判断素数只用从2逐个除到数m的开方即可。
- 定义一个用与判断的整型数j,首先给j赋初值0,当出现的一个m不是素数,则给j赋值为1,最终判断j的值,即可判断给定区间内是否满足公式的数m是否有不是素数的数出现。
源代码:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{int x, y, m, n;while(cin>>x>>y){if(x==0&&y==0) break;int i=2, j=0;for(n=x;n<=y;n++){m=n*n+n+41;while(i<=sqrt(m)) //判断素数{if(m%i==0) {j=1;break;}i++;}}if(j==1) cout<<"Sorry"<<endl;if(j==0) cout<<"OK"<<endl;}return 0;
}
Problem 3 分数和
简要题意:
多项式的描述如下:1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ... 计算前n项的和。
解题思路:
将1,-2,3,-4,……存入数组,输入测试实例个数,然后输入测试前几项数n,用1分别除以数组中的数得到新数组,将新数组的前n项求和,结果保留2位小数输出。
细节处理:
- 定义数组时新数组应定义为实型(double)数组。
- 在将原数组赋值给新数组时应注意要强制转换。
- 输出结果保留两位小数。
源代码:
#include<iostream>
#define n 1000+10
int a[n],c[n];
double b[n];
using namespace std;
int main()
{int m, t=-1;a[1]=1;for(int i=1;i<=n;i++){a[i]=i;t*=-1;c[i]=t*a[i];}while(cin>>m){for(int i=1;i<=m;i++){int x;cin>>x; double sum=0.0;for(int i=1;i<=x;i++){b[i]=(double)1/c[i]; //强制转换sum+=b[i];}printf("%.2f\n",sum);}}return 0;
}
Problem 4 集合减法
简要题意:
求两集合的差。如果结果为空集合,则输出“NULL”,否则从小到大输出结果,每个元素后面跟一个空格。
解题思路:
定义数组,将A、B集合内元素分别输入,并排序,循环判断A与B中是否存在相等元素,若存在,则将该元素对应的A的数组中该位置的值赋为0。将A的数组中的非0元素存入新数组,然后循环输出新数组的值,若A的数组中元素全为0,即对应集合为空集,输出“NULL”。
细节处理:
- 注意输入多组数据。
- 当c没有被赋值时跳出循环。
源代码:
#include<iostream>
#include<algorithm>
#define N 110
int a[N], b[N], c[N];
using namespace std;
int main()
{int n, m;while(cin>>n>>m){if(n==0&&m==0) break;for(int i=1;i<=N;i++) c[i]=0;for(int i=1;i<=n;i++) cin>>a[i];sort(a+1,a+n+1);for(int i=1;i<=m;i++) cin>>b[i];sort(b+1,b+m+1);for(int i=1,k=1;i<=n;i++){for(int j=1;j<=m;j++){if(a[i]==b[j]) a[i]=0;}if(a[i]!=0){c[k]=a[i];k++;}}int z=0;for(int i=1;i<=n;i++) {if(c[i]!=0) z=1;}if(z==0) cout<<"NULL"<<endl;else{for(int i=1;i<=n;i++){if(c[i]==0) break;cout<<c[i]<<" ";}cout<<endl;}}return 0;
}
Problem 5 A^B
简要题意:
求A^B的最后三位数表示的整数。
解题思路:
输入A、B,将A循环相乘B次,当得数大于三位数时取后三位继续与A相乘。
细节处理:
- 不能直接用A本身来循环相乘,若B极大则最终得数将会超出64位整型数。
- 直接对A除以1000然后取余,则无需判断何时乘积大于三位数,可直接循环相乘。
源代码:
#include<iostream>
using namespace std;
int main()
{long long int A=0, B=0;while(cin>>A>>B){if(A==0&&B==0) break;else{int C=1;A%=1000; //对A取后三位余数for(int i=1;i<=B;i++)C=C*A%1000;cout<<C<<endl;}}return 0;
}
Problem 6 爬楼梯&小蜜蜂
简要题意:
R:有一楼梯共M级,从第1级开始,若每次只能上1级或2级,要走上第M级,共有多少种走法。
S:蜜蜂只能爬向右侧相邻蜂房。计算蜜蜂从蜂房a爬到b的可能路线数。蜂房结构如下。
解题思路:
经过找规律,两道题的解题思路完全相同,都用到斐波那契数列(从第三项开始,每一项都等于前两项之和)。首先计算出第一个和第二个数值,然后进行斐波那契数列的循环,将每个数赋值到数组中,然后输入 R:输入M,对应输出地址为M-1的数组值;S:输入a、b,对应输出地址为b-a的数组值。
细节处理:
- 定义的数组应为长整型数组(long long int)。
- R中起始台阶位置为1,故上到第2阶时实际只上了1阶。
源代码:
爬楼梯:
#include<iostream>
#define n 45
long long int a[n];
using namespace std;
int main()
{int N, M;a[1]=1,a[2]=2;for(int i=3;i<=n;i++){a[i]=a[i-1]+a[i-2];}while(cin>>N){for(int i=1;i<=N;i++){cin>>M;cout<<a[M-1]<<endl;}}return 0;
}
小蜜蜂:
#include<iostream>
#define N 55
using namespace std;
long long int c[N];
int main()
{int n,a,b,d;c[1]=1,c[2]=2;for(int i=3;i<=N;i++){c[i]=c[i-1]+c[i-2];}while(cin>>n){for(int i=1;i<=n;i++){cin>>a>>b;d=b-a;cout<<c[d]<<endl;}}return 0;
}
Problem 7 偶数分组求和
简要题意:
长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,按顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。
解题思路:
先将n个数分成i组,每组有m个数,将每个组中的数相加求平均值,然后若分成i组后,有剩余数,将剩余的数相加求平均值。
细节处理:
- 注意规定输出格式,每个数之间用空格隔开。
- 数列需在while循环内初始化,之后是逐一递加的。
源代码:
#include<iostream>
using namespace std;
int main()
{int n,m;while(cin>>n>>m){int k=0;for(int i=1;i<=n/m;i++){int sum=0;if(i>1) cout<<" ";for(int j=1;j<=m;j++){k+=2;sum+=k;}cout<<sum/m;}if(n%m){int sum=0;for(int j=1;j<=n-n/m*m;j++){k+=2;sum+=k;}cout<<" "<<sum/(n%m);}cout<<endl;}return 0;
}
Problem 8 亲和数
简要题意:
两个数的各自真约数之和等于另一个数,则这两个数为亲和数,输入两个数判断这两个数是否为亲和数。
解题思路:
分别求出两个数的真约数并求和,判断和是否等于另一个数。
细节处理:
- 由于真约数不包含数本身,故做整除循环时可从2开始除起,最后在和上加1即可。
- 每循环一次当能整除时,得到的是两个数,可将两个数都存入数组,这样只需循环至多数的开方次即可(减少循环次数,节约时间)。
源代码:
#include<iostream>
#include<cmath>
#define N 600000
int a[N], b[N];
using namespace std;
int main()
{int M, A, B;while(cin>>M){for(int i=1;i<=M;i++){int sum1=0;cin>>A>>B;for(int i=2,j=1;i<sqrt(A);i++,j+=2){if(A%i==0){a[j]=i;a[j+1]=A/i;sum1+=a[j]+a[j+1];}}int sum2=0;for(int i=2,j=1;i<sqrt(B);i++,j+=2){if(B%i==0){b[j]=i;b[j+1]=B/i;sum2+=b[j]+b[j+1];}}if((sum1+1)==B&&A==(sum2+1)) cout<<"YES"<<endl;else cout<<"NO"<<endl;}}return 0;
}
Problem 9 求A1
简要题意:
有如下方程:Ai = (Ai-1 + Ai+1)/2 - Ci (i = 1, 2, 3, .... n).
若给出A0, An+1, 和 C1, C2, .....Cn. 求A1
解题思路:
通过n=1,n=2,n=3时求A1
n=1时 2A1=A0+A2 2C1
n=2时 3A1=2A0+A2 -4C1-2C2
n=3时 4A1=3A0+A2 -6C1-4C2-2C3
……
n时 (n+1)A1=nA0+An+1 -2[nC1+(n-1)C2+(n-2)C3 ……+Cn]
细节处理:
- 定义数组应为实型数组。
- 输出结果保留两位小数。
源代码:
#include<iostream>
#define N 3000+10
double c[N], d[N];
using namespace std;
int main()
{int n;double af, al, A=0;while(cin>>n){double a=0.0;cin>>af>>al;a=n*af+al;for(int i=1,j=n;i<=n;i++,j--){cin>>c[i];d[i]=2*c[i];a-=j*d[i];}A=a/(n+1);printf("%.2lf\n",A);}return 0;
}
Problem 10 车牌号
简要题意:
对于每次给出的一个牌照区间号,推断出实际上给多少辆新车上牌照了(不能出现4或连续的62)。
解题思路:
将1~1000000区间内的所有含有4或连续的62的数的个数记录下来(累加),输入定义区间n,m,将总车牌号个数减去区间内存在含有4或连续的62的数的个数后输出。
细节处理:
- 与处理时含有4或连续的62的数的个数是累加的。
- 区间内车牌号总数是m-n+1。
源代码:
#include<iostream>
#define M 1000000+10
using namespace std;
int a[M];
int main()
{int n, m, c=0;for(int i=1;i<=1000000;i++){int z=i, q;while(z){q=z%10;z=z/10;if(q==4){c++;break;}else if((q==2)&&(z%10==6)){c++;break;}}a[i]=c;}while(cin>>n>>m){if(n==0&&m==0) break;else cout<<m-n+1-(a[m]-a[n-1])<<endl;}return 0;
}
Problem 11 求末二位
简要题意:
一个整数,只知道前几位,不知道末二位,被另一个整数除尽,求该数的末二位。
解题思路:
将输入的位置末二位数乘100后从0开始依次加1,分别除以输入的除数,若能除尽,则将所加上的数存入数组,最后输出数组中的数。
细节处理:
- 从0开始加,不能忘记0。
- 输出时如果是个位数应在前面加一个0。
源代码:
#include<iostream>
#define n 100
int s[n];
using namespace std;
int main()
{int a,b;while(cin>>a>>b){if(a==0&&b==0) break;for(int i=0;i<n;i++) s[i]=0;int c=a*100;for(int i=0,j=0;i<n;i++){int d=c+i;if(d%b==0){j++;s[j]=i;}}for(int i=1;i<n;i++){if(i>1&&s[i]==0) break; //由于循环n次,当s没有被赋值时跳出循环if(s[i]<10) cout<<"0"<<s[i];if(i>1) cout<<" ";if(s[i]>=10) cout<<s[i];}cout<<endl;}return 0;
}
Problem 12 空心三角形
简要题意:
输出字符型空心三角形。
解题思路:
定义字符,分类讨论当n=1时和n>1时,n>1时,每行空格加字符共2n-1个,且字符位置从第一行居中开始,每向下一行,就分别往左和往右移动一次,形如左上图。
细节处理:
- 当只输出1行时相当于输出所定义字符。
- 每两个空心三角形之间有一空行。
源代码:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{char c;int n;int flag=0;while(cin>>c){if(c=='@') break;cin>>n;if(flag) cout<<endl; //在一个空心三角形前不空行flag=1;if(n==1) cout<<c<<endl;else{cout<<string(n-1,' ')<<c<<endl;for(int i=1;i<n-1;i++){cout<<string(n-i-1,' ')<<c; //输出左侧字符前的空格和第一个字符cout<<string(2*i-1,' ')<<c<<endl; //输出两字符间的空格和第二个字符}for(int i=0;i<2*n-1;i++) cout<<c; //单独输出最后一行cout<<endl;}getchar();}return 0;
}
Problem 13 判断整数存在
简要题意:
判断是否存在有二个整数,加起来等于某个整数,乘起来等于另一个整数。
解题思路:
从1开始循环,判断输入的乘积m是否能被整除,若能被整除,将该数与其余数相加,判断是否等于输入的和数n,若满足则输出”Yes”,不满足则继续循环,循环结束后仍无满足的则输出”NO”。
细节处理:
- 乘积m为0时一定正确。
- 注意n、m可以为负数,故考虑到两种情况。
- 除数i只需循环绝对值的开方次。
- 设一个标志变量,便与输出。
源代码:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{int n,m,a;while(cin>>n>>m){int flag=0;if(n==0&&m==0) break;if(m<0) a=-m; //若乘积为负,现将其变为正数else a=m;for(int i=1;i<=sqrt(a);i++) //只需循环乘积绝对值的开方次{if(m%i==0){int y=m/i, x=i;if((x+y)==n||(-x-y)==n){flag=1;cout<<"Yes"<<endl;break;}}}if(flag==0&&m==0) cout<<"Yes"<<endl; //m为0时一定正确if(flag==0&&m!=0) cout<<"No"<<endl;}return 0;
}
Problem 14 回文串
简要题意:
判断一串字符是否为“回文串”字符。“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”。
解题思路:
定义字符数组,输入一串字符,判断字符第i和第n-i项是否相同。
细节处理:
- strlen()函数定义在<cstring>中
源代码:
#include<iostream>
#include<cstring>
using namespace std;
const int size=15;
char a[size];
int main()
{int n;while(cin>>n){for(int m=0;m<n;m++){int k=0;cin>>a;for(int i=0,j=strlen(a);i<strlen(a)/2;i++,j--){if(a[i]!=a[j-1]) k=1;}if(k==0) cout<<"yes"<<endl;else cout<<"no"<<endl;}}return 0;
}
Problem 15 进制转换
简要题意:
输入一个十进制数N,将它转换成R进制数输出。
解题思路:
每次用十进制数对R求模,结果用数组储存,然后每次除以R,直至等于0。
细节处理:
- 超过十进制后,会出现用字符表现数的情况,比较容易出错。
- 负数时输出负号。
源代码:
#include<iostream>
using namespace std;
int main()
{long long int a,b,j;char n;while(cin>>a>>b){long long int c[101],m=0;if(a<0){a=-a;cout<<"-";}if(a==0) cout<<a<<endl;while(a>0){c[m++]=a%b; //进制转换并存入数组a=a/b;}for(j=m-1;j>=0;j--){ if(c[j]>=10){n=c[j]+55; //通过ASCII码数值有序,进行转换cout<<n;}else cout<<c[j];}cout<<endl;}return 0;
}
总结
学习C++也有一个学期了,这半年来让我从一个对计算机程序毫无概念的懵懂稚儿,对此有了最初步的了解。老师总强调“会写程序”,确实没错,懂概念懂知识,把课本上的知识点倒背如流也不一定会应用,会写程序。学写程序就如小儿学步一般,不摔上几次然后自己爬起来,是绝不可能会的。学长说:“大家都是从‘Hello World!’开始的。”简单的一条输出,记得当时自己可是做了三四遍(就因为World后面应该加!而不是.)这让我充分体会到了计算机编程语言的严谨性。
Hello world 打开了计算机编程的大门,在此之中,我对许多从前见过或者没见过的文字、符号都有了新的认识。各种变量名、头文件、函数名……在对最基本的内容有所了解后,顺序、条件、循环,让程序变得越来越丰富,形式也越来越多样。数组的出现,连同循环一起使用,解决了很多之前不能解决的问题。
一个学期,32个学时,对于如此丰富多彩的C++,我们只能学习最基本的,了解最笼统的,很多深奥的,更加有用的、奇妙的东西都未能接触,让人深感遗憾。C++越是学习越感其博大精深,它总能在自己绞尽脑汁,感觉无论如何也无法解决某一问题时,总能送上一个简单的方法教人豁然开朗,可谓是柳暗花明又一村。
半年的时间太短,又怎能在一腔热血之时因结课而灭了激情?函数、指针、容器、栈……#include<set>、#include<map>、#include<cstdlib>……还有很多等着我去探索、学习。而大学不就是一个最佳的学习环境吗,无论是图书馆内的馆藏还是学校里的老师,都是毕生不可多得的资源。把握好,加油学!
最后,送自己一碗鸡汤,人生的狂热是因为梦想的萌芽而日渐蓬勃人生的激情,是因为梦想的延续而茁壮成长。它让我们熔铸着骆驼越漠的坚韧,梦想之灯照亮我们依旧迷茫的方向,没有梦想的人生就如同没有星光的夜空让人不再仰望,没有梦想的人生就如同没有曙光的黎明怎能让人辉煌?
《C++程序设计》课程设计报告相关推荐
- c语言数据结构课程设计停车场管理系统,数据结构课程设计报告停车场管理系统...
<数据结构课程设计报告停车场管理系统>由会员分享,可在线阅读,更多相关<数据结构课程设计报告停车场管理系统(8页珍藏版)>请在人人文库网上搜索. 1.数据结构课程设计报告系 别 ...
- c语言实现一元多项式程序报告设计,数据结构课程设计报告一元多项式的计算..doc...
数据结构课程设计报告一元多项式的计算. 题目:一元多项式的计算 --链表 摘要(题目) 一元多项式计算 任务:能够按照指数降序排列建立并输出多项式: 能够完成两个多项式的相加.相减,并将结果输入: 目 ...
- 数据结构课程设计报告(附代码)
数据结构课程设计报告 一.实训目的 通过课程设计,学会运用数据结构知识,针对具体应用,自己设计合理数据结构,确定存储结构,并能设计具体操作算法,选择使用具体语言进行实现.掌握C++较复杂程序的组织和设 ...
- c语言数据结构课程设计电梯,数据结构课程设计报告(模拟电梯).doc
数据结构课程设计报告(模拟电梯) 山东理工大学计算机学院 课 程 设 计 (数据结构) 班 级姓 名学 号 指导教师 二〇一二年一月十日 课程设计任务书及成绩评定 课题名称电 梯 模 拟 Ⅰ.题目的目 ...
- 2018数据结构课程设计报告
目录 一.引言 a) 编写目的 b) 项目背景 c) 术语说明 d) 参考资料 二.任务概述 a) 目标 b) 运行环境 c) 需求概述 d) 条件与限制 三. 总体设计 a) 处理流程 b) 总体结 ...
- 数据结构课程设计报告-职工信息管理系统
"数据结构"课程设计报告 系 (院): 信息工程学院 设计题目: 员工管理系统 专业班级: 计算机科学与技术1401B 小 ...
- 【“BattenSnakexjp4.1”数据结构课程设计报告】
烟台大学计算机与控制工程学院 "BattenSnakexjp4.1"数据结构课程设计报告 计146-2 徐吉平 版权所有
- 【数据结构课程设计报告】电话号码查询系统(Java实现)
数据结构课程设计报告 电话号码查询系统 数据结构课程设计报告 一.需求分析 二.系统功能划分及设计 1.存储结构设计 2.系统的功能架构设计 3.模块设计 3.代码实现 一.需求分析 问题描述:路径规 ...
- 计算机课程设计收费管理系统,数据结构课程设计报告---收费停车场管理系统
数据结构课程设计报告---收费停车场管理系统 (20页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 XX大学计算机与电子 信息学院< ...
- 公交换乘系统c语言,数据结构课程设计报告(公交换乘).docx
课 程 设 计 报 告 题目: 武昌地区公交查询与换乘推荐 课程名称: 数据结构课程设计 专业班级: 学 号: 姓 名: 指导教师: 报告日期: 计算机科学与技术学院 任 务 书 设计内容 掌握图.查 ...
最新文章
- jieba词性说明字典
- 【刷算法】判断链表是否有环以及返回入环节点
- JAVA中的SimpleDateFormat yyyy和YYYY的区别
- python3 log_Python3 log10()函数简单用法
- 25、UIView的setNeedsLayout, layoutIfNeeded 和 layoutSubviews 方法之间的关系解释
- [C++11]指针空值类型nullptr
- 「译文」你必须掌握的 7 种 JavaScript 错误类型
- 安卓隐藏摄像_【快讯:诺基亚发布三款安卓机;全面屏手机的最终形态,目标是去掉摄像头;iPhone 打电话不息屏或挂断电话后不亮屏是什么问题?】...
- 马云后悔创办阿里:想停根本停不下来;人民日报评“滴滴顺风车争议”;jQuery 曝漏洞|极客头条...
- js 内存引用计数_快速内存管理–自动引用计数
- json获取key对应的值java_java 获取json字符串中key对应的值
- python用pandas读取数据时出现错误_Python Pandas错误标记数据
- 苍狼敏捷软件开发团队建设指南-2-团队建设
- java自动化测试面试题_自动化测试面试题
- 2021最新阿里代码规范(前端篇)
- HTML在列表中加图片,HTML + JS 列表显示图片
- 2021-2026年中国数字化转型市场预测:通过应用场景践行数字化优先策略
- Vue项目的打包\部署\优化
- kubectl 命令使用(create系列)
- IDC:中国人工智能及自动化市场十大预测
热门文章
- An unhandled exception occurred: listen EADDRNOTAVAIL: address not available
- axure9实用操作设置鼠标单击交互事件为什么没响应
- 除了攀附名人、杜撰荣恩录,家谱造假中,还有这件事令人羞耻
- torch.Longtensor是什么?和torch.Tensor有什么区别?
- 【笔记】2017电信大数据普惠金融应用案例
- 我37岁,从互联网大厂跳槽到国企后,发现没有一劳永逸的工作。。。
- linux格式化叫大硬盘命令,Linux_format命令 参数说明,格式化 格式化指定卷中的磁盘 - phpStudy...
- 关系数据库——关系操作关系模型的完整性
- ue4 FString 中文乱码问题
- dede源码详细分析之--全局变量覆盖漏洞的防御