实验2. 前8章实验综合训练(2)

6-1 函数重载实现两数相加 (10分)
设计一个重载函数add,该函数有两个参数,可以实现两个类型相同的参数相加的操作,函数返回相加的结果。两个参数可以是整数、实数和字符串,但必须保证两个参数类型相同。

裁判测试程序样例:
#include
#include
#include
using namespace std;

/* 请在这里填写答案 */

int main()
{
int a, b;
double c, d;
string s1, s2;

cin >> a >> b;
cin >> c >> d;
cin >> s1 >> s2;cout << add(a, b) << endl;
cout << fixed << setprecision(2) << add(c, d) << endl;
cout << add(s1, s2) << endl;return 0;

}

输入样例:
3 5
3.3333 5.555555
hello world

输出样例:
8
8.89
helloworld

int add(int a,int b)
{return a+b;
}
double add(double a,double b)
{return a+b;
}
string add(string a,string b)
{return a+b;
}

6-2 引用作函数形参交换两个整数 (10分)
设计一个void类型的函数Swap,该函数有两个引用类型的参数,函数功能为实现两个整数交换的操作。

裁判测试程序样例:
#include
using namespace std;

/* 请在这里填写答案 */

int main()
{
int a, b;

cin >> a >> b;Swap(a, b);cout << a << " " << b << endl;return 0;

}

输入样例:
3 5

输出样例:
5 3

void Swap(int & a, int &b)
{int t;t=a;a=b;b=t;
}

6-3 面积计算器(函数重载) (10分)
实现一个面积计算器,它能够计算矩形或长方体的面积。

函数接口定义:
int area(int x, int y);
int area(int x, int y, int z);

第一个函数计算长方形的面积,其中x和y是长和宽。第二个函数计算长方体的表面积,x,y和z是长,宽和高。

裁判测试程序样例:
#include
#include
using namespace std;
int area(int,int);
int area(int,int,int);
int main()
{
int i, repeat, c, x, y, z;
cin>>repeat;
for(i=0;i<repeat;i++){
cin>>c;
if(c2){
cin>>x>>y;
cout<<area(x,y)<<endl;
}
if(c3){
cin>>x>>y>>z;
cout<<area(x,y,z)<<endl;
}
}
return 0;
}

/* 请在这里填写答案 */

输入样例:
2
2 1 2
3 2 3 4

输出样例:
2
52

int area(int x, int y)
{return x*y;
}
int area(int x, int y, int z)
{return 2*((x*y)+(x*z)+(y*z));
}

6-4 带默认形参值的函数 (10分)
设计一个带默认形参值的函数add,该函数有三个参数,可以实现三个整数类型的参数相加的操作,函数返回相加的结果。默认形参值从右至左分别是30、20。

裁判测试程序样例:
#include
using namespace std;

/* 请在这里填写答案 */

int main()
{
int a, b, c;

cin >> a >> b >> c;cout << add(a) << endl;
cout << add(a, b) << endl;
cout << add(a, b, c) << endl;return 0;

}

输入样例:
1 2 3

输出样例:
51
33
6

int add(int a,int b,int c)
{return a+b+c;
}int add (int a)
{return 50+a;
}
int add(int a,int b)
{return 30+a+b;
}

7-1 出生年 (10分)

以上是新浪微博中一奇葩贴:“我出生于1988年,直到25岁才遇到4个数字都不相同的年份。”也就是说,直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求,自动填充“我出生于y年,直到x岁才遇到n个数字都不相同的年份”这句话。

输入格式:
输入在一行中给出出生年份y和目标年份中不同数字的个数n,其中y在[1, 3000]之间,n可以是2、或3、或4。注意不足4位的年份要在前面补零,例如公元1年被认为是0001年,有2个不同的数字0和1。

输出格式:
根据输入,输出x和能达到要求的年份。数字间以1个空格分隔,行首尾不得有多余空格。年份要按4位输出。注意:所谓“n个数字都不相同”是指不同的数字正好是n个。如“2013”被视为满足“4位数字都不同”的条件,但不被视为满足2位或3位数字不同的条件。

