C++个人练习题

数据来源于校友提供,转载需注明

  1. 常见练习题

    1. 找出二维数组中的最大值

    1. //找出二维数组中的最大值。

      #include<iostream>

      using namespace std;

      int main()

      {

      int arry[3][5] =

      {

           {25,15,6,10,3},

           {32,36,85,9,4,},

           {65,6,61,56,7}

      };

      int row, column;//定义两个变量记录行号和列号。

      int max = arry[0][0];//默认最大值是第一个值。

      for(int i=0;i<3;i++)//双重for循环,找到最大值就交换。

           for (int j = 0; j < 5; j++)

           {

               if (arry[i][j] > max)

               {

                   max = arry[i][j];

                    row = i;

                    column = j;

               }

           }

      cout << "最大值是:  arry[" << row << "][" << column << "] = " << max << endl;

      }

               2. 查看斐波那契数组的个数

    1. #include<iostream>

      using namespace std;

      void feibo(int n)

      {

          int a[50];

          a[0] = 1;

          a[1] = 1;

          for (int i = 2; i < n; i++)

          {

              a[i] = a[i - 1] + a[i - 2];//a[2]=a[1]+a[0]的值

          }

          for (int i=0;i<n;i++)

          {

              if (i % 5 == 0) cout << endl;//5个数换行

              cout << a[i] << "\t\t";

          }

      }

      int main()

      {

          cout << "请输入要查看斐波那契数组的个数: " ;

          int n;

          cin >> n;

          feibo(n);

      }

        3.输出200到500之间的素数

//题目:输出200到500之间的素数。

#include<iostream>

using namespace std;

bool abc(int n)

{

for (int j = 2; j < (n/ 2); j++)//n=传入的i值,n最好是开根号,目的都是优化时间复杂度。

{

     if (n % j == 0)

     {

         return  false;

         break;

     }

}

return true;

}

int main()

{

//200和500肯定不是质数,偶数也不是质数,所以优化时间复杂度,

for (int i = 201; i < 500; i=i+2)

{

     if (abc(i))//调用上面判断质数的函数,如果为真,就输出结果。

     {

         cout << i << "\t";

     }

}

cout << endl;

}

4.★求前n项分数的和。

    1. //题目2:求1+ 1/2 + 1/4 + 1/6 + 1/8 + 1/10 +......的和。

      //求请N项的和,N由键盘输入。

      #include<iostream>

      #include<cmath>

      using namespace std;

      int main()

      {

      cout << "请输入要查看多少项分数的和:";

      int n;

      cin >> n;

      double sum = 1;

      double c;

      for (int i = 1; i < n; i++)//n=1时,for循环不执行

      {

           c = 1.0 / (2 * i);

           sum += c;

      }

      cout << sum << endl;

      }

      //题目1:求 1+ 1/2 + 1/4 + 1/8 + 1/16 + 1/32 +......的和

      //求请N项的和,N由键盘输入。

      #include<iostream>

      #include<cmath>

      using namespace std;

      int main()

      {

      cout << "请输入要查看多少项分数的和:";

      int n;

      cin >> n;

      double sum = 0;

      double c = 1;

      for (int i = 0; i < n; i++)

      {

           c = 1.0 / pow(2, i);//调用cmath头文件库,i=0,表示2的零次方。

           sum += c;

      }

      cout << sum << endl;

      }

    1. //题目1:求出前N项分数的和,2+ 3/2 + 5/3 + 8/5 + 13/8 + 21/13 +......

      //N由键盘输入

      #include<iostream>

      using namespace std;

      int main()

      {

      cout << "请输入要查看多少项分数的和:";

      int n;

      cin >> n;

      double a = 2;

      int b = 1;

      double sum = 0;

      for (int i = 0; i < n;i++)

      {

           sum += a/b;//两个整型相除结果是整型,所以定义为double;

           int temp = a;//暂存下一个a/b的值;

           a = a + b;

           b = temp;

      }

      cout << sum  << endl;

      return 0;

      }

      ★求出前N项分数的和

5. 判断是否为素数

#include<iostream>

#include<iomanip>//格式操纵符的头文件

using namespace std;

bool Isprime(int number)//判断是否为素数的函数

{

for (int i = 2; i < number; i++)

{

     if (number % i == 0)//输入20除以2的余数为零,就不是素数

     {

         return false;

     }

}

return true;

}

void printIsprime(int x)//传入的值就是打印输出素数的个数;

{

for (int i = 2; i < x; i++)

{

     if (Isprime(i))//调用上面的素数判断的函数,如果为真就输出值;

         cout << setfill(' ') << setw(5) << i;//设置填充字符和宽度

}

cout << endl;

}

int main()

{

cout << "请输入一个数,判断是否为素数:" << endl;

int number;

cin >> number;

Isprime(number);//调用判断素数的函数

if (Isprime(number))//如果调用判断素数的函数 为真 就输出是,反之为否。

     cout << number << "是一个素数。" << endl;

else

     cout << number << "不是一个素数。" << endl;

cout << "\n输入100,就查看100以内的素数。请输入要查看多少以内的素数:";

int a;

cin >> a;

printIsprime(a);//调用打印输出素数的函数;

}

6.★求1+2!+3!+...+20!阶乘的和。

    1. //题目:求1+2!+3!+...+20!的和。

      #include<iostream>

      using namespace std;

      int main()

      {

      int sum = 0;

      int j = 1;

      for (int i = 1; i <= 20; i++)

      {

           j = j * i;

           sum += j;

      }

      cout << "1+2!+3!+...+20!的阶乘和是: " << sum << endl;

      }


7.★用递归函数求10的阶乘总和。

//题目:求1+2!+3!+...+10!的和。

#include<iostream>

using namespace std;

int f(int x)

{

int total;

if (x == 0||x==1)

     total = 1;

else

     total = f(x - 1) * x;

return total;

}

int main()

{

cout<<"10的阶乘等于: "<<f(10);

}


8.★输出数组行和列交换后的值。

#include<iostream>

using namespace std;

int main()

