C++基础学习---问题的模块化求解2-特殊函数之相关练习
问题的模块化求解2-特殊函数之相关练习题目及解答1.编写递归函数求数组最大值编写函数求一个数组中数组元素的最大值,要求必须用递归方法解决。/编写函数求一个数组中数组元素的最大值,要求必须用递归方法解决/# include <iostream>using namespace std;int GetMax(int num[], int a,int b){//求第a项到第b项的最大值int
问题的模块化求解2-特殊函数之相关练习
题目及解答
1.编写递归函数求数组最大值
编写函数求一个数组中数组元素的最大值,要求必须用递归方法解决。
/编写函数求一个数组中数组元素的最大值,要求必须用递归方法解决/
# include <iostream>
using namespace std;
int GetMax(int num[], int a,int b){ //求第a项到第b项的最大值
int c=num[b];
if(b == a) return c;
else{
c = (GetMax(num,a,b-1)>c)?GetMax(num,a,b-1):c;
return c;
}
}
int main(){
//---define---
int num[20];
int n;
int Max;
//---input---
cin>>n;
for (int i=0;i<n;i++)
{
cin>>num[i];
}
//---execute---
Max = GetMax(num, 0, n-1);
//---output---
cout<<Max<<endl;
return 0;
}
2.编写内联函数求矩形的面积和周长
编写函数求矩形的面积和周长,由于算式非常简单,请使用内联函数方式编写,提高程序运行效率
/编写函数求一个数组中数组元素的最大值,要求必须用递归方法解决/
# include <iostream>
using namespace std;
inline int GetSize(int a, int b){
int size = a*b;
return size;
}
inline int GetPerimeter(int a, int b){
int perimeter = 2*(a+b);
return perimeter;
}
int main(){
//---define---
int a,b;
//---input---
cin>>a;
cin>>b;
//---execute---
//---output---
cout<<GetSize(a,b)<<" ";
cout<<GetPerimeter(a,b)<<endl;
return 0;
}
3.编写重载函数来打印字符串
编写函数 print_spaced 来打印字符串,要求打印出的字符串每个字母之间都有一个空格。要求编写两个同名函数,一个支持字符数组输入,另一个支持string类型输入。然后编写main函数测试这两个函数,第一个使用字符数组输入,第二个使用string类型输入。
/编写函数 print_spaced 来打印字符串,要求打印出的字符串每个字母之间都有一个空格。
要求编写两个同名函数,一个支持字符数组输入,另一个支持string类型输入。
然后编写main函数测试这两个函数,第一个使用字符数组输入,第二个使用string类型输入。/
# include <iostream>
# include <cstring>
using namespace std;
void print_spaced(char word[], int length){
int i;
cout<<word[0];
if(length>1){
for(i=1;i<length;i++) cout<<" "<<word[i];
}
}
void print_spaced(string xword, int count){
int i;
int pos = 1;
if(count>1){
for(i=1;i<count;i++){
xword.insert(pos," ");
pos = pos + 2;
}
}
cout<<xword;
}
int main()
{
//---define---
int i,length = 0,strlen;
char word[100];
string xword;
//---input---
cin.getline(word,100);
getline(cin,xword);
//---execute---
for(i=0;word[i]!='\0';i++) length++;
print_spaced(word, length);
cout<<endl;
strlen = xword.length();
print_spaced(xword, strlen);
//---output---
return 0;
}
4.排序函数重载
编写一组重载的排序函数,可以对两个整数、三个整数、四个整数、整数数组从大到小排序,函数名为sort,其中数组排序应使用递归的方法,另补充print函数,在一行显示排序后的数组元素。
/编写函数求一个数组中数组元素的最大值,要求必须用递归方法解决/
# include <iostream>
using namespace std;
void sort(int &a,int &b){
int tmp;
if(a<b){
tmp = b;
b = a;
a = tmp;
}
}
void sort(int &a,int &b,int &c){
sort(a,b);
sort(a,c);
sort(b,c);
}
void sort(int &a,int &b,int &c,int &d){
sort(b,c,d);
sort(a,c,d);
sort(a,b,d);
sort(a,b,c);
}
void sort(int (&num)[100],int n){
int i,j,tmp;
for(i=0;i<n;i++){
for(j=0;j<n-1;j++){
if(num[j]<num[j+1]){
tmp = num[j+1];
num[j+1] = num[j];
num[j] = tmp;
}
}
}
}
void print(int num[], int n){
cout<<num[0];
for(int i=1;i<n;i++){
cout<<" "<<num[i];
}
}
int main()
{
int a,b,c,d;
int data[100]; //数组
int k,n,i;
cin>>k;
switch(k)
{
case 1: //情况1,两数排序
cin>>a>>b;
sort(a,b);
cout<<a<<" "<<b<<endl;
break;
case 2: //情况2,三数排序
cin>>a>>b>>c;
sort(a,b,c);
cout<<a<<" "<<b<<" "<<c<<endl;
break;
case 3: //情况3,四数排序
cin>>a>>b>>c>>d;
sort(a,b,c,d);
cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
break;
case 4: //情况4,数组排序
cin>>n;
for(i=0;i<n;i++)
{
cin>>data[i];
}
sort(data,n);
print(data,n);
break;
}
return 0;
}
5.编写递归函数来使字符串逆序
编写函数来使一个字符串逆序输出,要求必须用递归函数。
/编写函数来使一个字符串逆序输出,要求必须用递归函数。/
# include <iostream>
using namespace std;
char tmp;
int i;
void GetSwap(char (&word)[100],int n){ //对前n个数进行逆序操作
//1.对前n-1个数进行逆序
//2.保存word[n-1]
//3.将已经逆序了的数后移一位(0到n-2)
//4.将word[n-1]移到第一位
if(n>1){
GetSwap(word, n-1);
tmp = word[n-1];
for(i=n-2;i>=0;i--) word[i+1]=word[i];
word[0]=tmp;
}
}
int main()
{
//---define---
char word[100];
int length=0;
//---input---
cin.getline(word,100);
//---execute---
for(int i=0;word[i]!='\0';i++){
length++;
}
//cout<<"长度"<<length<<endl;
GetSwap(word,length);
//---output---
for(int i=0;i<length;i++){
cout<<word[i];
}
return 0;
}
更多推荐
所有评论(0)