《c++程序设计》课程设计报告
班级:___2018级4班________________
学号:_____2018212766_______
报告人姓名:____高庆_______
实验地点:_东校区教学楼414________________________
完成起止日期: _2019年1月2日至2019年1月4日_
一.
Problem.D
题目描述:给定特定区间,作用在某一函数上,求值域内素数个数。
解题思路:首先自定义判断素数的函数;然后循环求出区间内的值,并依次调用函数判断是否为素数,并判断是否输出。
细节处理:本题关键在自定义判断素数的函数,判断素数总体有两种思路。一是:采用筛法。二是:采用循环判断2至n或者2至sqrt(n)中没有n的因子。
源代码:
#include<stdio.h>
#include<math.h>
int Primenum(int);
int main()
{
int x,y;
int i,j,cj;
while(scanf("%d %d",&x,&y)!=EOF)
{
j=0;
if(x==0&&y==0)break;
for(i=x;i<=y;i++)
{
cj=i*i+i+41;
if(Primenum(cj))
j++;
}
if(j==y-x+1)
printf("OK\n");
else
printf("Sorry\n");
}
}
int Primenum(int n)
{
int i,kf;
kf=(int)(sqrt(n)*1.0); //数据类型转换
for(i=2;i<=kf;i++)
if(n%i==0)
return 0;
return 1;
}
二
P roblem.E
题目描述:给定特定规律的多项式,求多项式前n项和。
解题思路:首先定义一个求多项式前n项和的函数,并且根据题意处理好正负号交替出现的情况。然后主函数调用自定义函数就解决问题。
细节处理:观察题目给出多项式正负号出现有规律,分母为奇数时符号为正,分母为偶数时,符号为负。依此规律,在用for循环累加和时,用变量i去模(mod)2,判断奇偶。
源代码:
#include<stdio.h>
double Dxs(double);
int main()
{
int m;
int i,j;
while(scanf("%d",&m)!=EOF)
{
for(i=1;i<=m;i++)
{
scanf("%d",&j);
printf("%.2lf\n",Dxs(j));
}
}
}
double Dxs(double n)
{
int i;
double s=0;
for(i=1;i<=n;i++)
{
if(i%2==0)
s=s-1/(i*1.0);
else
s=s+1/(i*1.0);
}
return s;
}
三.
Problem.G
题目描述:一组数据去掉最大值、最小值后,求平均值。
解题思路:首先定义一个数组,将数据全部存在数组中,然后并将数组按升序排列,最后-去掉数组的第一个与最后一个后求平均值。
细节处理:定义排序函数CMP时用到指针,要注意指针与数组的天然关系。
源代码:
#include<stdio.h>
#include<stdlib.h>
int Cmp(const void*,const void*);
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i,j,sum=0;
int *point;
point=(int*)malloc((n+2)*sizeof(int));
for(i=0;i<n;i++)
scanf("%d",(point+i));
qsort(point,n,sizeof(int),Cmp); //用Qsort调用比较函数
for(j=1;j<n-1;j++)
sum=sum+(point[j]);
printf("%.2lf\n",((double)sum)/(n-2));
}
}
int Cmp(const void*a,const void*b)
{ return *(int*)a-*(int*)b; } //定义比较函数