← 学习库 C++程序设计教程 本册目录

附录 A 常用 C/C++ 标准库函数

原书第 321 页

附錄

附录 A 常用的 C/C++ 标准库函数

  1. 数学函数(使用时要包括的头文件:math.h)
int abs(int n); 求 n 的绝对值。

double acos(double x); 求  $ \cos^{-1}(x) $ 的值, $ -1 \leqslant x \leqslant 1 $。

long double acosl(long double x); 同上(以下的“同上”均指的是含义同上,但可能数据类型等会有差异)。

double asin(double x); 求  $ \sin 1^{-1}(x) $ 的值, $ -1 \leq x \leq 1 $。

long double asinl(long double x); 同上。

double atan(double x); 求  $ \tan^{-1}(x) $ 的值。

long double atanl(long double x); 同上。

double atan2(double x, double y); 求  $ \tan^{-1}(x/y) $ 的值。

long double atan2l(long double x, long double y); 同上。

double ceil(double x); 对 x 向上取整,计算且返回一个 double 型的大于或等于 x 的最小整数。

long double ceil(long double x); 同上。

double cos(double x); 计算  $ \cos(x) $ 的值,x 采用弧度值。

long double cosl(long double x); 同上。

double cosh(double x); 求 x 的双曲余弦值。

long double coshl(long double x); 同上。

double exp(double x); 计算  $ e^x $ 的值。

long double expl(long double x); 同上。

double fabs(double n); 返回 n 的绝对值。

long double fabsl(long double n); 同上。

double floor(double x); 对 x 向下取整,计算并返回一个 double 型的小于或等于 x 的最大整数。

long double floorl(long double x); 同上。

double fmod(double x, double y); 计算整除 x/y 的余数。

long double fmodl(long double x, long double y); 同上。

double hypot(double x, double y); 求直角三角形的斜边长。

long int labs(long int n); 计算长整型 n 的绝对值。

double log(double x); 计算  $ \ln(x) $ 的值。

long double logl(long double x); 同上。

double log10(double x); 计算  $ \log_{10}(x) $ 的值。
原书第 322 页
long double log10l(long double x); 同上。

double pow(double x,double y); 求  $ x^{y} $ 的值。

long double powl(long double x,long double y); 同上。

double  $ \sin(double x) $; 求  $ \sin(x) $ 的值, x 采用弧度值。

long double sinl(long double x); 同上。

double sinh(double x); 求 x 的双曲正弦值。

long double sinh(long double x); 同上。

double sqrt(double x); 求 x 的平方根值。

long double sqrt(long double x); 同上。

double  $ \tan(double x) $; 求  $ \tan(x) $ 的值, x 采用弧度值。

long double tanl(long double x); 同上。

double  $ \tanh(double x) $; 求 x 的双曲正切值。

long double tanhl(long double x); 同上。
2. 字符测试函数(使用时要包括的头文件:ctype.h)
int isalnum(int ch); 测试字符 ch 是否为字母或数字。如果 ch 在 A~Z, a~z 或 0~9 的范围内,返回非 0 值;否则,返回 0 值。

int isalpha(int ch); 测试字符 ch 是否为字母。如果 ch 在 A~Z 或 a~z 的范围内,则返回非 0 值;否则,返回 0 值。

int iscntrl(int ch); 测试字符 ch 是否为控制字符(ASCII 码 0~0X1F)或者 DEL(ASCII 码 0X7F)。如果是,就返回非 0 值;否则,返回 0 值。

int isdigit(int ch); 测试 ch 字符是否为十进制数字。如果 ch 是一个十进制数字(0~9),返回非 0 值;否则,返回 0 值。

int isgraph(int ch); 测试字符 ch 是否为除空格外的可打印字符(ASCII 码 0X21~0X7E)。如果是,返回非 0 值;否则,返回 0 值。

