c语言竞赛小题目练习

#include <math.h>
#include <string.h>
#include <stdio.h>
#include <wchar.h>
#include <tchar.h>
#include <process.h>
//#include <alloc.h>
//执行指令sudo(10,20,"ABECFDABE")得到20
int sudo(int m1,int m2,char* cmd)
{
	int r1=0,r2=0,r3=0;
	for(int i=0;i<strlen(cmd);i++)
	{
		char cmd_str=cmd[i];
		switch(cmd_str)
		{
		case 'A':
			{
				r1=m1;
			}
			break;
		case 'B':
			{
				r2=m2;
			}
			break;
		case 'C':
			{
				m1=r3;
			}
			break;
		case 'D':
			{
				m2=r3;
			}
			break;
		case 'E':
			{
				r3=r1+r2;
			}
			break;
		case 'F':
			{
				r3=r1-r2;
			}
			break;
		default:
			break;
		}
	}
	return r3;
}
//求次方。返回k,其中p的k次方等于n,否则返回0
float calc(float n,float p)
{
	//求次方,10的2次方pow(10.0f,2)
	//n=pow(p,k);
	//求开方
	//double k=sqrt(100.0f);
	//double k=exp(100.0f);
	/**求开n次方
	double x=8.0f;
	double m=1.0f/3;k=3        // 这个是求8的开3次方的 想要算哪个的开几次方 自己改
	double k=pow(x,m);*/

	float k=0;
	for(float i=0;i<sqrt(n)+1;i++)
	{

		float ret=pow(p,i);
		if(ret==n)
		{
			k=i;
			break;
		}
	}
	return k;

}
//c语言实现字符串替换函数
// 能替换所有的要替换的字符串,被替换的字符串和替换的字符串不一定一样长.
// pInput - 输入字符串.
// pOutput - 输出字符串, 要保证足够的空间可以存储替换后的字符串.
// pSrc - 要被替换的子字符串, 比如%user%
// pDst - 要替换成的字符串, 比如user1
// 注意:以上的字符串均要以'\0'结尾.
//
void Substitute(char *pInput, char *pOutput, char *pSrc, char *pDst)
{
	char    *pi, *po, *p;
	int     nSrcLen, nDstLen, nLen;
	// 指向输入字符串的游动指针.
	pi = pInput;    
	// 指向输出字符串的游动指针.
	po = pOutput;
	// 计算被替换串和替换串的长度.
	nSrcLen = strlen(pSrc);
	nDstLen = strlen(pDst);
	// 查找pi指向字符串中第一次出现替换串的位置,并返回指针(找不到则返回null).   
	p = strstr(pi, pSrc);
	if(p)
	{// 找到.
		while(p)
		{
			// 计算被替换串前边字符串的长度.
			nLen = (int)(p - pi);
			// 复制到输出字符串.
			memcpy(po, pi, nLen);
			memcpy(po + nLen, pDst, nDstLen);
			// 跳过被替换串.
			pi = p + nSrcLen;
			// 调整指向输出串的指针位置.
			po = po + nLen + nDstLen;
			// 继续查找.
			p = strstr(pi, pSrc);
		}
		// 复制剩余字符串.
		strcpy(po, pi);
	}
	else
	{
		// 没有找到则原样复制.
		strcpy(po, pi);
	}
}

/**C++版 修改直接在源串上进行
bool Replace(string& src,        // 源串
			 const string& dst, // 要被替换的目标串
			 const string& rpl  // 替代串
			 )
{
	int pos = src.find(dst);
	if(pos == string::npos)
		return false;
	src.replace(pos, dst.size(), rpl);
	return true;
}
*/
int main()
{
	
	int ret=sudo(10,20,"ABECFDABE");
	printf("%d\n",ret);
	for(float i=0;i<16;i++)
	{
		float k=calc(16,i);
		if(k!=0.0f)
		{
			printf("%d的%d次方等于16\n",i,(int)k);
		}		
	}
	char ret_str[1024]={0};
	Substitute("ab1111cd1111ef1111",ret_str,"111","tttt");
	printf("%s\n",ret_str);
	getchar();
	return 0;
}

c++ 类对象强制类型转换

#include <iostream>
#include <stdio.h>
using namespace std;
//c++ 类对象强制类型转换
class Conver
{
      public:
             int b;
             operator int(){return b;} //注:这里是把函数的实现直接写出来
};
int main()
{
    Conver c;
    c.b=1002;
    printf("%d\n",(int)c);
    cout<<(int)c<<endl;
    return 0;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值