{

int a[3][5] =

{

     {1,2,3,4,5},

     {6,7,8,9,10},

     {11,12,13,14,15} };//定义一个二维数组

int b[5][3];

cout << "数组中的值分别是:\n";

for (int i = 0; i < 3; i++)

     for (int j = 0; j < 5; j++)

     {

         cout << a[i][j] << "  ";

         if (j % 4 == 0 && j != 0) cout << endl;//每5个数就换行

         b[j][i] = a[i][j];

     }

cout << "数组行和列交换后的值分别是:\n";

for (int i = 0; i < 5; i++)

     for (int j = 0; j < 3; j++)

     {

         cout << b[i][j] << "  ";

         if (j % 2 == 0 && j != 0) cout << endl;

     

 

   

9.选择排序数组的值

#include<iostream>

using namespace std;

int main()

{

int a[] = { 12,56,32,56,45,18,32,54,90,87,845,36,16,1,2,3,4,5, };

int aSize = sizeof a / sizeof a[0];//这是求数组的长度,为什么要这么做?

//数组中值的个数有变化的时候,不需要修改程序。

//sizeof的函数加不加括号没影响,用数组的总长度除以单个数组元素的长度,得出数组的长度。

for (int number : a)//for 循环的新式写法

{

     cout << number << "\t";//输出原始数组的值

}

cout << endl;

for (int i = 0; i < aSize; i++)//通过双重for循环实现选择排序

{

     for (int j = i + 1; j < aSize; j++)//

     {

/*当i=0的时候,j从1开始到数组中的最大值,a[0]=12,a[1]=56,a[i]的值要与a[i+1]开始的每一个值比较,

* 第一次循环使a[0]的值是最小,第二次循环使a[1]的值最小,每次循环都使最小的值排在前面*/

         if (a[i] > a[j])//实现两个数交换。

         {

              int temp = a[i];

              a[i] = a[j];

              a[j] = temp;

         }

     }

}

cout << "选择排序后的数组:" << endl;

for (int i=0;i< aSize;i++)

{

     if (i % 5 == 0 && i!=0) cout << endl;//输出5个数就换行。

     cout <<a[i]<< "\t";

}

cout << endl;

}


10.输入三个数由小到大的排序。

//输入三个数比较大小并且由小到大的排序。

#include<iostream>

using namespace std;

int main()

{

    bool x = 1;

    while (x)

    {

         cout << "请输入三个数,用空格分隔并以回车键结束:" << endl;

         double a, b, c;

         cin >> a >> b >> c;

         if (a > b)//如果a>b就交换顺序,否则跳过条件

         {

             swap(a, b);

         }

         if (b > c)//如果b> c就交换顺序,否则跳过条件

         {

             swap(b, c);

         }

         if (a > b)//如果a > b就交换顺序,否则跳过条件

         {

             swap(a, b);

         }

         cout << "三个数从小到大的排序是:\n"  << a << " < " << b << " < " << c << endl<<endl;

         continue;

    }

};

11.输入三个数由小到大的排序(标准版)

    1. //输入三个数比较大小并且由小到大的排序。

      #include<iostream>

      using namespace std;

      void sort(float& a, float & b, float &c)

      {

          if (a > b)

               swap(a, b);

          if (b > c)

               swap(b, c);

          if (a > b)

               swap(a, b);

          cout << "排序后:" << a << " < " << b << " < "<<c << endl;

      }

      int main()

      {

          cout << "======由小到大的排序======\n";

          cout << "请分别输入三个数:";

          float a, b, c;

          cin >> a >> b >> c;

          sort(a, b, c);

      }

  1. 12.求sum =a+aa+aaa+aaaa+aaaaa的值,

    1. //求sum =a+aa+aaa+aaaa+aaaaa的值,n表示几个a

      //例如5+55+555+5555=6170,(n=4);a和n都由键盘输入

      #include<iostream>

      using namespace std;

      int main()

      {

         cout << "请输入a和n的值:";

         int a;

         int n;

         int sum = 0;

         cin >> a >> n;

         int temp = a;

         for (int i =0; i <n; i++)

         {

             sum += temp;

             temp = temp * 10 + a;

         }

         cout <<"sum= " << sum << endl;

      }

  1. 13.输入整数分别求奇数和偶数的和

    1. //先读入一个正整数N,然后计算并显示1N之间的所有奇数的和、偶数的和。

      //例如,如果N为10,这个程序输出25 30。

      #include<iostream>

      using namespace std;

      int main()

      {

      cout << "请输入一个正整数:";

      int n;

      cin >> n;

      int suma = 0;//存放奇数的和

      int sumb = 0;//存放偶数的和

      for(int i = 1; i <= n; i++)

      {

           if (i % 2 == 0)

               suma += i;

           else

               sumb += i;

      }

      cout <<"奇数的和为 " << sumb << endl;

      cout <<"偶数的和为 " << suma << endl;

      }

  1. 14.★编程实现先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面

    1. #/*编程实现先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。

      要求字符串s由键盘输入,并在显示器上输出字符串t的结果。

      例如:当s中的字符串为 “ABCDE”时,则t中的字符串应为“EDCBAABCDE”。*/

      #include<iostream>

      #include<string>

      using namespace std;

      int main()

      {

          cout << "请输入字符串:" << endl;

          string s;

          getline(cin, s);//存放输入的字符,包括空格。

          string t="";// 用于存储逆序后的字符串

          for (int i = s.length()-1; i >= 0; i--)

          {

               t+=s[i];// 将s中的字符按逆序存放到t中

          }

          t += s; // 将s中的字符按正序连接到t的后面

          cout << "t中的字符串为:"<<t<<endl;

      }

  1. 15.输入字符串输出倒序字符

    1. #include <iostream>

      #include <string>                          //需要使用字符串的头文件

      using namespace std;

      int main()

      {

          string str;                        //定义字符串的变量名字

          cout << "请输入一行字符串:" << endl;

          getline(cin, str);                //接受字符串的输入,包括空格。

          int len = str.length();           //变量len的长度等于输入字符的长度

          for (int i = len-1 ; i >=0; i--)   // 通过for循环实现字符倒序的输出

          {

              cout << str[i];

          }

          cout << endl;

          return 0;

      }

#include<iostream>

using namespace std;

int main()

{

int a[6]={ 75,66,53,12,9,25 };

cout << "选择排序后数组的值分别是:\n";

for (int i = 0; i < 6; i++)//i=0,j从1到5,分别比较大小

     for (int j = i + 1; j < 6; j++)

     {

         if (a[i] > a[j])

         {

              int temp = a[i];

              a[i] = a[j];

              a[j] = temp;

         }

     }

for (int n : a)//for循环对于输出数组的一种写法

     cout << n << "\t";

cout<<"\n冒泡排序后数组的值分别是:\n";

for(int i=0;i<6;i++)//每次循环都使最大的值排在最后

     for(int j=0;j<6-i-1;j++)

     {

         if (a[j] > a[j+1])

         {

              int temp = a[i];

              a[i] = a[j];

              a[j] = temp;

         }

     }

for(int i=0;i<6;i++)

     cout <<a[i]<< "\t";

}

 
  1. 16.选择排序和冒泡排序

    1. #include <iostream>

      using namespace std;

      class QuickSort {

      private:

          void partition(int arr[], int low, int high, int& pivotIndex)

          {

              int pivot = arr[high]; // 选择最后一个元素作为基准值

              int i = low - 1; // i表示小于等于基准值的区域的右边界

              for (int j = low; j <= high - 1; j++)

              {

                  if (arr[j] <= pivot)

                  {

                      i++;

                      swap(arr[i], arr[j]); // 将小于等于基准值的元素交换到左侧区域

                  }

              }

              swap(arr[i + 1], arr[high]); // 将基准值放置到正确的位置

              pivotIndex = i + 1; // 更新基准值的索引

          }

      public:

          void quickSort(int arr[], int low, int high)

          {

              if (low < high)

              {

                  int pivotIndex;

                  partition(arr, low, high, pivotIndex); // 分割数组

                  // 对基准值左侧和右侧的子数组进行递归排序

                  quickSort(arr, low, pivotIndex - 1);

                  quickSort(arr, pivotIndex + 1, high);

              }

          }

      };

      int main() {

          int size;

          cout << "请输入数组的大小:" << endl;

          cin >> size;

          int* arr = new int[size];

          cout << "请输入数组的元素:" << endl;

          for (int i = 0; i < size; i++)

          {

              cin >> arr[i];

          }

          QuickSort quickSort;

          quickSort.quickSort(arr, 0, size - 1); // 对数组进行快速排序

          cout << "排序后的数组:" << endl;

          for (int i = 0; i < size; i++)

          {

              cout << arr[i] << " ";

          }

          cout << endl;

          delete[] arr;

          return 0;

      }

      快速排序(上页)
  1. 17.快速排序(上页)

int main()

{

    int size;

    cout << "请输入数组的大小:" << endl;

    cin >> size;

    int* arr = new int[size];

    cout << "请输入数组的元素:" << endl;

    for (int i = 0; i < size; i++)

    {

        cin >> arr[i];

    }

    QuickSort quickSort;

    quickSort.quickSort(arr, 0, size - 1); // 对数组进行快速排序

    cout << "排序后的数组:" << endl;

    for (int i = 0; i < size; i++)

    {

        cout << arr[i] << " ";

    }

    cout << endl;

    delete[] arr;

    return 0;

}

快速排序有点难,了解即可,学会选择和冒泡就行。

  1. 18. 矩阵第n行和第m行交换,输出交换后的结果

    1. /*给定一个5×5的矩阵,将第n行和第m行(1≤m, n≤5)交换,输出交换后的结果。

      共六行,前五行为矩阵的每一行元素,元素与元素之间以一个空格分开。

      第六行包含两个整数m,n (1 <= m,n <= 5),以一个空格隔开*/

      #include<iostream>

      using namespace std;

      int main()

      {

      cout << "请输入5×5的矩阵元素:\n";

      int a[5][5];

      for(int i=0;i<5;i++)

           for (int j = 0; j < 5; j++)

           {

               cin >> a[i][j];//依次将键盘输入的数据存入数组中,

           }

      int m, n;

      cout << "请输入需要交换两行元素的行号" << endl;

      cin >> m >> n;

      for (int i = 0; i < 5; i++)

           swap(a[m - 1][i], a[n - 1][i]); //实现整行的交换,只换行号。

      for (int i = 0; i < 5; i++)

      {

           for (int j = 0; j < 5; j++)

           {

               cout << a[i][j] << " ";

           }

           cout << endl;

      }

      }

  1. 19.输入一行单词序列,相邻单词之间由1个或多个空格间隔,请对应地计算各个单词的长度并依次输出。

//输入一行单词序列,相邻单词之间由1个或多个空格间隔,请对应地计算各个单词的长度并依次输出。

#include <iostream>

#include <string>

using namespace std;

int main()

{

    string line;

    cout << "请输入一行单词序列:\n";

    getline(cin, line); // 读取一行输入

    string word = ""; // 用于存储当前正在处理的单词

    for (int i = 0; i < line.length(); i++)

    {

        if (line[i] != ' ')// 如果当前字符不是空格

        {

            word += line[i]; // 将当前字符加入到当前单词中

        }

        else  // 如果当前字符是空格

        {

            if (word != "") // 如果当前单词不为空

            {

                cout <<  word.length() << " "; // 输出当前单词的长度

                word = ""; // 重置当前单词为空

            }

        }

    }

    if (word != "")    // 处理最后一个单词

    {

        cout <<  word.length() << " "<<endl;

    }

}

注意:如果有标点符号 ( 如连字符,逗号 ) ,标点符号算作与之相连的词的一部分。没有被空格间开的符号串,都算作单词。

20.求圆柱体积

    1. //求圆柱体积

      /*1. 设圆半径r=2,圆柱的高h=3,pi=3.14,

      请设计一个函数floatcylinder(r, h)求圆柱体积(公式为c=r*r*h*pi)

      期望运行结果示例:

      r=2, h=3, pi=3.41

      c = 37.68

      */

      #include<iostream>

      #define PI 3.14

      using namespace std;

      double floatcylinder(float r, float h)

      {

          double c;

          return c = r * r * h * PI;

      }

      int main()

      {

          cout << "请输入圆的半径和高:";

          float r, h;

          cin >> r >> h;

          cout<<"圆的体积为: "<<floatcylinder(r, h);

      }

    1. /*1. 输入一个摄氏温度,要求输出华氏温度。

      转换公式为:华氏温度=(摄氏温度*1.8)+32

      期望运行结果示例:

      请输入一个摄氏温度:24 

      华氏温度为:75.2

      */

      #include<iostream>

      using namespace std;

      int main()

      {

          cout << "请输入一个摄氏温度; ";

          double t;

          cin >> t;

          double wendu = t * 1.8 + 32;

          cout << "华氏温度为:" << wendu << endl;

      }

      21.输入一个摄氏温度,要求输出华氏温度

    1. /*1.统计一个整数二维数组a[3][3]中数字为“1“的个数。

      期望运行结果示例:

      1 2 3

      2 4 1

      3 1 6

      数字为“1“的个数有:3个

      */

      #include<iostream>

      using namespace std;

      int main()

      {

          int a[][3]

          {

               {1,2,3},

               {2,4,1},

               {3,1,6}

          };

          int x = 1;

          int count = 0;//定义存储数字1个数的变量

          for(int i=0;i<3;i++)

               for (int j = 0; j < 3; j++)

               {

                   if (a[i][j] == x)//如果数组中的元素有等于x的值,count就加1.

                        count++;

               }

          cout << "数字“1”的个数有: " << count<<"个" << endl;

      }

      22.统计一个整数二维数组a[3][3]中数字为“1“的个数

    1. /*

      对候选人得票的统计程序。

      设有3个候选人,最终只有一个人能当选为领导。

      今有10人参加投票,从键盘先后输入这10个人所投候选人的名字,

      要求最后输出各个候选人的得票情况,

      以及当选人姓名(得票最多的为当选人,候选人结构体:姓名,票数)。*/

      #include<iostream>

      using namespace std;

      struct Person   //声明结构体类型Person

      {           

          char name[20];

          int count;

      };

      int main()

      {

          cout << "候选人共有3个人,分别为wu,li,liu以名字的个数计票." << endl << "共有10票,现在开始投票:\n" ;

          Person leader[3] = { "wu",0,"li",0,"liu",0 };

          char leader_name[20];  //为投票人所选的姓名

          for ( int i = 0; i < 10; i++)

          {

               cin >> leader_name;//先后输入10张票上所写的姓名

               for (int j = 0; j < 3; j++)

               {

                   if (strcmp(leader_name, leader[j].name) == 0)  //将票上姓名与3个候选人的姓名比较

                   {

                        leader[j].count++;    //与某一候选人的姓名相同就给他加一票

                   }

               }

          }

          for (int i = 0; i < 3; i++)

          {

               cout << leader[i].name << ":" << leader[i].count << endl;  //输出3个候选人的姓名和票数

          }

      //判断谁的票数最高,就输出当选人。

          if (leader[0].count> leader[1].count && leader[0].count > leader[2].count )

                   cout << "当选人为:" << leader[0].name << endl;

          if (leader[1].count > leader[0].count && leader[1].count  > leader[2].count)

                   cout << "当选人为:" << leader[1].name << endl;

          if (leader[2].count > leader[1].count && leader[2].count > leader[0].count)

                   cout << "当选人为:" << leader[2].name << endl;

          return 0;

      }

      对候选人得票的统计程序(上页)

    1. //判断谁的票数最高,就输出当选人。

          if (leader[0].count> leader[1].count && leader[0].count > leader[2].count )

                   cout << "当选人为:" << leader[0].name << endl;

          if (leader[1].count > leader[0].count && leader[1].count  > leader[2].count)

                   cout << "当选人为:" << leader[1].name << endl;

          if (leader[2].count > leader[1].count && leader[2].count > leader[0].count)

                   cout << "当选人为:" << leader[2].name << endl;

          return 0;

      }

      23.对候选人得票的统计程序(下页)

    1. /*可以按以下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个字母,

      W变成A,X变成B,Y变成C,Z变成D。字母按上述规律转换,其它字符不变。

      如“wonderful!”转换为“Asrhivjyp!”。

      输入一行字符,要求输出相应的密码。要输入的字符是:

      I am going to Beijing!

      */

      #include <iostream>

      #include <string>

      using namespace std;

      int main()

      {

          string text;

          cout << "请输入一行字符:";

          getline(cin, text); // 读取一行输入

          string password = ""; // 用于存储转换后的密码

          for (int i = 0; i < text.length(); i++)

          {

              char c = text[i];

              if ((c >= 'A' && c <= 'V') || (c >= 'a' && c <= 'v'))

              { // 如果是字母A-V或a-v

                  password += c + 4; // 将字母转换为后面第4个字母

              }

              else if ((c >= 'W' && c <= 'Z') || (c >= 'w' && c <= 'z'))

              { // 如果是字母W-Z或w-z

                  password += c - 22; // 将字母转换为A-D

              }

              else {

                  password += c; // 其它字符保持不变

              }

          }

          cout << "密码为:" << password << endl;

          return 0;

      }

      24.★输入字符串按规律输出密文(方法1)

    1. 输入字符串按规律输出密文(方法2)

/*可以按以下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个字母,

W变成A,X变成B,Y变成C,Z变成D。字母按上述规律转换,其它字符不变。

如“Wonderful!”转换为“Asrhivjyp!”。

输入一行字符,要求输出相应的密码。要输入的字符是:

I am going to Beijing!

*/

#include<iostream>

#include<string>

using namespace std;

int main()

{

    char text[] = "I am going to Beijing!";

    string password = "";

    for (int i = 0; i < sizeof(text); i++)

    {

         char c = text[i];

         if (c >= 'A' && c <= 'Z')//大写的A字符码是65,Z是90,如果超出就减掉26,

         {

             password += (c + 4) >= 90 ? c + 4 - 26 : c + 4;

         }

         else if (c >= 'a' && c <= 'z')//小写和大写规则一样。a=97,z=122.

         {

             password += ((c + 4) >= 122) ? (c + 4 - 26) : (c + 4);

         }

         else

             password += c;// 其它字符就保持不变

    }

    cout <<  "密码为:" << password;

}

两种方法任选其一,不要两种都学,你容易记混。有些细节还不能改,改了就出错,研究了好久,这种是我独创出来的,一般人我不告诉他。

  1. 25.输入字符串,大写转小写,小写转大写,全是大写或小写,其它字符不变输出。(下页)

    1. /*输入字符串,大写转小写,小写转大写,全是大写或小写,其它字符不变输出。*/

      #include <iostream>

      #include<string>

      using namespace std;

      int main()

      {

          cout << "请输入字符串:\n";

          string text;

          getline(cin, text);//把输入的字符串存入text中,

          string copyt = "";//用来存放字符串text中转换后的所有字符

          for (int i = 0; i < text.length(); i++)//用循环来逐个比较字符串的字符,text.length()这表示字符串的长度。

          {

               char c = text[i];//把字符串text中的每一个字符拿出来比较,

               if (c >= 'A' && c <= 'Z')

               {

                   copyt += c + 32;

               }

               else if (c >= 'a' && c <= 'z')

               {

                   copyt += c - 32;

               }

               else

                   copyt += c;//其它字符原本输出

          }

          cout << "\n大小写互转后的字符串:\n" << copyt << endl << endl;

          string str = "";//存放转换后大写的字符串

          for (int i = 0; i < text.length(); i++)

          {

               char c = text[i];

               if (c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z')

               {

                   str += toupper(c);//通过函数把字母全部转为大写

               }

               else

                   str += c;

          }

          cout << "用函数转换后全是大写的字符串:\n" << str << endl << endl;

          string s = "";//存放转换后小写的字符串

          for (int i = 0; i < text.length(); i++)

          {

               char c = text[i];

               if (c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z')

               {

                   s += tolower (c);//通过函数把字母全部转为小写

               }

               else

                   s += c;

          }

          cout << "用函数转换后全是小写的字符串:\n" << s << endl << endl;

      }

      输入字符串,大写转小写,小写转大写,全是大写或小写,其它字符不变输出。(上页)

    1. /*输入字符串,大写转小写,小写转大写,全是大写或小写,其它字符不变输出。*/

          cout << "用函数转换后全是大写的字符串:\n" << str << endl << endl;

          string s = "";//存放转换后小写的字符串

          for (int i = 0; i < text.length(); i++)

          {

               char c = text[i];

               if (c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z')

               {

                   s += tolower (c);//通过函数把字母全部转为小写

               }

               else

                   s += c;

          }

          cout << "用函数转换后全是小写的字符串:\n" << s << endl << endl;

      }

    1. /*简易口令程序系统。用户进入某系统,从键盘回答口令有3次机会。

      3次中任何一次回答正确均可进入系统(显示“You are welcome! ”),

      否则不能进入系统(显示“I am sorry” )。*/

      #include<iostream>

      #include<string>

      using namespace std;

      int main()

      {

          string passcode = "if you 520,我说公主请上车!";

          for(int j =0;j<3;j++)

          {

               cout << "请输入口令:";

               string code;

               getline(cin, code);

               if (passcode == code)

               {

                   cout << "You are welcome!" << endl;

                   break;

               }

               else

                   cout << "I am sorry" << endl;

          }

      }

      26.简易口令程序系统

    1. #include <iostream>

      using namespace std;

      int main()

      {

          int num;

          cout << "请输入一个正整数:";

          cin >> num;

          // 分解整数的每个位上的数

          int digit;

          int position = 1; // 位数的位置,个位数为1,十位数为2,百位数为3,以此类推

          while (num > 0)

          {

              digit = num % 10; // 取得最低位上的数

              cout << "第" << position << "位数是:" << digit << endl; // 输出位数和对应的数

              num /= 10; // 去掉最低位上的数

              position++; // 位数加1

          }

      }

      27.输入一个整数,分解出每一位数

    1. //对整数5678分解出每一位数

      #include<iostream>

      using namespace std;

      int main()

      {

          int a = 5678;

          int a1 = a % 10;

          int a10 = a % 100 /10;

          int a100 = a % 1000 /100;

          int a1000 = a /1000;

          cout << "整数5678分解后的每一位数分别是:\n";

          cout << "千位是:" << a1000<<endl;

          cout << "百位是:" <<a100<< endl;

          cout << "十位是:" <<a10<< endl;

          cout << "个位是:" <<a1<< endl;

      }

      28.对整数5678分解出每一位数

    1. /* 写一个函数,实现两个字符串的比较。

      即自己写一个strcmp函数,函数原型为int strcmp(char *p1, char *p2),设p1指向字符串s1,p2指向字符串s2。

      要求当s1=s2时,返回值为0,若s1≠s2, 返回它们二者第1个不同字符的ASCII码差值。

      如“BOY”与“BAD”,第2个字母不同,“O”与“A”之差为79-65=14。如果s1>s2, 则输出正值,如s1<s2, 则输出负值。*/

      #include <iostream>

      #include<string>

      using namespace std;

      int strcmp(char* p1, char* p2)

      {

          while (*p1 != '\0' && *p2 != '\0')

          {

              if (*p1 != *p2)

              {

                  return *p1 - *p2; // 返回第一个不同字符的ASCII码差值

              }

              p1++;

              p2++;

          }

          if (*p1 != '\0') // 如果两个字符串长度不同,返回长度差值

          {

              return *p1;

          }

          else if (*p2 != '\0')

          {

              return -*p2;

          }

          return 0; // 两个字符串相等,返回0

      }

      int main()

      {

          char s1[50], * ps1;

          ps1 = &s1[0];

          char s2[50], * ps2;

          ps2 = &s2[0];

          cout << "请输入两个字符串:(空格分隔,回车结束)\n";

          cin>>s1>>s2;

          int result = strcmp(ps1,ps2 );

          cout << "比较结果为:" << result << endl;

      }

      29.写一个函数,实现两个字符串的比较

    1. /*找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小(也有可能没有鞍点)*/

      #include <iostream>

      using namespace std;

      int main()

      {

          int a[3][4] = {

              {11, 12, 13, 14},

              {15, 16, 17, 18},

              {19, 20, 21, 22} };

          bool haspoint = false; // 是否有鞍点

          int pointRow;// 鞍点的行

          int pointCol; // 鞍点的列

          for (int i = 0; i <3; i++)// 遍历二维数组

          {

              int maxRow = a[i][0]; // 当前行上的最大值

              int maxCol = 0; // 最大值所在的列

              for (int j = 1; j <4; j++)// 找出当前行上的最大值

              {

                  if (a[i][j] > maxRow)

                  {

                      maxRow =a[i][j];

                      maxCol = j;

                  }

              }

              // 判断当前行上的最大值是否也是所在列上的最小值

              bool isPoint = true; // 是否为鞍点

              for (int k = 0; k <3; k++)

              {

                  if (a[k][maxCol] < maxRow)

                  {

                      isPoint = false;

                      break;

                  }

              }

              if (isPoint) // 如果是鞍点,输出结果并结束程序

              {

                  haspoint = true;

                  pointRow = i;

                  pointCol = maxCol;

                  break;

              }

          }

          if (haspoint)  // 输出结果

          {

              cout << "鞍点的位置为:" << pointRow << "," << pointCol << endl;

              cout << "鞍点的值为:" <<a[pointRow][pointCol] << endl;

          }

          else

              cout << "该二维数组不存在鞍点" << endl;

      }

      30.找出一个二维数组中的鞍点(上页)

    1.     if (haspoint)  // 输出结果

          {

              cout << "鞍点的位置为:" << pointRow << "," << pointCol << endl;

              cout << "鞍点的值为:" <<a[pointRow][pointCol] << endl;

          }

          else

              cout << "该二维数组不存在鞍点" << endl;

      }

      找出一个二维数组中的鞍点(下页)
  1. 31.将数字字符串转换为数字

#include<iostream>

#include<string>

using namespace std;

void stonum()// 将字符串转换为整数的函数

{

    cout << "请输入数字的字符串:" << endl;

    string text;

    getline(cin, text);

    cout << "转换后的数字为:" ;

    for (int i = 0; i < text.length(); i++)

    {

        char c = text[i];

        if (c >= '0' && c <= '9')//如果字符是数字就转换,否则跳过。

        {

            int num = text[i] - 48;

            cout << num;

        }

    }

    cout << endl;

}

int main()

{

    string str = "12345"; // 数字字符串

    int num = stoi(str); // 将字符串转换为整数的库函数。

    cout << "转换后的数字为:" << num << endl;

    stonum();

}

这个函数里面有两种方法,自己选择。

  1. 面向对象编程

    1. /*定义一个圆类(Circle),属性为半径(radius)、圆周长和面积,

      操作为输入半径并计算周长、面积,输出半径、周长和面积。

      要求定义构造函数(以半径为参数,周长和面积在构造函数中生成)和复制(拷贝)构造函数。在主函数中进行测试*/

      #include<iostream>

      #define PI 3.1415926//宏定义π的变量

      using namespace std;

      class circle

      {

      private:

      double radius;//半径

      double around;//周长

      double area;//面积

      public:

      circle(double r)

      {

           radius = r;

           around = 2 * PI * radius;//周长

           area = PI * radius * radius;//面积

      }

      circle(const circle& a)//定义复制(拷贝)构造函数

      {

           radius = a.radius;

           around = a.around;

           area = a.area;

      }

      double get_radius()

      {

           return radius;

      }

      double get_around()

      {

           return around;

      }

      double get_area();//建议在考试中不要把函数定义在类外面,太麻烦了;

      //{

      //  return area;

      //}

      void showprint()

      {

           cout << "圆的半径为:" << get_radius() << endl;

           cout << "圆的周长为:" << get_around() << endl;

           cout << "圆的面积为:" << get_area() << endl;

      }

      };//定义类的右括号要加分号,重点记住。

      double circle::get_area ()//在类体外面定义要加类名双冒号

      {

      return area;

      }

      int main()

      {

      circle c(10);

      c.showprint();

      //circle d = c;题目没有要求,这两句是测试复制构造函数的。

      //d.showprint();这两句不写;

      }

      32求圆的面积(上页)

    1. 求圆的面积(下页)

      double get_area();//建议在考试中不要把函数定义在类外面,太麻烦了;

      //{

      //  return area;

      //}

      void showprint()

      {

           cout << "圆的半径为:" << get_radius() << endl;

           cout << "圆的周长为:" << get_around() << endl;

           cout << "圆的面积为:" << get_area() << endl;

      }

      };//定义类的右括号要加分号,重点记住。

      double circle::get_area ()//在类体外面定义要加类名双冒号

      {

      return area;

      }

      int main()

      {

      circle c(10);

      c.showprint();

      //circle d = c;题目没有要求,这两句是测试复制构造函数的。

      //d.showprint();这两句不写;

      }

    1. /*面向对象创建三角形的类triangle,

      三边设为私有数据成员,输出三角形的面积。

      */

      #include<iostream>

      #include<cmath>

      using namespace std;

      class triangle

      {

      private:

      double a;

      double b;

      double c;

      public:

      triangle(double x, double y, double z) //构造函数赋初始值

      {

           a = x;

           b = y;

           c = z;

      }

      double area()

      {

           double s = (a + b + c) / 2; // 计算半周长

           double area = sqrt(s * (s - a) * (s - b) * (s - c)); // 使用海伦公式计算面积

           return area;

      }

      void showprint()

      {

           cout << "三角形的面积是:" << area() << endl;

      }

      };

      int main()

      {

      triangle c(0 ,4 ,5.0);

      c.area();

      c.showprint();

      }

      33.求三角形的面积

    1. #include<iostream>

      using namespace std;

      template<class T>

      void Swap(T & x, T & y)//swap的首字母必须大写,否则报错。

      {

      T temp= x;

      x = y;

      y = temp;

      }

      class mydate

      {

      private://私有数据成员

      int year;

      int month;

      int day;

      public://公有成员函数

      mydate();//构造函数,先声明,

      mydate(int a, int b, int c)//函数重载,定义

      {

           year = a;

           month = b;

           day = c;

      }

      void print()const//定义打印输出函数,加const限定不允许修改数据;

      {

           cout << year << "/" << month << "/" << day << endl;

      }

      };

      mydate::mydate()//在类体外定义函数,需要加类名双冒号限定,

      {

      year = 1970;

      month = 1;

      day = 1;

      }

      int main()

      {

      int m = 2, n = 5;

      swap(m, n);

      cout << m << " " << n << endl;

      double a = 12.2, b = 35.3;

      Swap(a,b);

      cout << a << " " << b << endl;

      mydate d1, d2(2020, 1, 1);

      swap(d1, d2);

      d1.print();

      d2.print();

      }

      34.函数模板的示例(上页)

    1. int main()

      {

      int m = 2, n = 5;

      swap(m, n);

      cout << m << " " << n << endl;

      double a = 12.2, b = 33;

      Swap(a,b);

      cout << a << " " << b << endl;

      mydate d1, d2(2020, 1, 1);

      swap(d1, d2);

      d1.print();

      d2.print();

      }

      函数模板的示例(下页)

    1. /*简易学生成绩管理系统,输出每位学生的平均分、最高分,*/

      #include<iostream>

      #include<string>

      using namespace std;

      class student

      {

      private:

          string name;//学生姓名

          float chinese;//语文成绩

          float maths;//数学成绩

          float english;//英语成绩

      public:

          student(string m, float a, float b, float c)//构造函数

          {

               name = m;

               chinese = a;

               maths = b;

               english = c;

          }

          string getname()

          {

               return name;

          }

          float getchinese()

          {

               return chinese;

          }

          float getmaths()

          {

               return maths;

          }

          float getenglish()

          {

               return english;

          }

          float average()//平均分

          {

               return (getchinese() + getmaths() + getenglish()) / 3;

          }

          float maxscoer()//最高分,语文成绩最高就返回语文成绩。

          {

               if (getchinese() > getmaths() && getchinese() > getenglish())

                    return getchinese();

               if (getmaths() > getchinese() && getmaths() > getenglish())

                   return getmaths();

               if (getenglish() > getchinese() && getenglish() > getmaths())

                   return getenglish();

          }

      };

      int main()

      {

          student s1("赵琳", 80, 82, 91),

                   s2("张三", 78, 83, 82),

                   s3("老六", 73, 58, 62),

                   s4("李莉", 83, 87, 89);

          cout << "姓名:" << s1.getname() << "\t平均分:" << s1.average() << "\t最高分:" << s1.maxscoer() << endl;

          cout << "姓名:" << s3.getname() << "\t平均分:" << s3.average() << "\t最高分:" << s3.maxscoer() << endl;

      }

      35.学生成绩管理(上页)

    1.     float average()//平均分

          {

               return (getchinese() + getmaths() + getenglish()) / 3;

          }

          float maxscoer()//最高分,语文成绩最高就返回语文成绩。

          {

               if (getchinese() > getmaths() && getchinese() > getenglish())

                    return getchinese();

               if (getmaths() > getchinese() && getmaths() > getenglish())

                   return getmaths();

               if (getenglish() > getchinese() && getenglish() > getmaths())

                   return getenglish();

          }

      };

      int main()

      {

          student s1("赵琳", 80, 82, 91),

                   s2("张三", 78, 83, 82),

                   s3("老六", 73, 58, 62),

                   s4("李莉", 83, 87, 89);

          cout << "姓名:" << s1.getname() << "\t平均分:" << s1.average() << "\t最高分:" << s1.maxscoer() << endl;

          cout << "姓名:" << s3.getname() << "\t平均分:" << s3.average() << "\t最高分:" << s3.maxscoer() << endl;

      }

      学生成绩管理(下页)
  1. 36.求盒子的体积

    1. /*编程定义一个Box(盒子)类,在该类定义中包括数据成员:length(长)、width(宽) 和height(高)。

      成员函数:构造函数设置盒子长、宽和高三个数据;复制函数实现对象的复制;volume函数计算并输出盒子的体积。

      在main函数中,要求创建Box对象,实现对象的复制,并求盒子的体积。*/

      #include<iostream>

      using namespace std;

      class box

      {

      private://三个私有数据成员

          double length;

          double width;

          double hight;

      public :

          box(double a, double b, double c)//构造函数初始化成员变量

          {

               length = a;

               width = b;

               hight = c;

          }

          box(const box& b)//复制构造函数

          {

               length = b.length;

               width = b.width;

               hight = b.hight;

          }

          void volume()

          {

               cout << "盒子的体积为:" << length * width * hight << endl;

          }

      };

      int main()

      {

          box b(3, 4, 5);

          b.volume();

          box c(b);

          c.volume();

      }

