北科程序设计A第八周上机

目录

1. WERTYU

 2. n按规律转换为1

3. 多项式求值

4. 判断上三角函数

5. 计算阶乘

 6. 计算平均成绩

 7. 寻找第N个闰年

8. 判断素数

9. 8进制转换为10进制

 10. 6174问题


1. WERTYU

【题目描述】

把手放在键盘上时,稍不注意就会往右错一位。这样的话,Q会变成W,J会变成K等。输入一个错位后敲出的字符串,输出打字员本来想打出的句子。    

提示:空格不变,如果按下的是最左边的键也不变。

键盘布局为:

`1234567890-=

QWERTYUIOP[]\

ASDFGHJKL;'

ZXCVBNM,./

【输入格式】

一行表示打错的句子。(英文字母均为大写)

【输出格式】

一行表示打字员原本想打的句子。

【输入样例】

   O S, GOMR YPFSU/
【输出样例】
   I AM FINE TODAY.   

示例代码:

#include <stdio.h> 
#include <iostream> 
using namespace std;
const char *str= "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";//将键盘顺序放入字符串数组中,其中斜杠要用转义字符//   
int main()   
{  
    char c;  
    int i;  
    while ((c = getchar()) != EOF) //键盘输入 
    {  
        for (i = 0; str[i] && str[i] != c; i++);  
        if ((str[i]=='`')||(str[i]=='Q')||(str[i]=='A')||(str[i]=='Z')) //如如果按下的是最左边的键不变。 
            putchar(c);  
        else if(str[i]) putchar(str[i-1]); //否则如果在str中找到了匹配字符,输出错位的字符 
            
    }   
    return 0;  
 }  

 2. n按规律转换为1

【题目描述】

给你一个数n(0  < n < 1,000,000 ) ,n遵循下面的规律:

    当n=1,n = 1;

    当n为偶数, n = n/2;

    当n为奇数, n =  3*n+1。

自定义一个函数cal_step(int n),输入n,按上述规律最后转为1。输出每次变化的值,并计算转换的次数。

【输入格式】

一行一个整数 n

【输出格式】

第一行输出每次操作后得到的数,中间用空格分隔。

第二行输出一个整数表示操作总次数。

【输入样例】

10

【输出样例】

5 16 8 4 2 1

6

注意: 第一行行尾有一个空格

 示例代码:

#include <iostream>
using namespace std;
int globalvariable=0;//定义一个全局变量计数 
int cal_step(int n)
{
	
	if (n==1) 
	{
		cout<<endl; 
		return 0;
	}
	globalvariable++;
	if (n%2==0)
	{
	    cout<<n/2<<" ";
	    return cal_step(n/2);//递归调用,继续重新执行函数	
    }
	else if (n%2==1)
		 {
		    cout<<(3*n+1)<<" ";
		    return cal_step(3*n+1);//递归调用,继续重新执行函数
		 }
	return 0;
}
int main()
{
    int n;
	cin>>n;
	cal_step(n);
	cout<<globalvariable<<endl;
	return 0;
} 
### C++ 面向对象程序设计中的银行系统案例 在面向对象编程 (OOP) 中,C++ 是一种强大的工具,可以用来构建复杂的软件系统。对于银行系统的开发而言,通常会涉及多个类的设计以及它们之间的交互关系。以下是基于 OOP 原则的一个典型银行系统设计方案。 #### 类结构概述 一个典型的银行系统可以通过以下几个核心类来实现: 1. **Account**: 表示账户的基本信息和操作方法。 2. **Customer**: 客户的相关数据及其关联的账户列表。 3. **Bank**: 整体管理客户和账户的核心逻辑。 4. **Transaction**: 记录交易历史并提供存款、取款等功能。 这些类通过继承、封装和多态等特性实现了良好的扩展性和可维护性[^1]。 #### 示例代码展示 下面是一个简单的 C++ 实现例子,展示了如何利用 OOP 的概念创建基本的银行管理系统框架。 ```cpp #include <iostream> #include <vector> #include <string> using namespace std; // 账户基类 Account class Account { protected: string accountNumber; double balance; public: Account(string accNum, double initialBalance) : accountNumber(accNum), balance(initialBalance) {} virtual void deposit(double amount) { balance += amount; } virtual bool withdraw(double amount) { if (balance >= amount) { balance -= amount; return true; } cout << "Insufficient funds." << endl; return false; } double getBalance() const { return balance; } }; // 普通储蓄账户 SavingsAccount 继承自 Account class SavingsAccount : public Account { private: double interestRate; public: SavingsAccount(string accNum, double initBal, double rate) : Account(accNum, initBal), interestRate(rate) {} void applyInterest() { double interest = this->getBalance() * interestRate / 100; this->deposit(interest); } }; // 用户 Customer 类 class Customer { private: string name; vector<Account*> accounts; public: Customer(const string& customerName) : name(customerName) {} void addAccount(Account* newAcc) { accounts.push_back(newAcc); } void displayAccountsInfo() const { for(auto acc : accounts){ cout << "Account Number: " << acc->accountNumber << ", Balance: $" << acc->getBalance() << endl; } } }; int main(){ // 创建两个不同的账户实例 Account* checkingAcct = new Account("CHK123", 500); SavingsAccount* savingsAcct = new SavingsAccount("SAV456", 1000, 5); // 添加到客户的账户集合中 Customer johnDoe("John Doe"); johnDoe.addAccount(checkingAcct); johnDoe.addAccount(savingsAcct); // 执行一些业务功能测试 checkingAcct->withdraw(200); savingsAcct->applyInterest(); // 输出最终状态 johnDoe.displayAccountsInfo(); delete checkingAcct; delete savingsAcct; return 0; } ``` 此代码片段定义了一个基础版本的银行系统模型,其中包含了 `Account` 和其子类 `SavingsAccount`, 还有用于存储用户信息的 `Customer` 类型[^1]。 #### 设计要点分析 - 使用了抽象父类 `Account` 来统一接口标准; - 子类如 `SavingsAccount` 可以重写特定行为比如利息计算; - 数据成员被设置成受保护模式以便于派生类访问同时保持外部隔离; - 动态内存分配需注意资源释放防止泄漏问题发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值