头歌--C++之函数强化练习题

目录

第1关:结构实现复数运算

任务描述

编程要求

第2关:求亲密对数

任务描述

编程要求

第3关:计算一年的第几天

任务描述

编程要求

第4关:正整数求和

任务描述

编程要求

第5关:Pig Latin

任务描述

编程要求

第6关:打印日历

任务描述

编程要求

第1关:结构实现复数运算

任务描述

本关任务:编写一个描述复数类型的结构体变量的小程序。

编程要求

定义描述复数类型的结构体变量,编写减法函数sub()与乘法函数mul(),分别完成复数的减法与乘法运算。

在主函数中定义四个复数类型变量c1、c2、c3、c4,输入c1、c2的复数值,调用sub()完成c3=c1-c2操作,调用mul()完成c4=c1*c2操作。最后输出c3、c4复数值。

比如,用户输入"-0.5 1.5 1.5 0.5"(表示c1为-0.5+1.5i,c2为1.5+0.5i),程序应输出"-2 1 -1.5 2"(表示c3为-2+1i,c4为-1.5+2i).

要求:

  • 用户输入的数据之间用一个空格隔开
  • 程序输出的数据之间用一个空格隔开
  • 提交代码时不能有其他多余的cin和cout语句

效果如下:
输入:1 1 2 2
输出:-1 -1 0 4


开始你的任务吧,祝你成功!