示例题

37.过滤多余的空格。

一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格。

#include <iostream> //标准的输入输出头文件
#include <string>   //字符串操作类和方法等
#include <cstring>  // 字符串处理相关函数等
#include <cmath>  //数学函数,sqrt函数等
//#define PI 3.1415926 //定义一个常量
using namespace std;
/*  
【输入样例】Hello       world. This     is             c language. 
【输出样例】Hello world. This is c language. 
*/ 

int main() {
    int len = 0, i = 0;
    char s[101];
    cout << "请输入一行字符串:" << endl;
    cin.getline(s,101);

//'\0' 字符结串结束符 
    while (s[i] != '\0')
    {
        //检查是否为 ' ' 空格 
        if (s[i] == ' '){
        //等于 0 ,表示当前第一个空格
            if (len == 0)
            //输出一个空格 
                cout << " ";
                //增加len值,说明已经有了一个空格 
                len++;
        }
        else {
            //如果不是空格输出当前字符串 
            cout << s[i];
            //重置为0,因为不是空格 
            len = 0;
        }
        //增加i值,循环迭代中检查下一个字符 
        i++;
    }
     cout << endl;   
     return 0;

38.设计一个名为Rectangle的矩形类

#include <iostream> //标准的输入输出头文件
#include <string>   //字符串操作类和方法等
#include <cstring>  // 字符串处理相关函数等
#include <cmath>  //数学函数,sqrt函数等
//#define PI 3.1415926 //定义一个常量
using namespace std;
/*设计一个名为Rectangle的矩形类,其属性为矩形的左上角和右下角两个点的坐标,
定义矩形类的构造函数、析构函数,
定义矩形类的复制构造函数,
定义成员函数能计算和输出矩形的周长和面积。*/

//定义结构体Point ,用于表示二维平面上的一个点 
struct Point  
{
    //两个坐标 
    int x, y;
};
//定义矩形类 
class Rectangle{
    //左上角点坐标 
    Point topLeft;
    //右下角点坐标 
    Point bottomRight;
public:
    //构造函数,通过两个点初始化矩形 
    Rectangle(Point a, Point n);
    //复制构造函数,通过另一个矩形对象来初始化 
    Rectangle(const Rectangle & R);
    //计算矩形面积的成员函数 
    int Area();
    //计算矩形周长的成员函数 
    int SideLength();
    //析构函数,当对象生命周期结束时调用 
    ~Rectangle() {
        cout << "析构函数被调用\n";
    };
};
//构造函数实现 
Rectangle::Rectangle(Point a,Point b)
{
    //设置左右角点坐标 
    topLeft = a;
    bottomRight = b;
}
//复制构造函数实现 
Rectangle::Rectangle(const Rectangle & R)
{
    //复制左右角点坐标 
    topLeft = R.topLeft; 
    bottomRight = R.bottomRight;
}
//计算矩形面积成员 函数实现 
int Rectangle::Area()
{
    //计算矩形的宽度 
    int x = bottomRight.x - topLeft.x;
    //计算矩形的高度 
    int y = bottomRight.y - topLeft.y;
    return x * y; //返回面积,宽乘以高 
}
//计算矩形周长的成员函数实现 
int Rectangle::SideLength()
{
    int x = bottomRight.x - topLeft.x;
    int y = bottomRight.y - topLeft.y;    
    return 2 * (x + y); //返回周长,2倍宽度加2倍高度 
}

int main() {
    //定义两个Point类型的变量 
    Point m,n;
    //设置m和n点的坐标 
    m.x = 3;
    m.y = 4;
    n.x = 12;
    n.y = 10;
    //创建两个矩形对象,rect2是rect的副本 
    Rectangle rect(m,n),rect2(rect);
    //输出面积和周长 
    cout << "矩形的面积为:" << rect.Area() << endl;
    cout << "矩形的周长为:" << rect.SideLength() << endl;     
    return 0;

39.定义Person类, 该类包含成员变量

#include <iostream>  
#include <string>  
 /* 4.    定义Person类, 该类包含成员变量: 身份证号(IdCard)  性别(Sex)、姓名(Name)、家庭地址(HomeAddress)、生日(Birthday)。 
  请写出该类的成员函数: 构造函数,复制构造函数,析构函数,设置信息函数,展示信息函数。*/
using namespace std;  
  
class Person {  
private:  
    string IdCard;  
    string Sex;  
    string Name;  
    string HomeAddress;  
    string Birthday;  
  
public:  
    // 构造函数  
    Person(string idCard, string sex, string name, string homeAddress, string birthday)  
        : IdCard(idCard), Sex(sex), Name(name), HomeAddress(homeAddress), Birthday(birthday) {}  
  
    // 复制构造函数  
    Person(const Person& other)  
        : IdCard(other.IdCard), Sex(other.Sex), Name(other.Name), HomeAddress(other.HomeAddress), Birthday(other.Birthday) {}  
  
    // 析构函数  
    ~Person() {  
        // 在这个简单的例子中,不需要执行任何特殊的清理操作  
        cout << "析构函数已调用。" << endl; 
    }  
  
    // 设置信息函数  
    void setIdCard(string idCard) {  
        IdCard = idCard;  
    }  
  
    void setSex(string sex) {  
        Sex = sex;  
    }  
  
    void setName(string name) {  
        Name = name;  
    }  
  
    void setHomeAddress(string homeAddress) {  
        HomeAddress = homeAddress;  
    }  
  
    void setBirthday(string birthday) {  
        Birthday = birthday;  
    }  
  
    // 展示信息函数  
    void displayInfo() const {  
        cout << "身份证号: " << IdCard << endl;  
        cout << "性别: " << Sex << endl;  
        cout << "姓名: " << Name << endl;  
        cout << "家庭地址: " << HomeAddress << endl;  
        cout << "生日: " << Birthday << endl;  
    }  
};  
  
int main() {  
    // 创建一个Person对象  
    Person person("123456789012345678", "男", "张三", "北京市某区某街道", "1990-01-01");  
    person.displayInfo();  
  
    // 使用复制构造函数创建另一个Person对象  
    Person personCopy(person);  
    personCopy.displayInfo();  
  
    // 修改personCopy的信息  
    personCopy.setName("李四");  
    personCopy.displayInfo();  
  
    return 0;  
}

40.求该语句中单词长度最大的单词

#include<iostream>
#include<cstring>

using namespace std;
/*3.    在main函数里定义一个字符数组,char s[ ] = "This is a C Programming test". 
求该语句中单词长度最大的单词(同一个字母大小写算两个字符)。
两个单词中间以空格分隔开, 约定该语句只存在字符。*/
int main() {
    char a[] = "This is a C Program test";
    int a_len = strlen(a);
    int maxstr_len = 0;//最长的单词字母数
    int maxstr_index_start = 0;//最大的单词起始下标
    int maxstr_index_end = 0;//最大的单词结束下标
    int str_len = 0;//当前判断单词的字母数
    int index_start = 0;//当前判断单词的起始下标
    int index_end = 0;//当前判断单词的结束下标
    for (int i = 0; i <= a_len; i++) {
        if (a[i] == ' ' || a[i] == '\0') {//空格或结束符出现时为一个单词
            index_end = i;
            cout << index_start << ' ' << index_end << endl;//测试当前循环单词的下标
            for (int j = index_start; j < index_end; j++) {
                int mut = 0; //判断字母是否重复
                for (int x = index_start; x < j; x++) {//与前面出现的字母比较,相等就不累加字母个数
                    if (a[j] == a[x]) {
                        mut = 1;
                        break;
                    }
                }
                if (mut == 0) {//不存在重复,字母数+1
                    str_len++;
                }
            }
            if (str_len > maxstr_len) {//判断当前单词包含的字母数,是否是历史最长
                maxstr_len = str_len;
                maxstr_index_start = index_start;
                maxstr_index_end = index_end;
            }
            str_len = 0;//每次循环完,单词字母数置0
            index_start = index_end + 1;//开始下标位置调整为上个单词结束位置+1(空格)
        }
    }
    cout << "测试字符串:" << a << endl;
    cout << "包含字母最多的单词为:";
    for (int i = maxstr_index_start; i < maxstr_index_end; i++) {
        cout << a[i];
    }
    cout << ",共包含" << maxstr_len << "个(不重复)字母" << endl;
    return 1;
}

41.输入二维矩阵的行、列( m 、n)。再依次输入数组的值。输出该二维数组周边元素的和, 即第一行+最后一行+第一列+最后一列的和

#include<iostream>

using namespace std;
/*2.    
【输入】
   第一行输入两个整数m、n分别为二维矩阵的行和列的大小, 200<m=n<0, 两个整数之间用空格隔开
第二行开始输入二维矩阵的元素
【输出】
   输出二维矩阵周边元素的和, 即第一行+最后一行+第一列+最后一列的和。
【输入样例】
   3 3
   3 5 8
   2 6 7
   5 7 9
【输出样例】
   46
*/
int main() {
    cout << "请分别输入二维矩阵的行、列 ,第二行开始输入矩阵的元素" << endl;
    int rownum, columnnum;
    cin >> rownum >> columnnum;
    int sum = 0;
    int arr[200][200];
    for (int i = 0; i < rownum; i++) {
        for (int j = 0; j < columnnum; j++) {
            cin >> arr[i][j];
        }
    }

    for (int i = 0; i < rownum; i++) {
        for (int j = 0; j < columnnum; j++) {
            if (i == 0 || i == rownum - 1 || j == 0 || j == columnnum - 1) {
                sum += arr[i][j];
            }
        }
    }
    cout << sum << endl;
    return 0;
}

42.输入一个数m,求这个数的立方等于n个奇数和。
提示:最大的奇数是m*(m+1)-1

#include <iostream>  
//如果数字太大需要优化代码 
using namespace std;  
  /*   
【输入】
   输入一个整数n, 求这个数的立方等于n个奇数和.
【输出】
   输出n的立方=n个奇数相加的和
【输入样例】
   3
【输出样例】
   m*m*m=11+9+7=27
*/
int main() {  
    int m;  
    cout << "请输入一个数m: ";  
    cin >> m;  
  
    int m3 = m * m * m;  
    int max_odd = m * (m + 1) - 1;  
    int odd_numbers[max_odd + 1]; // 数组来存储奇数  
    int sum_of_odds = 0;  
    int odd_count = 0; // 奇数计数器  
  
    for (int odd = max_odd; odd > 0 && sum_of_odds < m3; --odd) {  
        if (odd % 2 != 0) { // 检查是否为奇数  
            odd_numbers[odd_count] = odd;  
            sum_of_odds += odd;  
            odd_count++;  
        }  
    }  
  
    // 如果和大于m的立方,移除多余的奇数,直到和等于m的立方  
    while (sum_of_odds > m3 && odd_count > 0) {  
        sum_of_odds -= odd_numbers[odd_count - 1];  
        odd_count--;  
    }  
  
    // 输出结果  
    cout << m << "*" << m << "*" << m << "=";  
    for (int i = 0; i < odd_count; ++i) {  
        cout << odd_numbers[i];  
        if (i < odd_count - 1) {  
            cout << "+";  
        }  
    }  
    cout << "=" << m3 << endl;  
  
    return 0;  
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值