【编程练习】收集的一些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日志并进行多维度分析。
相关文章
|
1月前
|
存储 人工智能 算法
【C++数据结构——内排序】二路归并排序(头歌实践教学平台习题)【合集】
本关任务是实现二路归并算法,即将两个有序数组合并为一个有序数组。主要内容包括: - **任务描述**:实现二路归并算法。 - **相关知识**: - 二路归并算法的基本概念。 - 算法步骤:通过比较两个有序数组的元素,依次将较小的元素放入新数组中。 - 代码示例(以 C++ 为例)。 - 时间复杂度为 O(m+n),空间复杂度为 O(m+n)。 - **测试说明**:平台会对你编写的代码进行测试,提供输入和输出示例。 - **通关代码**:提供了完整的 C++ 实现代码。 - **测试结果**:展示代码运行后的排序结果。 开始你的任务吧,祝你成功!
36 10
|
1月前
|
搜索推荐 算法 数据处理
【C++数据结构——内排序】希尔排序(头歌实践教学平台习题)【合集】
本文介绍了希尔排序算法的实现及相关知识。主要内容包括: - **任务描述**:实现希尔排序算法。 - **相关知识**: - 排序算法基础概念,如稳定性。 - 插入排序的基本思想和步骤。 - 间隔序列(增量序列)的概念及其在希尔排序中的应用。 - 算法的时间复杂度和空间复杂度分析。 - 代码实现技巧,如循环嵌套和索引计算。 - **测试说明**:提供了测试输入和输出示例,帮助验证代码正确性。 - **我的通关代码**:给出了完整的C++代码实现。 - **测试结果**:展示了代码运行的测试结果。 通过这些内容,读者可以全面了解希尔排序的原理和实现方法。
58 10
|
1月前
|
搜索推荐 C++
【C++数据结构——内排序】快速排序(头歌实践教学平台习题)【合集】
快速排序是一种高效的排序算法,基于分治策略。它的主要思想是通过选择一个基准元素(pivot),将数组划分成两部分。一部分的元素都小于等于基准元素,另一部分的元素都大于等于基准元素。然后对这两部分分别进行排序,最终使整个数组有序。(第一行是元素个数,第二行是待排序的原始关键字数据。本关任务:实现快速排序算法。开始你的任务吧,祝你成功!
41 7
|
1月前
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
40 5
|
1月前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
49 2
|
2月前
|
存储 算法 安全
基于红黑树的局域网上网行为控制C++ 算法解析
在当今网络环境中,局域网上网行为控制对企业和学校至关重要。本文探讨了一种基于红黑树数据结构的高效算法,用于管理用户的上网行为,如IP地址、上网时长、访问网站类别和流量使用情况。通过红黑树的自平衡特性,确保了高效的查找、插入和删除操作。文中提供了C++代码示例,展示了如何实现该算法,并强调其在网络管理中的应用价值。
|
1月前
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
3月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
192 7
|
3月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
153 8
|
4月前
|
存储 算法 C++
高精度算法(加、减、乘、除,使用c++实现)
高精度算法(加、减、乘、除,使用c++实现)
1145 0
高精度算法(加、减、乘、除,使用c++实现)

热门文章

最新文章