当前位置: 首页 > article >正文

C++ 函数编程题

目录

1、等差数列求和

2、判断数字位数

3、有规律的图形

4、简易计算器

5、素数对

6、用函数打印金字塔

7、用函数计算员工的平均工资

8、用函数计算斐波那契数列的指定项

(1)要求用非递归函数实现用函数计算斐波那契数列的指定项

(2)要求用递归函数实现用函数计算斐波那契数列的指定项

9、素数:要求将判断一个整数是否为素数用函数实现。

(1)判断一个整数是不是素数,并且将判断一个整数是否为素数用函数实现。 

(2)输入一组整数,共为n个,输出其中素数的个数。要求将判断一个整数是否为素数用函数实现。  

10、因数个数之和

11、计算小母牛数量

12、求x的n次幂,要求用递归函数,其中n为非负整数。

13、累加和

14、利用函数计算平均值

(1)编写一个函数f(x)判断整数为正整数、负整数、还是零。 利用该函数实现计算输入的n个整数中正整数的平均值。

(2)编写计算数组a中前n个元素的平均值的函数,计算平均值 


1、等差数列求和

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

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

【输出描述】 
一个正整数,代表前n项数据的和。

用例输入:
4 5
用例输出:
50 

#include <iostream>
using namespace std;
// 等差数列前 n 项和 Sn=n*a1+n(n-1)d/2
int arithmeticProgressionSum(int d, int n) {
	int a1 = 2, sum;
	sum = n * a1 + n * (n - 1) * d / 2;    // Sn=n*a1+n(n-1)d/2
	return sum; 
}
int main() {
	// differenceValue:差值,numberOfTerms:=n项数据
	int differenceValue = 1, numberOfTerms = 1;   
	cin >> differenceValue >> numberOfTerms;
	int sum;
	sum = arithmeticProgressionSum(differenceValue, numberOfTerms);
	cout << sum << endl;
	return 0;
}

2、判断数字位数

编写一个函数get_length,计算输入的正整数有多少位。输入的第一个数字不为 0。
【输入描述】
一个正整数(不超过10位)。
【输出描述】
一个正整数,代表数字的位数。

方法一:用while
#include <iostream>
using namespace std;
 
int get_length(int number) {
	int length = 0;   // length获取数字的位数 
	// 注意:5/10 = 0
	while(number>0){
		number=number/10;
		length++;
	}
	return length;
}
 
int main() {
	int number, count;
	cin >> number;
	count = get_length(number);
	cout << count;
	return 0;
}
方法二:用for 
#include <iostream>
using namespace std;
int get_length(int number) {
	int length;
	// 注意:5/10 = 0
	for (length = 0;number > 0;length++) {
		number /= 10;
	}
	return length;
}
int main() {
	int number, count;
	cin >> number;
	count = get_length(number);
	cout << count;
	return 0;
}

3、有规律的图形

编写一个函数graph,输出一个a行b列(1≤a,b≤10000)由任意符号组成的矩形。
【输入描述】 
一行,两个整数a, b(分别代表行与列,1≤a,b≤10000),一个字符,中间用空格分隔。
【输出描述】 
a行b列由指定字符组成的矩形。
【用例输入】 
3 4 @
【用例输出】 
@@@@
@@@@
@@@@

#include <iostream>
using namespace std;
//定义输出有规律的图形的函数
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() {
	int row, column;
	char c;
	cin >> row >> column >> c;
	//调用函数graph
	graph(row, column, c);
	return 0;
}

4、简易计算器

编写一个函数calcu进行四则运算的计算器。输入两个数,和四则运算符号,即可返回计算的结果。
【输入描述】 
一行,两个正整数(1≤数字≤10000),一个字符(‘+’、‘-’、‘*’、‘/’),内容之间用空格分隔。
【输出描述】 
一个整数,代表计算结果。

