LHL 计算机程序设计(C++)第6周基础练习

1递归计算n!(10分)
题目内容:

编写递归函数,计算n!。在主函数中输入n,调用函数计算n!,在主函数中输出n!。

输入:非负整数。

输出:整数。

【注意】应用递归函数实现,否则没有意义。

样例1输入:

6

样例1输出:

720

时间限制:500ms内存限制:32000kb

#include<iostream>
#include<stdio.h>
#include<math.h>



using namespace std;

int jc(int n)
{
	int s=1;
	int i;
	for(i=1;i<=n;i++)
	{
		s=s*i;
	}
	return s;
}
int main(){
	int a;int k;
	cin>>a;
	cout<<jc(a);
	return 0;	
}

2递归计算1+2+3+…+n(10分)
题目内容:

编写递归函数,计算1+2+3+…+n。在主函数中输入n,调用函数计算1到n的和,在主函数中输出和。

输入:非负整数。

输出:非负整数。

【注意】应用递归函数实现,否则没有意义。输入0时,和为0.

样例1输入:

10

样例1输出:

55

#include<iostream>
#include<stdio.h>
#include<math.h>



using namespace std;

int jc(int n)
{
	int s=0;
	int i;
	for(i=1;i<=n;i++)
	{
		s=s+i;
	}
	return s;
}
int main(){
	int a;int k;
	cin>>a;
	cout<<jc(a);
	return 0;	
}

3递归求数组元素的最大值(10分)
题目内容:

编写递归函数,求数组元素的最大值,函数的输入参数为数组和元素个数,返回最大值。在主函数中输入元素个数和数组元素,调用函数求最大值,在主函数中输出结果。设数组类型为整型,元素不超过100个。

输入:元素个数n和n个元素,用空格或换行隔开。

输出:数组元素最大值。

【注意】使用递归,否则没有意义。

样例1输入:

6

12 1 2 3 14 6

样例1输出:

14

#include<iostream>
#include<stdio.h>
#include<math.h>



using namespace std;

int sz[110];
int maxs;
void jec(int n);
int main(){
int m;
cin>>m;
int n=m;
while(n)
cin>>sz[n--];
maxs=sz[1];
jec( m);
cout<<maxs;
return 0;
}
void jec(int n){
if(n<=1)return;
if(maxs<=sz[n])maxs=sz[n];
jec(n-1);
}

4递归求数组元素的和(10分)
题目内容:

编写递归函数,求数组元素的和,函数的输入参数为数组和元素个数,返回最大值。在主函数中输入元素个数和数组元素,调用函数求和,在主函数中输出结果。设数组类型为整型,元素不超过100个。

输入:元素个数n和n个元素,用空格或换行隔开。

输出:数组元素和。

【提示】元素个数为0时返回和是0.

样例1输入:

6

1 2 3 4 5 6

样例1输出:

21

#include<iostream>
#include<stdio.h>
#include<math.h>



using namespace std;
int sz[110];
int maxs=0;
void jec(int n);
int main(){
int m;
cin>>m;
int n=m;
while(n)
cin>>sz[n--];
jec(m);
cout<<maxs;
return 0;
}
void jec(int n){
if(!n)return;
maxs+=sz[n];
jec(n-1);
}

5递归求Fibonacci序列的第n项(10分)
题目内容:

Fibonacci(费波那契)序列:

f(0)=0

f(1)=1

f(n)=f(n-1)+f(n-2),n=2,3,4,…

编写递归函数,计算Fibonacci序列的第n项(n=0,1,2,3,…)。在主函数中输入n,调用函数计算Fibonacci第n项,在主函数中输出结果。

输入:非负整数

输出:非负整数

【注意】应用递归函数实现。

样例1输入:

6

样例1输出:

8

#include<iostream>
#include<stdio.h>
#include<math.h>



using namespace std;
int jec(int n);
int main(){
int m;
cin>>m;
cout<<jec(m);
return 0;
}
int jec(int n){
if(!n)return 0;
if(n==1)return 1;
return jec(n-2)+jec(n-1);
}

6递归逆序数组元素(10分)
题目内容:

编写递归函数,将数组元素逆序,函数的输入参数是数组、起始下标和元素个数。在主函数中输入元素个数和数组元素,调用函数逆序,在主函数中输出结果。设数组类型为整型,元素不超过100个。

输入:元素个数n和n个元素,用空格或换行隔开。

输出:逆序的数组元素,用一个空格隔开,末尾无空格。

