zoukankan      html  css  js  c++  java
  • 华中农业大学mooc编程题

    1、英文单词数量统计

    题目内容:

    输入一个英文句子,句子中的单词用空格隔开,隔开单词的空格可能不止一个,现要求去掉单词之间多余的空格,使得两个单词之间只有一个空格,且句子开头无空格,再统计句子中单词的个数并输出。

    输入格式:

    输入占一行,是一个包含空格的英文句子,以回车结束

    输出格式:

    输出包括两行,第一行是去掉多余空格后的英文句子;第二行是一个数值,表示句子中单词的个数。 

    输入样例:

          I  am        happy.

    输出样例:

    I  am  happy.

    3

     1 #include <iostream>
     2 using namespace std;
     3 #define N 250
     4 
     5 int main()
     6 {
     7     char str[N] = "";
     8     char *p = str,*p1=str;
     9     gets(str);
    10     int count = 0;
    11     
    12     while(*p)
    13     {
    14         if(*p!=' ')
    15         {            
    16             *p1++ = *p;
    17             if(*(p+1)==' '||!(*(p+1)))
    18             {
    19                 count++;
    20                 *p1++ = ' ';
    21             }
    22         }
    23         p++;
    24     }
    25     *(p1-1)='';
    26     
    27     cout<<str<<endl;
    28     cout<<count<<endl;
    29   
    30     return 0;
    31 }
    2、时间类

    题目内容:

    设计一个时间类(class Time),其中有表示“时、分、秒”的数据成员,设计初始化3个数据成员的构造函数,实参缺省时均初始化为0;设计拷贝构造函数,用一个已经存在的Time对象初始化正在创建的新对象;设计成员函数SetTime设置时间的值;设计成员函数Print以24小时格式输出时间(如“09:20:45”、“14:30:00”)。注意,若表示时、分、秒的数据不在合理范围内,则将不合理的数据取0值。以下是主函数:
    int main()
    {
      int h,m,s;
      cin>>h>>m>>s;    //从键盘依次输入时、分、秒的值
      Time t1(h);
      t1.Print();
      t1.SetTime(h,m,s);
      t1.Print();
      Time t2(t1);
      t2.Print();
      return 0;
    }

    输入格式:

    输入3个整型数,分别表示时、分、秒,数据之间以空格隔开。

    输出格式:

    输出包括三行,每行都是一个以24小时格式输出的时间。

    输入样例:

    4 50 66

    输出样例:

    04:00:00

    04:50:00

    04:50:00

    请注意:提交代码时,需要完整的程序,即除了类的设计,还需要包括以上主函数。

     1 #include <iostream>
     2 #include <iomanip>
     3 using namespace std;
     4 
     5 class Time{
     6     int hour,minute,second;
     7 public:
     8     Time(int h=0,int m=0,int s=0){
     9         if(h>=24) h=0;
    10         if(m>=60) m = 0;
    11         if(s>=60) s = 0;
    12         hour = h;
    13         minute = m;
    14         second = s;
    15     }
    16     Time(const Time &t)
    17     {
    18         hour = t.hour;
    19         minute = t.minute;
    20         second = t.second;
    21     }
    22     void SetTime(int h,int m,int s){
    23         if(h>=24) h=0;
    24         if(m>=60) m = 0;
    25         if(s>=60) s = 0;
    26         hour = h;
    27         minute = m;
    28         second = s;
    29     }
    30     void Print(){
    31         cout<<setw(2)<<setfill('0')<<hour<<":";
    32         cout<<setw(2)<<setfill('0')<<minute<<":";
    33         cout<<setw(2)<<setfill('0')<<second<<endl;    
    34     }
    35 };
    36 int main()
    37 {
    38     int h,m,s;
    39     cin>>h>>m>>s;    //从键盘依次输入时、分、秒的值
    40     Time t1(h);
    41     t1.Print();
    42     t1.SetTime(h,m,s);
    43     t1.Print();
    44     Time t2(t1);
    45     t2.Print();
    46   
    47     return 0;
    48 }

     3、逆序字符串

    用指针处理从键盘输入的字符串,使其逆序并输出。重复这个过程直到输入空串为止。

     1 #include "iostream"
     2 #include <string.h>
     3 using namespace std;
     4 #define N 100
     5 int main()
     6 {  
     7     char s[N] = "";//gets(s);
     8     while(cin.getline(s,N)&& strcmp(s,""))
     9     {
    10         char *p = s+strlen(s)-1;
    11         cout<<"逆序后:";
    12         while(*p)
    13         {
    14             cout<<*p--;
    15         }
    16         cout<<endl;
    17     }
    18     cout<<"输入了空串,程序终止"<<endl;
    19     return 0;
    20 }

    4、动态创建整形数组

    编写程序,根据用户输入的值n,建立长度为n的整型数组,再向数组输入n个元素的值,并求其所有元素之和。

     1 ​#include "iostream"
     2 using namespace std;
     3 int main()
     4 {  
     5     int n,sum = 0;
     6     cout<<"n=?"<<endl;
     7     cin>>n;
     8     int *p = new int[n];
     9     
    10     for(int i=0; i<n; ++i)
    11     {
    12         cin>>p[i];
    13         sum += p[i];
    14     }
    15     cout<<"数组元素的和为:"<<sum<<endl;
    16     delete(p);
    17     return 0;
    18 }

    5、合并字符串

    输入两个字符串a和b,并动态构造一个新的字符串c。要求是:将a和b对应字符中的较大者存入c对应的位置上,若a和b不一样长,则将较长字符串多出部分的字符全部依序存入c中。

     1 #include "iostream"
     2 #include <string.h>
     3 using namespace std;
     4 #define N 100
     5 int main()
     6 {  
     7     char a[N] = "", b[N] = "", c[2*N] = "";
     8     cout<<"请输入两个字符串:"<<endl;
     9     cin>>a>>b;
    10     char *pa=a,*pb=b,*pc=c;
    11     
    12     while(*pa&&*pb)
    13     {
    14         if(*pa>*pb)
    15             *pc=*pa;
    16         else
    17             *pc=*pb;
    18         pa++,pb++,pc++;
    19     }
    20     
    21     if(pa)
    22         strcat(c,pa);
    23     if(pb)
    24         strcat(c,pb);
    25     cout<<"新的字符串是:"<<c<<endl;
    26     return 0;
    27 }

    6、编写程序,求能被7整除 且个位数字为9的所有三位数,将满足条件的数每10个一行显示,并输出满足条件的数的个数。

     1 #include <iostream>
     2 using namespace std;
     3  
     4 int main()
     5 {
     6     cout<<"满足条件的数有:"<<endl;
     7     int count = 0;
     8     for(int i=109; i<=999; ++i){
     9         if(i%7==0 && i%10==9){
    10             count++;
    11             cout<<i<<" ";
    12             if(count%10==0){
    13                 cout<<endl;
    14             }
    15         }   
    16     }
    17     cout<<endl<<"满足条件的数共有:"<<count<<""<<endl;
    18     return 0;
    19 }

    7、编写程序,输入两个正整数m和n,求出这两个数的最大公约数并显示出来。

     1 #include <iostream>
     2 using namespace std;
     3 int GCD(int x, int y);
     4 int main()
     5 {
     6     cout<<"请输入两个正整数:";
     7     int a,b;
     8     cin>>a>>b;
     9     cout<<a<<""<<b<<"的最大公约数"<<GCD(a,b)<<endl;
    10     return 0;
    11 }
    12 int GCD(int x, int y){
    13     return y == 0 ? x : GCD(y, x%y); 
    14 }

    8、猴子吃桃问题,猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第五天早上想再吃时,见只剩下一个桃子了。请编程求第一天共摘了多少个桃子?

     1 #include <iostream>
     2 using namespace std;
     3  
     4 int main()
     5 {
     6     int day = 4, remain = 1;
     7     //因为第5天早上想吃的时候只剩一个,从计算第4天吃之前的桃子数开始
     8     for(day =4; day>0; --day)
     9     {
    10         remain = 2 * (remain + 1);//第一轮计算第4天早上的没吃的时候的桃子,以此类推      
    11     }
    12      
    13     cout<<"第一天一共摘了"<<remain<<"个桃子"<<endl;
    14     return 0;
    15 }

    9、输入整型数组的元素个数n,依次输入n个数组元素,求其中负数的和。

     1 #include<iostream>
     2 using namespace std;
     3  
     4 int main()
     5 {
     6     cout<<"请输入数组元素个数:"<<endl;
     7     const int N = 100;
     8     int arr[N] = {0}, n, index=0, sum = 0;
     9      
    10     cin>>n;
    11     while(n--)
    12     {
    13         cin>>arr[index];
    14         if(arr[index]<0)
    15             sum += arr[index];
    16         index++;
    17     }
    18     cout<<"数组中负数元素的和为:"<<sum<<endl;
    19     return 0;
    20 }

    10、求一个n阶矩阵的转置。输入n值及矩阵的所有元素,存储在二维数组a中,要求在a中进行转置。

     1 #include<iostream>
     2 using namespace std;
     3 const int N = 100;
     4  
     5 void Print(int arr[][N], int n);
     6 int main()
     7 {   
     8     cout<<"请输入矩阵阶数:"<<endl;
     9     int arr[N][N] = {0}, n;
    10     cin>>n;
    11      
    12     /* 输入矩阵 */
    13     for(int i=0; i<n; ++i){
    14         for(int j=0; j<n; ++j){
    15             cin>>arr[i][j];       
    16         }
    17     }
    18     /* 输出矩阵 */
    19     cout<<"原矩阵为:"<<endl;
    20     Print(arr,n);
    21      
    22     /* 转置矩阵 */
    23     for(int i=0; i<n; ++i){
    24         for(int j=0; j<i; ++j){
    25             int t = arr[i][j];
    26             arr[i][j] = arr[j][i];
    27             arr[j][i] = t;
    28         }
    29     }
    30     /* 输出转置矩阵 */
    31     cout<<"转置后矩阵为:"<<endl;
    32     Print(arr,n);   
    33     return 0;
    34 }
    35  
    36 void Print(int arr[][N], int n)
    37 {
    38     for(int i=0; i<n; ++i){
    39         for(int j=0; j<n; ++j){
    40             cout<<arr[i][j]<<"	";
    41         }
    42         cout<<endl;
    43     }
    44 }

    11、假设一个字符串中不含空格,输入该字符串并统计其中字母和非字母的个数。

     1 #include<iostream>
     2 using namespace std;
     3  
     4 int main()
     5 {   
     6     cout<<"请输入一个不含空格的字符串:"<<endl;
     7     const int N = 100;
     8     char arr[N] = "";
     9     cin>>arr;
    10      
    11     int count1 = 0, count2 = 0;
    12     for(int i=0; arr[i]; ++i){
    13         if(arr[i]>='a'&&arr[i]<='z' || arr[i]>='A'&&arr[i]<='Z')
    14             count1++;
    15         else 
    16             count2++;
    17     }
    18     cout<<"字符串中字母的个数为:"<<count1<<endl;    
    19     cout<<"字符串中非字母的个数为:"<<count2<<endl;
    20     return 0;
    21 }

    12、输入不含空格的字符串s及待删除的字符ch,将s中所有与ch相同的字符都删除掉,输出删除后得到的新串。要求直接在数组s中进行删除,得到的新串仍然在数组s中。

     1 #include<iostream>
     2 #include <string.h>
     3 using namespace std;
     4 #define N 100
     5  
     6 void deletechar(char s[],char c);
     7 int main()
     8 {
     9     cout<<"请输入一个不含空格的字符串:"<<endl;
    10     char s[N] = "", c;
    11     cin>>s;
    12      
    13     cout<<"请输入要删除的字符:"<<endl;   
    14     cin>>c;
    15      
    16     deletechar(s,c);
    17     cout<<"删除后的字符串为:"<<s<<endl;
    18     return 0;
    19 }
    20 void deletechar(char s[],char c){
    21     char t[N] = "";
    22     char *p = s, *q = t;
    23     while(*p)
    24     {
    25         if(*p!=c)
    26             *q++ = *p;
    27         p++;
    28     }
    29     strcpy(s,t);
    30 }

    13、用指针处理从键盘输入的字符串,使其逆序并输出。重复这个过程直到输入空串为止。

     1 #include "iostream"
     2 #include <string.h>
     3 using namespace std;
     4 #define N 100
     5 int main()
     6 {  
     7     char s[N] = "";//gets(s);
     8     while(cin.getline(s,N)&& strcmp(s,""))
     9     {
    10         char *p = s+strlen(s)-1;
    11         cout<<"逆序后:";
    12         while(*p)
    13         {
    14             cout<<*p--;
    15         }
    16         cout<<endl;
    17     }
    18     cout<<"输入了空串,程序终止"<<endl;
    19     return 0;
    20 }

    14、编写程序,根据用户输入的值n,建立长度为n的整型数组,再向数组输入n个元素的值,并求其所有元素之和。

     1 #include "iostream"
     2 using namespace std;
     3 int main()
     4 {  
     5     int n,sum = 0;
     6     cout<<"n=?"<<endl;
     7     cin>>n;
     8     int *p = new int[n];
     9      
    10     for(int i=0; i<n; ++i)
    11     {
    12         cin>>p[i];
    13         sum += p[i];
    14     }
    15     cout<<"数组元素的和为:"<<sum<<endl;
    16     delete(p);
    17     return 0;
    18 }

    15、输入两个字符串a和b,并动态构造一个新的字符串c。要求是:将a和b对应字符中的较大者存入c对应的位置上,若a和b不一样长,则将较长字符串多出部分的字符全部依序存入c中。

     1 #include "iostream"
     2 #include <string.h>
     3 using namespace std;
     4 #define N 100
     5 int main()
     6 {  
     7     char a[N] = "", b[N] = "", c[2*N] = "";
     8     cout<<"请输入两个字符串:"<<endl;
     9     cin>>a>>b;
    10     char *pa=a,*pb=b,*pc=c;
    11      
    12     while(*pa&&*pb)
    13     {
    14         if(*pa>*pb)
    15             *pc=*pa;
    16         else
    17             *pc=*pb;
    18         pa++,pb++,pc++;
    19     }
    20      
    21     if(pa)
    22         strcat(c,pa);
    23     if(pb)
    24         strcat(c,pb);
    25     cout<<"新的字符串是:"<<c<<endl;
    26     return 0;
    27 }

    16、计算4名学生3门课程成绩的平均分。在主函数中给定各门课程的成绩和输出计算得到的各平均分,avg函数用于计算各课程的平均分。

     1 #include<iostream>
     2 using namespace std;
     3  
     4 double avg(double a, double b, double c){
     5     return (a+b+c)/3;
     6 }
     7  
     8 int main()
     9 {
    10     int n = 4;
    11     double a,b,c;
    12     while(n--)
    13     {
    14         cin>>a>>b>>c;
    15         cout<<avg(a,b,c)<<endl;
    16     }
    17     return 0;
    18 }

    17、编写程序,求出输入的一个正整数n的阶乘。要求设计递归函数求出n的阶乘。

     1 #include<iostream>
     2 using namespace std;
     3  
     4 long fac(int n){
     5     if(n==1)
     6         return 1;
     7     return n*fac(n-1);
     8 }
     9  
    10 int main()
    11 {
    12     int n;
    13     cin>>n;
    14     cout<<fac(n)<<endl;
    15     return 0;
    16 }

    18、编写程序。输入一个正整数判断其是否是质数。要求设计一个函数对正整数n是否是质数进行判断,是质数函数返回1,不是质数返回0。

     1 #include<iostream>
     2 using namespace std;
     3  
     4 bool isPrime(int n){
     5     for(int i=2; i<n; ++i)
     6         if(n%i==0)
     7             return false;
     8     return true;
     9 }
    10  
    11 int main()
    12 {
    13     int n;
    14     cin>>n;
    15     if(isPrime(n))
    16         cout<<"是质数
    "<<endl;
    17     else
    18         cout<<"不是质数
    "<<endl;
    19     return 0;
    20 }
  • 相关阅读:
    纷享销客公司产品能力学习笔记
    有质量的两道面试题
    java项目启动时执行指定方法
    css银行卡号样式
    swiper6使用鼠标滚轮失效退回swiper4即可
    vue-swiper Demo
    vue点击下载图片
    跨域请求发送数据在body里,java后台接收
    跨域,跨服务session获取不到,前后台不会传输Cookie,sessionId不一致
    Windows下 redis命令及配置
  • 原文地址:https://www.cnblogs.com/GoldenEllipsis/p/11629743.html
Copyright © 2011-2022 走看看