回忆C古老的math.h库
概述:
math.h中为我们提供了三角函数数值运算、指数对数运算、绝对值、平方值、以及一些基本的数值处理。
函数:sin
功能:计算弧度的正弦值。
使用说明:sin(x),x为传入的弧度值。
函数:cos
功能:计算弧度的余弦值。
使用说明:cos(x),x为传入的弧度值。
函数:tan
功能:计算弧度的正切值。
使用说明:tan(x),x为传入的弧度值。
函数:sinh
功能:计算弧度的双曲正弦值。
使用说明:sinh(x),x为传入的弧度值。
函数:cosh
功能:计算弧度的双曲余弦值。
使用说明:cosh(x),x为传入的弧度值。
函数:tanh
功能:计算弧度的双曲正切值。
使用说明:tanh(x),x为传入的弧度值。
函数:asin
功能:计算弧度的反正弦值。
使用说明:asin(x),x为传入的弧度值。
函数:acos
功能:计算弧度的反余弦值。
使用说明:acos(x),x为传入的弧度值。
函数:atan
功能:计算弧度的反正切值。
使用说明:atan(x),x为传入的弧度值。
函数:atan2
功能:计算两个浮点数类型值之比的反正切值。
使用说明:atan2(x,y),该函数会计算出x/y的反正切值。
函数:log
功能:计算浮点数的自然对数值。
使用说明:log(x),计算以 ......
#include <list.h>
#include <dirent.h>
#include <iostream.h>
#include <sys/stat.h>
#include <sys/types.h>
/*****************************************************************
*函数功能: 目_录_遍_历.
*返回值: 成功返回0,失败返回非0.
*参数 path : 开始遍历的路径(最好不要使用相对路径)
* l : 保存找到路径的std:list对象
* field: 要查找的目录名称.
* 如: list("/home/wyq/",list,"tmp");
* 则可以找到 /home/wyq/*/tmp/
* 如: list("/home/wyq/",list,"tmp/template");
* 则可以找到 /home/wyq/*/tmp/template
*
************************************* ......
#include <list.h>
#include <dirent.h>
#include <iostream.h>
#include <sys/stat.h>
#include <sys/types.h>
/*****************************************************************
*函数功能: 目_录_遍_历.
*返回值: 成功返回0,失败返回非0.
*参数 path : 开始遍历的路径(最好不要使用相对路径)
* l : 保存找到路径的std:list对象
* field: 要查找的目录名称.
* 如: list("/home/wyq/",list,"tmp");
* 则可以找到 /home/wyq/*/tmp/
* 如: list("/home/wyq/",list,"tmp/template");
* 则可以找到 /home/wyq/*/tmp/template
*
************************************* ......
#include <dirent.h>
#include <sys/stat.h>
#include <sys/types.h>
/****************************************************
* 函数功能: 判断参数路径是否为(正确的)目录
* 函数返回: 0为表示路径为文件,1为非目录.其他为错误
* 参数: path文件需要判断的目录的路径.
* 可以为相对路径.
*
*****************************************************/
int isDir(const char *path)
{
struct stat info;
if ( 0 != stat(path,&info) )
{
return -2;
}
if( info.st_mode & S_IFDIR )
{
& ......
#include <dirent.h>
#include <sys/stat.h>
#include <sys/types.h>
/****************************************************
* 函数功能: 判断参数路径是否为(正确的)目录
* 函数返回: 0为表示路径为文件,1为非目录.其他为错误
* 参数: path文件需要判断的目录的路径.
* 可以为相对路径.
*
*****************************************************/
int isDir(const char *path)
{
struct stat info;
if ( 0 != stat(path,&info) )
{
return -2;
}
if( info.st_mode & S_IFDIR )
{
& ......
/***************************************************
* 函数说明: 判断当前path参数是否为一个可读的文件
* 函数返回: 0 - 文件刻度 1 - 权限拒绝 -1 -函数错误
* 参 数 : path 文件路径.
***************************************************/
int isReadFile(const char *path)
{
struct stat info;
int euid,egid;
if ( 0!= stat(path,&info) )
{
return -1;
}
//if it is a file
if( S_IFREG != (info.st_mode & S_IFMT ) )
{
return 1;
  ......
/***************************************************
* 函数说明: 判断当前path参数是否为一个可读的文件
* 函数返回: 0 - 文件刻度 1 - 权限拒绝 -1 -函数错误
* 参 数 : path 文件路径.
***************************************************/
int isReadFile(const char *path)
{
struct stat info;
int euid,egid;
if ( 0!= stat(path,&info) )
{
return -1;
}
//if it is a file
if( S_IFREG != (info.st_mode & S_IFMT ) )
{
return 1;
  ......
http://blog.csdn.net/hwz119/archive/2007/05/25/1625218.aspx
您是否做过这样一个项目,它要求您在内存中保存数目不定的若干不同对象?对于某些情况,二叉树是最佳选择,但在通常情况下,更简单的链表是显而易见的选择。
一个简化的问题示例
链表的难点在于必须复制链表处理函数来处理不同的对象,即便逻辑是完全相同的。例如:
两个结构类似的链表
struct Struct_Object_A
{
int a;
int b;
Struct_Object_A *next;
} OBJECT_A;
typedef struct Struct_Object_B
{
int a;
int b;
int c;
Struct_Object_B *next;
} OBJECT_B;
上面定义的两个结构只有很小的一点差别。OBJECT_B 和 OBJECT_A 之间只差一个整型变量。但是,在编译器看来,它们仍然是非常不同的。必须为存储在链表中的每个对象复制用来添加、删除和搜索链表的函数。为了解决这个问题,可以使用具有全部三个变量的一个联合或结构,其中整数 c 并不是在所有的情况下都要使用。这可能变得非常 ......
http://blog.csdn.net/hwz119/archive/2007/05/25/1625218.aspx
您是否做过这样一个项目,它要求您在内存中保存数目不定的若干不同对象?对于某些情况,二叉树是最佳选择,但在通常情况下,更简单的链表是显而易见的选择。
一个简化的问题示例
链表的难点在于必须复制链表处理函数来处理不同的对象,即便逻辑是完全相同的。例如:
两个结构类似的链表
struct Struct_Object_A
{
int a;
int b;
Struct_Object_A *next;
} OBJECT_A;
typedef struct Struct_Object_B
{
int a;
int b;
int c;
Struct_Object_B *next;
} OBJECT_B;
上面定义的两个结构只有很小的一点差别。OBJECT_B 和 OBJECT_A 之间只差一个整型变量。但是,在编译器看来,它们仍然是非常不同的。必须为存储在链表中的每个对象复制用来添加、删除和搜索链表的函数。为了解决这个问题,可以使用具有全部三个变量的一个联合或结构,其中整数 c 并不是在所有的情况下都要使用。这可能变得非常 ......
偶尔看到 C Primer Plus 中讲到变长数组(VLA),很有意思。
作者在他的 C Primer Plus 和 C++ Primer Plus 里面都明确指出,定义数组时数组的元素个数必须是整型常量,不能是变量。但是在 C 这本书里讲到变长数组 VLA,在 C++ 那本里面又没有提。不知道为什么?想来一定是 VLA 用起来有些不太明确的地方。
我试着写了个小程序测试,编译运行都很正常。
#include <iostream>
void vla(int length)
{
int v[length];
for (int i=0; i < length; i++)
{
v[length] = i;
std::cout << v[i] << "\n";
}
return 0;
}
int main()
{
int length=0;
std::cout << "Enter length: ";
std::cin >> length;
vla(length);
return 0;
}
这样处理动态内存分配也是很好的啊!没有了内存泄露的问题,方便了,也简单了。
只是 C Primer Plus 的作者指出,必须要确定编译器的版本能够支持 VLA 特性。呵呵! ......