【提示】本函数不需返回值。

【注意】必须用递归函数实现,否则没有意义。

样例1输入:

5

1 2 3 4 5

样例1输出:

5 4 3 2 1

#include<iostream>
#include<stdio.h>
#include<math.h>



using namespace std;
int a[110];
void jec(int n){
if(n==1){
cout<<a[1];
return;
}
else cout<<a[n]<<" ";
jec(n-1);
}
int main(){
int m;
cin>>m;
for(int i=1;i<=m;++i)
cin>>a[i];
jec(m);
return 0;
}

7输入输出数组元素的函数重载(10分)

题目内容:

函数重载就是定义函数名相同,参数类型或参数个数不同的函数。这些函数称为重载函数。具有重载关系的函数一般具有相同或相似的功能,但作用的对象不同。

编写输入数组元素的重载函数,数组类型分别为int和double,输入-9999时结束输入,返回输入的元素个数。编写输出数组元素的重载函数,数组类型分别为int和double。编写主函数,定义数组,调用函数输入元素,调用函数输出元素。元素个数不超过100个。主函数如下:

输入:两行。第1行为整型数组元素,第2行为double数组元素,均以-9999表示结束。

输出:两行,第1行为整型数组元素,第2行为double数组元素,以一个空格分隔,末尾无空格。

【提示】print函数中最后输出一个换行。

【注意】不使用重载,无意义。需提交完成程序。

样例1输入:

1 2 3 4 5 6 7 -9999

1.1 1.2 1.3 1.5 1.6 1.6 1.7 1.8 1.9 -9999

样例1输出:

1 2 3 4 5 6 7

1.1 1.2 1.3 1.5 1.6 1.6 1.7 1.8 1.9

时间限制:500ms内存限制:32000kb

#include<iostream>
using namespace std;
int ai[110]={0};
double ad[110]={0};
void jec(int a[],int n=0){
	if(a[n+1]==-9999){
		cout<<a[n]<<endl;
		return;
	}
	else cout<<a[n]<<" ";
	jec(a,n+1);
}
void jec(double a[],int n=0){
	if(a[n+1]==-9999){
		cout<<a[n]<<endl;
		return;
	}
	else cout<<a[n]<<" ";
	jec(a,n+1);
}
int input(int ai[]){
	int ni=0;
	do{
		cin>>ai[ni];
	}while(ai[ni++]!=-9999);
	return ni-1;
}
int input(double ai[]){
	int ni=0;
	do{
		cin>>ai[ni];
	}while(ai[ni++]!=-9999);
	return ni-1;
}
int main(){
	int ni=input(ai);
	int nd=input(ad);
	jec(ai,0);
	jec(ad,0);
  return 0;
}

8逆序函数重载(10分)
题目内容:

编写逆序数组元素的重载函数,数组元素类型分别为int和double。编写主函数,定义数组,可以调用上题的函数输入数组元素,调用逆序函数逆序数组元素,可以调用上题函数输出数组元素。注意,不能在逆序函数中输出。数组元素个数不超过100个。主函数如下:

输入:两行。第1行为整型数组元素,第2行为double数组元素,均以-9999表示结束。

输出:两行,第1行为逆序的整型数组元素,第2行为逆序的double数组元素,以一个空格分隔,末尾无空格。

【提示】print函数中最后输出一个换行。

【注意】不使用重载,无意义。

样例1输入:

1 2 3 4 5 6 7 8 -9999

1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 -9999

样例1输出:

8 7 6 5 4 3 2 1

1.9 1.8 1.7 1.6 1.5 1.4 1.3 1.2 1.1

