山东大学《c++程序设计》lab1

实验目的:

熟悉c++的表达式、运算符、简单程序设计

实验步骤与内容:

1.请写出下列表达式的值,并编写一个程序验证。
(1)3.53+27-‘a’=-72.5
(2)26/3+34%3+2.5=11.5
(3)45/2+(int)3.14159/2=23
(4) a=b=(c=a+=6) 设a的初值为3 a=9
(5) a=35,a=b=32 a=6
(6) (int)(a+6.5)%2+(a=b=5) 设a的初值为3 答案为6
(7) x+a%3*(int)(x+y)%2/4 设x=2.5,a=7,y=4.7 答案为2.5
(8)(float)(a+b)/2+(int)x%(int)y设a=2,b=3,x=3.5,y=2.5 答案为3.5

#include<iostream>
using namespace std;
int main(){
	cout<<3.5*3+2*7-'a'<<endl;             //(1)
    cout<<26/3+34%3+2.5<<endl;           //(2)
    cout<<45/2+(int)3.14159/2<<endl;       //(3)
    int a=3;int b=0,c=0;
    a=b=(c=a+=6);
    cout<<a<<endl;                       //(4)
    cout<<(a=3*5,a=b=3*2)<<endl;          //(5)
    a=3;
    cout<<(int)(a+6.5)%2+(a=b=5)<<endl;     //(6)
    double x=2.5;
    a=7;
    double y=4.7;
    cout<<x+a%3*(int)(x+y)%2/4<<endl;        //(7)
    a=2; b=3;x=3.5;y=2.5;
    cout<<(float)(a+b)/2+(int)x%(int)y<<endl;    //(8)
    return 0;
}

(输出结果如下:)
在这里插入图片描述

2.要将"China"译成密码,密码规律是: 用原来的字母后面第4个字母代替原来的字母。
例如字母A后面第4个字母是E,用E代替A。因此,“China"应译为"Glmre”。请编写一程序,用赋初值的方法使c1,c2,c3,c4,c5这5个变量的值分别为’C’, ‘h’, ‘i’, ‘n’, ‘a’,经过运算,使c1,c2,c3,c4,c5分别变为’G’, ‘l’, ‘m’, ‘r’, ‘e’,并输出。

#include<iostream>;
using namespace std;
int main()
{
    char c1='C',c2='h',c3='i',c4='n',c5='a';
    c1+=4;c2+=4;c3+=4;c4+=4;c5+=4;
    cout<<c1<<c2<<c3<<c4<<c5<<endl;
    return 0;
}

3. 用迭代法求x=sqrt(a)。求平方根的迭代公式为xn+1=1/2(xn+a/xn)
要求前后两次求出的x的差的绝对值小于10-5时结束,并输出每次迭代的结果和最后结果。
能连续求多个正数的平方根,输入负数时给出提示,并结束程序。

#include<iostream>
#include<cmath>
using namespace std;
int main(){
	double x1=1.0,x2;
	int a;
	printf("请输入一个正整数a\n");
	while(scanf("%d",&a)){//便于连续求多个正数的平方根
		if(a>0){//
			x2=(x1+a/x1)/2;
			while(fabs(x1-x2)>=1e-5){//差的绝对值小于10^-5
				x1=x2;
				x2=(x1+a/x1)/2;
				printf("%5f,%5f\n",x1,x2);//输出每次迭代结果
			}
			printf("a的平方根是%5f\n",x1);//输出最终结果
		}else{//若输入负数给出提示并结束程序
			printf("您输入的是一个负数,程序结束"); 
			break;
		}
	}
	return 0;
}

4. 用递归方法求n阶勒让德多项式的值,递归公式为

#include<iostream>
using namespace std;
int p(int n,int x){//构造递归方法
	int ans;
	if(n == 0) ans=1;
	else if(n==1) ans=x;
	else
		ans=((2*n-1)*x*p(n-1,x)-(n-1)*p(n-2,x))/n; 
	return ans;
}
int main(){
	int n;int x;
	printf("请输入变量x的值\n");
	scanf("%d",&x);
	printf("请输入所求x勒让德多项式的阶数n\n");
	scanf("%d",&n);
	printf("%d的%d阶勒让德多项式的值为%d",x,n,p(n,x)); //调用递归方法输出结果
	return 0;
}

5.用函数重载实现函数sum,分别求int、float、double型的三个数的和,在main函数中分别调用这3个函数。

#include<iostream>
using namespace std;
int sum(int a,int b,int c){//求int型的三个数的和
	return a+b+c;
}
float sum(float a,float b,float c){//求float型的三个数的和
	return a+b+c;
}
double sum(double a,double b,double c){//求double型的三个数的和
	return a+b+c;
}
int main(){//在main函数中分别调用以上3个函数
	cout<<"int型:1+2+3="<<(sum(1,2,3))<<endl;
	cout<<"float型:1.0f+2.0f+3.5f="<<(sum(1.0f,2.0f,3.5f))<<endl;
	cout<<"double型:1.1+2.2+3.3="<<(sum(1.1,2.2,3.3))<<endl;
	return 0;
}

(输出结果如下:)
在这里插入图片描述
6. 用函数模板实现上题中的功能。

#include<iostream>
using namespace std;
template<typename T>
T sum(T a,T b,T c)//函数模板
{
    return a+b+c;
}
int main()
{
    int a,b,c;//求int型的三个数的和
    cin>>a>>b>>c;
    cout<<sum(a,b,c)<<endl;
    float d,e,f;//求float型的三个数的和
    cin>>d>>e>>f;
    cout<<sum(d,e,f)<<endl;
    double g,h,i;//求double型的三个数的和
    cin>>g>>h>>i;
    cout<<sum(g,h,i)<<endl;
    return 0;
}
发布了11 篇原创文章 · 获赞 0 · 访问量 31

猜你喜欢

转载自blog.csdn.net/weixin_43959421/article/details/103974819