int islower(int ch); 测试字符 ch 是否为小写字母。如果 ch 是小写字母,返回非 0 值;否则,返回 0 值。

int isprint(int ch); 测试字符 ch 是否为可打印字符(ASCII 码 0X20~0X7E)。如果是,返回非 0 值;否则,返回 0 值。

int ispunct(int ch); 测试字符 ch 是否为非空格、字母和数字的可打印字符。如果是,返回非 0 值;否则,返回 0 值。

int isspace(int ch); 测试字符 ch 是否为空白字符(ASCII 码 0X09~0X0D,包括空格、水平制表符、垂直制表符、换页、回车或换行符)。如果是,返回非 0 值;否则,返回 0 值。

int isupper(int ch); 测试字符 ch 是否为大写字母。如果 ch 是大写字母,返回非 0 值;否则,返回 0 值。

int isxdigit(int ch); 测试字符 ch 是否为十六进制数字。如果 ch 是一个十六进制数字 (0~9, A~F 或 a~f), 返回非 0 值; 否则, 返回 0 值。

int tolower(int ch); 把 ch 转换为小写字母。

int toupper(int ch); 把 ch 转换为大写字母。
原书第 323 页
3. 字符串函数(使用时要包括的头文件:string.h)

注意:类型 size_t 为 unsigned int。

void *memchr(const void*s,int ch,size_t n); 在前 n 个字符中查找字符 ch,并返回找到的地址;否则,返回 NULL。

int memcmp(const void*s1, const void*s2, size_t n); 比较由 s1 和 s2 指出的两个块的前 n 个字节。如果 s1 小于 s2,返回值为<0;如果 s1 等于 s2,返回值为=0;如果 s1 大于 s2,返回值为>0。

int memcmp(const void*s1, const void*s2, size_t n); 比较由 s1 和 s2 指出的两个块的前 n 个字节。与 memcmp()的区别是:memcmp()忽略大小写。

void *memcpy(void*dest, const void*src, size_t n); 从源 src 中复制 n 个字节到目标 dest 中。返回 dest 值。如果 src 与 dest 地址有重叠,则 memcpy 的动作未定义。

void *memmove(void*dest, const void*src, size_t n); 从源 src 中复制 n 个字节到目标 dest 中。返回 dest 值。与 memcpy() 的区别是:即使 src 与 dest 地址有重叠,重叠处的字节也能正确复制。

void *memset(void* s, int ch, size_t n); 设置内存块中的前 n 个字节为 ch,并返回 s。

char *strcat(char*dest, const char*src); 将 src 复制到 dest 的尾部,结果串的长度为 strlen(dest)+strlen(src)。返回指向合并串的首指针。

char *strncat(char*dest, const char*src, size_t n); 将 src 中至多 n 个字符复制到 dest 的尾部,然后附加一个空字符,结果串的最大长度为  $  \text{strlen}(\text{dest}) + n  $。

char *strchr(const char*s, int c); 在一个串中查找给定字符的第一个匹配之处,并返回该匹配字符的指针,如果没有,则返回 NULL,NULL 被认为是串中的一部分,则“strchr(str, NULL)”将返回指向串 str 的空终结符的指针。

int strcmp(const char*s1, const char*s2); 执行 s1 和 s2 的无符号比较,从每个串的第一个字符开始顺序比较,一直比到有某个字符不同或串结束为止。

int strcmpi(const char*s1, const char*s2); 执行 S1 和 S2 的无符号比较,比较中不区分大小写。
int strcmp(const char*s1, const char*s2); 同上。

int strncmp(const char*s1, const char*s2, size_t maxlen); 执行 s1 和 s2 的无符号比较,从每个串的第一个字符开始按顺序比较,一直比到有某个字符不同或已比较了 maxlen 个字符为止。其余同 strcmp()。

char *strcpy(char* dest, const char*src); 复制串 src 到 dest,一直到遇到 NULL 才终止,返回 dest。