#include <iostream>
using namespace std;
void calcu(int number1, char opt, int number2) {
	switch (opt) {
	   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 opt;
	cin >> number1 >> opt >> number2;
	calcu(number1, opt, number2);
	return 0;
}

5、素数对

两个相差为 2 的素数成为素数对,5 和 7,17 和 19,求出不大于 n 的素数对,没有输出 “empty”。n≤1000。
【输入描述】 
输入一个 n。
【输出描述】 
n 以内的素数对。
【用例输入】
11
【用例输出】
3 5
5 7 

#include <bits/stdc++.h>
using namespace std;
int primeNumber(int x) {
	for (int i = 2;i <= sqrt(x);i++) {    	// sqrt()平方根函数
		// 如果 x 能被其他数整除,那就不是素数
		if (x % i == 0) {
			return 0;   //不是素数 
		}
	}
	return 1;   //是素数 
	
}
int main() {
	int n,flag=0;   // flag是用来判断有没有素数对 
	cin >> n;
	// 从2开始,因为要素数 
	for (int i = 2;i <= n-2;i++) {
		if ((primeNumber(i) == 1) && (primeNumber(i + 2) == 1)) {
			printf("%d %d\n",i,i+2);
			flag = 1;
		}
	}
	if (flag == 0) {   // 思路陷阱:因为最终要判断结果是不是,所以需要用到flag 
		cout << "empty";
	}
	return 0;
}

6、用函数打印金字塔

请输入金字塔层数:4
请输入金字塔符号:*
   *
  ***
 *****
*******   思路容易误解:星号之间没有空格,只是前面为空格,中间为星号 
【分析】
若输入四层:外循环为4次 
3空格  1星号
2空格  3星号
1空格  5星号
0空格  7星号
内层循环空格: 
      3空格:循环3次空格 
      2空格:循环2次空格 
      1空格:循环1次空格            循环次数=n-1-i(i=0开始) 
内层循环星号: 

方法一:
#include <iostream> 
using namespace std; 

// 定义一个函数pyramid,用于打印金字塔形状    思路陷阱:打印到中间的*结束之后的空格不用管 
// 参数n表示金字塔的层数,ch表示金字塔的符号,默认为'*'
void pyramid(int n,char ch='*') {
	for (int i = 0; i < n; i++) { // 外层循环,控制金字塔的层数
		for (int j = 0; j < n - 1 - i ; j++) { // 内层循环,打印每行前面的空格,使金字塔居中
			cout << " ";             
		}
		for (int j = 0; j < 2 * i + 1; j++) { // 内层循环,打印每行的符号,形成金字塔的宽度
			cout << ch;
		}
		cout << endl; // 每打印完一行后换行
	}
}

int main() { 
	int n; 
	cout << "请输入金字塔层数:"; 
	cin >> n; 

	char ch; 
	cout << "请输入金字塔符号:"; 
	cin >> ch; 

	pyramid(n, ch); 
	return 0; 
}
方法二:仅用了system("pause")
#include <iostream> 
#include <Windows.h> // 调用Windows API,这里主要用于system("pause")
using namespace std; 

// 定义一个函数pyramid,用于打印金字塔形状    思路陷阱:打印到中间的*结束之后的空格不用管 
// 参数n表示金字塔的层数,ch表示金字塔的符号,默认为'*'
void pyramid(int n,char ch='*') {
	for (int i = 0; i < n; i++) { // 外层循环,控制金字塔的层数
		for (int j = 0; j < n - 1 - i ; j++) { // 内层循环,打印每行前面的空格,使金字塔居中
			cout << " ";             
		}
		for (int j = 0; j < 2 * i + 1; j++) { // 内层循环,打印每行的符号,形成金字塔的宽度
			cout << ch;
		}
		cout << endl; // 每打印完一行后换行
	}
}

int main(void) { 
	int n; 
	cout << "请输入金字塔层数:"; 
	cin >> n; 

	char ch; 
	cout << "请输入金字塔符号:"; 
	cin >> ch; 

	pyramid(n, ch); // 调用pyramid函数,根据用户输入的层数和符号打印金字塔

	system("pause"); // 调用Windows API,使程序暂停,等待用户按键继续
	return 0; // 程序正常结束,返回0
} 

7、用函数计算员工的平均工资

意思为把计算员工的平均工资编写为函数,其中数组作为函数参数 

#include <iostream>
using namespace std;
int AverageSalary(int data[], int n) {         // 数组作为函数参数
	int sum = 0;
	for (int i = 0; i < n; i++) {
		sum += data[i];
	}
	return sum / n;
}
int main() {
	int salary[5] = { 12000,20000,30000,45000,9500 };
	cout << AverageSalary(salary, 5) << endl;
	return 0;
}

8、用函数计算斐波那契数列的指定项

(1)要求用非递归函数实现用函数计算斐波那契数列的指定项
#include <iostream>
using namespace std; 
long long fib(int n) {
	if (n < 0) {
		cout << "参数错误" << endl;
		return -1;
	}
	if (n == 1 || n == 2) {
		return 1;
	}
	long long a1 = 1;
	long long a2 = 1;
	long long tmp;
	for (int i = 3; i <= n; i++) {
		tmp = a1 + a2;
		a1 = a2;
		a2 = tmp;
	}
	return a2;
}
int main() {     // 注意:int main(void)=int main()
	cout << fib(5) << endl;   // 输出5 
	return 0;
} 
(2)要求用递归函数实现用函数计算斐波那契数列的指定项
#include<stdio.h>
int fib(int n){
	if (n == 1 || n == 2)
		return 1;
	else
		return fib(n - 1) + fib(n - 2);
}
int main(){
	printf("%d\n", fib(8));//输出21
	return 0;
}

9、素数:要求将判断一个整数是否为素数用函数实现。

(1)判断一个整数是不是素数,并且将判断一个整数是否为素数用函数实现。 
#include <iostream>
#include <cmath>
using namespace std; 
bool sushu(int num){
	if(num<2)
		return false;
	else{
		for(int i=2;i<=sqrt(num);i++){   // 注意:为<= ,不是< 
			if(num % i==0)
			    return false;
		}
		return true;
	} 
}
int main(){
	int n;
	bool result; 
	cin >> n;
	result=sushu(n);
	if(result)
	    cout << n << "是素数";
	else
	    cout << n << "不是素数";
}
(2)输入一组整数,共为n个,输出其中素数的个数。要求将判断一个整数是否为素数用函数实现。  
#include <iostream>
#include <cmath>
using namespace std; 
bool sushu(int num){
    if(num<2)
		return false;
	else{
		// sqrt函数返回double类型,但在循环条件中应使用整数。可以直接使用整数来避免浮点数比较。i<=sqrt(num)
		for(int i=2;i<=sqrt(num);i++){   // 修改为<=以确保检查sqrt(num)本身
			if(num % i==0)
			    return false;
		}
		return true;
	} 
}
int main(){
	int i,n,a[20],count=0;
	bool result;      
	cin >> n;
	for(i=0;i<n;i++)
	   cin >> a[i];
	for(i=0;i<n;i++){
		result=sushu(a[i]);  //易错:sushu()返回值为bool类型,所以需要和true、flase比较,不要和1和0比较。 
	    if(result){    // 注意:if(result==true) 等于 if(result)
	    	cout << a[i] << "是素数" << endl;
	        count++;
	    }
	    else
	        cout << a[i] << "不是素数" << endl;
	}
	cout << "素数的个数为:" << count;    
	return 0;    
}

10、因数个数之和

输入一组整数,共n个,计算这些整数的因数个数之和。要求计算一个整数的因数个数用函数实现。 

#include <iostream>
using namespace std; 
int yinshu(int num){
	int count=0;
	for(int i=1;i<=num;i++)
	    if(num%i==0)
	    	count++;
	return count;
}
int main(){
	int i,n,a[20],sumCount=0;
	cin >> n;
	for(i=0;i<n;i++)
	   cin >> a[i];
	for(i=0;i<n;i++)
	   sumCount+=yinshu(a[i]);
	cout << sumCount;
	return 0;
} 

11、计算小母牛数量

若一头小母牛,从出生起第四个年头开始每年生一头母牛,按此规律,第n年时有多少头母牛。(用递归函数方法求解)
第1年:1头母牛
第2年:1头母牛
第3年:1头母牛
第n年(n>3):四个年头开始每年生一头母牛
   第n-1年的母牛数量+第n-3年的母牛数量(因为每头母牛从第四年n年开始生育,生育第n-3年个新母牛)  
   
输入样例:7
输出样例:6  

#include <iostream>
using namespace std;
// 递归函数,计算第n年的母牛数量
int cowCount(int n) {
    // 基本情况:前3年每年只有1头母牛
    if (n == 1 || n == 2 || n == 3) {
        return 1;
    }
    // 递归情况:第n年的母牛数量等于第n-1年的数量加上第n-3年的数量所生的新母牛
    return cowCount(n - 1) + cowCount(n - 3);
}
int main() {
    int n;
    cout << "请输入年份n: ";
    cin >> n;
    // 调用递归函数计算第n年的母牛数量,并输出结果
    cout << "第" << n << "年的母牛数量为: " << cowCount(n) << endl;
    return 0;
}

12、求x的n次幂,要求用递归函数,其中n为非负整数。

#include<iostream>
using namespace std;
double f(double x, int n)
{
	if (n == 0)
		return 1;
	return x * f(x, n - 1);
}
int main()
{
	double x;
	int n;
	cin >> x >> n;
	cout << f(x, n) << endl;
	return 0;
}

13、累加和

编写一个函数f(n)=1+2+…+n,利用该函数计算并输出f(m)+f(n)。 

#include<iostream>
using namespace std;
int f(int n)
{
	if (n == 1)
		return 1;
	return n + f(n - 1);
}
int main()
{
	int m, n;
	cin >> m >> n;
	cout << f(m) + f(n) << endl;   // f(3)+f(5)=21
	return 0;
}

14、利用函数计算平均值

(1)编写一个函数f(x)判断整数为正整数、负整数、还是零。 利用该函数实现计算输入的n个整数中正整数的平均值。
#include<iostream>
using namespace std;
// 判断整数为正整数、负整数、还是零
int f(int x)
{
	if (x > 0)
		return 1;
	else if (x < 0)
		return -1;
	else
		return 0;
}
int main()
{
	int n, x, count = 0;
	double s = 0;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> x;
		if (f(x) == 1)  
		{
			s += x;
			count++;
		}
	}
	cout << s / count << endl;
	return 0;
}
(2)编写计算数组a中前n个元素的平均值的函数,计算平均值 
#include<iostream>
using namespace std;
// 计算数组a中前n个元素的平均值
double avge(int a[20],int n)   //double返回类型以支持小数结果
{
	int sum=0;
	for(int i=0;i<n;i++)
	    sum+=a[i];
	//注意:static_cast<double>类型转换,其中cast为类型转换的意思 
	return static_cast<double>(sum)/n; // 强制转换sum为double进行除法  
}
int main()
{
	int n,a[20];
	cin >> n;
	for (int i = 0; i < n; i++)	
		cin >> a[i];	
	// 易错:不是avge(a[i],n),而是avge(a,n),因为a[i]为单个元素,但是要输入整个数组 
	cout <<avge(a,n) << endl;  
	return 0;
}


