c++程序设计课程设计论文

《c++程序设计》课程设计报告

班级:数学类3班 学号:2018212742
报告人姓名:张琦
实验地点: 计算机实验室413
完成起止日期: 2019.1.2——2019.1.4

1
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
对于每个测试实例,输出在第n年的时候母牛的数量。每个输出占一行
思路:分别设出代表1,2,3,4岁母牛的数量,然后分类讨论前四年和四年以后。前四年总数等于年数n,四年后用循环来计算母牛年龄的增加和产生的牛的数量。

答案:
#include
#include
#include
#include
using namespace std;
int main()
{
int n;
while(cin>>n)
{
if(n0)
break;
int a,b,c,d; //分别代表一岁二岁三岁四岁及其以上的母牛的数目。
if(n<=4)
cout< else{
n=n-4;
a=b=c=d=1;
for(int i=0;i {
d=c+d;//当年大母牛数目d为前一年c和d的总和
c=b;//b母牛长了一岁到了c
b=a;//同上
a=d;//长成的母牛和原本的母牛共生出新的小母牛a个
}
cout< }
}
}
细节分析:用循环来计算母牛年龄的增加和产生的牛的数量。以四年为节点分类讨论。
2
春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:
“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=13+53+3^3。现在要求输出所有在m和n范围内的水仙花数。
思路:用循环的方法输入m,n之间所有的数,再根据题意挑选。
细节处理:此题应注意输出的格式,及最后一位后无空格。
答案:
#include
#include
#include
using namespace std;
int main()
{
int n,m,a,b,c,i,x,e;
while(cin>>n>>m)
{
x=0;
e=0;
for(i=n;i<=m;i++)
{
a=i/100;
b=(i%100)/10;
c=i%10;
if(i
aaa+bbb+ccc)
{ if(e==0)
{x++;
e++;
cout< else {cout<<" "< }}

if(x0)
cout<<“no”< else cout< }
}
细节分析:用循环的方法输入数据,用if来判断是否符合条件。输出时应注意格式。
3
给你n个整数,求他们中所有奇数的乘积。
思路:p%2!=0即为奇数。
答案:#include
#include
#include
#include
using namespace std;
int main()
{
int n,m,i,p;
while(cin>>n)
{
m=1;
for(i=0;i {
cin>>p;
if(p%2!=0)
m=m*p;
}
cout< }
return 0;
}
细节分析:题目清晰明了,用if判断即可。
4
对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x 思路:判断素数只需将其从2除到其本身的算术平方。
答案:#include
#include
#include
#include
using namespace std;
int main()
{
int m,x,y,b;
while(cin>>x>>y)
{
if(x
0&&y0)
break;
b=0;
for(int i=x;i<=y;i++)
{
m=i*i+i+41;
for(int j=2;j {
if(m%j
0)
b++;
}
}
if(b0)
cout<<“OK”< else
cout<<“Sorry”< }
细节分析:运用两次循环分别将其输入和判断。判断时运用到sqrt()。
5
多项式的描述如下:
1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + …现在请你求出该多项式的前n项的和。
思路:将数列用for循环输入然后用pow来确定元素正负号。
答案:
#include
#include
#include
using namespace std;
int main()
{
int m,i,n,k;
double sum,s;
while(cin>>m)
for(i=0;i {
cin>>n;
sum=0;
for(k=1;k<=n;k++)
{
s=pow(-1,k+1);
sum+=s1/k;
}
cout< }
return 0;
}
细节分析:注意使用必要的数学函数,用循环加和输出。
6
有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。
思路:考虑多种情况,n/m是否为整数,若为整数,每m个求一次平均值,若m不为整数则前n/m求平均值后n%m个求平均值。
答案:
#include
#include
#include
#include
using namespace std;
int main()
{
int n,m,t=0;
while(cin>>n>>m){
for(int i=1;i<=n;i++){
t+=2
i;
if(i%m
0||in){
if(i!=n){
cout< t=0;
}
else{
if(i%m
0&&i==n)
cout< else
cout< }
}
}
细节分析:理清逻辑关系,通过多个if判断所有情况。输出注意格式。
7
青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。
思路:用sort对数列进行排序,然后从第二个输出n-2个元素。
答案:
#include
#include
#include
using namespace std;
int main()
{
int n,i;
double sum=0,m[110],s;
while (cin>>n)
{
sum=0;
for (i=0;i {
cin>>m[i];
}
sort(m,m+n);
for (i=1;i {
sum=sum+m[i];
}
s=sum/(n-2);
cout< }
return 0;
}
细节分析:使用数学函数sort对数列进行排序,保留两位有效数字的格式也经常使用。
8
输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。
思路:用函数abs取元素的绝对值,然后将大值向后移动,进行排列。
答案:
#include
#include
using namespace std;
int main()
{
int a,i,j,t;
while (cin>>a&&a)
{
int b[a];
i=0;
while (i cin>>b[i++];

    for(i=0;i

}
细节分析: 用函数abs进行取绝对值然后排列,元素排列时注意赋值给不变的t,之后再换回。
9
有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。
思路:将x与数列中元素做大小比较,将其放在相应位置。
答案:
#include
using namespace std;
int main()
{
int n,a[110],m,i,j,s=0;
while(cin>>n>>m)
{
if(m0&&n0)
return 0;
for(i=1;i<=n;i++)
{
cin>>a[i];
}
a[n+1]=m;
for(j=1;j<=n;j++)
for(i=1;i<=n+1-j;i++)
{
if(a[i]>a[i+1])
{s=a[i];
a[i]=a[i+1];
a[i+1]=s;}
}s=0;
cout< for(i=2;i<=n+1;i++)
{
cout<<" "< }cout< }
}
细节分析:将x与数组元素作比较并插入数组中,使其以新的元素输出。
10
作为杭电的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的日子,养家糊口就靠它了,但是对于学校财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小胡老师最近就在考虑一个问题:如果每个老师的工资额都知道,最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢?这里假设老师的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。
思路:将工资进行从一百到一元逐个选择。
答案:
#include
#include
using namespace std;
int main(void)
{
int n,i,x,sum;
while(cin>>n)
{
if(n0)
return 0;
sum=0;
for(i=0;i {
cin>>x;
sum+=x/100;
x%=100;
sum+=x/50;
x%=50;
sum+=x/10;
x%=10;
sum+=x/5;
x%=5;
sum+=x/2;
x%=2;
sum+=x;
}
cout< 细节分析:结构清晰,将其元素逐个选择,取余数即可得答案。
11
A和B 都是由3个整数组成,分别表示时分秒,比如,假设A为34 45 56,就表示A所表示的时间是34小时 45分钟 56秒。
思路:将时间分为时,分,秒,逐个相加。
答案:
#include
#include
#include
using namespace std;
int main(void)
{
int n,i;
int t[6];
while(cin>>n)
{
while(n–)
{
for(i=0;i<6;i++)
cin>>t[i];
t[1]+=(t[2]+t[5])/60;
t[2]=(t[2]+t[5])%60;
t[0]+=(t[1]+t[4])/60;
t[1]=(t[1]+t[4])%60;
t[0]+=t[3];
cout< }
return 0;
}
}
细节分析:相加时注意为60进一,%,/的不同含义。
12
A-B求的是两个集合的差,就是做集合的减法运算。
思路:用sort函数对元素进行排序,将集合a减去a与b的交集。
答案:
#include
#include
int a[105],b[105];
using namespace std;
int main()
{
int m,n,i,j,k;
while(cin>>n>>m,!(n
0&&m0))
{
k=0;
for(i=1;i<=n;i++)
cin>>a[i];
for(j=1;j<=m;j++)
cin>>b[j];
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
if(a[j]b[i])
a[j]=0;
}
sort(a,a+n+1);
for(i=1;i<=n;i++)
{
if(a[i]!=0)
{
cout< k++;
}
}
if(k
0)
cout<<“NULL”;
cout< }
return 0;
}
细节分析:注意数学函数的运用。
13
求AB的最后三位数表示的整数。说明:AB的含义是“A的B次方”
思路:运用long long int定义元素,使元素再%1000。
答案:
#include
using namespace std;
int main()
{
long long int a,b,i;
while(cin>>a>>b)
{
if(a
0&&b==0)
return 0;
long long int s=1;
for(i=1;i<=b;i++)
s=(s*a)%1000;
cout< }
return 0;
}
细节分析:注意定义元素时的大小。
14
大家都知道,手机号是一个11位长的数字串,同时,作为学生,还可以申请加入校园网,如果加入成功,你将另外拥有一个短号。假设所有的短号都是是 6+手机号的后5位,比如号码为13512345678的手机,对应的短号就是645678。
思路:将电话号码最后六位输出,在其前面加上数字6。
答案:
#include
#include

int main()
{
char tel[12];
int i,t;
scanf("%d",&t);
while(t–)
{
scanf("%s",tel);
printf(“6”);
for(i=6;i<11;i++)
{
printf("%c",tel[i]);
}
printf("\n");
}
return 0;}
细节分析:将号码从第六位输出,可将号码看做字符串。
15

妈妈每天都要出去买菜,但是回来后,兜里的钱也懒得数一数,到底花了多少钱真是一笔糊涂帐。现在好了,作为好儿子(女儿)的你可以给她用程序算一下了。
思路:用double定义数字,最后四舍五入。
答案:
#include
#include
#include
using namespace std;
int main()
{
char a[100];
double m,n,k=0;
while(cin>>a>>m>>n)
{
k+=m*n;
}
printf("%.1lf\n",k);
return 0;
细节分析:定义小数时用double,注意四舍五入和精度。

总结:上述题目多数用到for循环,for循环可用于输入数组,并且可以判断是否符合条件。定义数组和元素大小时注意数组元素的大小,longlongint,double等。做题时注意数学函数的应用,sort,qurt等。最后输出时注意输出格式。c程序处理的数据有常量和变量两种形式,基本数据类型有整型,实型,字符型等。开头文件有#include,#include,#include,#include,using namespace std;保留小数点: cout<>。输出:cout<<。赋值号:=。等号:==。break,循环立即终止,从循环语句后的第一条语句开始执行。注意,数组的长度声明永远不能省。swap(x[a][j],x[b][j]);用于数组元素的交换。定义数组时一般要比题目规定大一些。

你可能感兴趣的:(c++程序设计课程设计论文)