实验一:将输入的8位二进制数转换成十进制数
#include<iostream>
using namespace std;
/*
C++中的函数定义为程序的功能模块
函数可以用来计算数学公式(科学计算)
1.定义函数:
2.调用函数,调用函数时会产生一定的开销,
调用函数时产生的开销主要集中在:保护当前执行到的现场,以及将实参
传递到所调用的函数,以及将子函数(所调用的函数)计算的返回值返回。
调用函数的过程会带来较大的空间开销和时间开销,所以有时候希望能够执行函数的功能
而不是以调用函数的形式,以节省开销,在C++中使用内联函数可以实现。
3.修饰函数的新关键字
constexpr函数 常量表达式函数,函数体中的可执行语句只能有一句,就是return语句
C++中的常量const是真正的常量,不能通过任何方式被修改
C++中对常量的初始化可以通过:
用字面值的常量初始化const,或者用另外的常量、常量表达式初始化常量。
带默认形参值的函数:
C++标准库中所定义的系统函数
函数的定义:
类型名 函数名(函数形参列表)
在定义函数时,是不会给函数的形参分配内存空间的
只有当调用函数给形参赋予具体数值时,才会给形参分配内存空间
函数的形参是局部变量。
函数体中的return语句返回值要将函数的计算结果(即返回值)返回到函数的低
C++中函数的调用:将程序所要实现的各个功能分解开,划分成各个相互独立的功能模块,每个模块有一个函数实现
定义好的函数可以多次重复地被调用
从键盘输入二进制数,将其转换成十进制数输出
假设函数A调用函数B,将函数B定义在函数A之前则不需要专门声明函数B
如果函数B定义在函数A之后,则需要在文件首部声明函数B
进行函数声明不需要写出函数体
类型标识符 函数名(形参列表)
*/
double power(double x,int n);
int main(){
//cout<<power(5,2);
int i=1;
int value=0.0;
for(i=1;i<=8;i++){
int temp;
cin>>temp;
value+=static_cast<int>(temp*power(2,8-i));
//cout<<power(2,8-i)<<endl;
}
cout<<value<<endl;
return 0;
}
double power(double x,int n){
double output=1.0;
while(n>0){
output*=x;
n-=1;
}
return output;
}
实验二:计算PI的数值
#include<iostream>
using namespace std;
/*
编写程序求π的值
*/
double power(double x,int n){
double output=1.0;
while(n>0){
output*=x;
n-=1;
}
return output;
}
double arctan(double x,double eps){
// eps 表示求累加和的运算精度
double temp=x,output=0.0,i=1.0;
bool flag=true;//是否是正数
while(temp>eps or temp<-eps){
double base=2*i-1;
temp=power(x,base);
temp/=base;
if(flag){
output+=temp;
}
else{
output-=temp;
}
i+=1;
flag=!flag;
cout<<"here "<<i-1<<" "<<flag<<endl;
}
return output;
}
int main(){
double PI=0.0,eps=1e-15;
PI=arctan(double(1/5.0),eps);
PI*=16;
double two;
two=arctan(double(1/239.0),eps);
two*=4;
PI-=two;
cout<<PI<<endl;
return 0;
}
实验三:判断是否是回文数
#include<iostream>
using namespace std;
/*
寻找并输出11-999之间的数m,它满足m、m2和m3均为回文数。
回文:各位数字左右对称的整数。
例如:11满足上述条件
112=121,113=1331
*/
double power(double x,int n);
bool is_back_value(int n);
int main(){
int start=11;
int end=999;
for(start=11;start<=end;start++){
if(is_back_value(start) and is_back_value(power(start,2)) and is_back_value(power(start,2))){
cout<<start<<" "<<power(start,2)<<" "<<power(start,2)<<endl;
}
}
return 0;
}
double power(double x,int n){
double output=1.0;
while(n>0){
output*=x;
n-=1;
}
return output;
}
bool is_back_value(int n){
/*判断整数n是否是回文数,
算法如下:将数值逆序,如果逆序之后的数值与原始数值相等,则n就是回文数
*/
unsigned output=0,i=n;//用output来记录对于当前数值n逆序之后的数
while(i>0){
output=output*10+i%10;
i/=10;
}
return output==n;
}
rand函数
l 函数原型:int rand(void);
l 所需头文件:<cstdlib>
l 功能和返回值:求出并返回一个伪随机数
srand函数
l void srand(unsigned int seed);
l 参数:seed产生随机数的种子
l 所需头文件:<cstdlib>
l 功能:为使rand()产生一序列伪随机整数而设置起始点。使用1作为seed参数,可以重新初化rand()。
将整个整数范围内的数值n变换到1-6之间的技巧:1+n%6;
#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;
/*
模拟生成随机数
产生随机数的过程中,随机种子的作用:
假设要产生长度为100的随机数序列,则调用C++标准库中的rand(void)函数所产生的100个随机数
就好像是均匀采样出来的随机数序列,但是再次运行这样的程序,产生的是相同的100个随机数
这是因为:在两次产生随机数序列的算法中,设定的随机种子默认值是相同的,则产生的随机数序列完全相同
*/
int main(){
int i;
srand(5);
for(i=1;i<100;i++){
cout<<rand()<<endl;
}
return 0;
}//设定了随机种子之后,产生的随机数序列完全相同