【编程练习】收集的一些c++代码片,算法排序,读文件,写日志,快速求积分等等

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:     写日志: class LogFile{public: static LogFile &instance(); operator FILE *() const { return m_file; }private LogFile(const char *filen...

 

 

写日志:

class LogFile
{
public:
  static LogFile &instance();
  operator FILE *() const { return m_file; }
private
  LogFile(const char *filename)
  {
     m_file = fopen(filename, "a+");
  }
  ~LogFile()
  {
     fclose(m_file);
  }
  FILE *m_file;
};

LogFile &LogFile::instance()
{
   static LogFile log("AppLog.txt");
   return log;
}

用的时候可以这么写:
fwrite("abc", 1, 3, LogFile::instance());

 

 

 

读取文件信息:

 c语言实现如下功能 输入全部文件名(绝对路径加文件名)得到,文件名,扩展名,文件长度

/* MAKEPATH.C */
#include<string.h>
#include <stdlib.h>
#include <stdio.h>

#define LENGTH 200


struct FILEHEAD
{
	char path_buffer[LENGTH];
	char filename[LENGTH];
	char ext[LENGTH];
	unsigned int length;
	
};

FILEHEAD file; 

void getFileInformation(FILEHEAD file)
{
	memset(&file,0,sizeof(file)); 
	
	//_makepath( path_buffer, "c", "\\sample\\crt\\", "makepath", "c" );
	printf( "Path created with : \n\n");
	scanf("%s",file.path_buffer);
	_splitpath( file.path_buffer, NULL, NULL, file.filename, file.ext );
	
	FILE *fp= NULL;
	fp=fopen(file.path_buffer,"r");
	if (NULL==fp)
	{
		printf("cannot open the %s \n",file.path_buffer);
		exit(0);
	}
	
	fseek(fp,0l,SEEK_END);
	file.length=ftell(fp);
	
	fclose(fp);
	fp = NULL; //需要指向空,否则会指向原打开文件地址
	
	
	
	printf( "Path extracted with _splitpath:\n" );
	//printf( "  Drive: %s\n", drive );
	//printf( "  Dir: %s\n", dir );
	printf( "  Filename: %s\n", file.filename );
	printf( "  Ext: %s\n", file.ext );
	printf( "  length is btye: %ld btye\n", file.length );
}

int main( void )
{
	
	getFileInformation(file);

	system("pause");

	return 0;
}



算法排序框架:

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define TRUE 1
#define FALSE 0
#define MAX 10000

typedef int KeyType;
typedef int OtherType;

typedef struct
{
	KeyType key;
	OtherType other_data;
}RecordType;


// All kinds of seek.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "headfile.h"
#include "windows.h"
#include  "conio.h "

#include"WinBase.h"
#include "Psapi.h"

#pragma  once
#pragma  message("Psapi.h --> Linking with Psapi.lib")
#pragma  comment(lib,"Psapi.lib")


int Data[MAX]={0};

void produceData(int a[],int length)       //给数组生成数据,用于随即查找
{
	time_t t;
	srand(time(&t));
	for (int i=0;i<length;i++)
	{
		a[i]=rand()%length;
	}


}

void printData(int a[],int length)		//打印数字,到控制台,每五个换一行
{
	for (int i=0;i<length;i++)
	{
		printf("%8d",a[i]);
		if (0==i%5)
		{
			printf("\n");
		}
	}

}

double showMemoryInfo()   
{   

	double MemorySize;					//单位MB
	HANDLE handle=GetCurrentProcess();   

	PROCESS_MEMORY_COUNTERS pmc;   
	GetProcessMemoryInfo(handle,&pmc,sizeof(pmc)); 
	MemorySize=pmc.WorkingSetSize/1024;

	printf("内存使用:  %8lf \n",MemorySize);	//WorkingSetSize The current working set size, in bytes.

	return MemorySize;

} 

void writeRecordtime(unsigned rTime)//将程序结果运行时间写入文件
{
	FILE *fpRecord=NULL; 

	char *s="your programm running time is:   ";
	char *c="ms   ";

	if((fpRecord=fopen("record.txt","wt+"))==NULL) 

	{ 

		printf("Cannot open file strike any key exit!"); 

		getchar(); 

		exit(1); 

	} 

	fprintf( fpRecord, "%s", s);
	fprintf( fpRecord, "%d", rTime);
	fprintf( fpRecord, "%s", c);

	fprintf( fpRecord, "\n");
	fprintf( fpRecord, "your programm use %fMB size of memory!!!", showMemoryInfo());



	fclose(fpRecord); 


}





int _tmain(int argc, _TCHAR* argv[])
{
	produceData(Data,MAX);
	printData(Data,MAX);

	getchar();

	return 0;
}

 

 

快速求积分办法:

// Integral-romberg方法求积分.cpp : 定义控制台应用程序的入口点。
//
/*
romberg方法求积分
方法也称为逐次分半加速法。它是在梯形公式,simpson公式和newton-cotes公式之间的关系的基础上,
构造出一种加速计算积分的方法。作为一种外推算法,它在不增加计算量的前提下提高了误差的精度。
在等距基点的情况下,用计算机计算积分值通常都采用吧区间逐次分半的方法进行。
这样,前一次分割得到的函数值在分半以后仍然可以被利用,并且易于编程。

运行结果如下:
输入:
0 
3.14159 
输出:Romberg- -12.0703
增加迭代次数或提高精度时,程序运行
得到的结果几乎没有什么变化。可以看到,
和Simpson方法运行的结果基本一致,但
Romberg法速度更快、精度更高


*/

#include "stdafx.h"



#include<iostream>
#include<math.h>
#define epsilon 0.00001
#define COUNT 100
using namespace std;

double fun(double x)
{
	return x*x;
}

double Romberg(double a,double b)
{
	int m ,n;
	double h,x,s,q,ep;
	double p,*R =new double[COUNT];
		
			h=b-a;
			R[0]= h*(fun(a)+ fun(b))/2.0;
			m=1;
			n=1;
			ep=epsilon+1.0;
			while ((ep >= epsilon)&& (m <COUNT))
			{
				p = 0.0;
			{
				for(int i=0;i<n;i++)
				{
					x = a+ (i+0.5)*h ;
					p= p + fun(x);
				}
					p= (R[0]+ h*p)/2.0;
					s = 1.0;
					for(int k=1;k<=m;k++)
					{
						s = 4.0*s;
						q= (s*p-R[k-1])/(s-1.0);
							R[k-1]= p;
							p =q;
					}
					p=fabs(q -R[m-1]);
					m =m + 1;
					R[m-1]= q;
					n = n + n;
					h = h/2.0;
				}
				return (q);
			}
}

int _tmain(int argc, _TCHAR* argv[])
{
	double a,b;
	cout<<"Input a,b:a为下限,b为上限"<<endl;
	cin>>a>>b;
	cout<<"Romberg="<<Romberg(a,b)<<endl;
	system("pause");
	return 0;
}



 

 

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
20天前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
36 2
|
2月前
|
存储 缓存 分布式计算
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
这篇文章是关于数据结构与算法的学习指南,涵盖了数据结构的分类、数据结构与算法的关系、实际编程中遇到的问题以及几个经典的算法面试题。
36 0
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
|
3月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
49 2
|
2月前
|
缓存 Linux 编译器
【C++】CentOS环境搭建-安装log4cplus日志组件包及报错解决方案
通过上述步骤,您应该能够在CentOS环境中成功安装并使用log4cplus日志组件。面对任何安装或使用过程中出现的问题,仔细检查错误信息,对照提供的解决方案进行调整,通常都能找到合适的解决之道。log4cplus的强大功能将为您的项目提供灵活、高效的日志管理方案,助力软件开发与维护。
60 0
|
2月前
|
算法 Python
Python算法编程:冒泡排序、选择排序、快速排序
Python算法编程:冒泡排序、选择排序、快速排序
|
3月前
|
存储 运维 监控
超级好用的C++实用库之日志类
超级好用的C++实用库之日志类
42 0
|
4月前
|
存储 算法 搜索推荐
编程之旅中的算法启示
【8月更文挑战第31天】在编程世界的迷宫里,算法是那把钥匙,它不仅能解锁问题的答案,还能引领我们深入理解计算机科学的灵魂。本文将通过一次个人的技术感悟旅程,探索算法的奥秘,分享如何通过实践和思考来提升编程技能,以及这一过程如何启示我们更深层次地认识技术与生活的交织。
|
4月前
|
算法 关系型数据库 程序员
第一周算法设计与分析:A : log2(N)
这篇文章介绍了解决算法问题"输入一个数N,输出log2N(向下取整)"的三种编程思路,包括使用对数函数和幂函数的转换方法,以及避免浮点数精度问题的整数逼近方法。
|
5月前
|
存储 算法 搜索推荐
告别低效编程!Python算法设计与分析中,时间复杂度与空间复杂度的智慧抉择!
【7月更文挑战第22天】在编程中,时间复杂度和空间复杂度是评估算法效率的关键。时间复杂度衡量执行时间随数据量增加的趋势,空间复杂度关注算法所需的内存。在实际应用中,开发者需权衡两者,根据场景选择合适算法,如快速排序(平均O(n log n),最坏O(n^2),空间复杂度O(log n)至O(n))适合大规模数据,而归并排序(稳定O(n log n),空间复杂度O(n))在内存受限或稳定性要求高时更有利。通过优化,如改进基准选择或减少复制,可平衡这两者。理解并智慧地选择算法是提升代码效率的关键。
71 1
|
4月前
|
存储 算法
【C算法】编程初学者入门训练140道(1~20)
【C算法】编程初学者入门训练140道(1~20)