http://www.kler.cn/a/449302.html

相关文章:

  • 完整微服务设计 功能实现
  • 网络架构与IP技术:4K/IP演播室制作的关键支撑
  • 浅谈算法交易
  • 应用端sql慢查询监控分析
  • 负载均衡的原理
  • .NET Core 中使用 C# 获取Windows 和 Linux 环境兼容路径合并
  • 远程医疗:科技助力健康触手可及
  • linux socket编程之udp_dict_serve服务端--引入配置文件
  • 阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
  • python学习——洛谷 [NOIP1998 提高组] 拼数 两种方法
  • 盒子模型(内边距的设置)
  • 计算机组成原理的学习笔记(6)-- 存储器·其一 SRAM/DRAM/ROM/主存储器的初步认识
  • 学习threejs,scene.overrideMaterial全局材质效果
  • pycharm无法识别conda环境(已解决)
  • Jmeter对图片验证码的处理【超详细】
  • Html:点击图标链接发起QQ临时会话
  • 【LeetCode每日一题】——415.字符串相加
  • 【C++——迭代器】
  • 安科瑞能源物联网平台在老旧小区用电安全改造中的应用与优势
  • HTML+CSS+JS制作汽车网站(内附源码,含5个页面)
  • LLM与金融
  • Python绘制图表
  • SpringBoot3-第一篇(快速入门)
  • Source Insight 导入代码库 观察linux源码
  • canvas绘制仪表盘刻度盘
  • WorkManager