输入样例1:
1988 4

输出样例1:
25 2013

输入样例2:
1 2

输出样例2:
0 0001

#include<iostream>
#include<stdio.h>
#include<cmath>
#include<math.h>
using namespace std;
int add(int a,int b,int c)
{return a+b+c;
}int add (int a)
{return 50+a;
}
int add(int a,int b)
{return 30+a+b;
}
int prime(int n){int i;if(n<=1) return 0;if(n==2)return 1;for(i=2;i<=sqrt(n);i++) if(n%i==0) return 0;return 1;
}struct student
{char name[100];int hx;int mb;
}s[1000];
long long int fibonacci(int n)
{long long int i,t;long long int a=1,b=1;if(n==0) return 0;if(n==1||n==2) return 1;for(i=3;i<=n;i++){t=a;a=b;b=a+t;}return b;
}int main()
{long long int n,f=0,m,y,j,i,k,l,t,s=0;int a[10]={0};cin>>y>>n;for(i=y;i<=3000;i++){m=i;while(m){t=m%10;a[t]++;m=m/10;}if(i<10) a[0]=a[0]+3;if(i>9&&i<100)a[0]=a[0]+2;if(i>99&&i<1000)a[0]=a[0]+1;for(j=0;j<10;j++){if(a[j]!=0){f++;a[j]=0;}}if(i<10) if(f==n){printf("%d %04d",i-y,i);    break;}if(i>9&&i<100)if(f==n){printf("%d %04d",i-y,i);    break;} if(i>99&&i<1000)if(f==n){printf("%d %04d",i-y,i);    break;}if(i>999)if(f==n){printf("%d %d",i-y,i);  break;}f=0;}return 0;
}return 0;
}

7-2 Jack cheng的烦恼3 (10分)
Jack cheng在书上遇到一道编程题,可他不会做,没办法,他只好向你求助。题目要求判断给出的一个数是否为“真素数”。真素数的定义为:自身为素数,且自身各位数之和仍为素数。例如,11为素数,1+1=2也为素数,所以11为真素数。

输入格式:
输入在一行中给出需要判断的数n.

输出格式:
如果n为真素数,则输出“yes”,否则输出“no”。

输入样例:
11

输出样例:
yes

#include<iostream>
#include<stdio.h>
#include<cmath>
#include<math.h>
using namespace std;
int add(int a,int b,int c)
{return a+b+c;
}int add (int a)
{return 50+a;
}
int add(int a,int b)
{return 30+a+b;
}
int prime(int n){int i;if(n<=1) return 0;for(i=2;i<n;i++) if(n%i==0) return 0;return 1;
}struct student
{char name[100];int hx;int mb;
}s[1000];
int main()
{int n,m,j,i,k,l,t,s=0;cin>>n;if(prime(n)){m=n;while(n){t=n%10;s=s+t;n=n/10;}if(prime(s)){printf("yes");  return 0;}}printf("no");return 0;
}

7-3 验证“哥德巴赫猜想” (10分)
数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。

输入格式:
输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N。

输出格式:
在一行中按照格式“N = p + q”输出N的素数分解,其中p ≤ q均为素数。又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。

输入样例:
24

输出样例:
24 = 5 + 19

作者: 徐镜春
单位: 浙江大学
时间限制: 400 ms
内存限制: 64 MB
代码长度限制: 16 KB

#include<iostream>
#include<stdio.h>
#include<cmath>
#include<math.h>
using namespace std;
int add(int a,int b,int c)
{return a+b+c;
}int add (int a)
{return 50+a;
}
int add(int a,int b)
{return 30+a+b;
}
int prime(int n){int i;if(n<=1) return 0;if(n==2)return 1;for(i=2;i<=sqrt(n);i++) if(n%i==0) return 0;return 1;
}struct student
{char name[100];int hx;int mb;
}s[1000];
int main()
{long long int n,m,j,i,k,l,t,s=0;cin>>n;for(i=2;i<=n/2 ;i++){if(prime(i)&&prime(n-i)){printf("%d = %d + %d",n,i,n-i);break;}}return 0;
}