#include 
using namespace std;
struct pluar{
    double in, ou;
};
int main(){
    /********** Begin ********/
    pluar c1,c2,c3,c4;
    cin>>c1.in>>c1.ou>>c2.in>>c2.ou;
    c3.in=c1.in-c2.in;
    c3.ou=c1.ou-c2.ou;
    c4.in=c1.in*c2.in-c1.ou*c2.ou;
    c4.ou=c1.in*c2.ou+c1.ou*c2.in;
    cout<

第2关:求亲密对数

任务描述

本关任务:编写一个能求20000以内的亲密对数的小程序。

编程要求

求20000以内的亲密对数。所谓亲密对数,即A除了整数本身外的所有因子之和等于B,B除了整数本身外的所有因子之和等于A。

要求:编写函数来求某数的除了整数本身外的所有因子之和(注意1是任何整数的因子)。

格式要求:

  • 用户输入正整数n表示希望输出第n对亲密对数(按照数值递增方式排列亲密对数)。例如,如果用户输入"1",程序输出"220 284"表示:第1对亲密对数是220和284(先输出值较小的那个数,然后一个空格,再输出值较大的那个数)。
  • 提交代码时不能有其他多余的cin和cout语句

效果如下:
输入:1
输出:220 284


开始你的任务吧,祝你成功!

#include 
#include 
using namespace std;
int logarithm(int);
int main()
{
   
    /********** Begin ********/
    int n,k=0;
    cin>>n;
    for(int a=200;a<=20000;a++)
    {
        int b=logarithm(a);
        if(logarithm(b)==a&&a

第3关:计算一年的第几天

任务描述

本关任务:编写一个能计算一年的第几天的小程序。

编程要求

编写程序,定义一个结构Date,包含年、月、日三个整型。

计算该日期是该年的第几天并输出,如果输入的日期非法,则输出0。

效果如下:
输入:1999 9 9
则输出:252


开始你的任务吧,祝你成功!

#include 
using namespace std;
struct date //定义结构变量
{
    int year;
    int month;
    int day;
}dat;
int luner(int n) //判断是否是闰年
{
    if (n%4==0)
    {
      if (n%100 ==0 && n%400!=0)
        return 28;
      else
        return 29;
    }
    else return 28;
}
int main()
{
    int y,m,d;
 cin>>y>>m>>d;
 if((y<=0)||(m<=0||m>=13)||(d<=0||d>=32)||(m==2&&d>=30)||(luner(y)==28&&d==29)||(luner(y)==29&&d==28))
 {
  cout<<0;
 }
 else 
 {
  if(m==1)
  {
   cout<=30)
  {
   cout<<0;
  }
 }
}

第4关:正整数求和

任务描述

本关任务:编写一个能实现两个100位以内的正整数的和的小程序。

编程要求

编程实现两个100位以内的正整数的和。例如,输入2个正整数"9876543210123456789012345"和"3264823749328439473242109",程序输出二者之和"13141366959451896262254454"。

要求:设计编写不少于4个函数用于程序实现,并在程序中针对每个函数给出注释,详细描述函数的功能。

  • 程序中不需要考虑整数位数超出100的情况。
  • 提交代码时不能有其他多余的cin和cout语句。

效果如下:
输入:9876543210123456789012345 3264823749328439473242109
输出:13141366959451896262254454


开始你的任务吧,祝你成功!

#include 
#include 
using namespace std; 
int main() 
{ 
string str1,str2; 
int a[250],b[250],len; 
int i; 
memset(a,0,sizeof(a)); 
memset(b,0,sizeof(b)); 
cin>>str1>>str2; 
a[0]=str1.length(); 
for(i=1;i<=a[0];i++) 
{a[i]=str1[a[0]-i]-'0';} 
b[0]=str2.length(); 
for(i=1;i<=b[0];i++) 
{b[i]=str2[b[0]-i]-'0'; } 
len=(a[0]>b[0]?a[0]:b[0]); 
for(i=1;i<=len;i++) 
{ 
a[i]+=b[i]; 
a[i+1]+=a[i]/10; 
a[i]%=10; 
} 
len++; 
while((a[len]==0)&&(len>1)) len--; 
for(i=len;i>=1;i--) 
cout<

第5关:Pig Latin

任务描述

本关任务:编写一个能按照规则转换英文单词的小程序。

编程要求

Pig Latin:一种自发明语言,将英文单词按如下规则转换:

  • 如果单词以辅音开头,则把起始辅音字符串(直到第一个
    元音字母的所有字母)从单词头移到单词尾,并在末尾加上ay,
    如scram转换成Pig Latin单词就是amscray;
  • 如果单词以元音(a、e、i、o、u,包括大小写)开头,则加
    后缀way,如is转换成Pig Latin单词就是isway。
    要求使用自顶向下的方式编写程序,实现读入一行英文
    (含多个单词、空格、标点符号),将该行英文转换成Pig Latin语言。

效果如下:
输入:What are you doing?
输出:atWhay areway ouyay oingday?


开始你的任务吧,祝你成功!

#include
#include
using namespace std;
inline int qchar(char c)
{
    if(c>='A'&&c<='Z')c=c+'a'-'A';
    if((c=='a')||(c=='e')||(c=='u')||(c=='i')||(c=='o'))return 1;
    if(c>='a'&&c<='z')return 2;
    if(c=='\n'||c==EOF)return 0;
    return 3;
}
int main()
{
    char c[1000],t;
    int i,m;
    while(1){
        t=getchar();
        if(!qchar(t))
   break;
        if(qchar(t)==3)
  {
   putchar(t);continue;
  }
        if(qchar(t)==1)
  {
            while((qchar(t)==1)||(qchar(t)==2))
   {
                putchar(t);
                t=getchar();
            }
            cout<<"way";
            if(!qchar(t))break;
            cout<

第6关:打印日历

任务描述

本关任务:编写一个能根据用户输入的年份和月份来打印该月份日历的小程序。

编程要求

根据用户输入的年份和月份,打印该月份的日历。例如,输入2014 4,输出如下:

 
  
  1. 1 2 3 4 5
  2. 6 7 8 9 10 11 12
  3. 13 14 15 16 17 18 19
  4. 20 21 22 23 24 25 26
  5. 27 28 29 30

整齐起见, 结果应保持7 × 5的矩阵,每个日期占4位字符(不足4位用空格填充),可以考虑用流操纵算法setw(4)。

计算某一日期是一周当中的星期几的算法如下。

输入有三个:year(年)、month(月)、day(日)。对于month,用1表示一月,2表示二月,以此类推。可用以下公式计算:

y = year - (14 - month)/12
x = y + y/4 - y/100 + y/400
m = month + 12×((14 - month)/12) - 2
d = (day + x + (31 × m)/12)%7
对于输出d,0表示周日,1表示周一,2表示周二,以此类推。

例如:2000年2月14日是周几?
y = 2000 -(14 - 2)/12 = 1999
x = 1999+1999/4-1999/100+1999/400 = 2483
m = 2 + 12×1-2 = 12
d = (14+2483+(31×12)/12)%7 = 2528%7 = 1
答案:周一

效果如下:
输入:2014 4
输出:

 
  
  1. 1 2 3 4 5
  2. 6 7 8 9 10 11 12
  3. 13 14 15 16 17 18 19
  4. 20 21 22 23 24 25 26
  5. 27 28 29 30

开始你的任务吧,祝你成功!

#include 
#include 
using namespace std;
int main()
{
int year, month, y, x, m, d;
int day=1, i=0;
    cin>>year>>month;
    if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
    {
     while(day<32)
     {
      y = year - (14 - month)/12;
      x = y + y/4 - y/100 + y/400;
    m = month + 12*((14 - month)/12) - 2;
      d = (day + x + (31 * m)/12)%7 ;   
      while (i

你可能感兴趣的:(c++)