CPP2022-16-宏、函数重载与函数模板
6-1 通用对数函数(宏)
分数 5
全屏浏览题目
切换布局
作者 李祥
单位 湖北经济学院
C语言库函数只提供以 e 和 10 为底数的对数函数。我们自行设计一个以任意正实数 a 为底数、任意正实数 x 为真数的通用对数函数 logax。
函数原型
double LogA(double a, double x);
说明:参数 a 是底数,a>0 且 a=1,x 是真数(幂),x>0,函数值是对数(指数) logax。
请在空白处填写适当内容,用带参数的宏替换命令来实现相同的功能。
裁判程序
#include <stdio.h> #include <math.h> __________ int main() { double a, x, y; scanf("%lg%lg", &a, &x); y = LogA(a, x); printf("%g\n", y); return 0; }
注:裁判程序有很多,不止一个。
输入样例
0.49 0.16807
输出样例
2.5
#define LogA(a,b)(log(b)/log(a))
6-2 平方函数(宏)
分数 5
全屏浏览题目
切换布局
作者 李祥
单位 湖北经济学院
已知平方函数的原型如下:
函数原型
double Sqr(double x);
说明:参数 x 是任意实数,函数值为 x 的平方 x2。
请在空白处填写适当内容,用带参数的宏替换命令来实现相同的功能。
裁判程序
#include <stdio.h> __________ int main() { double a, b; scanf("%lg", &a); b = Sqr(a); printf("%g\n", b); return 0; }
注:裁判程序有很多,不止一个。
输入样例
-0.7
输出样例
0.49
要求:不要使用 C 标准库函数如 pow 等。
#define Sqr(x)((x)*(x))
6-3 立方函数(宏)
分数 5
全屏浏览题目
切换布局
作者 李祥
单位 湖北经济学院
已知立方函数的原型如下:
函数原型
double Cube(double x);
说明:参数 x 是任意实数,函数值为 x 的立方 x3。
请在空白处填写适当内容,用带参数的宏替换命令来实现相同的功能。
裁判程序
#include <stdio.h> __________ int main() { double a, b; scanf("%lg", &a); b = Cube(a); printf("%g\n", b); return 0; }
注:裁判程序有很多,不止一个。
输入样例
-0.3
输出样例
-0.027
要求:不要使用 C 标准库函数如 pow 等。
#define Cube(x)((x)*(x)*(x))
6-4 余切函数(宏)
分数 5
全屏浏览题目
切换布局
作者 李祥
单位 湖北经济学院
C语言库函数只提供正切函数 tanx,没有提供余切函数 cotx。我们用带参数的宏替换命令来实现它。
cotx=1/tanx
已知余切函数的原型如下:
double Cot(double x);
说明:参数 x 是任意角度的弧度,函数值为 x 的余切 cotx。
请在空白处填写适当内容,用带参数的宏替换命令来实现相同的功能。
裁判程序
#include <stdio.h> #include <math.h> __________ int main() { double a, b; scanf("%lg", &a); b = Cot(a); printf("%g\n", b); return 0; }
输入样例
0.7853981633974483
输出样例
1
注:裁判程序有很多,不止一个。
#define Cot(x)(1/tan(x))
6-5 绝对值函数(宏)*
分数 5
全屏浏览题目
切换布局
作者 李祥
单位 湖北经济学院
C 函数库中提供整数绝对值 abs 函数和实数绝对值 fabs 函数,函数声明如下:
函数原型
int abs(int x); double fabs(double x);
说明:函数值为参数 x 的绝对值 ∣x∣。
请在空白处填写适当内容,用带参数的宏替换命令来实现相同的功能,将上面两个函数合并为一个,并命名为 Abs。
裁判程序1
#include <stdio.h> __________ int main() { int a, b; double x, y; scanf("%d %lg", &a, &x); b = Abs(a); y = Abs(x); printf("%d %g\n", b, y); return 0; }
输入样例1
-5 -2.5
输出样例1
5 2.5
输入样例2
7 3.8
输出样例2
7 3.8
输入样例3
0 0
输出样例3
0 0
输入样例4
-0 -0
输出样例4
0 0
注:裁判程序有很多,不止一个。
特别提示:注意实数为 -0.0 和 0.0 的情况。
#define Abs(x)((x)>0?(x):(x)<0?-(x):0)
6-6 面积计算器(函数重载)
分数 10
全屏浏览题目
切换布局
作者 何振峰
单位 福州大学
实现一个面积计算器,它能够计算矩形或长方体的面积。
函数接口定义:
int area(int x, int y); int area(int x, int y, int z);
第一个函数计算长方形的面积,其中x和y是长和宽。第二个函数计算长方体的表面积,x,y和z是长,宽和高。
裁判测试程序样例:
#include<iostream> #include<string> using namespace std; int area(int,int); int area(int,int,int); int main() { int i, repeat, c, x, y, z; cin>>repeat; for(i=0;i<repeat;i++){ cin>>c; if(c==2){ cin>>x>>y; cout<<area(x,y)<<endl; } if(c==3){ cin>>x>>y>>z; cout<<area(x,y,z)<<endl; } } return 0; } /* 请在这里填写答案 */
输入样例:
2
2 1 2
3 2 3 4
输出样例:
2
52
int area(int x, int y)
{return x*y;
}
int area(int x, int y, int z)
{return 2*(x*y+x*z+y*z);
}
6-7 最大值函数重载
分数 10
全屏浏览题目
切换布局
作者 杨军
单位 四川师范大学
编写重载函数myMax可分别求取两个整数,三个整数,两个双精度数的最大值。
函数接口定义:
裁判测试程序样例:
/* 请在这里填写答案 */ int main(){ cout<<myMax(3,4)<<endl; cout<<myMax(3,4,5)<<endl; cout<<myMax(4.3,3.4)<<endl; }
输入样例:
无
输出样例:
在这里给出相应的输出。例如:
4
5
4.3
#include<bits/stdc++.h>
using namespace std;
int myMax(int x,int y)
{return x>y?x:y;
}
int myMax(int x,int y,int z)
{if(x>y){if(x>z){return x;}else {return z;}}else {if(y>z){return y;}else{return z;}}
}
double myMax(double x,double y)
{return x>y?x:y;
}
6-8 函数重载实现两数相加
分数 15
全屏浏览题目
切换布局
作者 李廷元
单位 中国民用航空飞行学院
设计一个重载函数add,该函数有两个参数,可以实现两个类型相同的参数相加的操作,函数返回相加的结果。两个参数可以是整数、实数和字符串,但必须保证两个参数类型相同。
裁判测试程序样例:
#include <iostream> #include <string> #include <iomanip> using namespace std; /* 请在这里填写答案 */ int main() { int a, b; double c, d; string s1, s2; cin >> a >> b; cin >> c >> d; cin >> s1 >> s2; cout << add(a, b) << endl; cout << fixed << setprecision(2) << add(c, d) << endl; cout << add(s1, s2) << endl; return 0; }
输入样例:
3 5
3.3333 5.555555
hello world
输出样例:
8
8.89
helloworld
int add(int a,int b)
{return a+b;
}
double add(double a,double b)
{return a+b;
}
string add(string a,string b)
{return a+b;
}
6-9 最大值(模板)*
分数 10
全屏浏览题目
切换布局
作者 李祥
单位 湖北经济学院
请设计求两个对象最大值的函数模板。
#include <iostream>
using namespace std;/* 你提交的代码将被嵌在这里 */int main()
{int a, b, c;cin >> a >> b;c = Max(a, b);cout << c << endl;return 0;
}
输入样例
37 29
输出样例
37
template<typename T, typename U>
inline auto Max(T const& x, U const& y) -> decltype(x > y ? x : y)
{return x > y ? x : y;
}
6-10 绝对值函数模板*
分数 10
全屏浏览题目
切换布局
作者 李祥
单位 湖北经济学院
请设计求对象绝对值的函数模板。
#include <iostream>
using namespace std;/* 你提交的代码将被嵌在这里 */int main()
{int a, b;cin >> a;b = Abs(a);cout << b << endl;return 0;
}
输入样例1
37
输出样例1
37
输入样例2
-37
输出样例2
37
template<class T>
T Abs(T &x)
{return x<0?-x:x;
}
6-11 求最大值函数模板
分数 10
全屏浏览题目
切换布局
作者 董卫萍
单位 绍兴文理学院元培学院
函数重载实现了让同名函数处理不同类型的数据,但最好的解决方法是类型参数化,这样就得到了函数模板。使用模板的目的就是能够让程序员编写与类型无关的代码。要求设计求两个或三个不同类型变量之最大值的函数模板,并在主函数中进行测试。
函数接口定义:
template<class T> T myMax(T a,T b); template<class T> T myMax(T a,T b,T c); T是抽象类型,可以由int,double,char,string类型实例化,两个函数模板也可以进行重载。
裁判测试程序样例:
#include <iostream> #include <string> using namespace std; /* 你提交的代码将被嵌在这里 */ int main() { int a, b, c; double s,t; string x,y; cin>>x>>y; cout << myMax(x,y) << endl; cin>>a>>b>>c; cout << myMax(a,b,c) << endl; cin>>s>> t; cout << myMax(s,t) << endl; cin>> a >> b; cout << myMax(a,b) << endl; return 0; }
输入样例:
在这里给出一组输入。例如:
hello world!
12 3 45
3.14 5.67
120 -100
输出样例:
在这里给出相应的输出。例如:
world!
45
5.67
120
template<class T> T myMax(T x,T y)
{return x>y?x:y;
}
template<class T> T myMax(T x,T y,T z)
{if(x>y){if(x>z){return x;}else {return z;}}else {if(y>z){return y;}else{return z;}}
}
6-12 myMax模板函数 - C/C++ 函数与抽象
分数 10
全屏浏览题目
切换布局
作者 海洋饼干叔叔
单位 重庆大学
请设计合适的模板函数myMax(),使得下述程序可以正确运行。myMax()函数比较并返回两个同类型形参对象中的较大者。
裁判测试程序样例:
#include <iostream> using namespace std; //在此处定义myMax模板函数 int main(){ cout << myMax(3,2) << endl; cout << myMax(string("hello"),string("howdy")) << endl; cout << myMax(3.2,0.5) << endl; cout << myMax(true,false) << endl; return 0; }
输入样例:
输出样例:
3
howdy
3.2
1
请注意:函数题只需要提交相关函数的定义代码,不要提交完整程序。
template<class T>T myMax(T a,T b)
{return a>b?a:b;
}
CPP2022-16-宏、函数重载与函数模板相关推荐
- 函数重载和 函数模板
一.函数重载(overload) #include <iostream> using namespace std;//计算两个参数a,b的乘积的函数 int product(int a,i ...
- 函数重载与函数模板的比较
函数重载与函数模板是两个有些相似的概念,它们使用的函数名都一样,但用处不同.下面对两者进行简要介绍并指出它们的区别和联系. 函数重载(overloaded) 即定义函数名相同而形参列表(形参个数或形参 ...
- 函数重载(续)==》函数重载和函数指针在一起
函数重载与函数指针(这一块很重要,后续要继续学习): 当使用重载函数名对函数指针赋值时 根据重载规则挑选与函数指针参数列表一致的候选者 严格匹配候选者的函数类型与函数指针的函数类型 #include ...
- C++深度解析 类中的函数重载 -- 全局函数,普通成员函数,静态成员函数(28)
C++深度解析 类中的函数重载 -- 全局函数,普通成员函数,静态成员函数(28) 函数重载的回顾 函数重载的本质为相互独立的不同函数 C++中通过函数名和函数参数确定函数调用 无法直接通过函数名得到 ...
- 【C#】面向过程(18)——函数重载(函数重名)
函数重载(函数重名): 1.构成重载的条件:参数类型不同或者参数个数不同(不严谨的),与返回值无关. 2.函数重载:同名的两个函数的签名(参数的类型.顺序.个数)不能完全一致,否则就会异常.当两个函数 ...
- 当函数重载遇到函数默认值、函数指针
当函数重载遇到函数默认值.函数指针 一.当函数重载遇到函数默认值: 当我们的重载函数遇到函数有默认值的情况,编译器还能不能正确的做出合理的判断,下面我们通过实验来给出答案,下面是两个非常简单的重载函数 ...
- C++ 实验2:函数重载、函数模板、简单类的定义和实现
1.函数重载编程 编写重载函数add(),实现对int型,double型,Complex型数据的加法.在main()函数中定义不同类型 数据,调用测试. #include <iostream&g ...
- 函数重载、函数模板在四轴飞行器中的实际应用
1.今日主题 背景: 曾经在大三参加2017全国大学生电子设计竞赛,当时做的是四旋翼自主飞行器探测跟踪的题目,我是负责主控这一块的,中后期整个过程主要都是调试,在调试的过程中,我们需要将飞行器的各类数 ...
- 【C++】引用、内联函数、函数重载、函数默认参数(缺省参数)与占位参数、extern “C“ 浅析
端午继续~ C++对C的扩展 目录 引用 普通变量名引用 对数组的引用 对指针的引用 对函数的引用 引用作为函数的参数 引用作为函数的返回类型 常引用 内联函数 函数重载 函数的默认参 ...
最新文章
- python调用spark和调用hive_Spark(Hive) SQL数据类型使用详解(Python)
- 使用cURL执行HTTP请求(使用PROXY)
- 用上AI后,银行每年竟然能多赚1万亿美元丨麦肯锡最新调查报告
- pycharm如何设置注释的字体颜色
- 小县城也被互联网+撞了一下腰
- mysql数据库安全机制研究意义_MySQL数据库的安全机制
- android程序导入虚拟机,android项目打包成apk应用程序后部署到虚拟机上测试
- Linux下的网络配置与连接
- flex, swf 不能访问网络/本地资源
- 软件巨头Salesforce带来AutoML杀手TransmogrifAI
- 教你如何用C语言做一个简单的贪吃蛇
- 软件安装及软件包管理
- 机器视觉实验一(matlab实现)
- Opencv入门第一课打开窗口
- 计算机网络运动会入场词,运动会入场词
- 0基础怎么学习SEO?
- 小程序uni-app介绍
- 网络流量监控器mrtg全攻略
- 程序员 - 算法工程师 日常快捷入口大全
- 2021年特种作业防爆电气考试题库