7-4 出租 (10分)
下面是新浪微博上曾经很火的一张图:

一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1,index[1]=0 对应 arr[0]=8,index[2]=3 对应 arr[3]=0,以此类推…… 很容易得到电话号码是18013820100。

本题要求你编写一个程序,为任何一个电话号码生成这段代码 —— 事实上,只要生成最前面两行就可以了,后面内容是不变的。

输入格式:
输入在一行中给出一个由11位数字组成的手机号码。

输出格式:
为输入的号码生成代码的前两行,其中arr中的数字必须按递减顺序给出。

输入样例:
18013820100

输出样例:
int[] arr = new int[]{8,3,2,1,0};
int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4};

作者: 陈越
单位: 浙江大学
时间限制: 400 ms
内存限制: 64 MB
代码长度限制: 16 KB

#include<iostream>
#include<stdio.h>
#include<cmath>
#include<math.h>
using namespace std;
int add(int a,int b,int c)
{return a+b+c;
}int add (int a)
{return 50+a;
}
int add(int a,int b)
{return 30+a+b;
}
int prime(int n){int i;if(n<=1) return 0;if(n==2)return 1;for(i=2;i<=sqrt(n);i++) if(n%i==0) return 0;return 1;
}struct student
{char name[100];int hx;int mb;
}s[1000];
long long int fibonacci(int n)
{long long int i,t;long long int a=1,b=1;if(n==0) return 0;if(n==1||n==2) return 1;for(i=3;i<=n;i++){t=a;a=b;b=a+t;}return b;
}int main()
{long long int n,f=0,m,y,j,i,k=0,l,t,s=0;cin>>n;int a[10]={0};int b[10]={0};int c[10];for(i=0;i<10;i++)c[i]=-1;m=n;while(m){t=m%10;a[t]++;m=m/10;}
printf("int[] arr = new int[]{");for(i=0;i<10;i++){if(f==0&&a[i]!=0){printf("%d",i); f++;continue;}if(f!=0&&a[i]!=0)printf(",%d",i);}printf("};\n");return 0;
}

7-5 函数-斐波那契数列 (10分)
斐波那契数列(Fibonacci Sequence),又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……。在数学上,斐波纳契数列以递推的方法定义为:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N)。计算斐波那契数列第n项的值。

输入格式:

输入一个大于等于1,小于等于60的整数n。

输出格式:

输出第n项的数列值,数列值为double类型,不输出小数位数。

输入样例:

20

输出样例:

6765

输入样例:

1

输出样例:

1

作者: 韩玫瑰
单位: 济南大学
时间限制: 400 ms
内存限制: 64 MB
代码长度限制: 16 KB

#include<iostream>
#include<stdio.h>
#include<cmath>
#include<math.h>
using namespace std;
int add(int a,int b,int c)
{return a+b+c;
}int add (int a)
{return 50+a;
}
int add(int a,int b)
{return 30+a+b;
}
int prime(int n){int i;if(n<=1) return 0;if(n==2)return 1;for(i=2;i<=sqrt(n);i++) if(n%i==0) return 0;return 1;
}struct student
{char name[100];int hx;int mb;
}s[1000];
long long int fibonacci(int n)
{long long int i,t;long long int a=1,b=1;if(n==0) return 0;if(n==1||n==2) return 1;for(i=3;i<=n;i++){t=a;a=b;b=a+t;}return b;
}
int main()
{long long int n,m,j,i,k,l,t,s=0;cin>>n;printf("%lld",fibonacci(n));}

7-6 求n以内最大的k个素数以及它们的和 (10分)
本题要求计算并输出不超过n的最大的k个素数以及它们的和。

输入格式:
输入在一行中给出n(10≤n≤10000)和k(1≤k≤10)的值。

