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;
}