#include //提供格式符 fixed scientific
#include //提供格式符 setprecision
#include
#include //含有字符串的时候需要调用的
using namespace std;
//=====================================================================================================
void aa() //浮点数的定点。指数形式输出 (注意需要用到上面的调用库)
{
double x =sqrt(3.0);
cout<<x<<endl; //以默认格式输出X
cout<<setprecision(4)<<x<<endl; //以4位有效位输出X
cout<<scientific //以指数形式·3位小数输出X
<<setprecision(3)<<x<<endl;
cout<<fixed //以定点形式·6位小数输出x
<<setprecision(6)<<x<<endl;
return;
}
//===========================================================================================================
void bb() //显示浮点数的小数点。正号
{
double x=3.0,y=-5;
cout<<y<<endl; //浮点数值为整数,只输出整数,不输出小点数
cout<<showpoint //设置输出小数点
<<y<<endl;
cout<<showpos //设置输出正号
<<x<<endl;
cout<<noshowpos //清除输出正号
<<x<<endl;
return;
}
//================================================================================================================
void cc() //一元二次方程求法
{
float a,b,c;
cout<<"请输入三位数:";
cin>>a>>b>>c;
float sum;
sum = b*b-4*a*c;
if(sum>0)
{
sum = sqrt(sum);
if(sum)
{
cout<<"方程有两个不等的实根:"
<<"\n x1 = "<<(-b+sum)/(2*a)
<<"\n x2 = "<<(b+sum)/(2*a);
}
else
cout<<"方程有两个相等的实根:x1 = x2 = "<<"-b/2/a"<<"\n";
}
else
cout<<"方程没有实根";
return;
}
//==========================================================================================================================
void dd() //输入一个字符,判断它是元音字母还是空白符
{
char c;
cin.get(c); //注意对单个字符的输入方式
switch(c)
{
case 'a':case 'A':
case 'e':case 'E':
case 'i':case 'I':
case 'o':case 'O':
case 'u':case 'U': //当字符变量的值为上面的字符时 全部从这里开始执行
cout<<"这是元音字母\n";break;
case ' ':case '\n':case '\t':
cout<<"这是空白符\n";break;
default :cout<<"这是其他字符\n";
}
return;
}
//=========================================================================================================================
void ee() //输入一行字符串,并按输入的顺序依次输出该行字符
{
char c;
cout<<"输入一行字符串:\n";
for(cin.get(c);c != '\n';cin.get(c)) //注意这里的格式
cout<<c;
cout<<c;
return;
}
//===========================================================================================================================
void ff() //求1000以内的完数
{
int i,j,sum;
for(i=2;i<=1000;i++)
{
for(sum=1,j=2;j<=i/2;j++)
if(i%j == 0) sum+=j;
if(sum == i)
{
cout<<i<<"=1";
for(j=2;j<=i/2;j++)
if(i%j == 0) cout<<'+'<<j;
cout<<endl;
}
}
return;
}
//==============================================================================================================================
int sum(int n=100) //在这里默认函数形参,同样也可以在调用时声明
{
int s=0;
for(int i=1;i<=n;i++) s+=i;
return s;
}
void gg() //调用函数时,形参可以是具体数值,这和C完全不同
{
cout<<"\n 0~50的整数和 = "<<sum(50);
cout<<"\n 0~100的整数和 = "<<sum();
int sum(int n=50); //在函数原型声明时,设置形参的默认值
cout<<"\n 0~50的整数和 = "<<sum();
cout<<"\n 0~100的整数和 = "<<sum(100);
return;
}
//===============================================================================================================================
int abs(int x) //可以自己在网上查一下关于函数重载的问题
{
return x<0? -x : x;
}
float abs(float x)
{
return x<0? -x: x;
}
double abs(double x)
{
return x<0? -x: x;
}
void hh() //函数重载 ,在C++中含有这样的形式,但是在这个编译器上不可以
{
int a = -1;
float b = 2.5f;
double c = -3.6;
cout<<"\n abs("<<a<<") = "<<abs(a);
// cout<<"\n abs("<<b<<") = "<<abs(b);
// cout<<"\n abs("<<c<<") = "<<abs(c);
return;
}
//=================================================================================================================================
void ii() //寄存器变量
{
register float fact = 1; //register 修饰的局部变量称为寄存器变量 实则不要为这类变量分配内存空间
for(register int i=1;i<=10;i++) //尽可能直接分配使用cpu中的寄存器,来提高这类变量的存取速度
{ //但实际上大多数编译系统将寄存器作为自动变量来处理
fact *= i;
cout<<i<<"!="<<fact<<'\n';
}
return;
}
//=================================================================================================================================
void jj() //静态变量
{
for(int i=1;i<=3;i++)
{
static float fact = 1;
fact*=i; //初始化仅在该语句第一次被执行
cout<<i<<"!="<<fact<<'\n';
}
return;
}
//=======================================================================================================================
int *f()
{
static int count;
++count;
return &count;
}
void kk() //指针做函数的返回值
{
*f() = 100; //*f()就是*(&count),因为赋值运算符的优先级小于函数调用
cout<<*f()<<'\n';
return;
}
//==================================================================================================================
void ll() //for语句判断条件的一种写法
{
cout<<"\t输入四个整数";
int i,x,total;
int max,min;
cin>>x;
for(i=1,max=min=total=x;i<4;i++)
{
cin>>x;
total+=x;
if(x>max) max = x;
if(x<min) min = x;
}
cout<<" 最大值 "<<" max="<<max;
cout<<" 最小值 "<<" min="<<min;
}
//====================================================================================================
int& mmf(void) //注意函数里面参数的写法,是一个void
{
static int count;
return ++count;
}
void mm() //引用做函数的返回值
{
mmf() = 100;
cout<<mmf()<<'\n';
return;
}
//======================================================================================================
void nn_1(int a[],int n) //存入数组用的
{
for(int i=0;i<n;i++)
cin>>a[i];
}
int nn_2(int a[],int n)
{
int sum = a[0];
for(int i=1;i<n;i++)
sum+=a[i];
return sum;
}
void nn() //数组作为参数传入的方法
{
int a[4];
cout<<" 输入4个数\n";
nn_1(a,4); //这一句其实已经存储了数组的值
cout<<" 平均数:"<<nn_2(a,4)/4.0f<<endl;
return;
}
//========================================================================================================
void oo() //指针变量的关系运算
{
int a[5] = {10,20,30,40,50},*p1,*p2,sum=0;
for(p2 = &a[0];p2<=&a[4];p2++) //这里就需要关注一下
cout<<*p2<<'\t';
p1 = &a[0]+5; //作为下面继续循环的条件
p2 = &a[0];
while(p2 != p1)
sum += *p2++;
cout<<"\n 元素之和为:"<<sum<<endl;
return;
}
//=========================================================================================================
class Employee //class 类名 (类定义)
{
char name[10];
int age; //不允许在说明数据成员的同时进行初始化 例如(int age = 3;)就错误
float salary;
public: //访问权限 public(公有成员), private(私有成员), protected(保护成员);
void input()
{
cout<<" 输入职工姓名·年龄和工资:";
cin>>name>>age>>salary;
}
void output()
{
cout<<name<<'\t'<<age<<'\t'<<salary<<endl;
}
};
void pp() //面向对象-对象数组
{
Employee e[3];
for(int i=0;i<3;i++)
e[i].input();
for(int i=0;i<3;i++)
e[i].output();
return;
}
//=============================================================================================================
class Name
{
char *name;
public:
void SetName(char *name) //因为类Name的数据成员name与 函数成员setName的形参出现同名现象,在函数体中必须显示
{ //地使用this指针指向结构成员,否则在函数中形参会屏蔽掉作用域外的同名成员
if(name) //数据成员名与函数成员的形参名相同,但作用域不同
{
this->name = new char[strlen(name)+1]; //new运算符申请堆内存
strcpy(this->name,name); //this指针是与所指对象类型相同的const型指针,由系统维护,只允许在函数
} //成员体内使用,不允许用户改变,否则会出现编译错误
else
this->name = NULL;
}
char *GetName(char *s) //作为定义字符型指针类型,有返回值
{
strcpy(s,name);
return s;
}
void CopyName(Name &n) //注意这里的格式,里面的入参为地址 ,直接以自己定义的类来作为入参
{
if(this==&n) return; //避免对象自我复制
delete name; //delete用算符及时释放用new运算符申请分配但已不再使用的堆内存
if(n.name)
{
name = new char[strlen(n.name)+1]; //strlen在C中是计算字符串长度的,不包含'\0'
strcpy(name,n.name);
}
else
name = NULL;
}
};
void kk_1() //不得不显示使用this指针的例子
{
Name n1,n2;
char s[100];
n1.SetName(" 张三");
n2.SetName(" 李四");
cout<<n1.GetName(s)<<endl;
cout<<n2.GetName(s)<<endl;
n1.CopyName(n2);
cout<<n1.GetName(s)<<endl;
return;
}
//=============================================================================================================
void KK_2() //输出两个数相乘后的结果的逆序
{
int a,b;
int num;
cin>>a>>b;
num = a*b;
if(num>99999)
{
cout<<num%100000%10000%1000%100%10<<num%100000%10000%1000%100/10<<num%100000%1000%1000/100<<num%100000%10000/1000<<num%100000/10000<<num/100000;
}
else if(num>9999)
{
cout<<num%10000%1000%100%10<<num%10000%1000%100/10<<num%1000%1000/100<<num%10000/1000<<num/10000;
}
else if(num>999)
{
cout<<num%1000%100%10<<num%1000%100/10<<num%1000/100<<num/1000;
}
else if(num > 99)
{
cout<<num%100%10<<num%100/10<<num/100;
}
else
{
cout<<num%10<<num/10;
}
}
//====================================================================================================
int main()
{
int x;
cout<<"1:浮点数的定点。指数形式输出 \n"<<"2:显示浮点数的小数点。正号\n";
cout<<"3:一元二次方程求法\n"<<"4:输入一个字符,判断它是元音字母还是空白符\n";
cout<<"5:输入一行字符串,并按输入的顺序依次输出该行字符\n"<<"6:求1000以内的完数\n";
cout<<"7:调用函数时,形参可以是具体数值,这和C完全不同\n"<<"8:函数重载\n";
cout<<"9:寄存器变量\n"<<"10:静态变量\n"<<"11:指针做函数的返回值\n";
cout<<"12:for语句判断条件的一种写法\n"<<"13:引用做函数的返回值\n";
cout<<"14:数组作为参数传入的方法\n"<<"15:指针的关系运算\n";
cout<<"16:面向对象-对象数组\n"<<"17:不得不显示使用this指针的例子\n";
cout<<"18:关于函数指针简单应用,(暂时不会C++的)\n";
cout<<"19:输出两个数相乘后的结果的逆序\n" ;
while(1)
{
cout<<"\n\t输入你的选择: ";
cin>>x;
switch(x)
{
case 1:aa();break;
case 2:bb();break;
case 3:cc();break;
case 4:dd();break;
case 5:ee();break;
case 6:ff();break;
case 7:gg();break;
case 8:hh();break;
case 9:ii();break;
case 10:jj();break;
case 11:kk();break;
case 12:ll();break;
case 13:mm();break;
case 14:nn();break;
case 15:oo();break;
case 16:pp();break;
case 17:kk_1();break;
// case 18:rr();break;
case 19:KK_2();break;
}
}
return 0;
}