#include<iostream>
using namespace std;
int ai[110]={0};
double ad[110]={0};
void reverse(int a[],int n){
for(int i=0,j=n-1;i<j;++i,--j){
int tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
}
void reverse(double a[],int n=0){
for(int i=0,j=n-1;i<j;++i,--j){
double tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
}
int input(int ai[]){
int ni=0;
do{
cin>>ai[ni];
}while(ai[ni++]!=-9999);
return ni-1;
}
int input(double ai[]){
int ni=0;
do{
cin>>ai[ni];
}while(ai[ni++]!=-9999);
return ni-1;
}
void print(int a[],int n){
for(int i=0;i<n;++i)
if(i!=n-1)cout<<a[i]<<" ";
else cout<<a[i]<<endl;
}
void print(double a[],int n){
for(int i=0;i<n;++i)
if(i!=n-1)cout<<a[i]<<" ";
else cout<<a[i]<<endl;
}
int main(){
int ni=input(ai);
int nd=input(ad);
reverse(ai,ni);
reverse(ad,nd);
print(ai,ni);
print(ad,nd);
return 0;
}


9数组元素求和函数的重载(10分)
题目内容:

编写数组元素求和的重载函数,数组元素类型分别为int和double。编写主函数,定义数组,可以调用前面的函数输入数组元素,调用求和函数求和,在主函数中输出结果。数组元素个数不超过100个。主函数如下:

输入:两行。第1行为整型数组元素,第2行为double数组元素,均以-9999表示结束。

输出:一个整数和,一个实数和,用空格隔开。

【注意】不使用重载,无意义。

样例1输入:

1 2 3 4 5 6 7 8 9 10 -9999

1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 -9999

样例1输出:

55 13.5

#include<iostream>
using namespace std;
int ai[110]={0};
double ad[110]={0};
int mysum(int a[],int n){
int ms=a[0];
for(int i=1;i<n;++i)ms+=a[i];
return ms;
}
double mysum(double a[],int n){
double ms=a[0];
for(int i=1;i<n;++i)ms+=a[i];
return ms;
}
int input(int ai[]){
int ni=0;
do{
cin>>ai[ni];
}while(ai[ni++]!=-9999);
return ni-1;
}
int input(double ai[]){
int ni=0;
do{
cin>>ai[ni];
}while(ai[ni++]!=-9999);
return ni-1;
}
int main(){
int ni=input(ai);
int nd=input(ad);
cout<<mysum(ai,ni)<<" "<<mysum(ad,nd)<<endl;
return 0;
}


10交换两个元素值的重载函数(10分)
题目内容:

编写交换两个元素值的重载函数,两个元素会是两个整数、两个实数、两个整型数组、两个char型字符串。编写主函数,定义有关变量、数组,输入数据,调用函数,输出交换结果。数组元素不超过100。主函数如下(其中print(是前面编写的显示数组元素的函数):

输入:5行;分别是两整数,两实数,数组1,数组2,两个字符串。见样例输入。其中数组行的第1个数是元素个数。

输出:5行,交换的结果,见样例输出。

【注意】不能使用系统的字符串处理库函数,不使用string。可以自定义需要的函数。

【提示】整数、实数的交换使用参数的引用传递;数组的交换,元素个数的交换使用引用传递。

样例1输入:

2 3

1.2 1.81

3 1 2 3

8 81 82 83 84 85 86 87 88

input output

样例1输出:

3 2

1.81 1.2

81 82 83 84 85 86 87 88

1 2 3

output input

时间限制:500ms内存限制:32000kb

#include<iostream>
using namespace std;
int ai[110]={0};
double ad[110]={0};
int mysum(int a[],int n){
int ms=a[0];
for(int i=1;i<n;++i)ms+=a[i];
return ms;
}
double mysum(double a[],int n){
double ms=a[0];
for(int i=1;i<n;++i)ms+=a[i];
return ms;
}
void swap(double &a,double &b){
double tmp=a;
a=b;
b=tmp;
}
void swap(char &s1,char &s2){
char p1=s1;
s1=s2;
s2=p1;
}
void swap(int aa[],int &n,int ab[],int &m){
int tm[100],tn=n;
for(int i=0;i<n;++i)
tm[i]=aa[i];
for(int i=0;i<m;++i)
aa[i]=ab[i];
for(int i=0;i<n;++i)
ab[i]=tm[i];
n=m;
m=tn;
}
void print(int aa[],int di){
for(int i=0;i<di-1;i++)
cout<<aa[i]<<" ";
cout<<aa[di-1]<<endl;
}
int main(){
int a,b;
double da,db;
char s1[100],s2[100];
int aa[100],ab[100];
int n,m,i;
cin>>a>>b;
cin>>da>>db;
cin>>n;
for(int i=0;i<n;++i)
cin>>aa[i];
cin>>m;
for(int i=0;i<m;++i)
cin>>ab[i];
cin>>s1>>s2;
swap(a,b);
swap(da,db);
swap(aa,n,ab,m);
swap(s1,s2);
cout<<a<<" "<<b<<endl;
cout<<da<<" "<<db<<endl;
print(aa,n);
print(ab,m);
cout<<s1<<" "<<s2<<endl;
return 0;
}


发布了40 篇原创文章 · 获赞 19 · 访问量 2716

猜你喜欢

转载自blog.csdn.net/Simple_questions/article/details/105379476