C++ 基础(十二)函数-题目练习

一、等差数列求和

描述

编写一个函数sum(…),计算等差数列中前n项数据的和。已知等差数列的起始项为2。例如:等差数列2,5,8,11…,需要利用sum函数求出前3项的和为15。
【题目要求】
① 等差数列中数字之间的差值不固定,需要自行输入。
② 输入要求的数列项数n。
③ 输出前n项数据的和。

输入描述

两个正整数;
第一个正整数为数列中数字之间的差值(1≤差值≤50);
第二个正整数为求和数列的项数n(1≤n≤100);
两项内容中间用空格分隔。

输出描述

一个正整数,代表前n项数据的和。

用例输入 1 

4 5

用例输出 1 

50
#include <iostream>
using namespace std;
//arithmetic progression 等差数列
// 创建一个等差数列求和公式 an = a1  + (n-1)d
// 等差数列前 n 项和 Sn=n(a1+an)/2 或Sn=na1+n(n-1)d/2
int arithmeticProgressionSum(int d, int n) {
	int a1 = 2, sum;
	sum = n * a1 + n * (n - 1) * d / 2;
	return sum;
}

int main() {
	// 差值difference value,项数 number of terms
	int differenceValue = 1, numberOfTerms = 1;
	cin >> differenceValue >> numberOfTerms;
	int sum;
	sum = arithmeticProgressionSum(differenceValue, numberOfTerms);
	cout << sum << endl;
	return 0;

}

二、判断数字位数

描述

编写一个函数get_length(…),计算输入的正整数有多少位。输入的第一个数字不为 0。

输入描述

一个正整数(不超过10位)。

输出描述

一个正整数,代表数字的位数。

用例输入 1 

123456

用例输出 1 

6
/*
* 编写一个函数get_length(…),计算输入的正整数有多少位。
* 让这个数一直 % 10 知道结果 == 0 时
* 计算 % 的次数
* 第一个数字不为 0
*/
#include <iostream>
using namespace std;

int get_length(int number) {
	int length = 0;
	// 不能用 模 % ;例:5%10 = 5;5/10 = 0
	for (;number > 0;length++) {
		number /= 10;
	}
	return length;
}

int main() {
	int number, frequency;
	cin >> number;
	frequency = get_length(number);
	cout << frequency;
	return 0;
}



三、有规律的图形

描述

编写一个函数graph(…),输出一个a行b列(1≤a,b≤10000)由任意符号组成的矩形。

输入描述

一行,两个整数a, b(分别代表行与列,1≤a,b≤10000)一个字符,中间用空格分隔。

输出描述

a行b列由指定字符组成的矩形。

用例输入 1 

3 4 @

用例输出 1 

@@@@
@@@@
@@@@
#include <iostream>
using namespace std;
//1、定义输出有规律的图形的函数
void graph(int row,int column, char c) {
	for (int i = 1;i <= row;i++) {
		for (int j = 1;j <= column;j++) {
			cout << c;
		}
		cout << endl;
	}
}

int main() {
	//2、接收输入行数与列数以及符号字符
	int row, column;
	char c;
	cin >> row >> column >> c;
	//3、调用函数graph
	graph(row, column, c);
	return 0;
}

四、简易计算器

描述

编写一个函数calcu(…),模拟可以进行四则运算的计算器。输入两个数,和四则运算符号,即可返回计算的结果。

输入描述

一行,两个正整数(1≤数字≤10000),一个字符(‘+’、‘-’、‘*’、‘/’),内容之间用空格分隔。

输出描述

一个整数,代表计算结果。

用例输入 1 

10 - 8

用例输出 1 

2

用例输入 2 

10 / 3

用例输出 2 

3
#include <iostream>
using namespace std;
// 正整数四则运算函数 + - * /
// 算数运算符 arithmetic operator
void calcu(int number1, char arithmeticOperator, int number2) {
	switch (arithmeticOperator) {
	case '+':
		cout << number1 + number2;
		break;
	case '-':
		cout << number1 - number2;
		break;
	case '*':
		cout << number1 * number2;
		break;
	case '/':
		cout << number1 / number2;
		break;
	default:
		cout << "请输入正确的运算符" << endl;
		break;
	}

}

int main() {
	int number1, number2;
	char arithmeticOperator;
	cin >> number1 >> arithmeticOperator >> number2;
	calcu(number1, arithmeticOperator, number2);
	return 0;
}

五、素数对

描述

两个相差为 2 的素数成为素数对,5 和 7,17 和 19,求出不大于 n 的素数对,没有输出 “empty”。n≤1000。

输入描述

输入一个 n。

输出描述

n 以内的素数对。

用例输入 1 

11

用例输出 1 

3 5
5 7
/*
* 质数(素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
* 素数 prime number
*/
#include <bits/stdc++.h>
using namespace std;

int primeNumber(int x) {
	// sqrt()平方根函数
	int t = sqrt(x);
	// 质数(素数)是指在大于1的自然数中
	for (int i = 2;i <=t;i++) {
		// 如果 x 能被其他数整除,那就不是素数,然后返回 0;否则返回 1
		if (x % i == 0) {
			return 0;
		}
	}
	return 1;
	
}

int main() {
	// flag是用来判断有没有素数对 
	int n,flag=0;
	cin >> n;
	// 从2开始,因为1既不是素数也不是合数
	for (int i = 2;i <= n-2;i++) {
		if ((primeNumber(i) == 1) && (primeNumber(i + 2) == 1)) {
			printf("%d %dn",i,i+2);
			flag = 1;
		}
	}
	if (flag == 0) {
		cout << "empty";
	}
	return 0;
}