C++课程学习[5]-问题的模块化求解之相关练习

前言

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

题目及解答

编写字符串反转函数mystrrev

编写字符串反转函数mystrrev,该函数的功能是将指定字符串中的字符顺序颠倒(前变后,后变前)。然后再编写主函数验证之。注意,输入输出应在主函数中进行。
函数原型为 void mystrrev(char str[])

# include <iostream>

using namespace std;

int n;
char b[20];

void swap(char a[]){
  int i;
  for(i=0;i<=n;i++){
    b[i] = a[n-i];
    //cout<<b[i]<<endl;
  }
}

int main(){
  //---define---
  char a[20];
  int j;

  //---input---
  cin.getline(a,20);

  //---execute---
  for(j=0;a[j]!='\0';j++)
    n = j;
  swap(a);

  //---output---
   for(j=0;j<=n;j++)
    cout<<b[j];
  cout<<endl;

  return 0;
}

编写一组求数组中最大最小元素的函数

编写一组求数组中最大最小元素的函数。该组函数的原型为
int imax(int array[], int count); // 求整型数组的最大元素
int imin(int array[], int count); // 求整型数组的最小元素
其中参数count为数组中的元素个数,函数的返回值即为求得的最大或最小元素之值。要求同时编写出主函数进行验证。

# include <iostream>

using namespace std;

int imax(int array[], int count){
  int imax = array[0];
  int i;
  for(i=0;i<count;i++){
    if(array[i]>imax) imax = array[i];
  }
  return imax;
}

int imin(int array[], int count){
  int imin = array[0];
  int i;
  for(i=0;i<count;i++){
    if(array[i]<imin) imin = array[i];
  }
  return imin;
}

int main(){
  //---define---
  int num[100];
  int count;
  int i;

  //---input---
  cin>>count;
  for(i=0;i<count;i++)  cin>>num[i];

  //---execute---


  //---output---
  cout<<imax(num, count)<<endl;
  cout<<imin(num, count);

  return 0;
}

编写函数判断一个整数是否为素数

编写函数int isprime(int a);用来判断整数a是否为素数,若是素数,函数返回1,否则返回0。调用该函数找出任意给定的n个整数中的素数。 注意,1不是素数。

/*编写函数int isprime(int a);用来判断整数a是否为素数,若是素数,函数返回1,否则返回0。
调用该函数找出任意给定的n个整数中的素数。 注意,1不是素数。*/

# include <iostream>
# include <cmath>

using namespace std;

int isprime(int a){
  //cout<<"测试"<<a<<" "; 
  float lim = sqrt(a);
  if(a == 1 || a == 4) return 0;
  if(a == 2 || a == 3) return 1;
  for(int i=2;i<=lim;i++){
    if(a % i == 0)  return 0;
  }
  return 1;
}

int main(){
  //---define---
  int num[100];
  int xnum[100];
  int i=0;
  int count = 0;
  int flag = 0;

  //---input---
  cin>>num[0];
  while(num[count]!=0){
    if(isprime(num[count])){
        xnum[i]=num[count];
        i++;
    }
    count++;
    cin>>num[count];
  }
  //---output---
  cout<<xnum[0];
  for(count=1;count<i;count++)  cout<<" "<<xnum[count];

  return 0;
}

编写函数去除字符串中包含的非字母字符(不包括空格),并将小写字母转换成大写字母

编写函数去除字符串中包含的非字母字符(不包括空格),并将小写字母转换成大写字母。
注意,不在函数中输出。输入输出应在主函数中进行。

/*编写函数去除字符串中包含的非字母字符(不包括空格),并将小写字母转换成大写字母。
注意,不在函数中输出。输入输出应在主函数中进行。*/

# include <iostream>
# include <cctype>
using namespace std;

char upper(char a){
  if(a == ' ') return ' ';
  if(a>='a' && a<='z') return (char)toupper((int)a);
  if(a>='A' && a<='Z') return a;
  else  return '.';
}

int main(){
  //---define---
  char word[20];
  char xword[20];
  int i;
  int j=0;

  //---input---
  cin.getline(word, 20);

  //---execute---
  for(i=0;word[i]!='\0';i++){
    if(upper(word[i]) != '.'){
      xword[j]=upper(word[i]);
      j++;
    }
  }

  //---output---
  for(i=0;i<j;i++)  cout<<xword[i];

  return 0;
}

编写函数计算一个英文句子中的单词个数

编写函数计算一个英文字符串中的单词个数。
输入为一个最长500个字母的英文字符串,不包含数字和特殊字符,但可能包含一些英文标点符号(逗号、句点、问号)。标点符号独立出现时不视为一个单词。 单词间可能包含一个或多个空格。

/*一个最长500个字母的英文字符串,不包含数字和特殊字符,但可能包含一些英文标点符号(逗号、句点、问号)。
标点符号独立出现时不视为一个单词。 单词间可能包含一个或多个空格。。*/

# include <iostream>

using namespace std;

bool judge(char a){
  if(a>='a' && a<='z') return 1;
  if(a>='A' && a<='Z') return 1;
  else  return 0;
}

int main(){
  //---define---
  char word[600];
  int i,j;
  int count = 0;

  //---input---
  cin.getline(word, 600);

  //---execute---
  for(i=0;word[i]!='\0';i++){
    if(judge(word[i]) && !judge(word[i+1])) count++;
  }

  //---output---
  cout<<count;

  return 0;
}

猜你喜欢

转载自blog.csdn.net/wangchangishere/article/details/79714706