char *strncpy(char*dest, const char*src, size_t maxlen); 若 src 的长度小于 maxlen,从 src 中复制至多 maxlen 个字符到 dest 中,截去 dest 中在 maxlen 长度以外的字符,或用 NULL 字符填补 dest,若 src 的长度等于或大于 maxlen,则结束串 dest 可能不以 NULL 字符结束。

char* strdup(const char*s); 创建串 s 的副本,它用社会实践()分配空间,被分配的空间为 strlen(s)+1 个字符,当不再使用该空间时,由用户释放 strdup 所占用的空间。返回指向包含串副本的空间的指针,或当没有足够空间时,它将返回 NULL。
原书第 324 页
char* strset(char* s, int ch); 将串中的所有字符都设置成指定字符 ch。遇到 NULL 字符时终止。

char* strnset(char* s,int ch, size_t n); 将串中的前 n 个字符都设置成指定字符 ch。若 n>strlen(s),则用 strlen(s)取代 n。遇到 NULL 字符时终止。

char*strrev(const char*s); 串的逆转。

char* strstr(const char* s1, const char* s2); 在字符串 s1 中扫描字符串 s2 的第一次出现。返回出现 s2 时 s1 中的指针,如果 s2 不在 s1 中,则返回 NULL。
4. 时间函数(使用时要包括的头文件:time.h)

在 time.h 中定义:

typedef long clock_t;

typedef long time_t;

time.h 中声明了 tm 结构,其中有日期和时间的细分成员。

struct tm
{
    int tm_sec;//秒
    int tm_min;//分
    int tm_hour;//时(0~23)
    int tm_mday;//日(1~31)
    int tm_mon;//月(0~11)
    int tm_year;//年(日历年份减去1900)
    int tm_wdqy;//星期几(0~6),星期天为0
    int tm_yday;//从1月1日算起的天数
};

char* asctime(const struct tm *tb); 将在 tb 中作为结构存储的时间转换为与 ctime 串格式相同的 26 字符长串。

clock_t clock(); 确定两次事件之间的时间间隔。若除以 CLK_TCK,则为秒数。

char* ctime(const time_t *time); 把参数指定的时间值转换成时间字符串。
double difftime(time_t time2, time_t time1); 计算从 time1 到 time2 的时间,单位为秒。
struct tm*gmtime(const time_t *timer); 把时间和日期转换为格林威治时间的 tm 结构形式分解的时间格式。

long time(long *timer); 取一天的时间,且把它存在 timer 所指的位置中。

struct tm*localtime(const time_t *timer);把时间和日期转换为本地时间的 tm 结构形式分解的时间格式。

time_t mktime(struct tm*t); 将 t 所指的时间转换为日历时间,与 time 函数使用的时间格式相同。各个字段 tm_sec,tm_min,tm_hour,tm_mday 和 tm_mon 的原值并不局限于 tm 结构中描述的范围,若这些域不在正确范围内,就会得到调整。在上述域的值调整后,再计算 tm_wday 和 tm_yday 的值。若本函数未能将时间信息表示为合法的日历时间,则 mktime 返回 -1(日历年份范围为 1970 年~2030 年)。

  1. C++中的 I/O 流(使用 I/O 流和通用 I/O 函数时要包括的头文件:iostream.h;使用控制符时要包括的头文件:iomanip.h)

(1)使用 I/O 流

原书第 325 页

因为在 C++ 的 I/O 新库 iostream.h 中声明了输入流对象 cin 和输出流对象 cout,所以,使用 I/O 流时,应写上 “#include<iostream.h”;”。

输出显示时的语句格式为:

cout<<被输出的信息 1[<<被输出的信息 2<<..<<被输出的信息 n];

键盘输入时的语句格式为:

cin>>变量名 1[>>变量名 2>>>...>>变量名 n];

(2) 使用控制符

