int main ( ) { double n = 0.0 , precious = 0.0 , inter = 0 ; while ( scanf ( "%lf" , & n ) != EOF ) precious = modf ( n , & inter ) ; printf ( "%.f %lf\n" , inter , precious ) ; return 0 ; 题目描述给定一个双精度浮点数,输出其整数部分和小数部分。注意:本题不允许取巧,比如按字符串读入,再确定小数点位置。必须按%lf读入double再分解。输入输入由多行组成,每行一个双精度浮点数。小数部分不超过6位。数可能很大,但保证是double类型的正常值。输出针对每组输入数据,产生一行输出,即双精度浮点数的整数部分和小数部分,用空格分开,小数点后保留6位小数。样例输入 Copy... 范例1-60 双亲、孩子和兄弟节点的查询 158 ∷相关函数:Parent函数 LeftChild函数 RightChild函数 LeftSibling函数 RightSibling函数 1.4.7 双亲、孩子和兄弟节点的查询(链式结构) 162 范例1-61 双亲、孩子和兄弟节点的查询 162 ∷相关函数:Parent函数 LeftChild函数 RightChild函数 LeftSibling函数 RightSibling函数 1.4.8 中序遍历二叉树(顺序结构) 169 范例1-62 中序遍历二叉树 169 ∷相关函数:InOrderTraverse函数 1.4.9 中序遍历二叉树(链式结构) 171 范例1-63 中序遍历二叉树 171 ∷相关函数:InOrderTraverse函数 1.4.10 中序非递归遍历二叉树(链式结构)(1) 174 范例1-64 中序非递归遍历二叉树 174 ∷相关函数:InOrderTraverse函数 1.4.11 中序非递归遍历二叉树(链式结构)(2) 177 范例1-65 中序非递归遍历二叉树 177 ∷相关函数:InOrderTraverse2函数 1.4.12 后序遍历二叉树(顺序结构) 180 范例1-66 后序遍历二叉树 180 ∷相关函数:PostOrderTraverse函数 1.4.13 后序遍历二叉树(链式结构) 183 范例1-67 后序遍历二叉树 183 ∷相关函数:PostOrderTraverse函数 1.4.14 层次遍历二叉树(顺序结构) 186 范例1-68 层次遍历二叉树 186 ∷相关函数:LevelOrderTraverse函数 1.4.15 层次遍历二叉树(链式结构) 188 范例1-68 层次遍历二叉树 188 ∷相关函数:LevelOrderTraverse函数 1.4.16 树的合并 191 范例1-70 树的合并 191 ∷相关函数:Find函数 Union函数 1.4.17 树的二叉链表存储的基本操作 193 范例1-71 树的二叉链表存储的基本操作 193 ∷相关函数:LevelOrderTraverse函数 1.4.18 二叉树的三叉链表存储的基本操作 201 范例1-72 二叉树的三叉链表存储表示 201 ∷相关函数:CreateBiTree函数 1.4.19 二叉树的二叉线索存储的基本操作 212 范例1-73 二叉树的二叉线索存储 212 ∷相关函数:CreateBiThrTree函数 1.4.20 树的双亲表存储的基本操作 215 范例1-74 树的双亲表存储的基本操作 215 ∷相关函数:CreateTree函数 1.4.21 哈夫曼编码(1) 223 范例1-75 哈夫曼编码(1) 223 ∷相关函数:HuffmanCoding函数 1.4.22 哈夫曼编码(2) 226 范例1-76 哈夫曼编码(2) 226 ∷相关函数:HuffmanCoding函数 1.5 排序 229 1.5.1 直接插入排序 229 范例1-77 直接插入排序 229 ∷相关函数:InsertSort函数 1.5.2 折半插入排序(顺序结构) 231 范例1-78 折半插入排序(顺序结构) 231 ∷相关函数:BInsertSort函数 1.5.3 2—路插入排序(顺序结构) 233 范例1-79 2—路插入排序(顺序结构) 233 ∷相关函数:P2_InsertSort函数 1.5.4 折半插入排序(链式结构) 235 范例1-80 折半插入排序(链式结构) 235 ∷相关函数:Arrange函数 1.5.5 2—路插入排序(链式结构) 238 范例1-81 2—路插入排序(链式结构) 238 ∷相关函数:Rearrange函数 1.5.6 希尔排序 241 范例1-82 希尔排序 241 ∷相关函数:ShellSort函数 1.5.7 冒泡排序 243 范例1-83 冒泡排序 243 ∷相关函数:bubble_sort函数 1.5.8 一趟快速排序 246 范例1-84 一趟快速排序 246 ∷相关函数:QSort函数 1.5.9 一趟快速排序的改进算法 248 范例1-85 一趟快速排序的改进算法 248 ∷相关函数:QuickSort函数 1.5.10 简单选择排序 250 范例1-86 简单选择排序 250 ∷相关函数:SelectSort函数 1.5.11 箱子排序 252 范例1-87 箱子排序 252 ∷相关函数:sort函数 1.5.12 树型选择排序 254 范例1-88 树型选择排序 254 ∷相关函数:TreeSort函数 1.5.13 堆排序 256 范例1-89 堆排序 256 ∷相关函数:HeapSort函数 1.5.14 归并排序 258 范例1-90 归并排序 258 ∷相关函数:MergeSort函数 1.5.15 多路平衡归并排序 260 范例1-91 多路平衡归并排序 260 ∷相关函数:K_Merge函数 1.5.16 置换—选择排序 265 范例1-92 置换—选择排序 265 ∷相关函数:Replace_Selection函数 1.5.17 文件的归并 269 范例1-93 文件的归并 269 ∷相关函数:K_Merge函数 1.6 查找 272 1.6.1 顺序表的查找 273 范例1-94 顺序表的查找 273 ∷相关函数:Search_Seq函数 1.6.2 静态树表的查找 276 范例1-95 静态树表的查找 276 ∷相关函数:Search_SOSTree函数 1.6.3 二叉排序树的基本操作 280 范例1-96 二叉排序树的基本操作 280 ∷相关函数:InsertBST函数 1.6.4 平衡二叉树的基本操作 285 范例1-97 平衡二叉树的基本操作 285 ∷相关函数:SearchBST函数 1.6.5 B树的基本操作 290 范例1-98 B树的基本操作 290 ∷相关函数:SearchBTree函数 1.6.6 按关键字符串的遍历双链键树 295 范例1-99 按关键字符串遍历双链键树 295 ∷相关函数:SearchDLTree函数 1.6.7 按关键字符串的遍历Trie树 301 范例1-100 按关键字符串遍历Trie树 301 ∷相关函数:SearchTrie函数 1.6.8 哈希表的基本操作 306 范例1-101 哈希表的基本操作 306 ∷相关函数:SearchHash函数 1.7 图 311 1.7.1 图的邻接矩阵存储表示 311 范例1-102 图的邻接矩阵存储表示 ∷相关函数:CreateFAG函数 CreateDG函数 1.7.2 图的邻接表存储表示 324 范例1-103 图的邻接表存储表示 324 ∷相关函数:CreateFAG函数 1.7.3 有向图的十字链表存储表示 335 范例1-104 有向图的十字链表存储表示 335 ∷相关函数:CreateDG函数 1.7.4 无向图的邻接多重表存储表示 344 范例1-105 无向图的邻接多重表存储表示 344 ∷相关函数:CreateGraph函数 1.7.5 最小生成树 355 范例1-106 最小生成树 355 ∷相关函数:MiniSpanTree_PRIM函数 1.7.6 关节点和重连通分量 359 范例1-107 关节点和重连通分量 359 ∷相关函数:FindArticul函数 1.7.7 拓扑排序 366 范例1-108 拓扑排序 366 ∷相关函数:TopologicalSort函数 1.7.8 关键路径 374 范例1-109 关键路径 374 ∷相关函数:CriticalPath函数 1.7.9 最短路径 383 范例1-110 最短路径 383 ∷相关函数:ShortestPath_DIJ函数 1.7.10 每一对顶点之间的最短路径 387 范例1-111 每一对顶点之间的最短路径 387 ∷相关函数:ShortestPath_FLOYD函数 1.8 本章小结 395 第2章 数值计算 397 2.1 常见的数学函数 398 2.1.1 求整数的绝对值 398 范例2-1 求整数的绝对值 398 ∷相关函数:abs函数 2.1.2 求长整型整数的绝对值 399 范例2-2 求长整型整数的绝对值 399 ∷相关函数:labs函数 2.1.2 求 浮点数 的绝对值 400 范例2-2 求 浮点数 的绝对值 400 ∷相关函数:fabs函数 2.1.4 求反余弦 400 范例2-4 求反余弦 400 ∷相关函数:acos函数 2.1.5 求反正弦 401 范例2-5 求反正弦 401 ∷相关函数:asin函数 2.1.6 求反正切 402 范例2-6 求反正切 402 ∷相关函数:atan函数 2.1.7 对 浮点数 进行舍入 403 范例2-7 对 浮点数 进行舍入 403 ∷相关函数:ceil函数 2.1.8 求余弦 404 范例2-8 求余弦 404 ∷相关函数:cos函数 2.1.9 求双曲余弦 405 范例2-9 求双曲余弦 405 ∷相关函数:cosh函数 2.1.10 求正弦 406 范例2-10 求正弦 406 ∷相关函数:sin函数 2.1.11 求双曲正弦 406 范例2-11 求双曲正弦 406 ∷相关函数:sinh函数 2.1.12 求正切 407 范例2-12 求正切 407 ∷相关函数:tan函数 2.1.13 求双曲正切 408 范例2-13 求双曲正切 408 ∷相关函数:tanh函数 2.1.14 获得整数相除的商和余数 409 范例2-14 获得整数相除的商和余数 409 ∷相关函数:div函数 2.1.15 求ex 410 范例2-15 求ex 410 ∷相关函数:exp函数 2.1.16 获取浮点相除的余数 411 范例2-16 获取 浮点数 相除的余数 411 ∷相关函数:fmod函数 2.1.17 获取 浮点数 的尾数和指数 412 范例2-17 获取 浮点数 的尾数和指数 412 ∷相关函数:frexp函数 2.1.18 求x2exponent 413 范例2-18 一维多项式求值 413 ∷相关函数:ldexp函数 2.1.19 求自然对数 413 范例2-19 求自然对数 413 ∷相关函数:log 函数 2.1.20 求lgx 414 范例2-20 求lgx 414 ∷相关函数:log10函数 2.1.21 获取 浮点数 的整数部分和小数部分 415 范例2-21 第二类椭圆积分 415 ∷相关函数:modf函数 2.1.22 求xy 416 范例2-22 求xy 416 ∷相关函数:pow函数 2.1.23 求10x 417 范例2-23 求10x 417 ∷相关函数:pow10函数 2.1.24 获取随机数 418 范例2-24 获取随机数 418 ∷相关函数:rand函数 2.1.25 设置随机数生成器初值 418 范例2-25 设置随机数生成器初值 418 ∷相关函数:srand函数 2.1.26 获取最大值和最小值 419 范例2-26 获取最大值和最小值 419 ∷相关函数:max函数 min函数 2.1.27 求直角三角形的斜边长 421 范例2-27 求直角三角形的斜边长 421 ∷相关函数:hypot函数 2.1.28 获取多项式的值 421 范例2-28 获取多项式的值 421 ∷相关函数:poly函数 2.2 多项式的计算 422 2.2.1 一维多项式求值 422 范例2-29 一维多项式求值 422 ∷相关函数:polyval函数 2.2.2 二维多项式求值 424 范例2-30 二维多项式求值 424 ∷相关函数:tdpolyval函数 2.2.3 复系数一维多项式求值 425 范例2-31 复系数一维多项式求值 425 ∷相关函数:cppolyval函数 2.2.4 多项式相乘 427 范例2-32 多项式相乘 427 ∷相关函数:polymul函数 2.2.5 复系数多项式相乘 428 范例2-33 复系数多项式相乘 428 ∷相关函数:cppolymul函数 2.2.6 多项式除法 430 范例2-34 多项式除法 430 ∷相关函数:polydiv函数 2.2.7 复数多项式相除 432 范例2-35 复数多项式相除 432 ∷相关函数:cppolydiv函数 2.3 复数运算 435 2.3.1 复数乘法 435 范例2-36 复数乘法 435 ∷相关函数:cpmul函数 2.3.2 复数除法 436 范例2-37 复数除法 436 ∷相关函数:cpdiv函数 2.3.3 复数乘幂 437 范例2-38 复数乘幂 437 ∷相关函数:cppower函数 2.3.4 复数的n次方根 439 范例2-39 复数乘法 439 ∷相关函数:cproot函数 2.3.5 复数指数 441 范例2-40 复数指数 441 ∷相关函数:polyval函数 2.3.6 复数对数 442 范例2-41 复数对数 442 ∷相关函数:cplog函数 2.3.7 复数正弦 443 范例2-42 复数正弦 443 ∷相关函数:cpsin函数 2.3.8 复数余弦 444 范例2-43 复数余弦 444 ∷相关函数:cpcos函数 2.4 随机数的产生 445 2.4.1 产生0~1之间均匀分布的随机数 446 范例2-44 0~1之间均匀分布的随机数 446 ∷相关函数:edisrnd函数 2.4.2 产生0~1之间均匀分布的随机数序列数 447 范例2-45 0~1之间均匀分布的随机数序列 447 ∷相关函数:edisrndsq函数 2.4.3 产生任意区间内均匀分布的随机数 448 范例2-46 产生任意区间内均匀分布的随机数 448 ∷相关函数:itervalrnd函数 2.4.4 产生任意区间内均匀分布的随机数序列 450 范例2-47 产生任意区间内均匀分布的随机数序列 450 ∷相关函数:itervalrndsq函数 2.4.5 产生任意均值与方差的正态分布的随机数 451 范例2-48 任意均值与方差的正态分布的随机数 451 ∷相关函数:nordisrnd函数 2.4.6 产生任意均值与方差的正态分布的随机数序列 453 范例2-49 任意均值与方差的正态分布随机数序列 453 ∷相关函数:nordisrndsq函数 2.5 矩阵运算 454 2.5.1 实矩阵相乘 454 范例2-50 实矩阵相乘 454 ∷相关函数:matrixmul函数 2.5.2 复矩阵相乘 456 范例2-51 复矩阵相乘 456 ∷相关函数:cpmatrixmul函数 2.5.3 一般实矩阵求逆 458 范例2-52 一般实矩阵求逆 458 ∷相关函数:matrix_inverse函数 2.5.4 一般复矩阵求逆 462 范例2-53 一般复矩阵求逆 462 ∷相关函数:multi_matrix_inverse函数 2.5.5 对称正定矩阵的求逆 465 范例2-54 对称正定矩阵的求逆 465 ∷相关函数:symmetric_positive_definite_matrix函数 2.5.6 托伯利兹矩阵求逆的特兰持方法 467 范例2-55 托伯利兹矩阵求逆的特兰持方法 467 ∷相关函数:toeplitz_inv函数 2.5.7 求一般行列式的值 470 范例2-56 求一般行列式的值 470 ∷相关函数:determinant_value函数 2.5.8 求矩阵的秩 472 范例2-57 求矩阵的秩 472 ∷相关函数:determinant_rank函数 2.5.9 对称正定矩阵的乔里斯基 分解 与行列式求值 474 范例2-58 对称正定矩阵的乔里斯基 分解 474 ∷相关函数:cholesky_method函数 2.5.10 矩阵的三角 分解 476 范例2-59 矩阵的三角 分解 476 ∷相关函数:triangular_decomposition函数 2.5.11 一般实矩阵的QR 分解 478 范例2-60 一般实矩阵的QR 分解 478 ∷相关函数:qr_decomposition函数 2.5.12 求广义逆的奇异值 分解 法 480 范例2-61 求广义逆的奇异值 分解 法 480 ∷相关函数:singular_value_decomposition函数 generalized_inverses函数 2.6 矩阵特征值与特征向量的计算 489 2.6.1 约化对称矩阵为对称三对角阵的豪斯荷尔德变换法 489 范例2-62 约化对称矩阵为对称三对角阵 489 ∷相关函数:Householder_method函数 2.6.2 求对称三对角阵的全部特征值与特征向量 492 范例2-63 求对称三对角阵的全部特征值 492 ∷相关函数:def_qr函数 2.6.3 约化一般实矩阵为赫申伯格矩阵的初等相似变换法 496 范例2-64 约化实矩阵为赫申伯格矩阵 496 ∷相关函数:trans_hessenbreg函数 2.6.4 求赫申伯格矩阵全部特征值的QR方法 498 范例2-65 求赫申伯格矩阵全部特征值 498 ∷相关函数:hessenbreg_qr函数 2.6.5 求实对称矩阵特征值与特征向量的雅可比法 502 范例2-66 雅可比法求特征值与特征向量 502 ∷相关函数:jacobi_method函数 2.6.6 求实对称矩阵特征值与特征向量的雅可比过关法 505 范例2-67 雅可比过关法 505 ∷相关函数:jacobi_clearance函数 2.7 线性代数方程组的求解 507 2.7.1 求解实系数方程组的全选主元高斯消去法 508 范例2-68 全选主元高斯消去法 508 ∷相关函数:gauss_elimination函数 2.7.2 求解实系数方程组的全选主元高斯—约当消去法 510 范例2-69 全选主元高斯—约当消去法 510 ∷相关函数:gauss_jordan_elimination函数 2.7.3 求解复系数方程组的全选主元高斯消去法 513 范例2-70 求解复系数方程组(方法一) 513 ∷相关函数:plu_gauss函数 2.7.4 求解复系数方程组的全选主元高斯—约当消去法 516 范例2-71 求解复系数方程组(方法二) 516 ∷相关函数:plu_gauss_jordan函数 2.7.5 求解三对角线方程组的追赶法 519 范例2-72 求解三对角线方程组的追赶法 519 ∷相关函数:tridiagonal_chase函数 2.7.6 求解一般带型方程组 521 范例2-73 求解一般带型方程组 521 ∷相关函数:principal_gauss函数 2.7.7 求解对称方程组的 分解 法 523 范例2-74 求解对称方程组的 分解 法 523 ∷相关函数:equations_decomposition函数 2.7.8 求解对称正定方程组的平方根法 526 范例2-75 求解对称正定方程组的平方根法 526 ∷相关函数:equations_square_root函数 2.7.9 求解大型稀疏方程组 528 范例2-76 求解大型稀疏方程组 528 ∷相关函数:sparse_gauss_jordan函数 2.7.10 求解托伯利兹方程组的列文逊方法 531 范例2-77 求解托伯利兹方程组 531 ∷相关函数:toeplitz_levinson函数 2.7.11 高斯—赛德尔迭代法 533 范例2-78 高斯—赛德尔迭代法 533 ∷相关函数:gauss_seidel_iteration函数 2.7.12 求解对称正定方程组的共轭梯度法 535 范例2-79 求解对称正定方程组的共轭梯度法 535 ∷相关函数:conjugate_gradient_method函数 2.7.13 求解线性最小二乘问题的豪斯荷尔德变换法 537 范例2-80 求解线性最小二乘问题 537 ∷相关函数:least_square_householder函数 2.7.14 求解线性最小二乘问题的广义逆法 540 范例2-81 求解线性最小二乘问题的广义逆法 540 ∷相关函数:least_squares_reversion函数 2.7.15 求解病态方程组 549 范例2-82 求解病态方程组 549 ∷相关函数:morbid_equations函数 2.8 非线性方程与方程组的求解 553 2.8.1 求非线性方程一个实根的对分法 553 范例2-83 对分法 553 ∷相关函数:nonlinear_dichotomy函数 2.8.2 求非线性方程一个实根的牛顿法 555 范例2-84 牛顿法 555 ∷相关函数:newton_iterative函数 2.8.3 求非线性方程一个实根的埃特金迭代法 557 范例2-85 埃特金迭代法 557 ∷相关函数:aitken_iterative函数 2.8.4 求非线性方程一个实根的连分式法 558 范例2-86 连分式法 558 ∷相关函数:continued_fraction函数 2.8.5 求实系数代数方程全部根的QR方法 560 范例2-87 QR方法 560 ∷相关函数:qr_all函数 2.8.6 求实系数代数方程全部根的牛顿下山法 563 范例2-88 求实系数代数方程全部根的牛顿下山法 563 ∷相关函数:newton_descent_all函数 2.8.7 求复系数代数方程全部根的牛顿下山法 568 范例2-89 求复系数代数方程全部根的牛顿下山法 568 ∷相关函数:newton_descent_complex函数 2.8.8 求非线性方程组一组实根的梯度法 572 范例2-90 求非线性方程组一组实根的梯度法 572 ∷相关函数:gradient_nonlinear函数 2.8.9 求非线性方程组一组实根的拟牛顿法 574 范例2-91 求非线性方程组一组实根的拟牛顿法 574 ∷相关函数:quasi_newton_nonlinear函数 2.8.10 求非线性方程一个实根的蒙特卡洛法 577 范例2-92 求非线性方程的蒙特卡洛法 577 ∷相关函数:monte_carlo_nonlinear函数 2.8.11 求实函数或复函数方程一个复根的蒙特卡洛法 579 范例2-93 第二类椭圆积分 579 ∷相关函数:monte_carlo_realplex函数 2.8.12 求非线性方程组一组实根的蒙特卡洛法 581 范例2-94 第二类椭圆积分 581 ∷相关函数:monte_carlo_equation函数 2.9 插值与逼近 583 2.9.1 一元全区间插值 583 范例2-95 一元全区间插值 583 ∷相关函数:interpolation_total函数 2.9.2 一元三点插值 585 范例2-96 一元三点插值 585 ∷相关函数:interpolation_three函数 2.9.3 连分式插值 586 范例2-97 连分式插值 586 ∷相关函数:interpolation_continued函数 2.9.4 埃尔米特插值 588 范例2-98 埃尔米特插值 588 ∷相关函数:interpolation_hermite函数 2.9.5 埃特金逐步插值 590 范例2-99 第二类椭圆积分 590 ∷相关函数:interpolation_aitken函数 2.9.6 光滑插值 592 范例2-100 光滑插值 592 ∷相关函数:interpolation_akima函数 2.9.7 第一种边界条件的三次样条函数插值、微商与积分 595 范例2-101 第一种边界条件的三次样条函数 595 ∷相关函数:cubic_spline_first函数 2.9.8 第二种边界条件的三次样条函数插值、微商与积分 598 范例2-102 第二种边界条件的三次样条函数 598 ∷相关函数:cubic_spline_second函数 2.9.9 第三种边界条件的三次样条函数插值、微商与积分 600 范例2-103 第三种边界条件的三次样条函数 600 ∷相关函数:cubic_spline_third函数 2.9.10 二元三点插值 604 范例2-104 二元三点插值 604 ∷相关函数:interpolation_point函数 2.9.11 二元全区间插值 606 范例2-105 二元全区间插值 606 ∷相关函数:interpolation_total函数 2.9.12 最小二乘曲线拟合 608 范例2-106 最小二乘曲线拟合 608 ∷相关函数:least_squares_fitting函数 2.9.13 切比雪夫曲线拟合 611 范例2-107 切比雪夫曲线拟合 611 ∷相关函数:chebyshev_fitting函数 2.9.14 最佳一致逼近的里米兹方法 614 范例2-108 最佳一致逼近的里米兹方法 614 ∷相关函数:remez_method函数 2.9.15 矩形域的最小二乘曲面拟合 616 范例2-109 矩形域的最小二乘曲面拟合 616 ∷相关函数:rec_fitting函数 2.10 数值积分 621 2.10.1 变步长梯形求积法 621 范例2-110 变步长梯形求积法 621 ∷相关函数:integration_ladder函数 2.10.2 变步长辛卜生求积法 623 范例2-111 变步长辛卜生求积法 623 ∷相关函数:integration_simpson函数 2.10.3 自适应梯形求积法 624 范例2-112 自适应梯形求积法 624 ∷相关函数:integration_self_adaptive函数 2.10.4 龙贝格求积法 626 范例2-113 龙贝格求积法 626 ∷相关函数:integration_romberg函数 2.10.5 计算一维积分的连分式法 627 范例2-114 计算一维积分的连分式法 627 ∷相关函数:continued_fractions函数 2.10.6 高振荡函数求积法 629 范例2-115 高振荡函数求积法 629 ∷相关函数:higher_oscillatory_integration函数 2.10.7 勒让德—高斯求积法 631 范例2-116 勒让德—高斯求积法 631 ∷相关函数:legendre_gauss函数 2.10.8 拉盖尔—高斯求积法 633 范例2-117 拉盖尔—高斯求积法 633 ∷相关函数:laguerre_gauss函数 2.10.9 埃尔米特—高斯求积法 634 范例2-118 埃尔米特—高斯求积法 634 ∷相关函数:hermite_gauss函数 2.10.10 切比雪夫求积法 635 范例2-119 切比雪夫求积法 635 ∷相关函数:chebyshev函数 2.10.11 计算一维积分的蒙特卡洛法 637 范例2-120 计算一维积分的蒙特卡洛法 637 ∷相关函数:monte_carlo函数 2.10.12 变步长辛卜生二重积分法 638 范例2-121 变步长辛卜生二重积分法 638 ∷相关函数:simpson函数 2.10.13 计算多重积分的高斯方法 640 范例2-122 计算多重积分的高斯方法 640 ∷相关函数:gauss函数 2.10.14 计算二重积分的连分式法 643 范例2-123 计算二重积分的连分式法 643 ∷相关函数:continued_fractions_dual函数 2.10.15 计算多重积分的蒙特卡洛法 645 范例2-124 计算多重积分的蒙特卡洛法 645 ∷相关函数:monte_carlo_multi函数 2.11 常微分方程组的求解 647 2.11.1 全区间积分的定步长欧拉方法 647 范例2-125 全区间积分的定步长欧拉方法 647 ∷相关函数:euler_step函数.. 2.11.2 积分一步的变步长欧拉方法 649 范例2-126 积分一步的变步长欧拉方法 649 ∷相关函数:euler_variable函数 2.11.3 全区间积分的维梯方法 651 范例2-127 全区间积分的维梯方法 651 ∷相关函数:witty函数 2.11.4 全区间积分的定步长龙格—库塔方法 653 范例2-128 全区间积分的定步长龙格—库塔方法实例位置 653 ∷相关函数:runge_kutta函数 2.11.5 积分一步的变步长龙格—库塔方法 655 范例2-129 积分一步的变步长龙格—库塔方法实例位置 655 ∷相关函数:runge_kutta_steps函数 2.11.6 积分一步的变步长基尔方法 657 范例2-130 积分一步的变步长基尔方法 657 ∷相关函数:gill函数 2.11.7 全区间积分的变步长默森方法 659 范例2-131 全区间积分的变步长默森方法 659 ∷相关函数:merson函数 2.11.8 积分一步的连分式法 662 范例2-132 积分一步的连分式法 662 ∷相关函数:continued_step函数 2.11.9 全区间积分的双边法 665 范例2-133 全区间积分的双边法 665 ∷相关函数:bilateral函数 2.11.10 全区间积分的阿当姆斯预报校正法 668 范例2-134 阿当姆斯预报校正法 668 ∷相关函数:adams函数 2.11.11 全区间积分的哈明方法 671 范例2-135 全区间积分的哈明方法 671 ∷相关函数:hamming函数 2.11.12 积分一步的特雷纳方法 675 范例2-136 积分一步的特雷纳方法 675 ∷相关函数:treanor函数 2.11.13 二阶微分方程边值问题的数值解法 678 范例2-137 二阶微分方程边值问题的数值解法 678 ∷相关函数:finite_difference函数 2.12 数据处理与回归分析 680 2.12.1 随机样本分析 680 范例2-138 随机样本分析 680 ∷相关函数:rndsplanalysis函数 2.12.2 一元线性回归分析 683 范例2-139 一元线性回归分析 683 ∷相关函数:liregression函数 2.12.3 多元线性回归分析 685 范例2-140 多元线性回归分析 685 ∷相关函数:mulliregression函数 2.12.4 半对数数据相关 688 范例2-141 半对数数据相关 688 ∷相关函数:fittinglogt函数 2.12.5 对数数据相关 690 范例2-142 对数数据相关 690 ∷相关函数:fittingln函数 2.13 极值问题的求解 691 2.13.1 一维极值连分式法 691 范例2-143 一维极值连分式法 691 ∷相关函数:extremum函数 2.13.2 n维极值连分式法 693 范例2-144 n维极值连分式法 693 ∷相关函数:nextremum函数 2.13.3 不等式约束线性规划问题 696 范例2-145 不等式约束线性规划问题 696 ∷相关函数:linearprogram函数 2.14 数学变换与滤波 700 2.14.1 傅里叶级数逼近 700 范例2-146 傅里叶级数逼近 700 ∷相关函数:seriesfour函数 2.14.2 快速傅里叶变换 702 范例2-147 快速傅里叶变换 702 ∷相关函数:quickfft函数 2.14.3 快速沃什变换 705 范例2-148 快速沃什变换 705 ∷相关函数:quickfwt函数 2.14.4 五点三次平滑 706 范例2-149 五点三次平滑 706 ∷相关函数:smoothness函数 2.14.5 卡尔曼滤波 708 范例2-150 卡尔曼滤波 708 ∷相关函数:kalfilter函数 2.14.6 α-β-γ滤波 713 范例2-151 α-β-γ滤波 713 ∷相关函数:alphabgfilter函数 2.15 特殊函数 714 2.15.1 Gamma函数 715 范例2-152 Gamma函数 715 ∷相关函数:Gamma函数 2.15.2 不完全Gamma函数 716 范例2-153 不完全Gamma函数 716 ∷相关函数:incomgam函数 2.15.3 误差函数 719 范例2-154 误差函数 719 ∷相关函数:errorfun函数 2.15.4 第一类整数Bessel函数 721 范例2-155 第一类整数Bessel函数 721 ∷相关函数:bessel1函数 2.15.5 第二类整数Bessel函数 724 范例2-156 第二类整数Bessel函数 724 ∷相关函数:bessel2函数 2.15.6 变形第一类整数Bessel函数 727 范例2-157 变形第二类整数Bessel函数 727 ∷相关函数:varbessel1函数 2.15.7 变形第二类整数Bessel函数 729 范例2-158 变形第二类整数Bessel函数 729 ∷相关函数:varbessel2函数 2.15.8 不完全Beta函数 734 范例2-159 不完全Beta函数 734 ∷相关函数:beta函数 2.15.9 正态分布函数 736 范例2-160 正态分布函数 736 ∷相关函数:gauss函数 2.15.10 t-分布函数 739 范例2-161 t-分布函数 739 ∷相关函数:tdistribution函数 2.15.11 2-分布函数 742 范例2-162 2-分布函数 742 ∷相关函数:xdistribution函数 2.15.12 F-分布函数 744 范例2-163 F-分布函数 744 ∷相关函数:fdistribution函数 2.15.13 正弦积分 747 范例2-164 正弦积分 747 ∷相关函数:sinintegral函数 2.15.14 余弦积分 749 范例2-165 余弦积分 749 ∷相关函数:cosintegral函数 2.15.15 指数积分 750 范例2-166 指数积分 750 ∷相关函数:expintegral函数 2.15.16 第一类椭圆积分 752 范例2-167 第一类椭圆积分 752 ∷相关函数:ellipseintegral1函数 2.15.17 第二类椭圆积分 754 范例2-168 第二类椭圆积分 754 ∷相关函数:ellipseintegral2函数 2.16 本章小结 756 第3章 图形图像处理 757 3.1 字符屏幕 758 3.1.1 文本的输入与输出 758 范例3-1 文本的输入与输出 758 ∷相关函数:printf函数 scanf函数 3.1.2 outtext、outtextxy函数输出 759 范例3-2 outtext, outtextxy函数输出 759 ∷相关函数:outtext函数 outtextxy函数 3.1.3 设置文本格式 761 范例3-3 设置文本格式 761 ∷相关函数:settextstyle函数 3.1.4 设置图形文本排列方式 763 范例3-4 设置图形文本排列方式 763 ∷相关函数:settextjustify函数 3.1.5 设置用户字符比例 765 范例3-5 设置用户字符比例 765 ∷相关函数:setusercharsize函数 3.1.6 控制文本的明暗度 766 范例3-6 控制文本的明暗度 766 ∷相关函数:highvideo函数 normvideo函数 lowvideo函数 3.1.7 设置文本的前景色和背景色 767 范例3-7 设置文本的前景色和背景色 767 ∷相关函数:textcolor函数 textbackground函数 3.1.8 字符窗口 770 范例3-8 字符窗口 770 ∷相关函数:clrscr函数 window函数 gotoxy函数 3.1.9 清除光标行尾字符 772 范例3-9 清除光标行尾字符 772 ∷相关函数:clreol函数 3.1.10 插入与删除行 773 范例3-10 插入与删除行 773 ∷相关函数:insline函数 delline函数 3.1.11 屏幕参数检测 774 范例3-11 屏幕参数检测 774 ∷相关函数:getgraphmode函数 getmaxx函数 getmaxy函数 getmaxcolor函数 cleardevice函数 3.2 图形图像处理基础 777 3.2.1 绘制像素点 777 范例3-12 绘制像素点 777 ∷相关函数:putpixel函数 3.2.2 绘制直线 778 范例3-13 绘制直线 778 ∷相关函数:line函数 lineto函数 linerel函数 moveto函数 moverel函数 3.2.3 绘制矩形 780 范例3-14 绘制矩形 780 ∷相关函数:rectangle函数 3.2.4 绘制多边形 781 范例3-15 绘制多边形 781 ∷相关函数:drawpoly函数 3.2.5 绘制圆 783 范例3-16 绘制圆 783 ∷相关函数:circle函数 3.2.6 绘制椭圆 784 范例3-17 绘制椭圆 784 ∷相关函数:ellipse函数 fillellipse函数 3.2.7 绘制圆弧 786 范例3-18 绘制圆弧 786 ∷相关函数:arc函数 3.2.8 绘制扇区 787 范例3-19 绘制扇区 787 ∷相关函数:pieslice函数 sector函数 3.2.9 绘制条块 788 范例3-20 绘制条块 788 ∷相关函数:bar函数 bar3d函数 3.2.10 图设置线型 790 范例3-21 设置线型 790 ∷相关函数:Setlinestyle函数 3.2.11 绘制填充矩形 792 范例3-22 绘制填充矩形 792 ∷相关函数:setfillstyle函数 floodfill函数 3.2.12 填充多边形 795 范例3-23 填充多边形 795 ∷相关函数:fillpoly函数 3.2.14 设置用户图样 796 范例3-24 设置用户图样 796 ∷相关函数:setfillpattern函数 3.3 图形图像处理进阶 798 3.3.1 绘制彩色点云 798 范例3-25 绘制彩色点云 798 ∷相关函数:rand函数 kbhit函数 3.3.2 绘制正多边形 799 范例3-26 绘制正多边形 799 ∷相关函数:sin函数 cos函数 3.3.3 图形法绘制圆 801 范例3-27 图形法绘制圆 801 ∷相关函数:drawCircle函数 3.3.4 图形法绘制椭圆 803 范例3-28 图形法绘制椭圆 803 ∷相关函数:ellipse1函数 3.3.5 绘制正弦曲线 805 范例3-29 绘制正弦曲线 805 ∷相关函数:lineto函数 3.3.6 绘制抛物样条曲线 806 范例3-30 绘制抛物样条曲线 806 ∷相关函数:parspl函数 marking函数 3.3.7 绘制布朗曲线 809 范例3-31 绘制布朗曲线 809 ∷相关函数:CreateFractalImage函数 Gauss函数 3.3.8 动态绘制256色线条 811 范例3-32 动态绘制256色线条 811 ∷相关函数:int86函数 3.3.9 三原色亮度渐变 813 范例3-33 三原色亮度渐变 813 ∷相关函数:geninterrupt函数 3.3.10 三视图模拟 815 范例3-34 三视图模拟 815 ∷相关函数:front_view函数 top_view函数 left_view函数 perspective_view函数 3.3.11 空间椭球模拟 817 范例3-35 空间椭球模拟 817 ∷相关函数:trans函数 draw函数 3.3.12 百叶窗效果 820 范例3-36 百叶窗效果 820 ∷相关函数:putpoint函数 3.3.13 视觉欺骗 822 范例3-37 视觉欺骗 822 ∷相关函数:dot函数 circ函数 bulb函数 3.3.14 三维建筑物 824 范例3-38 三维建筑物 824 ∷相关函数:liner函数 rightlead函数 leftlead函数 shadow函数 identifier函数 3.4 组合图案绘制 830 3.4.1 一箭穿心图案 830 范例3-39 重新打开文件流 830 ∷相关函数:draw函数 arrow函数 3.4.2 六叶图案 832 范例3-40 六叶图案 832 ∷相关函数:arc函数 3.4.3 花瓣形图案 833 范例3-41 花瓣形图案 833 ∷相关函数:line函数 3.4.4 雪花图案 835 范例3-42 雪花图案 835 ∷相关函数:setviewport函数 3.4.5 布艺图案 837 范例3-43 布艺图案 837 ∷相关函数:fractal函数 3.4.6 飘带图案 838 范例3-44 飘带图案 838 ∷相关函数:line函数 3.4.7 金刚石图案 840 范例3-45 金刚石图案 840 ∷相关函数:line函数 3.4.8 圆环图案 841 范例3-46 圆环图案 841 ∷相关函数:circles函数 3.4.9 肾型图案 843 范例3-47 肾型图案 843 ∷相关函数:circle函数 3.4.10 心脏型图案 844 范例3-48 心脏型图案 844 ∷相关函数:circle函数 3.4.11 鱼网图案 846 范例3-49 重新打开文件流 846 ∷相关函数:arc函数 3.4.12 沙丘图案 848 范例3-50 沙丘图案 848 ∷相关函数:lineto函数 3.4.13 正六边形螺旋图案 849 范例3-51 正六边形螺旋图案 849 ∷相关函数:polygonc函数 3.4.14 正方形螺旋拼块图案 851 范例3-52 正方形螺旋拼块图案 851 ∷相关函数:polygonc函数 block函数 3.4.15 递归法绘制三角形图案 853 范例3-53 递归法绘制三角形图案 853 ∷相关函数:elli函数 3.4.16 玫瑰图案 855 范例3-54 玫瑰图案 855 ∷相关函数:elli函数 draw函数 3.4.17 天空图案 859 范例3-55 天空图案 859 ∷相关函数:int86函数 3.4.18 Mandelbrot分形图案 864 范例3-56 Mandelbrot分形图案 864 ∷相关函数:mandelbrot函数 iterate函数 3.5 窗体界面与报表设计 866 3.5.1 窗体设计 866 范例3-57 窗体设计 866 ∷相关函数:mainform函数 windowborder函数 controls函数 3.5.2 简单菜单设计 871 范例3-58 简单菜单设计 871 ∷相关函数:initm函数 showItems函数 process 函数 process3函数 process1函数 3.5.3 制作表格 877 范例3-59 制作表格 877 ∷相关函数:putpixel函数 3.5.4 折线图 878 范例3-60 折线图 878 ∷相关函数:itoa函数 settextjustify函数 3.5.5 饼状图 880 范例3-61 饼状图 880 ∷相关函数:pieslice函数 3.5.6 柱状图 881 范例3-62 柱状图 881 ∷相关函数:Funscore函数 Drowxy 函数 Fundrow函数 3.6 动画制作 884 3.6.1 旋转的立体椭球 884 范例3-63 旋转的立体椭球 884 ∷相关函数:setactivepage函数 setvisualpage函数 3.6.2 小球碰撞演示 887 范例3-64 小球碰撞演示 887 ∷相关函数:imagsize函数 getimage函数 putimage函数 3.6.3 飘动的旗帜 889 范例3-65 飘动的旗帜 889 ∷相关函数:hor_wave_line函数 ver_wave_line函数 3.6.4 行驶中的小车 891 范例3-66 行驶中的小车 891 ∷相关函数:imagsize函数 getimage函数 putimage函数 3.6.5 不停动嘴巴的头 893 范例3-67 不停动嘴巴的头 893 ∷相关函数:getaspectratio函数 setaspectratio函数 setactivepage函数 setvisualpage函数 3.6.6 旋转的太极图 898 范例3-68 旋转的太极图 898 ∷相关函数:getpalette函数 sector函数 3.6.7 螺旋运动的圆斑 901 范例3-69 螺旋运动的圆斑 901 ∷相关函数:drawgoal函数 3.6.8 闪动的彩色圆斑 903 范例3-70 闪动的彩色圆斑 903 ∷相关函数:drawgoal函数 3.6.9 奔跑的小人 904 范例3-71 奔跑的小人 904 ∷相关函数:line函数 circle函数 3.6.10 发射火箭 907 范例3-72 发射火箭 907 ∷相关函数:DrawStar函数 DrawGun函数 DrawPlan函数 3.6.11 擦玻璃 911 范例3-73 擦玻璃 911 ∷相关函数:pieslice函数 bioskey函数 3.6.12 流星球 914 范例3-74 流星球 914 ∷相关函数:getimage函数 putimage函数 3.6.13 简单时钟 916 范例3-75 简单时钟 916 ∷相关函数:gettime函数 3.6.14 立体时钟 918 范例3-76 立体时钟 918 ∷相关函数:time函数 3.6.15 飘雪 920 范例3-77 飘雪 920 ∷相关函数:DrawSnow函数 Pr函数 3.6.16 制作火焰 923 范例3-78 制作火焰 923 ∷相关函数:outportb函数 pokeb函数 3.6.17 天体系统 926 范例3-79 天体系统 926 ∷相关函数:init_start函数 roll函数 3.6.18 扇动翅膀的蝴蝶 935 范例3-80 扇动翅膀的蝴蝶 935 ∷相关函数:putpixel函数 3.6.19 米奇 936 范例3-81 重新打开文件流 936 ∷相关函数:imagsize函数 getimage函数 putimage函数 3.7 本章小结 940 第4章 磁盘、目录和文件的操作 941 4.1 磁盘的操作 942 4.1.1 获取当前盘驱动器 942 范例4-1 获取当前盘驱动器 942 ∷相关函数:getdisk函数 4.1.2 设置当前驱动器 943 范例4-2 设置当前驱动器 943 ∷相关函数:setdisk函数 4.1.3 获取磁盘的可用空间 945 范例4-3 获取磁盘的可用空间 945 ∷相关函数:getdfree函数 4.1.4 测试软驱是否可用 946 范例4-4 测试软驱是否可用 946 ∷相关函数:biosdisk函数 4.2 目录的操作 948 4.2.1 创建目录 948 范例4-5 创建目录 948 ∷相关函数:mkdir函数 4.2.2 改变当前目录 950 范例4-6 改变当前目录 950 ∷相关函数:chdir函数 4.2.3 删除目录 952 范例4-7 删除目录 952 ∷相关函数:rmdir函数 4.3 文件的操作 953 4.3.1 用fopen函数打开文件 953 范例4-8 用fopen函数打开文件 953 ∷相关函数:fopen函数 4.3.2 打开系统temp目录中的文件 955 范例4-9 打开系统temp目录中的文件 955 ∷相关函数:getenv函数 4.3.2 使用低级函数打开和关闭文件 957 范例4-10 使用低级函数打开和关闭文件 957 ∷相关函数:open函数 close函数 4.3.3 用fclose函数关闭文件 959 范例4-11 用fclose函数关闭文件 959 ∷相关函数:fclose函数 4.3.4 一次性关闭所有被打开的文件 961 范例4-12 一次性关闭所有被打开的文件 961 ∷相关函数:fcloseall函数 4.3.5 以字符为单位读写文件 963 范例4-13 以字符为单位读写文件 963 ∷相关函数:fgetc函数 fputc函数 4.3.6 以字为单位读写文件 965 范例4-14 以字为单位读写文件 965 ∷相关函数:getw函数 putw函数 4.3.7 以低级的方式读写文件 967 范例4-15 以低级的方式读写文件 967 ∷相关函数:read函数 write函数 4.3.8 按结构读写文件 969 范例4-16 按结构读写文件 969 ∷相关函数:read函数 write函数 4.3.9 格式化写文件 971 范例4-17 格式化写文件 971 ∷相关函数:fprintf函数 4.3.10 格式化读文件 972 范例4-18 格式化读文件 972 ∷相关函数:fscanf函数 4.3.11 以行为单位写文件 974 范例4-19 以行为单位写文件 974 ∷相关函数:fputs函数 4.3.12 以行为单位读文件 975 范例4-20 以行为单位读文件 975 ∷相关函数:fgets函数 4.3.13 将缓冲区内容写入文件 977 范例4-21 将缓冲区内容写入文件 977 ∷相关函数:setbuf函数 4.3.14 用lseek函数定位文件指针 978 范例4-22 用lseek函数定位文件指针 978 ∷相关函数:lseek函数 4.3.15 获取文件流的文件句柄 980 范例4-23 获取文件流的文件句柄 980 ∷相关函数:fileno函数 4.3.16 从文件流指针中导出文件句柄 982 范例4-24 从文件流指针中导出文件句柄 982 ∷相关函数:fopen函数 4.3.17 利用eof函数判断文件是否结束 984 范例4-25 利用eof函数判断文件是否结束 984 ∷相关函数:eof函数 4.3.18 利用feof函数判断文件结尾 986 范例4-26 利用feof函数判断文件结尾 986 ∷相关函数:feof函数 4.3.19 刷新I/O流 988 范例4-27 刷新I/O流 988 ∷相关函数:fflush函数 4.3.20 利用tmpnam函数创建临时文件名 990 范例4-28 利用tmpnam函数创建临时文件名 990 ∷相关函数:tmpnam函数 4.3.21 创建真正的临时文件 992 范例4-29 创建真正的临时文件 992 ∷相关函数:tmpfile函数 4.3.22 创建文件 993 范例4-30 创建文件 993 ∷相关函数:creat函数 4.3.23 在指定目录中创建唯一文件 995 范例4-31 在指定目录中创建唯一文件 995 ∷相关函数:creattemp函数 4.3.24 利用creatnew函数创建新文件 996 范例4-32 利用creatnew函数创建新文件 996 ∷相关函数:creatnew函数 4.3.25 删除文件 998 范例4-33 删除文件 998 ∷相关函数:remove函数 4.3.26 查找文件获取文件的路径 1000 范例4-34 查找文件获取文件的路径 1000 ∷相关函数:searchpath函数 4.3.27 分解 文件路径 1001 范例4-35 分解 文件路径 1001 ∷相关函数:fnsplit函数 4.3.28 建立文件完全路径名 1003 范例4-36 建立文件完全路径名 1003 ∷相关函数:fnmerge 函数 4.3.29 读取文件分配表信息 1005 范例4-37 读取文件分配表信息 1005 ∷相关函数:getfat函数 getfatd函数 4.3.30 判断读写所在的文件的位置 1007 范例4-38 判断读写所在的文件的位置 1007 ∷相关函数:ftell函数 4.3.31 重命名文件 1009 范例4-39 重命名文件 1009 ∷相关函数:rename函数 4.3.32 判断访问文件的模式 1011 范例4-40 判断访问文件的模式 1011 ∷相关函数:access函数 4.3.34 设置文件访问模式 1013 范例4-41 设置文件访问模式 1013 ∷相关函数:chmod函数 4.3.35 显示文件的属性 1015 范例4-42 显示文件的属性 1015 ∷相关函数:_chmod函数 4.3.36 检测文件流的错误 1017 范例4-43 检测文件流的错误 1017 ∷相关函数:ferror函数 4.3.37 判断文件的长度 1019 范例4-44 判断文件的长度 1019 ∷相关函数:filelength函数 4.3.38 通过句柄设置打开文件的方式 1022 范例4-45 通过句柄设置打开文件的方式 1022 ∷相关函数:setmode函数 4.3.39 读取文件的时间和日期标记 1023 范例4-46 读取文件的时间和日期标记 1023 ∷相关函数:getftime函数 4.3.40 设置文件的时间和日期标记 1026 范例4-47 设置文件的时间和日期标记 1026 ∷相关函数:setftimet函数 4.3.41 改变文件的长度 1028 范例4-48 改变文件的长度 1028 ∷相关函数:chsize函数 4.3.42 控制文件打开操作的读写模式 1029 范例4-49 控制文件打开操作的读写模式 1029 ∷相关函数:umask函数 4.3.43 复制文件句柄 1032 范例4-50 复制文件句柄 1032 ∷相关函数:dup函数 4.3.44 强制复制文件句柄 1033 范例4-51 强制复制文件句柄 1033 ∷相关函数:dup2函数 4.3.45 用句柄判断读写所在的文件的位置 1036 范例4-52 用句柄判断当前文件指针的位置 1036 ∷相关函数:tell函数 4.3.46 根据当前位置定位文件指针 1038 范例4-53 根据当前位置定位文件指针 1038 ∷相关函数:fseek函数 4.3.47 获取文件句柄的信息 1039 范例4-54 获取文件句柄的信息 1039 ∷相关函数:fstat函数 4.3.48 重新打开文件流 1041 范例4-55 重新打开文件流 1041 ∷相关函数:freopen函数 4.4 本章小结 1043 第5章 系统调用 1045 5.1 时间和日期的操作 1046 5.1.1 获取当前的时间和日期 1046 范例5-1 获取当前时间和日期 1046 ∷相关函数:time函数 5.1.2 让程序延时指定的时间段 1047 范例5-2 让程序延时指定的时间段 1047 ∷相关函数:delay函数 5.1.3 比较两个时间 1048 范例5-3 比较两个时间 1048 ∷相关函数:difftime函数 5.1.4 读BIOS计时器 1050 范例5-4 读BIOS计时器 1050 ∷相关函数:biostime函数 5.1.5 比较两个时间获取当地时间 1051 范例5-5 获取当地时间 1051 ∷相关函数:localtime函数 5.1.6 获取格林威治平时 1052 范例5-6 获取格林威治平时 1052 ∷相关函数:gmtime函数 5.1.7 获取DOS系统时间 1054 范例5-7 获取DOS系统时间 1054 ∷相关函数:gettime函数 5.1.8 获取DOS系统日期 1055 范例5-8 获取DOS系统日期 1055 ∷相关函数:getdate函数 5.1.9 设置DOS系统时间 1057 范例5-9 设置DOS系统时间 1057 ∷相关函数:settime函数 5.1.10 设置DOS系统日期 1059 范例5-10 设置DOS系统日期 1059 ∷相关函数:setdate函数 5.1.11 获取时区信息 1061 范例5-11 获取时区信息 1061 ∷相关函数:ftime函数 5.2 BIOS的操作 1062 5.2.1 利用BIOS获取打印机的状态 1062 范例5-12 利用BIOS获取打印机的状态 1062 ∷相关函数:biosprint函数 5.2.2 获取Ctrl+Break信息 1064 范例5-13 获取CTRL+BREAK信息 1064 ∷相关函数:getcbrk函数 5.2.3 暂时挂起程序 1066 范例5-14 暂时挂起程序 1066 ∷相关函数:sleep函数 5.2.4 控制声音 1067 范例5-15 控制声音 1067 5.2.5 利用bdos函数访问DOS服务 1068 范例5-16 利用bdos函数访问DOS服务 1068 ∷相关函数:bdos函数 5.2.6 获取BIOS常规内存数量 1071 范例5-17 获取BIOS常规内存数量 1071 ∷相关函数:biosmemory函数 5.2.7 获取寄存器设置信息 1072 范例5-18 获取寄存器设置信息 1072 ∷相关函数:segread函数 5.3 内存的操作 1074 5.3.1 给内存区域赋值 1074 范例5-19 给内存区域赋值 1074 ∷相关函数:memset函数 5.3.2 获取时区信息复制内存区域 1076 范例5-20 复制内存区域 1076 5.3.3 复制内存区域指定的字节 1078 范例5-21 复制内存区域指定的字节 1078 ∷相关函数:memccpy函数 5.3.4 获取时区信息 1080 范例5-22 比较两个无符号字符数组 1080 5.3.5 交换字符串的两个相邻字节内容 1082 范例5-23 交换字符串的两个相邻字节内容 1082 ∷相关函数:swab函数 5.3.6 利用brk函数改变堆的大小 1084 范例5-24 利用brk函数改变堆的大小 1084 ∷相关函数:brk函数 5.3.7 获取指定内存单元内容 1086 范例5-25 获取指定内存单元内容 1086 5.3.8 设置指定内存单元内容 1088 范例5-26 设置指定内存单元内容 1088 5.4 本章小结 1090 索引... 1091 double i = 1234.5678; int qian,bai,shi,ge,thnths,percentile,thousandth,tenThousandthBit; qian = (int)i/1000; bai = (int)i/100%10; shi = (int)i/10%10; ge = (int)i/1%10 范例1-60 双亲、孩子和兄弟节点的查询 158 ∷相关函数:Parent函数 LeftChild函数 RightChild函数 LeftSibling函数 RightSibling函数 1.4.7 双亲、孩子和兄弟节点的查询(链式结构) 162 范例1-61 双亲、孩子和兄弟节点的查询 162 ∷相关函数:Parent函数 LeftChild函数 RightChild函数 LeftSibling函数 RightSibling函数 1.4.8 中序遍历二叉树(顺序结构) 169 范例1-62 中序遍历二叉树 169 ∷相关函数:InOrderTraverse函数 1.4.9 中序遍历二叉树(链式结构) 171 范例1-63 中序遍历二叉树 171 ∷相关函数:InOrderTraverse函数 1.4.10 中序非递归遍历二叉树(链式结构)(1) 174 范例1-64 中序非递归遍历二叉树 174 ∷相关函数:InOrderTraverse函数 1.4.11 中序非递归遍历二叉树(链式结构)(2) 177 范例1-65 中序非递归遍历二叉树 177 ∷相关函数:InOrderTraverse2函数 1.4.12 后序遍历二叉树(顺序结构) 180 范例1-66 后序遍历二叉树 180 ∷相关函数:PostOrderTraverse函数 1.4.13 后序遍历二叉树(链式结构) 183 范例1-67 后序遍历二叉树 183 ∷相关函数:PostOrderTraverse函数 1.4.14 层次遍历二叉树(顺序结构) 186 范例1-68 层次遍历二叉树 186 ∷相关函数:LevelOrderTraverse函数 1.4.15 层次遍历二叉树(链式结构) 188 范例1-68 层次遍历二叉树 188 ∷相关函数:LevelOrderTraverse函数 1.4.16 树的合并 191 范例1-70 树的合并 191 ∷相关函数:Find函数 Union函数 1.4.17 树的二叉链表存储的基本操作 193 范例1-71 树的二叉链表存储的基本操作 193 ∷相关函数:LevelOrderTraverse函数 1.4.18 二叉树的三叉链表存储的基本操作 201 范例1-72 二叉树的三叉链表存储表示 201 ∷相关函数:CreateBiTree函数 1.4.19 二叉树的二叉线索存储的基本操作 212 范例1-73 二叉树的二叉线索存储 212 ∷相关函数:CreateBiThrTree函数 1.4.20 树的双亲表存储的基本操作 215 范例1-74 树的双亲表存储的基本操作 215 ∷相关函数:CreateTree函数 1.4.21 哈夫曼编码(1) 223 范例1-75 哈夫曼编码(1) 223 ∷相关函数:HuffmanCoding函数 1.4.22 哈夫曼编码(2) 226 范例1-76 哈夫曼编码(2) 226 ∷相关函数:HuffmanCoding函数 1.5 排序 229 1.5.1 直接插入排序 229 范例1-77 直接插入排序 229 ∷相关函数:InsertSort函数 1.5.2 折半插入排序(顺序结构) 231 范例1-78 折半插入排序(顺序结构) 231 ∷相关函数:BInsertSort函数 1.5.3 2—路插入排序(顺序结构) 233 范例1-79 2—路插入排序(顺序结构) 233 ∷相关函数:P2_InsertSort函数 1.5.4 折半插入排序(链式结构) 235 范例1-80 折半插入排序(链式结构) 235 ∷相关函数:Arrange函数 1.5.5 2—路插入排序(链式结构) 238 范例1-81 2—路插入排序(链式结构) 238 ∷相关函数:Rearrange函数 1.5.6 希尔排序 241 范例1-82 希尔排序 241 ∷相关函数:ShellSort函数 1.5.7 冒泡排序 243 范例1-83 冒泡排序 243 ∷相关函数:bubble_sort函数 1.5.8 一趟快速排序 246 范例1-84 一趟快速排序 246 ∷相关函数:QSort函数 1.5.9 一趟快速排序的改进算法 248 范例1-85 一趟快速排序的改进算法 248 ∷相关函数:QuickSort函数 1.5.10 简单选择排序 250 范例1-86 简单选择排序 250 ∷相关函数:SelectSort函数 1.5.11 箱子排序 252 范例1-87 箱子排序 252 ∷相关函数:sort函数 1.5.12 树型选择排序 254 范例1-88 树型选择排序 254 ∷相关函数:TreeSort函数 1.5.13 堆排序 256 范例1-89 堆排序 256 ∷相关函数:HeapSort函数 1.5.14 归并排序 258 范例1-90 归并排序 258 ∷相关函数:MergeSort函数 1.5.15 多路平衡归并排序 260 范例1-91 多路平衡归并排序 260 ∷相关函数:K_Merge函数 1.5.16 置换—选择排序 265 范例1-92 置换—选择排序 265 ∷相关函数:Replace_Selection函数 1.5.17 文件的归并 269 范例1-93 文件的归并 269 ∷相关函数:K_Merge函数 1.6 查找 272 1.6.1 顺序表的查找 273 范例1-94 顺序表的查找 273 ∷相关函数:Search_Seq函数 1.6.2 静态树表的查找 276 范例1-95 静态树表的查找 276 ∷相关函数:Search_SOSTree函数 1.6.3 二叉排序树的基本操作 280 范例1-96 二叉排序树的基本操作 280 ∷相关函数:InsertBST函数 1.6.4 平衡二叉树的基本操作 285 范例1-97 平衡二叉树的基本操作 285 ∷相关函数:SearchBST函数 1.6.5 B树的基本操作 290 范例1-98 B树的基本操作 290 ∷相关函数:SearchBTree函数 1.6.6 按关键字符串的遍历双链键树 295 范例1-99 按关键字符串遍历双链键树 295 ∷相关函数:SearchDLTree函数 1.6.7 按关键字符串的遍历Trie树 301 范例1-100 按关键字符串遍历Trie树 301 ∷相关函数:SearchTrie函数 1.6.8 哈希表的基本操作 306 范例1-101 哈希表的基本操作 306 ∷相关函数:SearchHash函数 1.7 图 311 1.7.1 图的邻接矩阵存储表示 311 范例1-102 图的邻接矩阵存储表示 ∷相关函数:CreateFAG函数 CreateDG函数 1.7.2 图的邻接表存储表示 324 范例1-103 图的邻接表存储表示 324 ∷相关函数:CreateFAG函数 1.7.3 有向图的十字链表存储表示 335 范例1-104 有向图的十字链表存储表示 335 ∷相关函数:CreateDG函数 1.7.4 无向图的邻接多重表存储表示 344 范例1-105 无向图的邻接多重表存储表示 344 ∷相关函数:CreateGraph函数 1.7.5 最小生成树 355 范例1-106 最小生成树 355 ∷相关函数:MiniSpanTree_PRIM函数 1.7.6 关节点和重连通分量 359 范例1-107 关节点和重连通分量 359 ∷相关函数:FindArticul函数 1.7.7 拓扑排序 366 范例1-108 拓扑排序 366 ∷相关函数:TopologicalSort函数 1.7.8 关键路径 374 范例1-109 关键路径 374 ∷相关函数:CriticalPath函数 1.7.9 最短路径 383 范例1-110 最短路径 383 ∷相关函数:ShortestPath_DIJ函数 1.7.10 每一对顶点之间的最短路径 387 范例1-111 每一对顶点之间的最短路径 387 ∷相关函数:ShortestPath_FLOYD函数 1.8 本章小结 395 第2章 数值计算 397 2.1 常见的数学函数 398 2.1.1 求整数的绝对值 398 范例2-1 求整数的绝对值 398 ∷相关函数:abs函数 2.1.2 求长整型整数的绝对值 399 范例2-2 求长整型整数的绝对值 399 ∷相关函数:labs函数 2.1.2 求 浮点数 的绝对值 400 范例2-2 求 浮点数 的绝对值 400 ∷相关函数:fabs函数 2.1.4 求反余弦 400 范例2-4 求反余弦 400 ∷相关函数:acos函数 2.1.5 求反正弦 401 范例2-5 求反正弦 401 ∷相关函数:asin函数 2.1.6 求反正切 402 范例2-6 求反正切 402 ∷相关函数:atan函数 2.1.7 对 浮点数 进行舍入 403 范例2-7 对 浮点数 进行舍入 403 ∷相关函数:ceil函数 2.1.8 求余弦 404 范例2-8 求余弦 404 ∷相关函数:cos函数 2.1.9 求双曲余弦 405 范例2-9 求双曲余弦 405 ∷相关函数:cosh函数 2.1.10 求正弦 406 范例2-10 求正弦 406 ∷相关函数:sin函数 2.1.11 求双曲正弦 406 范例2-11 求双曲正弦 406 ∷相关函数:sinh函数 2.1.12 求正切 407 范例2-12 求正切 407 ∷相关函数:tan函数 2.1.13 求双曲正切 408 范例2-13 求双曲正切 408 ∷相关函数:tanh函数 2.1.14 获得整数相除的商和余数 409 范例2-14 获得整数相除的商和余数 409 ∷相关函数:div函数 2.1.15 求ex 410 范例2-15 求ex 410 ∷相关函数:exp函数 2.1.16 获取浮点相除的余数 411 范例2-16 获取 浮点数 相除的余数 411 ∷相关函数:fmod函数 2.1.17 获取 浮点数 的尾数和指数 412 范例2-17 获取 浮点数 的尾数和指数 412 ∷相关函数:frexp函数 2.1.18 求x2exponent 413 范例2-18 一维多项式求值 413 ∷相关函数:ldexp函数 2.1.19 求自然对数 413 范例2-19 求自然对数 413 ∷相关函数:log 函数 2.1.20 求lgx 414 范例2-20 求lgx 414 ∷相关函数:log10函数 2.1.21 获取 浮点数 的整数部分和小数部分 415 范例2-21 第二类椭圆积分 415 ∷相关函数:modf函数 2.1.22 求xy 416 范例2-22 求xy 416 ∷相关函数:pow函数 2.1.23 求10x 417 范例2-23 求10x 417 ∷相关函数:pow10函数 2.1.24 获取随机数 418 范例2-24 获取随机数 418 ∷相关函数:rand函数 2.1.25 设置随机数生成器初值 418 范例2-25 设置随机数生成器初值 418 ∷相关函数:srand函数 2.1.26 获取最大值和最小值 419 范例2-26 获取最大值和最小值 419 ∷相关函数:max函数 min函数 2.1.27 求直角三角形的斜边长 421 范例2-27 求直角三角形的斜边长 421 ∷相关函数:hypot函数 2.1.28 获取多项式的值 421 范例2-28 获取多项式的值 421 ∷相关函数:poly函数 2.2 多项式的计算 422 2.2.1 一维多项式求值 422 范例2-29 一维多项式求值 422 ∷相关函数:polyval函数 2.2.2 二维多项式求值 424 范例2-30 二维多项式求值 424 ∷相关函数:tdpolyval函数 2.2.3 复系数一维多项式求值 425 范例2-31 复系数一维多项式求值 425 ∷相关函数:cppolyval函数 2.2.4 多项式相乘 427 范例2-32 多项式相乘 427 ∷相关函数:polymul函数 2.2.5 复系数多项式相乘 428 范例2-33 复系数多项式相乘 428 ∷相关函数:cppolymul函数 2.2.6 多项式除法 430 范例2-34 多项式除法 430 ∷相关函数:polydiv函数 2.2.7 复数多项式相除 432 范例2-35 复数多项式相除 432 ∷相关函数:cppolydiv函数 2.3 复数运算 435 2.3.1 复数乘法 435 范例2-36 复数乘法 435 ∷相关函数:cpmul函数 2.3.2 复数除法 436 范例2-37 复数除法 436 ∷相关函数:cpdiv函数 2.3.3 复数乘幂 437 范例2-38 复数乘幂 437 ∷相关函数:cppower函数 2.3.4 复数的n次方根 439 范例2-39 复数乘法 439 ∷相关函数:cproot函数 2.3.5 复数指数 441 范例2-40 复数指数 441 ∷相关函数:polyval函数 2.3.6 复数对数 442 范例2-41 复数对数 442 ∷相关函数:cplog函数 2.3.7 复数正弦 443 范例2-42 复数正弦 443 ∷相关函数:cpsin函数 2.3.8 复数余弦 444 范例2-43 复数余弦 444 ∷相关函数:cpcos函数 2.4 随机数的产生 445 2.4.1 产生0~1之间均匀分布的随机数 446 范例2-44 0~1之间均匀分布的随机数 446 ∷相关函数:edisrnd函数 2.4.2 产生0~1之间均匀分布的随机数序列数 447 范例2-45 0~1之间均匀分布的随机数序列 447 ∷相关函数:edisrndsq函数 2.4.3 产生任意区间内均匀分布的随机数 448 范例2-46 产生任意区间内均匀分布的随机数 448 ∷相关函数:itervalrnd函数 2.4.4 产生任意区间内均匀分布的随机数序列 450 范例2-47 产生任意区间内均匀分布的随机数序列 450 ∷相关函数:itervalrndsq函数 2.4.5 产生任意均值与方差的正态分布的随机数 451 范例2-48 任意均值与方差的正态分布的随机数 451 ∷相关函数:nordisrnd函数 2.4.6 产生任意均值与方差的正态分布的随机数序列 453 范例2-49 任意均值与方差的正态分布随机数序列 453 ∷相关函数:nordisrndsq函数 2.5 矩阵运算 454 2.5.1 实矩阵相乘 454 范例2-50 实矩阵相乘 454 ∷相关函数:matrixmul函数 2.5.2 复矩阵相乘 456 范例2-51 复矩阵相乘 456 ∷相关函数:cpmatrixmul函数 2.5.3 一般实矩阵求逆 458 范例2-52 一般实矩阵求逆 458 ∷相关函数:matrix_inverse函数 2.5.4 一般复矩阵求逆 462 范例2-53 一般复矩阵求逆 462 ∷相关函数:multi_matrix_inverse函数 2.5.5 对称正定矩阵的求逆 465 范例2-54 对称正定矩阵的求逆 465 ∷相关函数:symmetric_positive_definite_matrix函数 2.5.6 托伯利兹矩阵求逆的特兰持方法 467 范例2-55 托伯利兹矩阵求逆的特兰持方法 467 ∷相关函数:toeplitz_inv函数 2.5.7 求一般行列式的值 470 范例2-56 求一般行列式的值 470 ∷相关函数:determinant_value函数 2.5.8 求矩阵的秩 472 范例2-57 求矩阵的秩 472 ∷相关函数:determinant_rank函数 2.5.9 对称正定矩阵的乔里斯基 分解 与行列式求值 474 范例2-58 对称正定矩阵的乔里斯基 分解 474 ∷相关函数:cholesky_method函数 2.5.10 矩阵的三角 分解 476 范例2-59 矩阵的三角 分解 476 ∷相关函数:triangular_decomposition函数 2.5.11 一般实矩阵的QR 分解 478 范例2-60 一般实矩阵的QR 分解 478 ∷相关函数:qr_decomposition函数 2.5.12 求广义逆的奇异值 分解 法 480 范例2-61 求广义逆的奇异值 分解 法 480 ∷相关函数:singular_value_decomposition函数 generalized_inverses函数 2.6 矩阵特征值与特征向量的计算 489 2.6.1 约化对称矩阵为对称三对角阵的豪斯荷尔德变换法 489 范例2-62 约化对称矩阵为对称三对角阵 489 ∷相关函数:Householder_method函数 2.6.2 求对称三对角阵的全部特征值与特征向量 492 范例2-63 求对称三对角阵的全部特征值 492 ∷相关函数:def_qr函数 2.6.3 约化一般实矩阵为赫申伯格矩阵的初等相似变换法 496 范例2-64 约化实矩阵为赫申伯格矩阵 496 ∷相关函数:trans_hessenbreg函数 2.6.4 求赫申伯格矩阵全部特征值的QR方法 498 范例2-65 求赫申伯格矩阵全部特征值 498 ∷相关函数:hessenbreg_qr函数 2.6.5 求实对称矩阵特征值与特征向量的雅可比法 502 范例2-66 雅可比法求特征值与特征向量 502 ∷相关函数:jacobi_method函数 2.6.6 求实对称矩阵特征值与特征向量的雅可比过关法 505 范例2-67 雅可比过关法 505 ∷相关函数:jacobi_clearance函数 2.7 线性代数方程组的求解 507 2.7.1 求解实系数方程组的全选主元高斯消去法 508 范例2-68 全选主元高斯消去法 508 ∷相关函数:gauss_elimination函数 2.7.2 求解实系数方程组的全选主元高斯—约当消去法 510 范例2-69 全选主元高斯—约当消去法 510 ∷相关函数:gauss_jordan_elimination函数 2.7.3 求解复系数方程组的全选主元高斯消去法 513 范例2-70 求解复系数方程组(方法一) 513 ∷相关函数:plu_gauss函数 2.7.4 求解复系数方程组的全选主元高斯—约当消去法 516 范例2-71 求解复系数方程组(方法二) 516 ∷相关函数:plu_gauss_jordan函数 2.7.5 求解三对角线方程组的追赶法 519 范例2-72 求解三对角线方程组的追赶法 519 ∷相关函数:tridiagonal_chase函数 2.7.6 求解一般带型方程组 521 范例2-73 求解一般带型方程组 521 ∷相关函数:principal_gauss函数 2.7.7 求解对称方程组的 分解 法 523 范例2-74 求解对称方程组的 分解 法 523 ∷相关函数:equations_decomposition函数 2.7.8 求解对称正定方程组的平方根法 526 范例2-75 求解对称正定方程组的平方根法 526 ∷相关函数:equations_square_root函数 2.7.9 求解大型稀疏方程组 528 范例2-76 求解大型稀疏方程组 528 ∷相关函数:sparse_gauss_jordan函数 2.7.10 求解托伯利兹方程组的列文逊方法 531 范例2-77 求解托伯利兹方程组 531 ∷相关函数:toeplitz_levinson函数 2.7.11 高斯—赛德尔迭代法 533 范例2-78 高斯—赛德尔迭代法 533 ∷相关函数:gauss_seidel_iteration函数 2.7.12 求解对称正定方程组的共轭梯度法 535 范例2-79 求解对称正定方程组的共轭梯度法 535 ∷相关函数:conjugate_gradient_method函数 2.7.13 求解线性最小二乘问题的豪斯荷尔德变换法 537 范例2-80 求解线性最小二乘问题 537 ∷相关函数:least_square_householder函数 2.7.14 求解线性最小二乘问题的广义逆法 540 范例2-81 求解线性最小二乘问题的广义逆法 540 ∷相关函数:least_squares_reversion函数 2.7.15 求解病态方程组 549 范例2-82 求解病态方程组 549 ∷相关函数:morbid_equations函数 2.8 非线性方程与方程组的求解 553 2.8.1 求非线性方程一个实根的对分法 553 范例2-83 对分法 553 ∷相关函数:nonlinear_dichotomy函数 2.8.2 求非线性方程一个实根的牛顿法 555 范例2-84 牛顿法 555 ∷相关函数:newton_iterative函数 2.8.3 求非线性方程一个实根的埃特金迭代法 557 范例2-85 埃特金迭代法 557 ∷相关函数:aitken_iterative函数 2.8.4 求非线性方程一个实根的连分式法 558 范例2-86 连分式法 558 ∷相关函数:continued_fraction函数 2.8.5 求实系数代数方程全部根的QR方法 560 范例2-87 QR方法 560 ∷相关函数:qr_all函数 2.8.6 求实系数代数方程全部根的牛顿下山法 563 范例2-88 求实系数代数方程全部根的牛顿下山法 563 ∷相关函数:newton_descent_all函数 2.8.7 求复系数代数方程全部根的牛顿下山法 568 范例2-89 求复系数代数方程全部根的牛顿下山法 568 ∷相关函数:newton_descent_complex函数 2.8.8 求非线性方程组一组实根的梯度法 572 范例2-90 求非线性方程组一组实根的梯度法 572 ∷相关函数:gradient_nonlinear函数 2.8.9 求非线性方程组一组实根的拟牛顿法 574 范例2-91 求非线性方程组一组实根的拟牛顿法 574 ∷相关函数:quasi_newton_nonlinear函数 2.8.10 求非线性方程一个实根的蒙特卡洛法 577 范例2-92 求非线性方程的蒙特卡洛法 577 ∷相关函数:monte_carlo_nonlinear函数 2.8.11 求实函数或复函数方程一个复根的蒙特卡洛法 579 范例2-93 第二类椭圆积分 579 ∷相关函数:monte_carlo_realplex函数 2.8.12 求非线性方程组一组实根的蒙特卡洛法 581 范例2-94 第二类椭圆积分 581 ∷相关函数:monte_carlo_equation函数 2.9 插值与逼近 583 2.9.1 一元全区间插值 583 范例2-95 一元全区间插值 583 ∷相关函数:interpolation_total函数 2.9.2 一元三点插值 585 范例2-96 一元三点插值 585 ∷相关函数:interpolation_three函数 2.9.3 连分式插值 586 范例2-97 连分式插值 586 ∷相关函数:interpolation_continued函数 2.9.4 埃尔米特插值 588 范例2-98 埃尔米特插值 588 ∷相关函数:interpolation_hermite函数 2.9.5 埃特金逐步插值 590 范例2-99 第二类椭圆积分 590 ∷相关函数:interpolation_aitken函数 2.9.6 光滑插值 592 范例2-100 光滑插值 592 ∷相关函数:interpolation_akima函数 2.9.7 第一种边界条件的三次样条函数插值、微商与积分 595 范例2-101 第一种边界条件的三次样条函数 595 ∷相关函数:cubic_spline_first函数 2.9.8 第二种边界条件的三次样条函数插值、微商与积分 598 范例2-102 第二种边界条件的三次样条函数 598 ∷相关函数:cubic_spline_second函数 2.9.9 第三种边界条件的三次样条函数插值、微商与积分 600 范例2-103 第三种边界条件的三次样条函数 600 ∷相关函数:cubic_spline_third函数 2.9.10 二元三点插值 604 范例2-104 二元三点插值 604 ∷相关函数:interpolation_point函数 2.9.11 二元全区间插值 606 范例2-105 二元全区间插值 606 ∷相关函数:interpolation_total函数 2.9.12 最小二乘曲线拟合 608 范例2-106 最小二乘曲线拟合 608 ∷相关函数:least_squares_fitting函数 2.9.13 切比雪夫曲线拟合 611 范例2-107 切比雪夫曲线拟合 611 ∷相关函数:chebyshev_fitting函数 2.9.14 最佳一致逼近的里米兹方法 614 范例2-108 最佳一致逼近的里米兹方法 614 ∷相关函数:remez_method函数 2.9.15 矩形域的最小二乘曲面拟合 616 范例2-109 矩形域的最小二乘曲面拟合 616 ∷相关函数:rec_fitting函数 2.10 数值积分 621 2.10.1 变步长梯形求积法 621 范例2-110 变步长梯形求积法 621 ∷相关函数:integration_ladder函数 2.10.2 变步长辛卜生求积法 623 范例2-111 变步长辛卜生求积法 623 ∷相关函数:integration_simpson函数 2.10.3 自适应梯形求积法 624 范例2-112 自适应梯形求积法 624 ∷相关函数:integration_self_adaptive函数 2.10.4 龙贝格求积法 626 范例2-113 龙贝格求积法 626 ∷相关函数:integration_romberg函数 2.10.5 计算一维积分的连分式法 627 范例2-114 计算一维积分的连分式法 627 ∷相关函数:continued_fractions函数 2.10.6 高振荡函数求积法 629 范例2-115 高振荡函数求积法 629 ∷相关函数:higher_oscillatory_integration函数 2.10.7 勒让德—高斯求积法 631 范例2-116 勒让德—高斯求积法 631 ∷相关函数:legendre_gauss函数 2.10.8 拉盖尔—高斯求积法 633 范例2-117 拉盖尔—高斯求积法 633 ∷相关函数:laguerre_gauss函数 2.10.9 埃尔米特—高斯求积法 634 范例2-118 埃尔米特—高斯求积法 634 ∷相关函数:hermite_gauss函数 2.10.10 切比雪夫求积法 635 范例2-119 切比雪夫求积法 635 ∷相关函数:chebyshev函数 2.10.11 计算一维积分的蒙特卡洛法 637 范例2-120 计算一维积分的蒙特卡洛法 637 ∷相关函数:monte_carlo函数 2.10.12 变步长辛卜生二重积分法 638 范例2-121 变步长辛卜生二重积分法 638 ∷相关函数:simpson函数 2.10.13 计算多重积分的高斯方法 640 范例2-122 计算多重积分的高斯方法 640 ∷相关函数:gauss函数 2.10.14 计算二重积分的连分式法 643 范例2-123 计算二重积分的连分式法 643 ∷相关函数:continued_fractions_dual函数 2.10.15 计算多重积分的蒙特卡洛法 645 范例2-124 计算多重积分的蒙特卡洛法 645 ∷相关函数:monte_carlo_multi函数 2.11 常微分方程组的求解 647 2.11.1 全区间积分的定步长欧拉方法 647 范例2-125 全区间积分的定步长欧拉方法 647 ∷相关函数:euler_step函数.. 2.11.2 积分一步的变步长欧拉方法 649 范例2-126 积分一步的变步长欧拉方法 649 ∷相关函数:euler_variable函数 2.11.3 全区间积分的维梯方法 651 范例2-127 全区间积分的维梯方法 651 ∷相关函数:witty函数 2.11.4 全区间积分的定步长龙格—库塔方法 653 范例2-128 全区间积分的定步长龙格—库塔方法实例位置 653 ∷相关函数:runge_kutta函数 2.11.5 积分一步的变步长龙格—库塔方法 655 范例2-129 积分一步的变步长龙格—库塔方法实例位置 655 ∷相关函数:runge_kutta_steps函数 2.11.6 积分一步的变步长基尔方法 657 范例2-130 积分一步的变步长基尔方法 657 ∷相关函数:gill函数 2.11.7 全区间积分的变步长默森方法 659 范例2-131 全区间积分的变步长默森方法 659 ∷相关函数:merson函数 2.11.8 积分一步的连分式法 662 范例2-132 积分一步的连分式法 662 ∷相关函数:continued_step函数 2.11.9 全区间积分的双边法 665 范例2-133 全区间积分的双边法 665 ∷相关函数:bilateral函数 2.11.10 全区间积分的阿当姆斯预报校正法 668 范例2-134 阿当姆斯预报校正法 668 ∷相关函数:adams函数 2.11.11 全区间积分的哈明方法 671 范例2-135 全区间积分的哈明方法 671 ∷相关函数:hamming函数 2.11.12 积分一步的特雷纳方法 675 范例2-136 积分一步的特雷纳方法 675 ∷相关函数:treanor函数 2.11.13 二阶微分方程边值问题的数值解法 678 范例2-137 二阶微分方程边值问题的数值解法 678 ∷相关函数:finite_difference函数 2.12 数据处理与回归分析 680 2.12.1 随机样本分析 680 范例2-138 随机样本分析 680 ∷相关函数:rndsplanalysis函数 2.12.2 一元线性回归分析 683 范例2-139 一元线性回归分析 683 ∷相关函数:liregression函数 2.12.3 多元线性回归分析 685 范例2-140 多元线性回归分析 685 ∷相关函数:mulliregression函数 2.12.4 半对数数据相关 688 范例2-141 半对数数据相关 688 ∷相关函数:fittinglogt函数 2.12.5 对数数据相关 690 范例2-142 对数数据相关 690 ∷相关函数:fittingln函数 2.13 极值问题的求解 691 2.13.1 一维极值连分式法 691 范例2-143 一维极值连分式法 691 ∷相关函数:extremum函数 2.13.2 n维极值连分式法 693 范例2-144 n维极值连分式法 693 ∷相关函数:nextremum函数 2.13.3 不等式约束线性规划问题 696 范例2-145 不等式约束线性规划问题 696 ∷相关函数:linearprogram函数 2.14 数学变换与滤波 700 2.14.1 傅里叶级数逼近 700 范例2-146 傅里叶级数逼近 700 ∷相关函数:seriesfour函数 2.14.2 快速傅里叶变换 702 范例2-147 快速傅里叶变换 702 ∷相关函数:quickfft函数 2.14.3 快速沃什变换 705 范例2-148 快速沃什变换 705 ∷相关函数:quickfwt函数 2.14.4 五点三次平滑 706 范例2-149 五点三次平滑 706 ∷相关函数:smoothness函数 2.14.5 卡尔曼滤波 708 范例2-150 卡尔曼滤波 708 ∷相关函数:kalfilter函数 2.14.6 α-β-γ滤波 713 范例2-151 α-β-γ滤波 713 ∷相关函数:alphabgfilter函数 2.15 特殊函数 714 2.15.1 Gamma函数 715 范例2-152 Gamma函数 715 ∷相关函数:Gamma函数 2.15.2 不完全Gamma函数 716 范例2-153 不完全Gamma函数 716 ∷相关函数:incomgam函数 2.15.3 误差函数 719 范例2-154 误差函数 719 ∷相关函数:errorfun函数 2.15.4 第一类整数Bessel函数 721 范例2-155 第一类整数Bessel函数 721 ∷相关函数:bessel1函数 2.15.5 第二类整数Bessel函数 724 范例2-156 第二类整数Bessel函数 724 ∷相关函数:bessel2函数 2.15.6 变形第一类整数Bessel函数 727 范例2-157 变形第二类整数Bessel函数 727 ∷相关函数:varbessel1函数 2.15.7 变形第二类整数Bessel函数 729 范例2-158 变形第二类整数Bessel函数 729 ∷相关函数:varbessel2函数 2.15.8 不完全Beta函数 734 范例2-159 不完全Beta函数 734 ∷相关函数:beta函数 2.15.9 正态分布函数 736 范例2-160 正态分布函数 736 ∷相关函数:gauss函数 2.15.10 t-分布函数 739 范例2-161 t-分布函数 739 ∷相关函数:tdistribution函数 2.15.11 2-分布函数 742 范例2-162 2-分布函数 742 ∷相关函数:xdistribution函数 2.15.12 F-分布函数 744 范例2-163 F-分布函数 744 ∷相关函数:fdistribution函数 2.15.13 正弦积分 747 范例2-164 正弦积分 747 ∷相关函数:sinintegral函数 2.15.14 余弦积分 749 范例2-165 余弦积分 749 ∷相关函数:cosintegral函数 2.15.15 指数积分 750 范例2-166 指数积分 750 ∷相关函数:expintegral函数 2.15.16 第一类椭圆积分 752 范例2-167 第一类椭圆积分 752 ∷相关函数:ellipseintegral1函数 2.15.17 第二类椭圆积分 754 范例2-168 第二类椭圆积分 754 ∷相关函数:ellipseintegral2函数 2.16 本章小结 756 第3章 图形图像处理 757 3.1 字符屏幕 758 3.1.1 文本的输入与输出 758 范例3-1 文本的输入与输出 758 ∷相关函数:printf函数 scanf函数 3.1.2 outtext、outtextxy函数输出 759 范例3-2 outtext, outtextxy函数输出 759 ∷相关函数:outtext函数 outtextxy函数 3.1.3 设置文本格式 761 范例3-3 设置文本格式 761 ∷相关函数:settextstyle函数 3.1.4 设置图形文本排列方式 763 范例3-4 设置图形文本排列方式 763 ∷相关函数:settextjustify函数 3.1.5 设置用户字符比例 765 范例3-5 设置用户字符比例 765 ∷相关函数:setusercharsize函数 3.1.6 控制文本的明暗度 766 范例3-6 控制文本的明暗度 766 ∷相关函数:highvideo函数 normvideo函数 lowvideo函数 3.1.7 设置文本的前景色和背景色 767 范例3-7 设置文本的前景色和背景色 767 ∷相关函数:textcolor函数 textbackground函数 3.1.8 字符窗口 770 范例3-8 字符窗口 770 ∷相关函数:clrscr函数 window函数 gotoxy函数 3.1.9 清除光标行尾字符 772 范例3-9 清除光标行尾字符 772 ∷相关函数:clreol函数 3.1.10 插入与删除行 773 范例3-10 插入与删除行 773 ∷相关函数:insline函数 delline函数 3.1.11 屏幕参数检测 774 范例3-11 屏幕参数检测 774 ∷相关函数:getgraphmode函数 getmaxx函数 getmaxy函数 getmaxcolor函数 cleardevice函数 3.2 图形图像处理基础 777 3.2.1 绘制像素点 777 范例3-12 绘制像素点 777 ∷相关函数:putpixel函数 3.2.2 绘制直线 778 范例3-13 绘制直线 778 ∷相关函数:line函数 lineto函数 linerel函数 moveto函数 moverel函数 3.2.3 绘制矩形 780 范例3-14 绘制矩形 780 ∷相关函数:rectangle函数 3.2.4 绘制多边形 781 范例3-15 绘制多边形 781 ∷相关函数:drawpoly函数 3.2.5 绘制圆 783 范例3-16 绘制圆 783 ∷相关函数:circle函数 3.2.6 绘制椭圆 784 范例3-17 绘制椭圆 784 ∷相关函数:ellipse函数 fillellipse函数 3.2.7 绘制圆弧 786 范例3-18 绘制圆弧 786 ∷相关函数:arc函数 3.2.8 绘制扇区 787 范例3-19 绘制扇区 787 ∷相关函数:pieslice函数 sector函数 3.2.9 绘制条块 788 范例3-20 绘制条块 788 ∷相关函数:bar函数 bar3d函数 3.2.10 图设置线型 790 范例3-21 设置线型 790 ∷相关函数:Setlinestyle函数 3.2.11 绘制填充矩形 792 范例3-22 绘制填充矩形 792 ∷相关函数:setfillstyle函数 floodfill函数 3.2.12 填充多边形 795 范例3-23 填充多边形 795 ∷相关函数:fillpoly函数 3.2.14 设置用户图样 796 范例3-24 设置用户图样 796 ∷相关函数:setfillpattern函数 3.3 图形图像处理进阶 798 3.3.1 绘制彩色点云 798 范例3-25 绘制彩色点云 798 ∷相关函数:rand函数 kbhit函数 3.3.2 绘制正多边形 799 范例3-26 绘制正多边形 799 ∷相关函数:sin函数 cos函数 3.3.3 图形法绘制圆 801 范例3-27 图形法绘制圆 801 ∷相关函数:drawCircle函数 3.3.4 图形法绘制椭圆 803 范例3-28 图形法绘制椭圆 803 ∷相关函数:ellipse1函数 3.3.5 绘制正弦曲线 805 范例3-29 绘制正弦曲线 805 ∷相关函数:lineto函数 3.3.6 绘制抛物样条曲线 806 范例3-30 绘制抛物样条曲线 806 ∷相关函数:parspl函数 marking函数 3.3.7 绘制布朗曲线 809 范例3-31 绘制布朗曲线 809 ∷相关函数:CreateFractalImage函数 Gauss函数 3.3.8 动态绘制256色线条 811 范例3-32 动态绘制256色线条 811 ∷相关函数:int86函数 3.3.9 三原色亮度渐变 813 范例3-33 三原色亮度渐变 813 ∷相关函数:geninterrupt函数 3.3.10 三视图模拟 815 范例3-34 三视图模拟 815 ∷相关函数:front_view函数 top_view函数 left_view函数 perspective_view函数 3.3.11 空间椭球模拟 817 范例3-35 空间椭球模拟 817 ∷相关函数:trans函数 draw函数 3.3.12 百叶窗效果 820 范例3-36 百叶窗效果 820 ∷相关函数:putpoint函数 3.3.13 视觉欺骗 822 范例3-37 视觉欺骗 822 ∷相关函数:dot函数 circ函数 bulb函数 3.3.14 三维建筑物 824 范例3-38 三维建筑物 824 ∷相关函数:liner函数 rightlead函数 leftlead函数 shadow函数 identifier函数 3.4 组合图案绘制 830 3.4.1 一箭穿心图案 830 范例3-39 重新打开文件流 830 ∷相关函数:draw函数 arrow函数 3.4.2 六叶图案 832 范例3-40 六叶图案 832 ∷相关函数:arc函数 3.4.3 花瓣形图案 833 范例3-41 花瓣形图案 833 ∷相关函数:line函数 3.4.4 雪花图案 835 范例3-42 雪花图案 835 ∷相关函数:setviewport函数 3.4.5 布艺图案 837 范例3-43 布艺图案 837 ∷相关函数:fractal函数 3.4.6 飘带图案 838 范例3-44 飘带图案 838 ∷相关函数:line函数 3.4.7 金刚石图案 840 范例3-45 金刚石图案 840 ∷相关函数:line函数 3.4.8 圆环图案 841 范例3-46 圆环图案 841 ∷相关函数:circles函数 3.4.9 肾型图案 843 范例3-47 肾型图案 843 ∷相关函数:circle函数 3.4.10 心脏型图案 844 范例3-48 心脏型图案 844 ∷相关函数:circle函数 3.4.11 鱼网图案 846 范例3-49 重新打开文件流 846 ∷相关函数:arc函数 3.4.12 沙丘图案 848 范例3-50 沙丘图案 848 ∷相关函数:lineto函数 3.4.13 正六边形螺旋图案 849 范例3-51 正六边形螺旋图案 849 ∷相关函数:polygonc函数 3.4.14 正方形螺旋拼块图案 851 范例3-52 正方形螺旋拼块图案 851 ∷相关函数:polygonc函数 block函数 3.4.15 递归法绘制三角形图案 853 范例3-53 递归法绘制三角形图案 853 ∷相关函数:elli函数 3.4.16 玫瑰图案 855 范例3-54 玫瑰图案 855 ∷相关函数:elli函数 draw函数 3.4.17 天空图案 859 范例3-55 天空图案 859 ∷相关函数:int86函数 3.4.18 Mandelbrot分形图案 864 范例3-56 Mandelbrot分形图案 864 ∷相关函数:mandelbrot函数 iterate函数 3.5 窗体界面与报表设计 866 3.5.1 窗体设计 866 范例3-57 窗体设计 866 ∷相关函数:mainform函数 windowborder函数 controls函数 3.5.2 简单菜单设计 871 范例3-58 简单菜单设计 871 ∷相关函数:initm函数 showItems函数 process 函数 process3函数 process1函数 3.5.3 制作表格 877 范例3-59 制作表格 877 ∷相关函数:putpixel函数 3.5.4 折线图 878 范例3-60 折线图 878 ∷相关函数:itoa函数 settextjustify函数 3.5.5 饼状图 880 范例3-61 饼状图 880 ∷相关函数:pieslice函数 3.5.6 柱状图 881 范例3-62 柱状图 881 ∷相关函数:Funscore函数 Drowxy 函数 Fundrow函数 3.6 动画制作 884 3.6.1 旋转的立体椭球 884 范例3-63 旋转的立体椭球 884 ∷相关函数:setactivepage函数 setvisualpage函数 3.6.2 小球碰撞演示 887 范例3-64 小球碰撞演示 887 ∷相关函数:imagsize函数 getimage函数 putimage函数 3.6.3 飘动的旗帜 889 范例3-65 飘动的旗帜 889 ∷相关函数:hor_wave_line函数 ver_wave_line函数 3.6.4 行驶中的小车 891 范例3-66 行驶中的小车 891 ∷相关函数:imagsize函数 getimage函数 putimage函数 3.6.5 不停动嘴巴的头 893 范例3-67 不停动嘴巴的头 893 ∷相关函数:getaspectratio函数 setaspectratio函数 setactivepage函数 setvisualpage函数 3.6.6 旋转的太极图 898 范例3-68 旋转的太极图 898 ∷相关函数:getpalette函数 sector函数 3.6.7 螺旋运动的圆斑 901 范例3-69 螺旋运动的圆斑 901 ∷相关函数:drawgoal函数 3.6.8 闪动的彩色圆斑 903 范例3-70 闪动的彩色圆斑 903 ∷相关函数:drawgoal函数 3.6.9 奔跑的小人 904 范例3-71 奔跑的小人 904 ∷相关函数:line函数 circle函数 3.6.10 发射火箭 907 范例3-72 发射火箭 907 ∷相关函数:DrawStar函数 DrawGun函数 DrawPlan函数 3.6.11 擦玻璃 911 范例3-73 擦玻璃 911 ∷相关函数:pieslice函数 bioskey函数 3.6.12 流星球 914 范例3-74 流星球 914 ∷相关函数:getimage函数 putimage函数 3.6.13 简单时钟 916 范例3-75 简单时钟 916 ∷相关函数:gettime函数 3.6.14 立体时钟 918 范例3-76 立体时钟 918 ∷相关函数:time函数 3.6.15 飘雪 920 范例3-77 飘雪 920 ∷相关函数:DrawSnow函数 Pr函数 3.6.16 制作火焰 923 范例3-78 制作火焰 923 ∷相关函数:outportb函数 pokeb函数 3.6.17 天体系统 926 范例3-79 天体系统 926 ∷相关函数:init_start函数 roll函数 3.6.18 扇动翅膀的蝴蝶 935 范例3-80 扇动翅膀的蝴蝶 935 ∷相关函数:putpixel函数 3.6.19 米奇 936 范例3-81 重新打开文件流 936 ∷相关函数:imagsize函数 getimage函数 putimage函数 3.7 本章小结 940 第4章 磁盘、目录和文件的操作 941 4.1 磁盘的操作 942 4.1.1 获取当前盘驱动器 942 范例4-1 获取当前盘驱动器 942 ∷相关函数:getdisk函数 4.1.2 设置当前驱动器 943 范例4-2 设置当前驱动器 943 ∷相关函数:setdisk函数 4.1.3 获取磁盘的可用空间 945 范例4-3 获取磁盘的可用空间 945 ∷相关函数:getdfree函数 4.1.4 测试软驱是否可用 946 范例4-4 测试软驱是否可用 946 ∷相关函数:biosdisk函数 4.2 目录的操作 948 4.2.1 创建目录 948 范例4-5 创建目录 948 ∷相关函数:mkdir函数 4.2.2 改变当前目录 950 范例4-6 改变当前目录 950 ∷相关函数:chdir函数 4.2.3 删除目录 952 范例4-7 删除目录 952 ∷相关函数:rmdir函数 4.3 文件的操作 953 4.3.1 用fopen函数打开文件 953 范例4-8 用fopen函数打开文件 953 ∷相关函数:fopen函数 4.3.2 打开系统temp目录中的文件 955 范例4-9 打开系统temp目录中的文件 955 ∷相关函数:getenv函数 4.3.2 使用低级函数打开和关闭文件 957 范例4-10 使用低级函数打开和关闭文件 957 ∷相关函数:open函数 close函数 4.3.3 用fclose函数关闭文件 959 范例4-11 用fclose函数关闭文件 959 ∷相关函数:fclose函数 4.3.4 一次性关闭所有被打开的文件 961 范例4-12 一次性关闭所有被打开的文件 961 ∷相关函数:fcloseall函数 4.3.5 以字符为单位读写文件 963 范例4-13 以字符为单位读写文件 963 ∷相关函数:fgetc函数 fputc函数 4.3.6 以字为单位读写文件 965 范例4-14 以字为单位读写文件 965 ∷相关函数:getw函数 putw函数 4.3.7 以低级的方式读写文件 967 范例4-15 以低级的方式读写文件 967 ∷相关函数:read函数 write函数 4.3.8 按结构读写文件 969 范例4-16 按结构读写文件 969 ∷相关函数:read函数 write函数 4.3.9 格式化写文件 971 范例4-17 格式化写文件 971 ∷相关函数:fprintf函数 4.3.10 格式化读文件 972 范例4-18 格式化读文件 972 ∷相关函数:fscanf函数 4.3.11 以行为单位写文件 974 范例4-19 以行为单位写文件 974 ∷相关函数:fputs函数 4.3.12 以行为单位读文件 975 范例4-20 以行为单位读文件 975 ∷相关函数:fgets函数 4.3.13 将缓冲区内容写入文件 977 范例4-21 将缓冲区内容写入文件 977 ∷相关函数:setbuf函数 4.3.14 用lseek函数定位文件指针 978 范例4-22 用lseek函数定位文件指针 978 ∷相关函数:lseek函数 4.3.15 获取文件流的文件句柄 980 范例4-23 获取文件流的文件句柄 980 ∷相关函数:fileno函数 4.3.16 从文件流指针中导出文件句柄 982 范例4-24 从文件流指针中导出文件句柄 982 ∷相关函数:fopen函数 4.3.17 利用eof函数判断文件是否结束 984 范例4-25 利用eof函数判断文件是否结束 984 ∷相关函数:eof函数 4.3.18 利用feof函数判断文件结尾 986 范例4-26 利用feof函数判断文件结尾 986 ∷相关函数:feof函数 4.3.19 刷新I/O流 988 范例4-27 刷新I/O流 988 ∷相关函数:fflush函数 4.3.20 利用tmpnam函数创建临时文件名 990 范例4-28 利用tmpnam函数创建临时文件名 990 ∷相关函数:tmpnam函数 4.3.21 创建真正的临时文件 992 范例4-29 创建真正的临时文件 992 ∷相关函数:tmpfile函数 4.3.22 创建文件 993 范例4-30 创建文件 993 ∷相关函数:creat函数 4.3.23 在指定目录中创建唯一文件 995 范例4-31 在指定目录中创建唯一文件 995 ∷相关函数:creattemp函数 4.3.24 利用creatnew函数创建新文件 996 范例4-32 利用creatnew函数创建新文件 996 ∷相关函数:creatnew函数 4.3.25 删除文件 998 范例4-33 删除文件 998 ∷相关函数:remove函数 4.3.26 查找文件获取文件的路径 1000 范例4-34 查找文件获取文件的路径 1000 ∷相关函数:searchpath函数 4.3.27 分解 文件路径 1001 范例4-35 分解 文件路径 1001 ∷相关函数:fnsplit函数 4.3.28 建立文件完全路径名 1003 范例4-36 建立文件完全路径名 1003 ∷相关函数:fnmerge 函数 4.3.29 读取文件分配表信息 1005 范例4-37 读取文件分配表信息 1005 ∷相关函数:getfat函数 getfatd函数 4.3.30 判断读写所在的文件的位置 1007 范例4-38 判断读写所在的文件的位置 1007 ∷相关函数:ftell函数 4.3.31 重命名文件 1009 范例4-39 重命名文件 1009 ∷相关函数:rename函数 4.3.32 判断访问文件的模式 1011 范例4-40 判断访问文件的模式 1011 ∷相关函数:access函数 4.3.34 设置文件访问模式 1013 范例4-41 设置文件访问模式 1013 ∷相关函数:chmod函数 4.3.35 显示文件的属性 1015 范例4-42 显示文件的属性 1015 ∷相关函数:_chmod函数 4.3.36 检测文件流的错误 1017 范例4-43 检测文件流的错误 1017 ∷相关函数:ferror函数 4.3.37 判断文件的长度 1019 范例4-44 判断文件的长度 1019 ∷相关函数:filelength函数 4.3.38 通过句柄设置打开文件的方式 1022 范例4-45 通过句柄设置打开文件的方式 1022 ∷相关函数:setmode函数 4.3.39 读取文件的时间和日期标记 1023 范例4-46 读取文件的时间和日期标记 1023 ∷相关函数:getftime函数 4.3.40 设置文件的时间和日期标记 1026 范例4-47 设置文件的时间和日期标记 1026 ∷相关函数:setftimet函数 4.3.41 改变文件的长度 1028 范例4-48 改变文件的长度 1028 ∷相关函数:chsize函数 4.3.42 控制文件打开操作的读写模式 1029 范例4-49 控制文件打开操作的读写模式 1029 ∷相关函数:umask函数 4.3.43 复制文件句柄 1032 范例4-50 复制文件句柄 1032 ∷相关函数:dup函数 4.3.44 强制复制文件句柄 1033 范例4-51 强制复制文件句柄 1033 ∷相关函数:dup2函数 4.3.45 用句柄判断读写所在的文件的位置 1036 范例4-52 用句柄判断当前文件指针的位置 1036 ∷相关函数:tell函数 4.3.46 根据当前位置定位文件指针 1038 范例4-53 根据当前位置定位文件指针 1038 ∷相关函数:fseek函数 4.3.47 获取文件句柄的信息 1039 范例4-54 获取文件句柄的信息 1039 ∷相关函数:fstat函数 4.3.48 重新打开文件流 1041 范例4-55 重新打开文件流 1041 ∷相关函数:freopen函数 4.4 本章小结 1043 第5章 系统调用 1045 5.1 时间和日期的操作 1046 5.1.1 获取当前的时间和日期 1046 范例5-1 获取当前时间和日期 1046 ∷相关函数:time函数 5.1.2 让程序延时指定的时间段 1047 范例5-2 让程序延时指定的时间段 1047 ∷相关函数:delay函数 5.1.3 比较两个时间 1048 范例5-3 比较两个时间 1048 ∷相关函数:difftime函数 5.1.4 读BIOS计时器 1050 范例5-4 读BIOS计时器 1050 ∷相关函数:biostime函数 5.1.5 比较两个时间获取当地时间 1051 范例5-5 获取当地时间 1051 ∷相关函数:localtime函数 5.1.6 获取格林威治平时 1052 范例5-6 获取格林威治平时 1052 ∷相关函数:gmtime函数 5.1.7 获取DOS系统时间 1054 范例5-7 获取DOS系统时间 1054 ∷相关函数:gettime函数 5.1.8 获取DOS系统日期 1055 范例5-8 获取DOS系统日期 1055 ∷相关函数:getdate函数 5.1.9 设置DOS系统时间 1057 范例5-9 设置DOS系统时间 1057 ∷相关函数:settime函数 5.1.10 设置DOS系统日期 1059 范例5-10 设置DOS系统日期 1059 ∷相关函数:setdate函数 5.1.11 获取时区信息 1061 范例5-11 获取时区信息 1061 ∷相关函数:ftime函数 5.2 BIOS的操作 1062 5.2.1 利用BIOS获取打印机的状态 1062 范例5-12 利用BIOS获取打印机的状态 1062 ∷相关函数:biosprint函数 5.2.2 获取Ctrl+Break信息 1064 范例5-13 获取CTRL+BREAK信息 1064 ∷相关函数:getcbrk函数 5.2.3 暂时挂起程序 1066 范例5-14 暂时挂起程序 1066 ∷相关函数:sleep函数 5.2.4 控制声音 1067 范例5-15 控制声音 1067 5.2.5 利用bdos函数访问DOS服务 1068 范例5-16 利用bdos函数访问DOS服务 1068 ∷相关函数:bdos函数 5.2.6 获取BIOS常规内存数量 1071 范例5-17 获取BIOS常规内存数量 1071 ∷相关函数:biosmemory函数 5.2.7 获取寄存器设置信息 1072 范例5-18 获取寄存器设置信息 1072 ∷相关函数:segread函数 5.3 内存的操作 1074 5.3.1 给内存区域赋值 1074 范例5-19 给内存区域赋值 1074 ∷相关函数:memset函数 5.3.2 获取时区信息复制内存区域 1076 范例5-20 复制内存区域 1076 5.3.3 复制内存区域指定的字节 1078 范例5-21 复制内存区域指定的字节 1078 ∷相关函数:memccpy函数 5.3.4 获取时区信息 1080 范例5-22 比较两个无符号字符数组 1080 5.3.5 交换字符串的两个相邻字节内容 1082 范例5-23 交换字符串的两个相邻字节内容 1082 ∷相关函数:swab函数 5.3.6 利用brk函数改变堆的大小 1084 范例5-24 利用brk函数改变堆的大小 1084 ∷相关函数:brk函数 5.3.7 获取指定内存单元内容 1086 范例5-25 获取指定内存单元内容 1086 5.3.8 设置指定内存单元内容 1088 范例5-26 设置指定内存单元内容 1088 5.4 本章小结 1090 索引... 1091
导读: 浮点数 运算是一个非常有技术含量的话题,不太容易掌握。许多程序员都不清楚使用==操作符比较float/double类型的话到底出现什么问题。 许多人使用float/double进行货币计算时经常会犯错。这篇文章是这一系列中的精华,所有的软件开发人员都应该读一下。  随着你经验的增长,你肯定 想去深入了解一些常见的东西的细节, 浮点数 运算就是其中之一。   导读: 浮点数 运算是一个非常有技术含量的话
void zhuiganfa(double const *a,double const *b,double const *c, // [in] 方程的三对角 double const *f, // [in] f向量 double *x, // [out] 方程的解 int n, // [in] 方阵的阶 double *beta=NULL // [in,none] int i,tag=0; if(!beta) beta=new double[n-1]; tag=1; double *y=x; beta[0]=c[0]/b[0]; for(i=1;i<n-1;++i) beta[i]=c[i]/(b[i]-a[i]*beta[i-1]); y[0]=f[0]/b[0]; for(i=1;i<n;++i) y[i]=(f[i]-a[i]*y[i-1])/(b[i]-a[i]*beta[i-1]); // 追 for(i=n-2;i>=0;--i) x[i]=y[i]-beta[i]*x[i+1]; // 赶 if(tag) delete[] beta; 第二大类就是迭代法,有雅可比迭代,高斯-塞德尔迭代法,超松弛迭代法等。 高斯-塞德尔迭代法实现: int gauss_seidel(CMatrix &ab, // [in] 方程的增广矩阵 A+b CMatrix &x, // [in,out] 迭代方程的解 double eps // [in] 精度控制 int w,h,wx,hx; ab.size(h,w); // 得到行数和列数 x.size(hx,wx); assert(wx==1 && h==hx); double dx,maxdx; int cnt=0; // 统计迭代次数作为函数返回值 maxdx=0.0; for(int k=0;k<h;++k) double s=0.0; for(int i=0;i<h;++i) if(k!=i) s+=ab.elem(k,i)*x.elem(i,0); double rst=(ab.elem(k,h)-s)/ab.elem(k,k); // 迭代计算x(k) if((dx=fabs(rst-x.elem(k,0)))>maxdx) maxdx=dx; x.elem(k,0)=rst; ++cnt; while(maxdx>eps); return cnt; 超松弛迭代法实现: int sor(CMatrix &ab, // [in] 方程的增广矩阵 A+b CMatrix &x, // [in,out] 迭代方程的解 double omg, // [in] 松弛因子 double eps // [in] 精度控制 int w,h,wx,hx; ab.size(h,w); // 得到行数和列数 x.size(hx,wx); assert(wx==1 && h==hx); double dx,maxdx; int cnt=0; // 统计迭代次数作为函数返回值 maxdx=0.0; for(int k=0;k<h;++k) double s=0.0; for(int i=0;i<h;++i) if(k!=i) s+=ab.elem(k,i)*x.elem(i,0); double rst=(ab.elem(k,h)-s)/ab.elem(k,k); // 迭代计算x~(k) rst=(1-omg)*x.elem(k,0)+omg*rst; // 加权平均 if((dx=fabs(rst-x.elem(k,0)))>maxdx) maxdx=dx; x.elem(k,0)=rst; ++cnt; while(maxdx>eps); return cnt; 消元法是确定的解法,但在计算机里由于 浮点数 存在误差,所以实际上也是近似解,对于一些病态方程仍然无从下手,其时间复杂度在O(n3),对一些特殊方程的特殊解法除外,比如追赶法就是O(n)的线性时间复杂度,而迭代法是由一组初值,进行多次迭代收敛到近似解的过程,所以有收敛性问题,在一次迭代中需要一次矩阵乘法的运算量,是O(n2),所以迭代法至少是O(n2)以上的方法,而收敛的速度取决于迭代的次数,这是收敛速度的问题。 迭代法在解一些超大型方程组时是很有效的方法,比如成百上千的未知量,你要说现实中哪有这么大的方程,有的,比如椭圆方程最简单的五点格式,网格中有多少内点就有多少未知量,一个差分网格当然是越多越精确,而这个时候O(n3)的直接法就显得像蜗牛一样,是迭代法大展拳脚的时候。 超松弛迭代法有一个松弛因子,它的研究中心就是怎么求最佳松弛因子,现实中拿到一个方程,你总不能说,我先试一下,慢慢试,试出最佳因子,你试第一个的时候,结果就已经出来了,那你还要松弛因子干嘛,你要的是方程的解。最好的情况是,在迭代过程中,松弛因子会自动适应,解在逼近方程的解,而松弛因子也在逼近最佳松弛因子。 最后一个测试的简单程序: #include "stdafx.h" #include <cmath> #include <cassert> #include "cmatrix.h" int main(int argc, char* argv[]) double a[]={0,1,1},b[]={3,3,3},c[]={2,2,0},f[]={1,2,3},x[3]; zhuiganfa(a,b,c,f,x,3); printf("x={%lf,%lf,%lf}\n",x[0],x[1],x[2]); double data[]={3,2,0,1, 1,3,2,2, 0,1,3,3}; CMatrix ab(data,3,4),mx(3,1); int cnt; cnt=gauss_seidel(ab,mx,1e-5); //cnt=sor(ab,mx,1.2,1e-5); printf("x={%lf,%lf,%lf}\ncnt=%d\n",mx.elem(0,0),mx.elem(1,0),mx.elem(2,0),cnt); return 0; ?存储类型   在本课中,我们只介绍数据类型说明。其它说明在以后各章中陆续介绍。所谓数据类型是按被说明量的性质,表示形式,占据存储空间的多少,构造特点来划分的。在C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。 1.基本数据类型   基本数据类型最主要的特点是,其值不可以再 分解 为其它类型。也就是说,基本数据类型是自我说明的。 2.构造数据类型构造数据类型   是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造类型的值可以 分解 成若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或又是一个构造类型。在 C语言 中,构造类型有以下几种: ?数组类型 ?结构类型 ?联合类型 3.指针类型   指针是一种特殊的,同时又是具有重要作用的数据类型。其值用来表示某个量在内存储器中的地址。虽然指针变量的取值类似于整型量,但这是两个类型完全不同的量,因此不能混为一谈。4.空类型在调用函数值时,通常应向调用者返回一个函数值。这个返回的函数值是具有一定的数据类型的,应在函数定义及函数说明中给以说明,例如在例题中给出的max函数定义中,函数头为: int max(int a,int b);其中“int ”类型说明符即表示该函数的返回值为整型量。又如在例题中,使用了库函数 sin,由于系统规定其函数返回值为双精度浮点型,因此在赋值语句s=sin (x);中,s 也必须是双精度浮点型,以便与sin函数的返回值一致。所以在说明部分,把s说明为双精度浮点型。但是,也有一类函数,调用后并不需要向调用者返回函数值, 这种函数可以定义为“空类型”。其类型说明符为void。在第五章函数中还要详细介绍。在本章中,我们先介绍基本数据类型中的整型、浮点型和字符型。其余类型在以后各章中陆续介绍。   对于基本数据类型量,按其取值是否可改变又分为常量和变量两种。在程序执行过程中,其值不发生改变的量称为常量,取值可变的量称为变量。它们可与数据类型结合起来分类。例如,可分为整型常量、整型变量、浮点常量、浮点变量、字符常量、字符变量、枚举常量、枚举变量。在程序中,常量是可以不经说明而直接引用的,而变量则必须先说明后使用。 整型量包括整型常量、整型变量。整型常量就是整常数。在C语言中,使用的整常数有八进制、十六进制和十进制三种。 1.八进制整常数八进制整常数必须以0开头,即以0作为八进制数的前缀。数码取值为0~7。八进制数通常是无符号数。 以下各数是合法的八进制数: 015(十进制为13) 0101(十进制为65) 0177777(十进制为65535) 以下各数不是合法的八进制数: 256(无前缀0) 03A2(包含了非八进制数码) -0127(出现了负号) 2.十六进制整常数 十六进制整常数的前缀为0X或0x。其数码取值为0~9,A~F或a~f。 以下各数是合法的十六进制整常数: 0X2A(十进制为42)  0XA0 (十进制为160)  0XFFFF (十进制为65535) 以下各数不是合法的十六进制整常数: 5A (无前缀0X)  0X3H (含有非十六进制数码) 3.十进制整常数 十进制整常数没有前缀。其数码为0~9。 以下各数是合法的十进制整常数: 237 -568 65535 1627 以下各数不是合法的十进制整常数: 023 (不能有前导0) 23D (含有非十进制数码)   在程序中是根据前缀来区分各种进制数的。因此在书写常数时不要把前缀弄错造成结果不正确。4.整型常数的后缀在16位字长的机器上,基本整型的长度也为16位,因此表示的数的范围也是有限定的。十进制无符号整常数的范围为0~65535,有符号数为-32768~+32767。八进制无符号数的表示范围为0~0177777。十六进制无符号数的表示范围为0X0~0XFFFF或0x0~0xFFFF。如果使用的数超过了上述范围,就必须用长整型数来表示。长整型数是用后缀“L”或“l”来表示的。例如: 十进制长整常数 158L (十进制为158) 358000L (十进制为-358000) 八进制长整常数 012L (十进制为10) 077L (十进制为63) 0200000L (十进制为65536) 十六进制长整常数 0X15L (十进制为21) 0XA5L (十进制为165) 0X10000L (十进制为65536)   长整数158L和基本整常数158 在数值上并无区别。但对158L,因为是长整型量,C编译系统将为它分配4个字节存储空间。而对158,因为是基本整型,只分配2 个字节的存储空间。因此在运算和输出格式上要予以注意,避免出错。无符号数也可用后缀表示,整型常数的无符号数的后缀为“U”或“u”。例如: 358u,0x38Au,235Lu 均为无符号数。前缀,后缀可同时使用以表示各种类型的数。如0XA5Lu表示十六进制无符号长整数A5,其十进制为165。 整型变量可分为以下几类: 1.基本型 类型说明符为int,在内存中占2个字节,其取值为基本整常数。 2.短整量 类型说明符为short int或short'C110F1。所占字节和取值范围均与基本型相同。 3.长整型 类型说明符为long int或long ,在内存中占4个字节,其取值为长整常数。 4.无符号型 类型说明符为unsigned。 无符号型又可与上述三种类型匹配而构成: (1)无符号基本型 类型说明符为unsigned int或unsigned。 (2)无符号短整型 类型说明符为unsigned short (3)无符号长整型 类型说明符为unsigned long 各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同。但由于省去了符号位,故不能表示负数。 下表列出了Turbo C中各类整型量所分配的内存字节数及数的表示范围。 类型说明符    数的范围     分配字节数 int       -32768~32767     ■■ short int    -32768~32767     ■■ signed int    -32768~32767     ■■ unsigned int   0~65535        ■■ long int  -2147483648~2147483647  ■■■■ unsigned long  0~4294967295     ■■■■ 整型变量的说明 变量说明的一般形式为: 类型说明符 变量名标识符,变量名标识符,...; 例如: int a,b,c; (a,b,c为整型变量) long x,y; (x,y为长整型变量) unsigned p,q; (p,q为无符号整型变量) 在书写变量说明时,应注意以下几点: 1.允许在一个类型说明符后,说明多个相同类型的变量。各变量名之间用逗号间隔。类型说明符与变量名之间至少用一个空格间隔。 2.最后一个变量名之后必须以“;”号结尾。 3.变量说明必须放在变量使用之前。一般放在函数体的开头部分。 [Practice] //1int a,b; short int c; short d=100; a=d-20; b=a+d; c=a+b+d; d=d-a+c-b;'Vtable a,2,0 b,2,0 c,2,0 d,2,100 of Vtable 'Vupdate 1,0;2,0 4,100 2,180 3,360 4,200 of Vupdate of Practice [Practice] //2int a=5; int b=9; long int c; long d; c=a+b-7; d=a*b*c; c=d*d*d; a=c-d;'Vtable a,2,5 b,2,9 c,4,0 d,4,0 of Vtable 'Vupdate 4,315 3,31255875 1,-5112 of Vupdate of Practice [Practice] //3int a=6,b=19; unsigned int c; int d; c=a-b+7; d=b*c; a=b+c+d; b=-a;'Vtable a,2,6 b,2,19 c,2,0 d,2,0 of Vtable 'Vupdate 1,6;2,19 3,65530 4,-114 1,-101 2,101 of Vupdate of Practice void main(){ long x,y; int a,b,c,d; c=x+a; d=y+b; printf("c=x+a=%d,d=y+b=%d\n",c,d); 将main说明为返回void,即不返回任何类型的值 x,y被定义为long型 a,b,c,d被定义为int型 x+a->c y+b->d 显示程序运行结果 of long x,y; int a,b,c,d; c=x+a; d=y+b;   从程序中可以看到:x, y是长整型变量,a, b是基本整型变量。它们之间允许进行运算,运算结果为长整型。但c,d被定义为基本整型,因此最后结果为基本整型。本例说明,不同类型的量可以参与运算并相互赋值。其中的类型转换是由编译系统自动完成的。有关类型转换的规则将在以后介绍。 实型也称为浮点型。实型常量也称为实数或者 浮点数 。在C语言中,实数只采用十进制。它有二种形式: 十进制数形式指数形式 1.十进制数形式 由数码0~ 9和小数点组成。例如:0.0,.25,5.789,0.13,5.0,300.,-267.8230等均为合法的实数。 2.指数形式 由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。其一般形式为a E n (a为十进制数,n为十进制整数)其值为 a*10,n 如: 2.1E5 (等于2.1*10,5), 3.7E-2 (等于3.7*10,)-2*) 0.5E7 (等于0.5*10,7), -2.8E-2 (等于-2.8*10,)-2*)以下不是合法的实数 345 (无小数点) E7 (阶码标志E之前无数字)  -5 (无阶码标志) 53.-E3 (负号位置不对) 2.7E (无阶码) 标准C允许 浮点数 使用后缀。后缀为“f”或“F”即表示该数为 浮点数 。如356f和356.是等价的。例2.2说明了这种情况: void main() printf("%f\n%f\n",356.,356f); void 指明main不返回任何值 利用printf显示结果 结束 实型变量分为两类:单精度型和双精度型, 其类型说明符为float 单精度说明符,double 双精度说明符。在Turbo C中单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。双精度型占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。 实型变量说明的格式和书写规则与整型相同。 例如: float x,y; (x,y为单精度实型量)     double a,b,c; (a,b,c为双精度实型量) 实型常数不分单、双精度,都按双精度double型处理。 void main() float a; double b; a=33333.33333; b=33333.33333333333333; printf("%f\n%f\n",a,b); 此程序说明float、double的不同 a ■■■■ b ■■■■■■■■ a<---33333.33333 b<---33333.33333333333;; 显示程序结果 此程序说明float、double的不同 float a; double b; a=33333.33333; b=33333.33333333333333; 从本例可以看出,由于a 是单精度浮点型,有效位数只有七位。而整数已占五位,故小数二位后之后均为无效数字。b 是双精度型,有效位为十六位。但Turbo C 规定小数后最多保留六位,其余部分四舍五入。 [Practice] //floatint a=32; float b; double d; b=12345678; d=b*100; d=d+a; d=d+58.123456;'Vtable a,2,32 b,4,0.0 d,8,0.0 of Vtable 'Vupdate 2,12345678.00000 3,1234567800 3,1234567832 3,1234567890.123456 of Vupdate of Practice [Practice] //1int a=543; float b; b=123.123962+a; b=b-100; a=b;'Vtable a,2,543 b,4,0.0 of Vtable 'Vupdate 1,543 2,0.0 2,123.123962 2,23.123962 of Vupdate of Practice 字符型量包括字符常量和字符变量。 字符常量是用单引号括起来的一个字符。例如'a','b','=','+','?'都是合法字符常量。在C语言中,字符常量有以下特点: 1.字符常量只能用单引号括起来,不能用双引号或其它括号。 2.字符常量只能是单个字符,不能是字符串。 3.字符可以是字符集中任意字符。但数字被定义为字符型之后就 不能参与数值运算。如'5'和5 是不同的。'5'是字符常量,不能参与运算。 转义字符是一种特殊的字符常量。转义字符以反斜线"\"开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如,在前面各例题printf函数的格式串中用到的“\n”就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。 常用的转义字符及其含义 转义字符  转义字符的意义 \n      回车换行 \t      横向跳到下一制表位置 \v      竖向跳格 \b      退格 \r      回车 \f      走纸换页 \\      反斜线符"\" \'      单引号符 \a      鸣铃 \ddd     1~3位八进制数所代表的字符 \xhh     1~2位十六进制数所代表的字符 广义地讲,C语言字符集中的任何一个字符均可用转义字符来表示。表2.2中的\ddd和\xhh正是为此而提出的。ddd和hh分别为八进制和十六进制的ASCII代码。如\101表示字?quot;A" ,\102表示字母"B",\134表示反斜线,\XOA表示换行等。转义字符的使用 void main() int a,b,c; a=5; b=6; c=7; printf("%d\n\t%d %d\n %d %d\t\b%d\n",a,b,c,a,b,c); 此程序练习转义字符的使用 a、b、c为整数 5->a,6->b,7->c 调用printf显示程序运行结果 printf("%d\n\t%d %d\n %d %d\t\b%d\n",a,b,c,a,b,c); 程序在第一列输出a值5之后就是“\n”,故回车换行;接着又是“\t”,于是跳到下一制表位置(设制表位置间隔为8),再输出b值6;空二格再输出c 值7后又是"\n",因此再回车换行;再空二格之后又输出a值5;再空三格又输出b的值6;再次后"\t"跳到下一制表位置(与上一行的6 对齐),但下一转义字符“\b”又使退回一格,故紧挨着6再输出c值7。 字符变量的取值是字符常量,即单个字符。字符变量的类型说明符是char。字符变量类型说明的格式和书写规则都与整型变量相同。 char a,b; 每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。字符值是以ASCII码的形式存放在变量的内存单元之中的。如x的 十进制ASCII码是120,y的十进制ASCII码是121。对字符变量a,b赋予'x'和'y'值: a='x';b='y';实际上是在a,b两个单元内存放120和121的二进制代码: a 0 1 1 1 1 0 0 0      b 0 1 1 1 1 0 0 1 所以也可以把它们看成是整型量。 C语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值。在输出时, 允许把字符变量按整型量输出,也允许把整型量按字符量输出。 整型量为二字节量,字符量为单字节量,当整型量按字符型量处理时, 只有低八位字节参与处理。 main() char a,b; a=120; b=121; printf("%c,%c\n%d,%d\n",a,b,a,b); a ■ b ■ a <-- 120 b <--- 121 显示程序结果 本程序中说明a,b为字符型,但在赋值语句中赋以整型值。从结果看,a,b值的输出形式取决于printf函数格式串中的格式符,当格式符为"c"时,对应输出的变量值为字符,当格式符为"d"时,对应输出的变量值为整数。 void main() char a,b; a='x'; b='y'; a=a-32; b=b-32; printf("%c,%c\n%d,%d\n",a,b,a,b); a,b被说明为字符变量并赋予字符值 把小写字母换成大写字母 以整型和字符型输出 本例中,a,b被说明为字符变量并赋予字符值,C语言允许字符变量参与数值运算,即用字符的ASCII 码参与运算。由于大小写字母的ASCII 码相差32,因此运算后把小写字母换成大写字母。然后分别以整型和字符型输出。 [Practice] //charint a=49; char b; char d; b=a+10; d=a+b;'Vtable a,2,49 b,1,随机 d,1,随机 of Vtable 'Vupdate 2,';' 3,'l' of Vupdate of Practice [Practice] //char c1,c2; c1='a';c2='b'; c1=c1-32;c2=c2-32;'Vtable c1,1,随机 c2,1,随机 of Vtable 'Vupdate 1,随机;2,随机 1,'a';2,'b' 1,'A';2,'B' of Vupdate of Practice 字符串常量 字符串常量是由一对双引号括起的字符序列。例如: "CHINA" ,"C program:" , "$12.5" 等都是合法的字符串常量。字符串常量和字符常量是不同的量。它们之间主要有以下区别: 1.字符常量由单引号括起来,字符串常量由双引号括起来。 2.字符常量只能是单个字符,字符串常量则可以含一个或多个字符。 3.可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。在C语言中没有相应的字符串变量。 这是与BASIC 语言不同的。但是可以用一个字符数组来存放一个字符串常量。在数组一章内予以介绍。 4.字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符"\0"(ASCII码为0)。这是字符串结束的标志。例如,字符串 "C program"在内存中所占的字节为:C program\0。字符常量'a'和字符串常量"a"虽然都只有一个字符,但在内存中的情况是不同的。 'a'在内存中占一个字节,可表示为:a "a"在内存中占二个字节,可表示为:a\0符号常量 在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用之前必须先定义,其一般形式为: #define 标识符 常量 其中#define也是一条预处理命令(预处理命令都?quot;#"开头),称为宏定义命令(在第九章预处理程序中将进一步介绍),其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。 #define PI 3.14159 void main() float s,r; s=PI*r*r; printf("s=%f\n",s); 由宏定义命令定义PI 为3.14159 s,r定义为实数 5->r PI*r*r->s 显示程序结果 float s,r; r=5; s=PI*r*r; 本程序在主函数之前由宏定义命令定义PI 为3.14159,在程序中即以该值代替PI 。s=PI*r*r等效于s=3.14159*r*r。应该注意的是,符号常量不是变量,它所代表的值在整个作用域内不能再改变。也就是说,在程序中,不能再用赋值语句对它重新赋值。 变量的初值和类型转换 变量赋初值 在程序中常常需要对变量赋初值,以便使用变量。语言程序中可有多种方法,在定义时赋以初值的方法,这种方法称为初始化。在变量说明中赋初值的一般形式为: 类型说明符 变量1= 值1,变量2= 值2,……; 例如: int a=b=c=5; float x=3.2,y=3f,z=0.75; char ch1='K',ch2='P'; 应注意,在说明中不允许连续赋值,如a=b=c=5是不合法的。 void main() int a=3,b,c=5; b=a+c; printf("a=%d,b=%d,c=%d\n",a,b,c); a<---3,b<--0,c<---5 b<--a+c 显示程序运行结果 变量类型的转换 变量的数据类型是可以转换的。转换的方法有两种, 一种是自动转换,一种是强制转换。 自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成。自动转换遵循以下规则: 1.若参与运算量的类型不同,则先转换成同一类型,然后进行运算。 2.转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。 3.所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。 4.char型和short型参与运算时,必须先转换成int型。 5.在赋值运算中,赋值号两边量的数据类型不同时, 赋值号右边量的类型将转换为左边量的类型。 如果右边量的数据类型长度左边长时,将丢失一部分数据,这样会降低精度, 丢失的部分按四舍五入向前舍入。图21表示了类型自动转换的规则。 void main() float PI=3.14159; int s,r=5; s=r*r*PI; printf("s=%d\n",s); PI<--3.14159 s<--0,r<--5 s<--r*r*PI 显示程序运行结果 float PI=3.14159; int s,r=5; s=r*r*PI; 本例程序中,PI为实型;s,r为整型。在执行s=r*r*PI语句时,r和PI都转换成double型计算,结果也为double型。但由于s为整型,故赋值结果仍为整型,舍去了小数部分。 强制类型转换 强制类型转换是通过类型转换运算来实现的。其一般形式为: (类型说明符) (表达式) 其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。例如: (float) a 把a转换为实型(int)(x+y) 把x+y的结果转换为整型在使用强制转换时应注意以下问题: 1.类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。 2.无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。 main() float f=5.75; printf("(int)f=%d,f=%f\n",(int)f,f); f<--5.75 将float f强制转换成int f float f=5.75;printf("(int)f=%d,f=%f\n",(int)f,f); 本例表明,f虽强制转为int型,但只在运算中起作用, 是临时的,而f本身的类型并不改变。因此,(int)f的值为 5(删去了小数)而f的值仍为5.75。 基本运算符和表达式 运算符的种类、优先级和结合性 C语言中运算符和表达式数量之多, 在高级语言中是少见的。正是丰富的运算符和表达式使C语言功能十分完善。 这也是C语言的主要特点之一。 C语言的运算符不仅具有不同的优先级, 而且还有一个特点,就是它的结合性。在表达式中, 各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的制约, 以便确定是自左向右进行运算还是自右向左进行运算。 这种结合性是其它高级语言的运算符所没有的,因此也增加了C语言的复杂性。 运算符的种类C语言的运算符可分为以下几类: 1.算术运算符 用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。 2.关系运算符 用于比较运算。包括大于(>)、小于(<)、等于(==)、 大于等于(>=)、小于等于(<=)和不等于(!=)六种。 3.逻辑运算符 用于逻辑运算。包括与(&&)、或(||)、非(!)三种。 4.位操作运算符 参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。 5.赋值运算符 用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。 6.条件运算符 这是一个三目运算符,用于条件求值(?:)。 7.逗号运算符 用于把若干表达式组合成一个表达式(,)。 8.指针运算符 用于取内容(*)和取地址(&)二种运算。 9.求字节数运算符 用于计算数据类型所占的字节数(sizeof)。 10.特殊运算符 有括号(),下标[],成员(→,.)等几种。 优先级和结合性 C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。 而在一个运算量两侧的运算符优先级相同时, 则按运算符的结合性所规定的结合方向处理。 C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与“-”号结合, 执行x-y运算,然后再执行+z的运算。这种自左至右的结合方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。 最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算。 C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。 算术运算符和算术表达式基本的算术运算符 1.加法运算符“+”加法运算符为双目运算符,即应有两个量参与加法运算。如a+b,4+8等。具有右结合性。 2.减法运算符“-”减法运算符为双目运算符。但“-”也可作负值运算符,此时为单目运算,如-x,-5等具有左结合性。 3.乘法运算符“*”双目运算,具有左结合性。 4.除法运算符“/”双目运算具有左结合性。参与运算量均为整型时, 结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型。 void main(){ printf("\n\n%d,%d\n",20/7,-20/7); printf("%f,%f\n",20.0/7,-20.0/7); 双目运算具有左结合性。参与运算量均为整型时, 结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型。 printf("\n\n%d,%d\n",20/7,-20/7); printf("%f,%f\n",20.0/7,-20.0/7); 本例中,20/7,-20/7的结果均为整型,小数全部舍去。而20.0/7和-20.0/7由于有实数参与运算,因此结果也为实型。 5.求余运算符(模运算符)“%”双目运算,具有左结合性。要求参与运算的量均为整型。 求余运算的结果等于两数相除后的余数。 void main(){ printf("%d\n",100%3); 双目运算,具有左结合性。求余运算符% 要求参与运算的量均为整型。本例输出100除以3所得的余数1。 自增1,自减1运算符 自增1运算符记为“++”,其功能是使变量的值自增1。自减1运算符记为“--”,其功能是使变量值自减1。自增1,自减1运算符均为单目运算,都具有右结合性。可有以下几种形式: ++i i自增1后再参与其它运算。--i i自减1后再参与其它运算。 i++  i参与运算后,i的值再自增1。 i--  i参与运算后,i的值再自减1。 在理解和使用上容易出错的是i++和i--。 特别是当它们出在较复杂的表达式或语句中时,常常难于弄清,因此应仔细分析。 void main(){ int i=8; printf("%d\n",++i); printf("%d\n",--i); printf("%d\n",i++); printf("%d\n",i--); printf("%d\n",-i++); printf("%d\n",-i--); } i<--8 i<--i+1 i<--i-1 i<--i+1 i<--i-1 i<--i+1 i<--i-1 int i=8; printf("%d\n",++i); printf("%d\n",--i); printf("%d\n",i++); printf("%d\n",i--); printf("%d\n",-i++); printf("%d\n",-i--); i的初值为8 第2行i加1后输出故为9; 第3行减1后输出故为8; 第4行输出i为8之后再加1(为9); 第5行输出i为9之后再减1(为8) ; 第6行输出-8之后再加1(为9); 第7行输出-9之后再减1(为8) void main(){ int i=5,j=5,p,q; p=(i++)+(i++)+(i++); q=(++j)+(++j)+(++j); printf("%d,%d,%d,%d",p,q,i,j); i<--5,j<--5,p<--0,q<--0 i+i+i--->p,i+1-->i,i+1-->i,i+1-->i j+1->j,j+1->j,j+1->j,j+j+j->q int i=5,j=5,p,q; p=(i++)+(i++)+(i++); q=(++j)+(++j)+(++j); 这个程序中,对P=(i++)+(i++)+(i++)应理解为三个i相加,故P值为15。然后i再自增1三次相当于加3故i的最后值为8。而对于q 的值则不然,q=(++j)+(++j)+(++j)应理解为q先自增1,再参与运算,由于q自增1三次后值为8,三个8相加的和为24,j的最后值仍为8。算术表达式表达式是由常量、变量、函数和运算符组合起来的式子。 一个表达式有一个值及其类型, 它们等于计算表达式所得结果的值和类型。表达式求值按运算符的优先级和结合性规定的顺序进行。 单个的常量、变量、函数可以看作是表达式的特例。 算术表达式 是由算术运算符和括号连接起来的式子, 以下是算术表达式的例子: a+b  (a*2)/c (x+r)*8-(a+b)/7  ++i sin(x)+sin(y)  (++i)-(j++)+(k--) 赋值运算符和赋值表达式 简单赋值运算符和表达式,简单赋值运算符记为“=”。由“= ”连接的式子称为赋值表达式。其一般形式为: 变量=表达式 例如: x=a+b w=sin(a)+sin(b) y=i+++--j 赋值表达式的功能是计算表达式的值再赋予左边的变量。赋值运算符具有右结合性。因此 a=b=c=5 a=(b=(c=5)) 在其它高级语言中,赋值构成了一个语句,称为赋值语句。 而在C中,把“=”定义为运算符,从而组成赋值表达式。 凡是表达式可以出现的地方均可出现赋值表达式。例如,式子x=(a=5)+(b=8)是合法的。它的意义是把5赋予a,8赋予b,再把a,b相加,和赋予x ,故x应等于13。 在C语言中也可以组成赋值语句,按照C语言规定, 任何表达式在其未尾加上分号就构成为语句。因此如x=8;a=b=c=5;都是赋值语句,在前面各例中我们已大量使用过了。 如果赋值运算符两边的数据类型不相同, 系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下: 1.实型赋予整型,舍去小数部分。前面的例2.9已经说明了这种情况。 2.整型赋予实型,数值不变,但将以浮点形式存放, 即增加小数部分(小数部分的值为0)。 3.字符型赋予整型,由于字符型为一个字节, 而整型为二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。 4.整型赋予字符型,只把低八位赋予字符量。 void main(){ int a,b=322; float x,y=8.88; char c1='k',c2; a=c1; c2=b; printf("%d,%f,%d,%c",a,x,a,c2); int a,b=322; float x,y=8.88; char c1='k',c2; printf("%d,%f,%d,%c",a=y,x=b,a=c1,c2=b); 本例表明了上述赋值运算中类型转换的规则。a为整型,赋予实型量y值888后只取整数8。x为实型,赋予整型量b值322, 后增加了小数部分。字符型量c1赋予a变为整型,整型量b赋予c2 后取其低八位成为字符型(b的低八位为01000010,即十进制66,按ASCII码对应于字符B)。 复合赋值符及表达式 在赋值符“=”之前加上其它二目运算符可构成复合赋值符。如 +=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=。 构成复合赋值表达式的一般形式为: 变量 双目运算符=表达式 它等效于 变量=变量 运算符 表达式 例如: a+=5 等价于a=a+5  x*=y+7 等价于x=x*(y+7)  r%=p 等价于r=r%p 复合赋值符这种写法,对初学者可能不习惯, 但十分有利于编译处理,能提高编译效率并产生质量较高的目标代码。逗号运算符和逗号表达式在 逗号运算符 C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式。 其一般形式为: 表达式1,表达式2 其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。 void main(){ int a=2,b=4,c=6,x,y; x=a+b,y=b+c; printf("y=%d,x=%d",y,x); a<--2,b<--4,c<--6,x<--0,y<--0 x<--a+b,y<---b+c 本例中,y等于整个逗号表达式的值,也就是表达式2的值,x是第一个表达式的值。对于逗号表达式还要说明两点: 1.逗号表达式一般形式中的表达式1和表达式2 也可以又是逗号表达式。例如: 表达式1,(表达式2,表达式3) 形成了嵌套情形。因此可以把逗号表达式扩展为以下形式: 表达式1,表达式2,…表达式n 整个逗号表达式的值等于表达式n的值。 2.程序中使用逗号表达式,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值。 3.并不是在所有出现逗号的地方都组成逗号表达式,如在变量说明中,函数参数表中逗号只是用作各变量之间的间隔符。 [Practice] //arithmeticint a,b,c; float d; a=11; b=235; c=a+b-a*b; d=(float)c/(float)a; a=c/a;'Vtable a,2,0 b,2,0 c,2,0 d,4,0.0 of Vtable 'Vupdate 1,0;2,0;3,0 4,0.0 2,235 3,-2339 4,-212.636368 1,-212 of Vupdate of Practice [Practice] //1int a,b,c1,c2; a=25; b=3243; c1=b/a; c2=b%a;'Vtable a,2,0 b,2,0 c1,2,0 c2,2,0 of Vtable 'Vupdate 1,0;2,0;3,0;4,0 2,3243 3,129 of Vupdate of Practice [Practice] //1int a,b,c; a=25; b=40; c=a+b,c+35;'Vtable a,2,0 b,2,0 c,2,0 of Vtable 'Vupdate 1,0;2,0;3,0 of Vupdate of Practice 1.C的数据类型 基本类型,构造类型,指针类型,空类型 2.基本类型的分类及特点 类型说明符      字节       数值范围 字符型char        1        C字符集 基本整型int       2        -32768~32767 短整型short int     2         -32768~32767 长整型 long int     4      -214783648~214783647 无符号型 unsigned    2        0~65535 无符号长整型 unsigned long 4      0~4294967295 单精度实型 float    4       3/4E-38~3/4E+38 双精度实型 double   8       1/7E-308~1/7E+308 3.常量后缀 L或l 长整型 U或u 无符号数 F或f 浮点数 4.常量类型 整数,长整数,无符号数, 浮点数 ,字符,字符串,符号常数,转义字符。 5.数据类型转换 ?自动转换 在不同类型数据的混合运算中,由系统自动实现转换, 由少字节类型向多字节类型转换。 不同类型的量相互赋值时也由系统自动进行转换,把赋值号右边的类型转换为左边的类型。 ?强制转换 由强制转换运算符完成转换。 6.运算符优先级和结合性 一般而言,单目运算符优先级较高,赋值运算符优先级低。 算术运算符优先级较高,关系和逻辑运算符优先级较低。 多数运算符具有左结合性,单目运算符、三目运算符、 赋值 7.表达式 表达式是由运算符连接常量、变量、函数所组成的式子。 每个表达式都有一个值和类型。 表达式求值按运算符的优先级和结合性所规定的顺序进行。 程序标准教程 一、实训目的 C语言 程序设计是本科工科类各专业的重要基础课,主要学习程序设计的基本概念和方法,通过本门课程学习,使学生掌握 C语言 的基本原理,熟练掌握程序设计的基础知识、基本概念;掌握程序设计的思想和编程技巧。 实训是在学生已经具备了使用 C语言 编写简单的应用程序的能力,为使学生对 C语言 有更全面的理解,进一步提高运用 C语言 编程解决实际问题的能力,通过提出算法、指定输入输出来设计一个解决方案。并为参加计算机等级考试作准备。 二、实训的基本内容和要求 参加实训的学生,应当认真完成实训的全部内容。最终提交实训成果来证明其独立完成各种实际任务的能力。从而反映出理解和运用本课程知识的水平和能力。具体如下: 1、代码编写规范,形成良好的编程习惯; 2、程序须有一定的健壮性和必要的提示信息,考虑问题的多种可能和边界数据。 3、提交实训报告电子稿、装订的打印稿。实训报告内容包括以下几个方面:  程序的总体设计和算法分析。  程序流程图、函数说明  源程序代码清单  测试数据和测试过程记录  遇到的问题及解决方法分析  实训小结 4. 程序运行方式 构建一个简易菜单,形如: 用户通过输入数值选择所需运行的子程序,当一个子程序运行结束后回到菜单界面,直至用户输入0后退出程序。 5.实训选题 每人至少做6题,题目如下(每人的题目由任课老师安排) (1)编写一个程序实现如下功能:一个整型数组有10个元素,删除所有值为n的元素。要求: ① 主函数完成n的输入,数组元素输入以及删除后数组元素的输出。 ② 删除功能用子函数完成。 (2)编写一个程序实现如下功能:输入10个学生5门课程的成绩,分别用函数求:①每个学生的平均分;②每门课程的平均分;③找出最高的分数所对应的学生和课程。 若输入2个学生的成绩,其运行结果如下图所示。 (3)编写一个程序实现如下功能:找最长的单词。设输入的英文短文不超过一行(假设正文最后有“.”结束,以“,”或空格分隔,不出现其他符号),编程将所有单词输出,并求其中最长单词的长度,并将该单词输出。 (4)编写一个程序实现如下功能:有8位裁判为1个运动员打分,请计算并输出去掉一个最高分和一个最低分后这个运动员的平均得分以及所评分最接近平均分的裁判员号。裁判员号及其所打分数从键盘输入,假设裁判员号为整数,所打分数为实数。 (5)编写一个程序实现如下功能:从键盘输入字符(最多为80个),遇到回车键输入结束,将输入的字符串按奇偶位置 拆分 ,奇数位上的字符在前,偶数位上的字符在后,重新组成新的字符串输出,例如输入: ab12cd3456fg,则经过程序处理后输出: a1c35fb2d46g 。 (6)功能说明:编写程序,实现以下成绩处理功能(输出格式参见示例): 1)输入n和n个成绩(成绩为 浮点数 类型,数组名记为a,假设1≤n≤50); 2)计算并输出成绩的累加和(记为sum)与平均成绩(记为ave),将≥ave的成绩归为A档,将<ave的成绩归为B档; 3)分别统计A、B两档的人数,计算在总人数中的比率; 4)求出A档学生的最低分和B档学生的最高分,它们与平均成绩的差值; 运行示例: 输入:9 55.5 99.5 50.0 90.0 88 59.5 48 60 78.0 Sum=628.5, Ave=69.8 A: 4,44.4% B: 5,55.6% MinA: 78.0,+8.2 MaxB: 60.0,-9.8 说明:输入的第1个数表示学生人数(n=9),接着输入的9个成绩中,累加和为628.5(所有小数均保留一位小数输出),平均分为69.8分;平均分以上(A档)有4人,占44.4%,平均分以下(B档)有5人,占55.6%;A档的最低分为78分,超出平均分8.2分,B档的最高分为60分,距离平均分还有9.8分的差距。 (7)功能说明:编写程序,通过以下步骤验证一个正整数对是否符合特定的编码规则: 1)输入正整数a与b; 2)计算a的所有不同的质因子(包括1)之积,记为s; 3)如果s等于b,则通过验证,输出“OK”,否则输出“Err”。 输出格式参见以下示例。 运行示例1: 输入:588 42 输出:588: 1*2*3*7=42, OK 说明:输入数为588(对应a)和42(对应b),588的质因子为1、2、3和7,其累乘结果为42(对应s),由s等于b(均为42),输出OK。 运行示例2: 输入:17 55 输出:17: 1*17=17, Err(17!=55) 说明:质因子为1和17,乘积仍为17,不等于b(55),输出Err,及不通过原因“(17!=55)”。 (8)编写一个程序实现如下功能:从字符串中删除指定的字符。同一字母的大、小写按不同字符处理。 例:若程序执行时,输入字符串为:Shanghai Dianji University,从键盘上输入字符:s,则输出后变为:Shanghai Dianji Univerity,如果输入的字符串不存在,则字符串照原样输出。 (9)编写一个函数void fun(char a[],int k,int n),其功能是:删除字符串中指定下标开始的n 个字符。其中,a中放字符串,k中存放指定的下标。 例如,字符串内容为:Hellollo World!,k中值为:5,n中的值为:3,则调用该函数的结果为:Hello World!。 (10)编写一个程序实现如下功能:调用名为tj的函数,求一个二维数组中正数、负数的代数和,以及零的个数。 (11)编写一个程序实现如下功能:调用一个名为gm的函数,该函数实现简单的加密。加密方法如下:先定义一张字母加密对照表: 原字母 a b c d e i k , w 加密后字母 d w k , i a b c e 将需要加密的一行文字输入加密程序,程序根据加密表中的对应关系,可以简单地将输入的文字加密输出,对于表中未出现的字符则不加密。 运行示例: 输入:lajgdike,w 输出:ldjg,abice (12)编写程序验证以下说法:输入一个4位数,该数个、十、百、千位上的数互不相等,由个、十、百、千位上的数组成一个最大数和一个最小数,最大数-最小数,构成一个新的4位数。反复以上运算,使其最终结果为:6174。 要求如下(下面的函数名为建议函数名): ① 用函数 int IsNumberEqual(int number) 检查输入的整数number各数码是否互不相等,全相等返回值为1否则为0; ② 用函数(void ntos (int number, int c[]) )把四位数整数number各位数码分别存入数组c ③ 用函数( void sort (int a[ ] )对4个元素的数组a排序(升序或降序都可以); ④ 由输入整数 分解 排序后的数组得到最大值和最小值: int getmaxn(int a[ ]) 返回值为最大值 int getminn(int b[ ]) 返回值为最小值 (13)函数 fun 的功能是:计算正整数num的各位上的数字之积。例如,若输入:252,则输出应该是:20。若输入:202,则输出应该是:0。 (14)函数 fun 的功能是:用插入排序法将n个字符进行排序(降序)。(提示: 插入法排序的思路是:先对数组的头两个元素进行排序, 然后根据前两个元素的情况插入第三个元素,再插入第四个元素…)。 (15)爱因斯坦数学题。爱因斯坦曾出过这样一道数学题:有一条长阶梯,若每步跨2阶,则最后剩下1阶,若每步跨3阶,则最后剩下2阶,若每步跨5阶,则最后剩下4阶,若每步跨6阶,则最后剩下5阶,只有每步跨7阶,最后才正好1阶不剩。请问,这条阶梯共有多少阶? (16)猜数游戏 在这个实验中,我们将尝试编写一个猜数游戏程序,这个程序看上去有些难度,但是如果按下列要求循序渐进地编程实现,会发现其实这个程序是很容易实现的。那么,现在就开始吧,先编写第1个程序,然后试着在第1个程序的基础上编写第2个程序,…… 程序1 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则计算机给出提示“Right!”,否则提示“Wrong!”,并告诉人所猜的数是大(Too high)还是小(Too low),然后结束游戏。要求每次运行程序时机器所“想”的数不能都一样。 程序2 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止。 程序3 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,结束游戏。 程序4 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结束游戏;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。 (17)给小学生出加法考试题 编写一个程序,给学生出一道加法运算题,然后判断学生输入的答案对错与否,按下列要求以循序渐进的方式编程。 程序1 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”,程序结束。 程序2 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”,直到做对为止。 程序3 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则提示重做,显示“Not correct! Try again!”,最多给三次机会,如果三次仍未做对,则显示“Not correct! You have tried three times! Test over!”,程序结束。 程序4 连续做10道题,通过计算机随机产生两个1~10之间的加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错的题数。 (18)学生成绩统计 从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能: 1)统计不及格人数并打印不及格学生名单; 2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单; 3)统计各分数段的学生人数及所占的百分比。 提示:可考虑用两个一维数组实现学生成绩和学生信息的存储。 (19)歌手大赛评分 某歌手大赛,共有十个评委给选手打分,分数采用百分制,去掉一个最高分,去掉一个最低分,然后取平均分,得到歌手的最后成绩。 (20)统计 输入一行字符,以回车键作为结束标志,分别统计出大写字母、小写字母、空格、数字和其它字符的个数。 (21)求 的值,其中a是一个数字,如2+22+222+2222+22222(此时a=2,n=5),a和n均由键盘输入。 (22)读入一批正整数(以零或负数为结束标志),求其中的奇数和。 (23) 利用泰勒级数sin(x)≈ 计算sin(x) 的值。要求最后一项的绝对值小于10-5,并统计出此时累加了多少项(x由键盘输入)。 (24)最大值、最小值及其交换 输入一个正整数n (1<n<=10),再输入n 个整数,输出最大值极其下标(设最大值惟一,下标从0 开始)。 输入一个正整数n (1<n<=10),再输入n 个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n 个数。 (25)抓住肇事者 一辆卡车违反交通规则,撞人后逃跑。现场共有三个目击者,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是个数学家,他说,四位车号刚好是一个整数的平方。请根据以上线索帮助警方找到车号。 (26)百钱百鸡问题 中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱百鸡”问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问翁、母、雏各几何。 (27)有一堆鱼,由A、B、C、D、E五人先后进行分配。A第一个到来,他将鱼平分作5份,把多余的一条扔回湖中,拿走自己分好的一份回家去了;B第二个到来,也将鱼平分为5份,扔掉多余的一条,只拿走自己分好的一份;接着C、D、E依次到来,也按同样的方法分鱼。问这堆鱼共有多少条?每个人到来时看到的鱼数是多少条? (28)约瑟夫环问题:编号为1,2,3,...,n的n个人按顺时针方向围坐一圈,每人持有一个正整数密码。一开始任选一个正整数m作为报数上限值,从第一个人开始按顺时针报数,报到m时停止,报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计程序求出出列顺序。 (29)某公司在传输数据过程中为了安全要对数据进行加密,若传递的是四位的整数,对其进行加密的规则为:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。如:输入数字7659,则加密后的数字为4012 (30) 将十进制正整数用除n取余法转换为n进制数输出。(n从键盘输入) (31)从键盘输入一行字符,统计其中有多少单词,假设单词之间以逗号分隔。 (32)从键盘输入一字符串,放在字符数组a中,将字符数组a中下标值为偶数的元素按从小到大排序。 (33)编写程序输出以下杨辉三角形(要求输出10行)。 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 … … … … … … (34)编写程序查找数值18在以下二维数组中第一次出现的位置。 4 5 18 8 12 16 54 43 34 18 7 (35)设有4行4列的数组a,其元素a[i][j]=3*i+2*j-6。编写程序,实现如下功能: ① 求第二行4元素的累加和; ② 求第四列4元素的平均值; ③ 求主对角线4元素中负数的个数。 (36)编写程序输出100~1000内的可逆素数。可逆素数是指:一个素数将其各位数字的顺序倒过来构成的反序数也是素数。如157和751均为素数,它们是可逆素数。要求调用两个子函数实现。 (37)输入一行数字字符存入字符数组str[80]中,用num[10]中的数组元素作为计数器来统计每个数字字符的个数。用下标为0的元素统计字符“0”的个数,用下标为1的元素统计字符“1”出现的次数,……。输出每个奇数字符出现的次数。 (38)假设数组a有4行4列的随机整数,计算每行的平均值,保留两位小数,然后输出平均值和每行的最大值。 (39)输入一行字符串,分别统计字符串中各元音字母(AEIOU)的个数(不分大小写)。 (40)编写程序计算并输出:1 + 12 + 123 + 1234 + …… 的前n(设0<n<10)项的和,n从键盘输入。 例如输入:3,则输出:136 又如输入:6,则输出:137171 (41)功能说明:函数fun求sum=d+dd+ddd+……+dd...d(n个d),其中d为1-9的数字。从主函数中输入d和n,调用fun函数,并以sum=XXXXXXX的形式输出结果。 如输入d=3,n=4 则输出:sum=3702 (42)随机产生N个数,按升序排序,然后在其中查找数据k,若找到,显示查找成功的信息,并将该数据删除;若没有找到,则将数据k插入到这些数中,插入操作后数据仍然有序。 (43)编写一个程序实现如下功能:有4名学生,每个学生信息包含学号、姓名、数学成绩、英语成绩、 C语言 成绩和三门课程的总分,并对数据进行输入和输出。 (44) 编写一个程序实现如下功能:定义一个点的结构数据类型,实现下列功能:①为点输入坐标值。②求两个点中点坐标。③求两点间距离。 (45)编写一个程序实现如下功能:建立一个单链表,每个结点数据要有职工号、工资。用一个creat函数来建立链表,用list函数输出数据(数据自定)。 (46)编写一个程序实现如下功能:有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“stud”中。 (47) 编写一个程序实现如下功能:将一个整形ASCII码文件FileA.txt复制到ASCII码文件FileB.txt。 FileA.txt FileB.txt 10 11 12 13 14 15 10 11 12 13 14 15 20 21 22 23 24 25 20 21 22 23 24 25 30 31 32 33 34 35 30 31 32 33 34 35 (48)编写一个程序实现如下功能:有一个整数文件(二进制文件),读取其中的数值,如果为奇数加一;如果为偶数,减一,存放到新的文件中去。 (49)从键盘输入若干行字符,将其存入“s8”磁盘文件中,再从文件中读取这些字符,将其中的大写字母转换成小写字母后输出到屏幕显示。 (50)以下程序从文件“student.txt”读取学生的学号、姓名、平时成绩和考试成绩,再从键盘上输入一个成绩,将所有考试成绩达到或超过该成绩的学生数据写到新的文本文件“studentD.txt”。文件的最后一行为0表示学生数据结束。 设文件student.txt的内容为 101 Zhao 95 58 103 Qian 75 81 105 Sun 99 91 107 Li 80 67 运行时键盘输入:80 则生成新文件studentD.txt的内容为: 103 Qian 75 81 105 Sun 99 91 例示说明:student.txt中考试成绩在80分以上的Qian与Sun信息写到studentD.txt 三、课程设计的进度安排 熟悉文件内容 1天 整体设计和详细设计、编代码 1天 编代码、调试和测试  1天 实训报告书写 1天 演示软件   1天 四、指导书、参考资料 谭浩强著 《C程序设计》(第四版) 清华大学出版社 夏耘 吉顺如主编 《大学程序设计(C)实践手册》 复旦大学出版社 六、其他 附件为实训报告封面样张 在一些控制场合,数据传输过程中需要将 浮点数 拆分 成多个整型或者其他类型的数来进行传输,例如某控制器通过Modbus通信协议进行数据传输,但其寄存器只支持让你压short型的数据,你要在不损失精度的情况下,用2个short型数据去表示1个float型数据,我们应该怎么做呢? 因为所有数据在计算机中都是以二进制的形式储存的,因此可以考虑使用C标准库提供的memcpy将float拷贝到缓... 一.什么是 浮点数 浮点数 是与定点数相对的概念,计算机中的定点数约定小数点的位置不变,即人为约定俗成地规定了一个数小数点的位置。例如定点纯整数约定了小数点在数值位的最后。定点纯小数约定了数值位的最高位在小数点后面。 由于计算机字长的限制,当需要表示的数据有很大的数值范围时,他们不能直接用定点小数或者定点整数表示 二. 浮点数 的形式 三.规格化 浮点数 四. 浮点数 的运算 ..................
题目内容: 编写程序,从键盘输入一个不等于0的 浮点数 ,然后分别输出这个 浮点数 的符号、整数部分和小数部分。例如输入-123.456,输出应该是(按下列格式输出,需要完全一致!!!): 输入格式: 输出格式: sign:-或+ integral part: decimal fraction part:保留3位小数 输入样例: -123.456 输出样例: sign:- integral part:123 decimal fraction part:0.456 代码如下: //编写程序,从键盘输入
C语言 的词法分析器是一个程序,它将C程序的源代码作为输入并将其 分解 为一系列记号(Token),这些记号是C程序的基本构建块。词法分析器将源代码分成一个个单独的单元,称为记号,它们代表了程序中的不同元素,例如关键字、标识符、运算符、常量、分隔符等。 词法分析器通常使用一个称为词法规则的模板来识别和提取记号。这些规则描述了不同类型的记号的模式,并告诉词法分析器如何将输入的字符序列映射到这些记号上。 例如,以下是 C语言 中的一些常见记号: - 关键字:if、else、for、while、do、switch、case、default、break、continue、return等。 - 标识符:由字母、数字和下划线组成的字符串,用于表示变量、函数、结构体等名称。 - 运算符:+、-、*、/、%、=、==、!=、>、<、>=、<=、&&、||等。 - 常量:整数、 浮点数 、字符和字符串字面量等。 - 分隔符:括号、分号、逗号、冒号等。 词法分析器将输入的源代码 分解 成一个个记号,并将它们作为输出传递给下一个阶段的编译器,即语法分析器。