CPP2022-计算机类-期末考试
6-1 判断素数
分数 5
全屏浏览题目
切换布局
作者 李国瑞
单位 东北大学秦皇岛分校
设计一个函数,判断输入数据是否为素数,返回bool类型结果。
函数接口定义:
bool prime(int num);
说明:num为正整数。
裁判测试程序样例:
#include <iostream> #include <cmath> using namespace std; bool prime(int num); int main() { int i; cin>>i; bool result=prime(i); cout<<result<<endl; return 0; } /* 请在这里填写答案 */
输入样例1:
5
输出样例1:
1
输入样例2:
8
输出样例2:
0
bool prime(int num)
{if(num==1){return 0;}for(int i=2;i*i<=num;i++){if(num%i==0){return 0;}}return 1;
}
6-2 会员类实现
分数 5
全屏浏览题目
切换布局
作者 李国瑞
单位 东北大学秦皇岛分校
定义一个会员类Member,内有会员编号、会员名称、剩余金额三个数据成员。
请您帮助实现该类的两个成员函数:
①实现该类的构造函数用来初始化会员数据;
②实现会员消费函数:若剩余金额大于消费金额则将剩余金额减去消费金额并输出计算结果(保留2位小数),否则输出“ERROR!”信息。
Member类成员函数接口定义:
Member(int mid, string name, double money); void consume(double con);
裁判测试程序样例:
#include <iostream> #include <iomanip> #include <string> using namespace std; class Member { public: Member(int mid, string name, double money); void consume(double con); private: int MID; string Name; double Money; }; /* 你的代码将被嵌在这里 */ int main() { int mid; //mid表示用户编号 string name; //name表示用户名称 double money; //money表示剩余金额 double c; //c表示消费金额 cin>>mid>>name>>money; Member m(mid,name,money); cin>>c; m.consume(c); return 0; }
输入样例1:
101 Bob 2000
500
输出样例1:
1500.00
输入样例2:
102 Alice 1000
1200
输出样例2:
ERROR!
Member::Member(int mid, string name, double money)
{MID=mid;Name=name;Money=money;
}
void Member::consume(double con)
{if(con<=Money){cout<<fixed<<setprecision(2)<<Money-con<<endl;}else{cout<<"ERROR!"<<endl;}
}
7-1 符号函数
分数 10
全屏浏览题目
切换布局
作者 李国瑞
单位 东北大学秦皇岛分校
按照要求计算下列符号函数的值。
sign(x)=⎩⎨⎧10−1(x>0)(x=0)(x<0)
输入格式:
在一行内输入实数型自变量x的值。
输出格式:
在一行中输出A+B的值。
输入样例:
在这里给出一组输入。例如:
2.5
输出样例:
在这里给出相应的输出。例如:
sign=1
#include<bits/stdc++.h>
using namespace std;
int main()
{double x;cin>>x;if(x>0){cout<<"sign="<<1;}else if(x==0){cout<<"sign="<<0;}else{cout<<"sign="<<-1;}return 0;
}
7-2 斐波那契数列第n项
分数 10
作者 李国瑞
单位 东北大学秦皇岛分校
斐波那契数列的第1项和第2项都是1,此后各项满足F
n
=F
n−1
+F
n−2
。编写程序,输入正整数n,输出斐波那契数列第n项。输入格式:
在一行中输入不超过100的正整数n。输出格式:
在一行中输出斐波那契数列第n项的值。输入样例:
6
输出样例:
8
#include<bitsdc++.h>
using namespace std;int main()
{int n;cin>>n;int f1[100],f2[100],f[100];f1[0]=1;f2[0]=1;for(int i=1; i<=99; i++){f1[i]=f2[i]=0; //数组清零}if (n<=2) {cout<<1;return 0;}for(int i=3; i<=n ; i++){//f=f1+f2;int carry=0;for(int i=0; i<=99; i++){carry = f1[i]+f2[i]+carry; //注意进位处理f[i] = carry %10;carry = carry /10;}//f1=f2,f2=ffor(int i=0; i<=99; i++){f1[i]=f2[i];f2[i]=f[i]; }}//数组倒着找第一个不为零的位int pos = 99;while(f[pos]==0){pos--;}//倒着输出for(int i=pos; i>=0; i--){cout<<f[i];}return 0;
}
7-3 求500以内各位数字之和为指定数值的所有正整数的平均值
分数 10
全屏浏览题目
切换布局
作者 李国瑞
单位 东北大学秦皇岛分校
给定一个正整数n,判断整数m(1≤m≤500)的各位数字之和s是否为给定的值n,如果s==n,则m为满足条件的数。
求在1≤m≤500范围内所有满足上述条件的整数m的平均值。
输入格式:
在一行输入指定正整数n。
输出格式:
在一行内输出计算得到的平均值(结果保留2位小数)。
输入样例:
12
输出样例:
268.19
#include<bits/stdc++.h>
using namespace std;
bool check(int n,int num)
{int temp=num,ans=0;while(temp){ans=temp%10+ans;temp=temp/10;}if(ans==n){return 1;}else{return 0;}
}
int main()
{int n,cnt=0;double sum=0;cin>>n;for(int i=1;i<=500;i++){if(check(n,i)){sum=sum+i;cnt++;}}cout<<fixed<<setprecision(2)<<sum/cnt<<endl;return 0;
}