c++问题整理--代码例程

#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;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值