输出格式:
在一行中按下列格式输出:

素数1+素数2+…+素数k=总和值

其中素数按递减顺序输出。若n以内不够k个素数,则按实际个数输出。

输入样例1:
1000 10

输出样例1:
997+991+983+977+971+967+953+947+941+937=9664

输入样例2:
12 6

输出样例2:
11+7+5+3+2=28

#include<iostream>
#include<stdio.h>
#include<cmath>
#include<math.h>
using namespace std;
int add(int a,int b,int c)
{return a+b+c;
}int add (int a)
{return 50+a;
}
int add(int a,int b)
{return 30+a+b;
}
int prime(int n){int i;if(n<=1) return 0;if(n==2)return 1;for(i=2;i<=sqrt(n);i++) if(n%i==0) return 0;return 1;
}struct student
{char name[100];int hx;int mb;
}s[1000];
long long int fibonacci(int n)
{long long int i,t;long long int a=1,b=1;if(n==0) return 0;if(n==1||n==2) return 1;for(i=3;i<=n;i++){t=a;a=b;b=a+t;}return b;
}
int main()
{long long int n,f=0,m,j,i,k,l,t,s=0;cin>>n>>m;for(i=n;i>=1;i--){if(prime(i)&&f!=0){printf("+%d",i);f++;s=s+i;}if(prime(i)&&f==0){printf("%d",i);f++;s=s+i;}if(f==m)break;}printf("=%d",s);
}

实验心得和体会

函数第1题体会:

这一题需要用到重构函数,int,double,string类型分别相加

函数第2题体会:

这题的关键是修改地址,不可以用指针,只可以用地址修改,两数互换

函数第3题体会:

这一题需要用到重构函数,分别定义长方形的面积,和长方体的表面积

函数第4题体会:

这题主要是找出规律,第一个定义a+b,第二个定义a+50,第三个定义30+a+b

第1题体会:

这题需要分9-99 ,99-999,999-3000,三种情况,因为前导0算位,不然无法满足多少位不同的条件,但是要注意,不是到3000就停止,超高3000的满足条件的也要输出,不然会有一个2分的错误点,靠后问老师才知道。

第2题体会:

这题主要是定义一个验证素数的函数,并且要取出整数的各位数,相加求和,再验证两个数是否为素数

第3题体会:

这一题可以承接上一题的验证素数的函数,主要是从2,从n-2开始,从两头遍历,验证是否两个数都为素数

第4题体会:

这题不可定义为整型,因为含有前导0的不可输出(虽然手机号没看到开头有0的),定义一个数组,统计数组出现的次数,不为0的数组,从后往前统计,然后输出,再定义一个数组,遍历输入的手机号码,如果等于数组号输出所在的位置

第5题体会:

这题可以直接定义一个斐波拉西函数,有两种方法,第一中,先定义3个数,前两个存放斐波拉西的前两项,先让第三项等于前两项的和,然后把第二项复制给第一项,把和复制给第二项,最后只用输出第二项即可;第二种方法,定义一个很大的数组,然后算到要求的那一项,输出即可,个人倾向于第一种,因为,所占用的空间小,速度快

第6题体会:

上一题的斐波拉西函数仍然可以,只需要统计一下输出的个数,从后向前遍历,到指定的值停止即可。

