bupt c++慕课测试与作业5-6章
1按如下递归公式求函数值:x=1时 f(x)=10;x不等于1时 f(x)=f(x-1)+2。
递归算法,函数定义是递归的,可直接使用
#include <stdio.h>
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int f(int x)
{
if(x==1)
return 10;
else
return f(x-1)+2;
}
int main()
{
int x;
cin>>x;
cout<<f(x)<<endl;
}
1凯撒密码的加密方法是:给定一串字符,把其中每个大写字母变换成按顺序向后移N位的字母,遇到26个字母结束要环回到字母A计算顺序,其他字符不变。编程实现凯撒加密,输出密文。
判断如果字符在 'A' 和‘Z'-N 之间 直接加N
否则'Z'-N和‘Z'之间,直接加N会超过’Z',为了回还到A,减去26(英文字母的个数)
#include <stdio.h>
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
string s;
int i,N;
cin>>N>>s;
// cout<<N<<endl<<s<<endl;
for(i=0;s[i]!='\0';i++)
{ // cout<<s[i]<<endl;
if(s[i]>='A' && s[i]<='Z'-N)
s[i]=s[i]+N;
else if(s[i]>'Z'-N &&s[i]<='Z')
s[i]=s[i]+N-26;
}
cout<<s<<endl;
}
1平面直角坐标系下两点A(x1,x2)、B(y1,y2),它们之间的欧氏距离为:sqrt((x1-y1)*(x1-y1)+(x2-y2)*(x2-y2))。扩展到N维空间,每个点的坐标有N维,例如点A(x1,x2,......,xN),类似地也可以计算两点之间的欧氏距离。编程计算N位向量的欧氏距离。(2分)
#include <stdio.h>
#include <iostream>
#include <iomanip>
#include <string>
#include <cmath>
using namespace std;
#define Maxsize 100
int main()
{
int a[Maxsize],b[Maxsize],N,i;
double result;
cin>>N;
for(i=0;i<N;i++)
cin>>a[i];
for(i=0;i<N;i++)
cin>>b[i];
for(i=0;i<N;i++)
result=result+(a[i]-b[i])*(a[i]-b[i]);
result=sqrt(result);
cout<<fixed<<setprecision(2)<<result<<endl;
}
另外解法,可以采用动态数组,就用到指针,new和delete的使用,这里是考查动态数组,数组名和指针之间的关系,也可以用函数实现求距离。
#include <stdio.h>
#include <iostream>
#include <iomanip>
#include <string>
#include <cmath>
using namespace std;
int main()
{
int *a,*b,N,i;
double result;
cin>>N;
a=new int[N];
b=new int[N];
for(i=0;i<N;i++)
cin>>a[i];
for(i=0;i<N;i++)
cin>>b[i];
for(i=0;i<N;i++)
result=result+(a[i]-b[i])*(a[i]-b[i]);
result=sqrt(result);
cout<<fixed<<setprecision(2)<<result<<endl;
delete a;
delete b;
}
用函数实现求距离,注意参数的传递方式,实际有多种方式,包括对指针的使用
#include <stdio.h>
#include <iostream>
#include <iomanip>
#include <string>
#include <cmath>
using namespace std;
double distance_N(int *p1,int *p2,int n)
{ int i;
double result;
for(i=0;i<n;i++)
result=result+(p1[i]-p2[i])*(p1[i]-p2[i]);
result=sqrt(result);
return result;
// cout<<result<<endl;
}
int main()
{
int *a,*b,N,i;
double result;
cin>>N;
a=new int[N];
b=new int[N];
for(i=0;i<N;i++)
cin>>a[i];
for(i=0;i<N;i++)
cin>>b[i];
cout<<fixed<<setprecision(2)<<distance_N(a,b,N)<<endl;
delete a;
delete b;
}
1编写一个函数get_average()获取整型数组元素的平均值。要求这个函数既可以用来求一维数组元素的平均值,也可以求二维数组元素的平均值。在main()函数中通过具体的一维数组Array_1D和二维数组Array_2D测试这个函数。假定一维数组为a[5],二维数组为b[2][3],一维数组和二维数组的变量值由键盘分别输入,在屏幕上输出一维数组和二维数组的平均值,平均值间用一个空格分开。(2分)
指针这块命题,是考查一维数组和二维数组的存储和指针的使用。
函数是采用一维指针进行书写,当实际参数时二维数组的时候,传入其第一个元素的地址
#include <stdio.h>
#include <iostream>
#include <iomanip>
#include <string>
#include <cmath>
using namespace std;
#define Maxsize 100
int get_average(int *p,int n)
{
int sum=0,i;
for(i=0;i<n;i++)
sum=sum+p[i];
return sum/n;
}
int main()
{
int a[5],b[2][3],i,j;
for(i=0;i<5;i++)
cin>>a[i];
for(i=0;i<2;i++)
for(j=0;j<3;j++)
cin>>b[i][j];
cout<<get_average(a,5)<<' '<<get_average(&b[0][0],6)<<endl;
}
更多推荐



所有评论(0)