控制符是在头文件 iomanip.h 中定义的,它可以对 I/O 流的格式进行控制。则使用控制符时,应写上 “#include”,并直接将控制符插入流中(即 “cout<<控制符;”)。常用的控制符叙述如下。

1 )控制浮点数值显示。

浮点形式:setprecision(n),表示有效位数。

定点形式:(setiosflags(ios::fixed)),setprecision(n),表示小数位数。

指数形式:(setiosflags(ios::scientific)),setprecision(n),表示小数位数。

系统默认设置为 setprecision(6)。

2 )设置值的输出宽度。

setw(n); 设置字段宽度为 n 个字符;如果实际输出宽度比 n 大,则按实际输出宽度输出;如果实际输出宽度比 n 小,则前补空格。

3 )输出16进制数

setiosflags(ios::uppercase); 控制 16 进制大写输出

4 )设置填充字符

setfill(c); 设置填充字符为 c,即在所设置的域宽范围内,后部是数据,如果数据填不满,则前部填满字符 c。

5 )左右对齐输出

setiosflags(ios::left);设置左对齐。

setiosflags(ios::right);设置右对齐。

6 )强制显示小数点和符号

setiosflags(ios::showpoint);显示小数点。

setiosflags(ios::showpos);显示正号。

7 )终止原有输出格式

resetiosflags(原有输出格式); 终止原有输出格式,“原有输出格式”要填写内容,如ios::showpos, ios::dec 等。

6. 标准库函数(使用时要包括的头文件:stdlib.h)
double atof(const char*str); 将 str 串转换为 double 值。

int atoi(const char* str); 将 str 串转换为 int 值。

char* itoa(int num, char* str, int radix); 将整数 num 转换成与其等价的字串,且将结果存在 str 指向的字串中,输出串的进制数由 radix 决定。
原书第 326 页
long atol(const char*str); 将 str 串转换成 long int 值。

char* ltoa(long num, char* str, int radix); 把长整数 num 转换成与其等价的字串,且将结果存在 str 指向的字串中,输出串的进制数由 radix 决定。

void exit(int status); 程序无条件终止。

void abort(void); 程序异常终止。

int rand(void); 返回一个随机数。

void srand (unsigned x); 用一个无符号整数 x 对随机数发生器进行初始化。
  1. 文本窗口显示函数(使用时要包括的头文件:conio.h)
int getch(void); 读取一个键盘字符,不回显。

int getche(void); 读取一个键盘字符,回显。

int putch(int ch); 输出字符 ch 在当前窗口中。

int kbhit(void); 检测键盘是否有按键按下。如果是,返回非 0 值;否则,返回 0 值。

注意:其他的 C/C++ 标准函数和命令(语句)可在 Visual C++ 6.0 的帮助(Help)和一些 C/C++ 标准函数手册中找到。

另外,还可以使用 DOS 命令,程序书写格式如下:

system("DOS 命令"); //注意:转路径要用 2 个反斜杠表示

#include//加上包括的头文件

例如:

#include

system("cls");//清屏幕

system("type d:\\6df\\test2.txt");//显示该路径下的 test2 文本文件的内容

附录 B ASCII 码表
ASCII 码字符16 进制ASCII 码字符16 进制ASCII 码字符16 进制
0NUL009HT0918DC212
1SOH0110LF0A19DC313
2STX0211VT0B20DC414
3ETX0312FF0C21NAK15
4EOT0413CR0D22SYN16
5ENQ0514SO0E23ETB17
6ACK0615SI0F24CAN18
7BEL0716DLE1025EM19
8BS0817DC11126SUB1A
原书第 327 页

(续)

ASCII 码字符16 进制ASCII 码字符16 进制ASCII 码字符16 进制
27ESC1B5573783S53
28FS1C5683884T54
29GS1D5793985U55
30RS1E58:3A86V56
31US1F59;3B87W57
32Space2060&lt;3C88X58
33!2161=3D89Y59
34&quot;2262&gt;3E90Z5A
35#2363?3F91[5B