LHL'PTA 实验2. 前8章实验综合训练(2)相关推荐

  1. C语言第六章函数实验报告,第六章实验报告

    C程序设计实验报告 实验项目: 6.4.1.函数的定义和调用 1.编写由三角形三边求面积的函数 2.编写求N阶乘的函数 3.求两个整数的最大公约数 4.打印输出三角形 5.求500以内的所有亲密数对 ...

  2. c语言第七章函数实验总结,第六章 实验报告 (函数与宏定义)

    c语言实验报告 实验项目: 1.编写由三角形三边求面积的函数 2.编写求N的阶层 3.求两个整数的最大公约数 4.打印输出的指定图形 5.模块化程序设计 姓名:张顺利实验地点:第一教学楼514教室   ...

  3. 第11章实验1:学生成绩管理系统V4.0(C语言)

    第11章实验1:学生成绩管理系统V4.0 (前方空降提示:由于题目很长很长很长,代码在最后,翻到底才有哦.) 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输 ...

  4. 第七章 实验传统的兴起

    第七章 实验传统的兴起 近代科学的三大传统 数理传统(希腊理性传统的再现) 孤立化.原子化.碎片化分析 实验传统 博物学传统 科学革命导致的两大主题 世界图景的机械化 自然的数学化与分析化 实验传统的 ...

  5. 《汇编语言》王爽(第四版) 第十一章 实验11

    文章目录 前言 一.实验任务 二.实现思路 三.实现代码 四.DIY时间 1.需求分析 2.最终效果 3.实现代码 总结 前言 本文是王爽老师<汇编语言>(第四版) 第十一章 实验11 的 ...

  6. c语言数组的实验报告结果思考,第七章实验报告(数组实验)

    C语言程序设计实验报告 实验项目: 1.一维数组的应用 2.二维数组的应用 3.字符数组应用 姓名:徐溢璠     实验地点: 514实验室       实验时间:2019年5月29日 一.实验目的与 ...

  7. C语言输入中10A20B,C语言实验报告第3章答案.doc

    C语言实验报告第3章答案.doc 3.2基础实验一.程序分析1.以下程序若输入a,则输入格式为c1a:运行结果为_a,A_.includestdio.hintmain char c1,c2;scanf ...

  8. 第12章实验1:学生成绩管理系统V5.0(c语言)

    第12章实验1:学生成绩管理系统V5.0 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).参考学生成绩管理系统V4.0,定义结构体类型,用结构体数组作函 ...

  9. 第12章实验1:学生成绩管理系统V5.0

    第12章实验1:学生成绩管理系统V5.0 第12章实验1:学生成绩管理系统V5.0 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).参考学生成绩管理系统 ...

最新文章

  1. 论文阅读工具ReadPaper
  2. Linux中与进程终止相关的信号SIGTERM,SIGKILL,SIGINT
  3. 新闻网站个人中心(查询用户的关注信息)流程分析
  4. [ARM-assembly]-ARM向量浮点指令集 快速参考卡
  5. 基于C#的TCP/IP协议应用(一)
  6. 字符串对象的各种方法
  7. JasperReports项目中的应用
  8. python基础教程书籍-Python基础教程(第2版)
  9. 验证码绕过(对验证码绕过的理解-----burpsuite)
  10. Karma 5:集成 Karma 和 Angular2
  11. 女友的一个建议,让26岁程序员做了个价值 10 亿美元的 App
  12. 大厂都搞不定的安全难题,被这家初创公司破解了!
  13. 软件人员绩效考核新思路
  14. 基于韦东山视频 regulator 学习笔记
  15. STM32CubeMX学习笔记(42)——ETH接口+LwIP协议栈使用(静态IP)
  16. 公众号怎么设置滑动文字_微信公众号滑动文字怎么制作内容呢?
  17. 如何搭建高德离线地图服务
  18. Tableau-可视化操作(五)
  19. python第三方库re库基本介绍
  20. 2020陕西初中学业水平计算机,2020年陕西省初中学业水平考试·模拟卷(一)...

热门文章

  1. HDU-1305-Immediate Decodability
  2. qt实现锁屏功能,即点击锁屏按钮后再点击界面则无效
  3. GWA2 in Python吉娃兔发布Python语言初始版本
  4. 高效的 itertools 模块
  5. babun登陆mysql_babun初体验
  6. vue的keydown事件小练习
  7. 【2】ShutdownHTTP系列-HTTP报文篇
  8. 058 业务逻辑漏洞
  9. 渗透一条龙服务(极速版)
  10. 使用Dreamweaver/利用HTML5/CSS/制作一个简单的文字logo