CPP2022-计算机类-期末考试

文章包含多个C++编程问题,包括判断素数的函数实现,会员类的构造及消费函数,符号函数的计算,以及斐波那契数列第n项的求解和特定条件下的整数平均值计算。这些问题涉及基础算法和数据结构的应用。

 

 

 

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=f
        for(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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值