2015 C++ 答题

  1. 写一个多项式求和函数:1+x/1!+x/2!+... 要求第 n-1 项和第 n 项差值小于 1e-8
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;

const double precision = 1e-8;

double func(double x) {
	int i = 1;
	double fact = 1;		//阶乘,可以用整数来表示	
	double temp;	//暂存第n-1项
	double res = 1;
	do {
		if (i == 1)					//对第一项特别处理
			temp = 1;
		else
			temp = x / fact;		//用来保存第n-1项
		fact *= i;					//用来求阶乘
		i++;							//循环变量
		res += (x / fact);		//求和函数主体
	} while (abs(temp - (x / fact)) >= precision);	//精度判断
	return res;
}

int main() {
	//cout << setiosflags(ios_base::fixed) << setprecision(8) << precision << endl;
	//C++默认的流输出数值有效位是6,所以如果不设置精度的话会显示不出来
	//cout << resetiosflags;
	double x;
	cin >> x;
	cout << setprecision(8) <<func(x);
	return 0;
}
  1. 写一个递归函数,实现输入空格相隔的字符并且逆序输出其中的数字, 如输入:"a 2 x 4 b 3 c 5" 输出:5342
    其实有点不能很能懂题意,用递归函数实现输出么?只写一个输出字符串数组的,存疑吧。
#include<iostream>
using namespace std;

void func(char c[], int high) {
	if (high < 0)
		return;
	else if (c[high] >= '0' && c[high] <= '9') {
		cout << c[high];
		return func(c, high - 1);
	}
	else
		return func(c, high - 1);
}

int main() {
	char c[] = { "a 2 x 4 b 3 c 5" };
	func(c, 14);
}
  1. 写一个函数:1)掷两次骰子,把两次面数的和存到二维数组里,行表示第一次骰子面数,列表示第二次骰子面数,2)掷 1000 次,用二位数组 b 记录每两次掷骰子的情况出现的个数,最后输出 b 的所有信息。
    随机数的生成?
#include<iostream>
#include<ctime>
//#include<cstdlib>
using namespace std;

int main() {

	int n;
	int row, line;
	srand((unsigned)time(0));			//先开始初始化种子
	int res[7][7] = {0, };					//记得初始化


	cout << "请数组投掷次数:";
	cin >> n;

	for (int i = 0; i < n; i++) {
		line = 1 + rand() % 6;				//最小从一开始,这样圈定范围
		row = 1 + rand() % 6;
		res[line][row]++;
	}

	for (int i = 1; i <= 6; i++) {
		for (int j = 1; j <= 6; j++) {
			cout << res[i][j] << " ";
		}
		cout << endl;
	}

	return 0;
}
  1. 写一个函数 void replace(char str[], const char findStr[], const char replaceStr[]); 实现将 str 中的子字符串 findStr 替换为 replaceStr 并输出 (可以用 c 标准库函数,不能用string 类)。
    有几个点需要考虑:
    1、会不会findStr重复出现;
    2、出现findStrreplaceStr长度不一致的情况需要移位。
    从简考虑了,1不会重复出现,2默认长度一致。而且也没有用kmp。
#include<iostream>
using namespace std;

void replace(char str[], const char findStr[], const char replaceStr[]) {
	int i = 0, j = 0, k = 0;
	int flag;
	while (str[i] != 0) {		//找到匹配的开头
		int  k = i;
		flag = 1;
		while (findStr[j] != 0) {
			if (str[k] != findStr[j]) {
				flag = 0;
				break;
			}
			k++;
			j++;
		}
		if (flag == 1)
			break;
		i++;
	}

	if (flag == 0) {
		cout << "没有匹配的" << endl;
		return;
	}

	j = 0;
	while (replaceStr[j] != 0) {		//开始替换
		str[i] = replaceStr[j];
		i++;
		j++;
	}

	i = 0;
	while (str[i] != 0) {					//输出
		cout << str[i++];
	}
	return;
}

int main() {
	char str[] = { "hhh is a big shuaibi." };
	replace(str, "hhh", "zzz");
	return 0;
}
  1. 教师类,有一些属性 ,1)写构造函数(有几个参数要求有默认值)、拷贝构造函数 ,2) 、3)是要求写两个成员函数,4)写 main 对接口进行测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值