C++ 函数编程题

embedded/2024/12/29 10:10:13/

目录

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/2return 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 = 0while(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 = 0for (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;//调用函数graphgraph(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;elsereturn fib(n - 1) + fib(n - 2);
}
int main(){printf("%d\n", fib(8));//输出21return 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 << "是素数";elsecout << 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++;}elsecout << 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)=21return 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;elsereturn 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.ppmy.cn/embedded/148521.html

相关文章

安装CPU版的torch(清华源)

1、安装指令&#xff1a; pip3 install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple2、验证torch是否安装成功 // 使用python验证 import torch print(torch.__version__)能正常打印版本即表示安装成功&#xff0c;如下图

基于WCF(C#)+SQL SERVER设计与实现的在线评测系统

基于WCF和SQL SERVER的在线评测系统设计与实现 摘要 目前&#xff0c;在线评测系统大多采用Linux系统作为运行平台&#xff0c;由于Linux系统人机交互能力差&#xff0c;使得系统部署要求高和维护难度大。本文针对以上问题进行分析&#xff0c;采用Windows操作系统作为运行平…

AMD | GPU | 深度学习 | 如何使用

问题&#xff1a;我在复现代码的时候&#xff0c;发现自己只拥有AMD的GPU&#xff0c;对于一个硬件小白来说&#xff0c;怎么办呢&#xff1f;我想看看怎么使用&#xff1b;解决&#xff1a; 首先要安装支持AMD的GPU的pytorch&#xff0c;pytorch&#xff1b; 使程序在安装了支…

电力-恶意代码合集

ESS发送客户端信息 科东测试ESS外发的客户端上报数量不足,将数据库中已接收的客户端信息全部删除,需要ESS重新再此发送客户端的全部信息。 通过修改:vim /kingsoft/conf_gd_sync_info.lua 【里面记录了已外发的客户端信息,增量上报】 将内容修改为:{} 修改完成后重启ESS管…

Java:链接redis报错:NoSuchElementException: Unable to validate object

目录 前言报错信息排查1、确认redis密码设置是否有效2、确认程序配置文件&#xff0c;是否配置了正确的redis登录密码3、检测是否是redis持久化的问题4、确认程序读取到的redis密码没有乱码 原因解决 前言 一个已经上线的项目&#xff0c;生产环境的redis居然没有设置密码&…

最适合智能体的身份认证技术:对比OpenID Connect、API keys、did:wba

最适合智能体的身份认证技术&#xff1a;对比OpenID Connect、API keys、did:wba 智能体需要新的身份认证技术 智能体对身份认证技术提出了新的需求&#xff0c;其中最重要的一个就是互联互通&#xff0c;特别是让任意两个智能体都能够互联互通。 其中的原理很简单&#xff1a;…

创建vue2项目或vue3项目超详细!

一、安装Node &#xff08;去官网下载所需版本即可&#xff0c;或私我发你安装包&#xff09; 1、检查Node版本 二、创建vue2项目 1、安装vue脚手架 npm install -g vue/cli 或 yarn global add vue/cli 2、查看vue的版本 3、创建一个项目 3.1 进入桌面路径&#xff08;创…

新闻网站的个性化推荐:机器学习的应用

3.1可行性分析 开发者在进行开发系统之前&#xff0c;都需要进行可行性分析&#xff0c;保证该系统能够被成功开发出来。 3.1.1技术可行性 开发该新闻网站所采用的技术是vue和MYSQL数据库。计算机专业的学生在学校期间已经比较系统的学习了很多编程方面的知识&#xff0c;同时也…