《c++程序设计》课程设计报告
班级:数学类一班 学号:2018212830
报告人姓名:李祥尊
实验地点: 山东农业大学东校计算机实验室409
完成起止时间:2019年1月2日-2019年1月4日
1、Problem D(题组1)
简要题意:
Problem Description
对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数。
Input
输入数据有多组,每组占一行,由两个整数x,y组成,当x=0,y=0时,表示输入结束,该行不做处理。
Output
对于每个给定范围内的取值,如果表达式的值都为素数,则输出"OK",否则请输出“Sorry”,每组输出占一行。
Sample Input
0 1
0 0
Sample Output
OK
解题思路:
看到题目,目的很明确。使用循环嵌套解决此问题,先使用一重循环得出给定区间内方程的范围,然后再使用一次循环依次判断区间内的数值是否都是素数。
细节处理:注意判断素数时应明确for(int k=2;k*k<=d;k++),减少循环次数。
源码:
#include<iostream>
using namespace std;
int main()
{
int x,y,i,d,f=0,l=0;
while(cin>>x>>y)
{
if(x==0&&y==0)
break;
else
{
for(i=x;i<y;i++)
{
d=i*i+i+41;
for(int k=2;k*k<=d;k++)
{
if((d%k)==0)
f++;
}
if(f==0)
l=l+1;
}
if(l==(y-x+1))
cout<<"OK"<<endl;
else
cout<<"Sorry"<<endl;
}
}
}
- 2、Problem E(题组1)
简要题意:
Problem Description
多项式的描述如下:
1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ...
现在请你求出该多项式的前n项的和。
Input
输入数据由2行组成,首先是一个正整数m(m<100),表示测试实例的个数,第二行包含m个正整数,对于每一个整数(不妨设为n,n<1000),求该多项式的前n项的和。
Output
对于每个测试实例n,要求输出多项式前n项的和。每个测试实例的输出占一行,结果保留2位小数。
Sample Input
2
1 2
Sample Output
1.00
解题思路:
目的为计算这个数列的前N项和,显然需要使用一次循环计算相加的和。由题意可知N为奇数时为正值为偶数时为负值,可以通过if语句来实现这种变换规律。也可以通过使用POW函数来实现。
细节解决:题目要求输出时精确到小数点后两位通过以下语句来实现cout<<setiosflags(ios::fixed)<<setprecision(2)<<s;。
源码:
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
int m,n,i;
float s;
while(cin>>m)
{
while(m--)
{
s=0;
cin>>n;
for(i=1;i<=n;i++)
s=s+(1/((pow((-1),(i+1)))*i));
cout<<setiosflags(ios::fixed)<<setprecision(2)<<s;
cout<<endl;
}
}
return 0;
}
- 3、Problem F(题组1)
简要题意:
Problem Description
有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。
Input
输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义如上所述。
Output
对于每组输入数据,输出一个平均值序列,每组输出占一行。
Sample Input
3 2
4 2
Sample Output
3 6
3 7
解题思路:
显而易见使用循环语句来实现以固定的数量来输出数据,虽然思路简单但是实现起来却并不轻松。使用if语句和continue来实现。
源码:
#include<stdio.h>
int main()
{
int n,m,i,sum,num;
while(scanf("%d %d",&n,&m)!=EOF)
{
num=0;sum=0;
for(i=2;i<=n*2;i+=2)
{
sum+=i;
num++;
if(num==m&&(i!=n*2))
{
printf("%d ",sum/num);
num-=m;
sum=0;
}
}
if(sum==0&&num==0) continue;
printf("%d\n",sum/num);
}
}
4、Problem G(题组1)
Problem Descripti