| 36 | $ | 24 | 64 | @ | 40 | 92 | \ | 5C |$

37%2565A4193]5D
38&amp;2666B4294^5E
39&#x27;2767C4395-5F
40(2868D4496`60
41)2969E4597a61
42*2A70F4698b62
43+2B71G4799c63
44,2C72H48100d64
45-2D73I49101e65
46.2E74J4A102f66
47/2F75K4B103g67
4803076L4C104h68
4913177M4D105i69
5023278N4E106j6A
5133379O4F107k6B
5243480P50108l6C
5353581Q51109m6D
5463682R52110n6E
原书第 328 页

(续)

ASCII 码字符16 进制ASCII 码字符16 进制ASCII 码字符16 进制
111O6F117u75123{7B
112p70118v76124|7C
113q71119w77125}7D
114r72120x78126~7E
115s73121y79127DEL7F
116t74122z7A

注:0~31 是控制字符。

原书第 329 页

参 考 文 献

[1] Bjarne Stroustrup. The C++ Programming Language[M]. 北京:高等教育出版社,2001.

[2] 谭浩强. C++程序设计[M]. 北京:清华大学出版社,2004.

[3] 钱能. C++程序设计教程[M]. 北京:清华大学出版社,1999.

[4] 求是科技. Visual C++ 6.0 程序设计与开发技术大全[M]. 北京:人民邮电出版社,2004.

[5] 张曜,郭立山,谭超强. C++函数实用手册[M]. 北京:冶金工业出版社,2003.

[6] 钱能. C++程序设计实验指导[M]. 北京:清华大学出版社,1999.

[7] 黄品梅.以道德品质为引领,促创新人才之培养[J].电气电子教学学报,2009(31):102-105.

[8] 黄品梅. 学习 C++ 的方法[J]. 电脑学习,2008(5):29-30.

[9] 黄品梅.解决面向对象设计的关键问题——设置类及继承[J]. 电脑开发与应用,2008,21(6):36-37,40.

原书第 330 页

Document generated by Anna's Archive around 2023-2024 as part of the Duxiu collection

(https://annas-blog.org/duxiu-exclusive.html).

Images have been losslessly embedded. Information about the original file can be found in PDF attachments. Some stats (more in the PDF attachments):

{

"filename": "44CKQysr56iL5bqP6K6+6K6h5pWZ56iLICD1jJbpmr7kuLrmmJPInLD1rabkuaBDKyvjgltfMTI3NjcxNzUuemlw",

"filename_decoded": "u300aC++u7a0b/u5e8fuu8bbe/u8ba1/u6559/u7a0b

&lt;u5316&gt;u96beu4e3a/u6613u5730u5b66u4e60C++u300b_12767175.zip",

"filesize": 30967162,

"md5": "52d0326380cecb1feb5e62008b7ce863",

"header_md5": "527081cdddb0e1dce8c101ae8dcc20ab",

"sha1": "08f62f2583a83fcf32db89b41d5571716ec2dda9",

"sha256": "02e2c90d5d9916f372394da482d75dc0c64baa20f0cf0a8c484dbae1b8bf8133",

"crc32": 3483015006,

"zip_password": "",

"uncompressed_size": 33277937,

"pdg_dir_name": "u00edu2562C++u2502u2560u2568u2265u2554u03a6u255d&lt;u255e&gt;u2560&lt;u255u&gt;u00bbu2500u2564u256c&lt;u00ac&gt;u2565&lt;u256b&lt;u2561&gt;u256a&lt;u2564&lt;u00ba&gt;u2567&lt;u2591C++u00edu2556_12767175",

"pdg_main_pages_found": 316,

"pdg_main_pages_max": 316,

"total_pages": 329,

"total_pixels": 2058257568,

"pdf_generation_missing_pages": false

}

← 第20章 综合程序设计回目录 →