C++课程学习[6]-问题的模块化求解2-特殊函数之相关练习

前言

学习资料详见中国大学MOOC之西安交大计算机程序设计(C++)课程,传送门
这一部分主要讲:问题的模块化求解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;
}

猜你喜欢

转载自blog.csdn.net/WangchangIsHere/article/details/80032407