LHL'PTA 实验2. 前8章实验综合训练(2)
实验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)相关推荐
- C语言第六章函数实验报告,第六章实验报告
C程序设计实验报告 实验项目: 6.4.1.函数的定义和调用 1.编写由三角形三边求面积的函数 2.编写求N阶乘的函数 3.求两个整数的最大公约数 4.打印输出三角形 5.求500以内的所有亲密数对 ...
- c语言第七章函数实验总结,第六章 实验报告 (函数与宏定义)
c语言实验报告 实验项目: 1.编写由三角形三边求面积的函数 2.编写求N的阶层 3.求两个整数的最大公约数 4.打印输出的指定图形 5.模块化程序设计 姓名:张顺利实验地点:第一教学楼514教室 ...
- 第11章实验1:学生成绩管理系统V4.0(C语言)
第11章实验1:学生成绩管理系统V4.0 (前方空降提示:由于题目很长很长很长,代码在最后,翻到底才有哦.) 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输 ...
- 第七章 实验传统的兴起
第七章 实验传统的兴起 近代科学的三大传统 数理传统(希腊理性传统的再现) 孤立化.原子化.碎片化分析 实验传统 博物学传统 科学革命导致的两大主题 世界图景的机械化 自然的数学化与分析化 实验传统的 ...
- 《汇编语言》王爽(第四版) 第十一章 实验11
文章目录 前言 一.实验任务 二.实现思路 三.实现代码 四.DIY时间 1.需求分析 2.最终效果 3.实现代码 总结 前言 本文是王爽老师<汇编语言>(第四版) 第十一章 实验11 的 ...
- c语言数组的实验报告结果思考,第七章实验报告(数组实验)
C语言程序设计实验报告 实验项目: 1.一维数组的应用 2.二维数组的应用 3.字符数组应用 姓名:徐溢璠 实验地点: 514实验室 实验时间:2019年5月29日 一.实验目的与 ...
- C语言输入中10A20B,C语言实验报告第3章答案.doc
C语言实验报告第3章答案.doc 3.2基础实验一.程序分析1.以下程序若输入a,则输入格式为c1a:运行结果为_a,A_.includestdio.hintmain char c1,c2;scanf ...
- 第12章实验1:学生成绩管理系统V5.0(c语言)
第12章实验1:学生成绩管理系统V5.0 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).参考学生成绩管理系统V4.0,定义结构体类型,用结构体数组作函 ...
- 第12章实验1:学生成绩管理系统V5.0
第12章实验1:学生成绩管理系统V5.0 第12章实验1:学生成绩管理系统V5.0 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).参考学生成绩管理系统 ...
最新文章
- 论文阅读工具ReadPaper
- Linux中与进程终止相关的信号SIGTERM,SIGKILL,SIGINT
- 新闻网站个人中心(查询用户的关注信息)流程分析
- [ARM-assembly]-ARM向量浮点指令集 快速参考卡
- 基于C#的TCP/IP协议应用(一)
- 字符串对象的各种方法
- JasperReports项目中的应用
- python基础教程书籍-Python基础教程(第2版)
- 验证码绕过(对验证码绕过的理解-----burpsuite)
- Karma 5:集成 Karma 和 Angular2
- 女友的一个建议,让26岁程序员做了个价值 10 亿美元的 App
- 大厂都搞不定的安全难题,被这家初创公司破解了!
- 软件人员绩效考核新思路
- 基于韦东山视频 regulator 学习笔记
- STM32CubeMX学习笔记(42)——ETH接口+LwIP协议栈使用(静态IP)
- 公众号怎么设置滑动文字_微信公众号滑动文字怎么制作内容呢?
- 如何搭建高德离线地图服务
- Tableau-可视化操作(五)
- python第三方库re库基本介绍
- 2020陕西初中学业水平计算机,2020年陕西省初中学业水平考试·模拟卷(一)...