实验目的
- 使用C++语言编写简单的计算机程序,掌握C++程序从编辑、编译到运行的全过程,初步了解C++程序的特点。
- 掌握C++语言的数据类型(包括对各种数据类型变量的定义、初始化、赋值等)、运算符和表达式的使用。
- 掌握赋值语句的使用。
- 掌握数据的输入输出方法。
实验设备
学校机房电脑,本人电脑
实验内容
- 编写几个函数求值的程序
- 阅读代码,指出含义
- 编写程序求解问题
- 思考题
算法分析与设计
- 直接法
- 使用循环
源代码
- 根据随机从键盘输入的圆半径值,求圆的周长和半径并输出。
#define pi 3.1415926
void test01()
{
double r,c,s;
cin>>r;
c = 2*pi*r;
s = pi * r*r;
cout<<c<<endl<<s;
}
- 读入三个整数a、b、c,交换它们中的数,使a存放b的值,b存放c的值,c存放a的值。
void test02()
{
int a,b,c;
cin>>a>>b>>c;
int temp = a;
a = b;
b = c;
c = temp;
cout<<a<<endl<<b<<endl<<c<<endl;
}
- 对任意输入的四位整数,分别求出其各位数字,并按从后到前的顺序依次输出。例如,输入为1234时,输出结果为4,3,2,1。
void test03()
{
int a , b[4]{};
cin>>a;
int n = 10 ;
for(int i = 0 ; i < 4 ; i++)
{
b[i] = a%10;
a=a/10;
n*=10;
}
for(int i = 0 ; i < 4 ; i++)
{
cout<<b[i];
}
}
#include <iostream>
#include <cmath>
using namespace std;
class Mycul
{
public:
double m_a;
double m_b;
double m_c;
double m_d;
double m_x;
double m_y;
int FirstCul()
{
if(m_c == m_d)
return 0;
double cul1;
cul1 = m_x + (m_a+m_b) / (m_c-m_d) ;
cout<<"计算的结果为"<<cul1<<endl;
}
double SecondCul()
{ double res;
res = sqrt (1 + 1 / (m_x +( 1 / (m_x + 1) ) ) );
return res;
}
double ThirdCul()
{
return sin(m_x) + cos(m_x) + 1/tan(m_x);
}
double FourthCul()
{
return pow(M_E,m_x+m_y)+ pow(M_E,m_x-m_y);
}
double FifthCul()
{
return log10(1+ sqrt(1+ m_x * m_x));
}
double SixthCul()
{
return abs(m_x * m_x - m_y * m_y) + int(m_x - m_y);
}
Mycul( double a , double b ,double c , double d,double x ):m_a(a),m_b(b),m_c(c),m_d(d),m_x(x){}
Mycul( double x):m_x(x){}
Mycul(double x,int):m_x(x){}
Mycul(double x,double y):m_x(x),m_y(y){}
};
void test01()
{
cout<<"请输入a,b,c,d,x的值"<<endl;
double a,b,c,d,x;
cin>>a>>b>>c>>d>>x;
Mycul cul1( a,b,c,d,x);
cul1.FirstCul();
}
void test02()
{
cout<<"请输入x的值"<<endl;
double x;
cin>>x;
Mycul cul1(x);
double res = cul1.SecondCul();
cout<<res;
}
void test03()
{
cout<<"请输入x的值"<<endl;
double x;
cin>>x;
Mycul cul1(x);
double res = cul1.ThirdCul();
cout<<res;
}
void test04()
{
cout<<"请输入x,y的值"<<endl;
double x,y;
cin>>x>>y;
Mycul cul1(x,y);
double res = cul1.FourthCul();
cout<<res;
}
void test05()
{
cout<<"请输入x的值"<<endl;
double x;
cin>>x;
Mycul cul1(x);
double res = cul1.FifthCul();
cout<<res;
}
void test06()
{
cout<<"请输入x,y的值"<<endl;
double x,y;
cin>>x>>y;
Mycul cul1(x,y);
double res = cul1.SixthCul();
cout<<res;
}
int main()
{
test06();
return 0;
}
- 阅读下列程序,写出(由指定的输入)所产生的运行结果,并指出其功能。
#include <iostream.h>
void main()
{
char ch;
cin >> ch ;
ch = ( ch >= ’A’ && ch <= ’Z’ ) ? ( ch + 32 ) : ch ;
ch = ( ch >= ’a’ && ch <= ’z’ ) ? ( ch – 32 ) : ch ;
cout << ch << endl;
}
//首先,这个程序并不能正常运行,包含的问题有
// 编译器不支持旧式的库的命名方式
//编译器不支持void main
//中文字符应当为英文
//缺少命名空间
//将一个小写字母转换称大写的,大写字母值不变
#include <iostream.h>
void main()
{
int m;
float x;
bool bi,br;
cout << "\n int m=";
cin >> m;
bi = m > 1000;
cout << "\n float x=";
cin >> x;
br = x <= 1e3;
cout << bi << ',' << br << endl;
}
//分别输入100 40,2000 3000,1000 1000,2000 300,100 4000 运行。
//0,1 1,0 0,1 1,1 0,0
//判断第一个数字是否大于1000 大于为1,小于为0
//判断第二个数字是否小于1000 小于为1,大于为0
void main()
{
int n;
cin >> n ;
if ( n ++ < 10 )
cout << n << endl ;
else
cout << n -- << endl ;
}
// 输出了这个数字+1
代码测试
测试过程和运行结果分析
过程顺利,结果正常。
思考题解答
//* 对任意输入的小于1的并且只有3位尾数的实数,分别求出其各位数字并输出。
//要求输出的各数字之间要空2格。例如,输入为0.368时,输出结果为'0 3 6 8'。
void test04()
{
double a;
int b[4]{};
cin>>a;
for(int i = 1 ; i < 4 ; i++)
{
a*=10;
b[i] = a;
a = a - int(a);
}
for(int i = 0 ; i < 4 ; i++)
{
cout<<b[i]<<" ";
}
}
//这是一个错解,原因是计算机在储存浮点数的时候并不是输进去多少就是多少的,比如你输入0.368 ,答案确是 0,3,6,7,原因是在某一步小数之间的减法运算中,储存的小数变为0.36799...并不是0.368
正确答案
//* 对任意输入的小于1的并且只有3位尾数的实数,分别求出其各位数字并输出。
//要求输出的各数字之间要空2格。例如,输入为0.368时,输出结果为'0 3 6 8'。
void test04()
{
double a;
int b[4]{};
cin>>a;
a*=10000;
for(int i = 1 ; i < 4 ; i++)
{
b[i] = int(a/pow(10,4-i))%10;
}
for(int i = 0 ; i < 4 ; i++)
{
cout<<b[i]<<" ";
}
}
//放弃对小数进行操作,*10000之后对整数进行操作
实验总结
- cmath库中有很多数学公式可以直接拿来使用
- 利用除法和取余运算可以方便的获取一个整数的各位数字
- 使用中间变量可以方便的交换数值(其实c中自带swap函数。。。。)
- 不要对浮点数进行运算操作,会造成极其小的误差
参考资料
无