C C++实习编程指南.doc_第1页
C C++实习编程指南.doc_第2页
C C++实习编程指南.doc_第3页
C C++实习编程指南.doc_第4页
C C++实习编程指南.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

附录 C/C+实习编程指南 计算方法中的各种算法,都是很好的编程素材。在学习算法设计的同时,上机实现算法,不但可以提高对算法的理解与认识,而且还能提高计算机程序设计能力。 本站内的C/C+经典算法中列出了与书上相对应的一些典型算法的程序实例,每个程序都是完整的,可以单独运行。读者对程序实例调试通过后,可以做各种数值试验。 本附录第1节介绍实习环境,第2节概述标准C语言的有关内容,第3节介绍C语言中一些与ANSI C/C+ 有关的输入/输出函数,第4节介绍有关Borland C/C+ 3.1(Turbo C/C+ 2.0/3.0)和VISUAL C/C+6.0(Console程序)的集成环境、一些编程和调试经验以及实习过程中所遇到的常见问题的解答等内容,第5节给出Visual C/C+6.0编程学习PPT课件的一个链接。 1.1 实习环境基于DOS的Borland C/C+ 3.1 或Turbo C/C+ 3.0是上世纪的一种理想的程序开发平台。目前基于窗口的Visual C/C+ 6.0(建议使用英文版)及以上使用更方便。 本网站上的算法范例都是基于这二平台,并在这一平台上调试通过。如果用老的TC(或BC),则TC 2.0 只支持C,故应该选用TC 3.0或BC 3.1.另外如果不涉及到图型操作, 只编写标准的ANSI C/C+程序, 则选择VC 6.0(Console程序)是最好的. 程序范例中的各个子函数,描述算法的子函数只用到标准C语句,而与Console输入/输出有关的程序放在专用于输入/输出的子函数中。这样增强了程序的通用性、与设备的无关性。 1.2 标准C/C+语言概述1.2.1 程序实例的整体结构/程序整体说明/头文件#include #include #include #include #include #include #include /常量定义#define N10#definePI3.15159265/函数原型float f(float x);void LineColor(int x1,int y1,int x2,int y2,int color);/数据类型、结构类型定义typedef struct float x;float y; POINT;/全局变量定义/若干与输入输出设备有关的函数定义void LineColor(int x1,int y1,int x2,int y2,int Color)setcolor(Color);line(x1,y1,x2,y2);/若干用于算法输入输出的函数定义/若干关干算法实现的函数定义/主程序void main()/变量和数组的定义/原始数据输入函数调用/关于算法的函数调用/结果输出函数调用1.2.2 用于描述算法的标准C语言语句列表 语句 单个语句 或 复合语句。(注:单个赋值语句、函数调用语句、do-while 语句等需用“;”结束。) 复合语句 语句序列用括起来,即语句1;语句2;语句n;。 1. 赋值语句 变量=表达式; 2. 函数调用语句 函数名(实参1,实参2,); 3. if语句 if(表达式)语句 或 if(表达式)语句else 语句; if 语句中的表达式可以是逻辑表达式或算术表达式,C语言的内部实现把表达式的值作为一个整型量来处理的,当表达式的值等于0时,条件不满足,非0时则条件满足。 4. switch 语句 switch(整型表达式) case 整型常量: 语句 break; /一般情况下用break跳出switch语句,否则继续向下执行。 case 整型常量: 语句 break; /一般情况下用break跳出switch语句,否则继续向下执行。 case 整型常量: 语句 break; /一般情况下用break跳出switch语句,否则继续向下执行。 default: /default 根据需要可写也可以不写。 语句 /如果有的话,则当前面的case都不满足时执行这一分支。 break; 5. 循环语句 for语句 for(表达式1;表达式2;表达式3)语句 while 语句 while(表达式)语句 do-while 语句 do 语句 while(表达式); 同一个计算问题的三种循环实现,从中注意循环控制变量的初值设置与修改: 例如编写数组a中前N个数求和的C函数; /用for语句 float Sum1(float a,int N) int i; float Sum; Sum=0; for(i=0;iN;+i)Sum+=ai; return(Sum); /用while语句 float Sum2(float a,int N) int i; float Sum; Sum=0; i=0; while(i=0) /因为do-while先执行循环体 do Sum+=ai; +i; while(iN) return(Sum); 6. break语句、continue语句、return语句与exit()函数 break语句用在switch中则跳出此switch语句,用在循环语句中则跳出该层循环。 continue语句用在循环语句中则转到表达式中执行。 return 语句退出子函数的执行,返回到被调用函数中,并可带返回值。 如果程序中任何地方调用exit(0),则整个程序正常退出。 在结构化程序设计中避免使用goto语句的情况下,这几个语句很有用。附录中的程序不用goto语句。1.2.3 常用标准C语言数学函数列表 double sin(double x); double cos(double x); double tan(double x); double asin(double x); double acos(double x); double atan(double x); double exp(double x); double fabs(double x); double log(double x); double log10(double x); double pow(double x,double y); double sqrt(double x); 1.2.4 变量、数组与函数调用 一个变量或数组元素在C语言中有二个属性,一是其值,二是其地址。例如,定义a是一个整型变量 integer a;则其值为a,其地址为&a。&为C语言取地址运算符。如果定义a是一个整型变量地址(所谓指针变量),即 integer *a;则a为地址,而*a为值。*为C语言取值运算符。 对于数组,数组名为该数组第一个元素的地址,例如,定义 integer a100;则a等于&a0,即数组存贮在内存中的起始地址,各数组元素依下标从小到大的次序存放在连续的内存单元中。 如果要在函数定义的形参中定义一个多维数组,此时这一多维数组除第一维之外,都必须说明大小,以使编译程序能够正确地计算数组元素的内存地址,例如,void function1(float matrix a100,float Array3d20100) 其中a为一个二维数组,Array3d为一个三维数组。这可能会在程序设计中带来不便。解决办法是动态申请内存。为了算法描述的清淅起见,范例程序中没有使用动态内存申请。 如果一个函数要用形参返回结果,则这一形参必须定义为地址,例如,定义void fun1(float *a) /形参a为地址 *a=10;那么在调用函数void fun2() float b; fun1(&b); printf(“%f”,b); 在调用fun1后变量b的值为10; 如果形参为数组,则直接用数组名,因为数组名本身就是地址,例如,定义void fun3(float a,float b20) a1=10; b019=2;那么在调用函数void fun4() float c100,d5020; fun3(c,d); pintf(“%f%f”,a1,b09)在调用fun3后数组元素a1的值为10,数组元素b09的值为2; 1.3 基于DOS的Borland C/C+ 3.1 或Turbo C/C+ 3.0的输入/输出函数 标准C中scanf()/printf()是两个常用的输入/输出函数。为了增加输入/输出的灵活性和多样性,基于DOS的Borland C/C+ 3.1 或Turbo C/C+ 3.0中有大量其它输入/输出函数。这里所列出的是一些经常用到的函数。 键盘输入函数: char getch() 等待并从键盘输入一个ASCII码字符,无回显。 unsigned int bioskey(int a) 等待并从键盘输入一个扫描码,无回显;例如,程序段 unsigned keyin; keyin=bioskey(0) ; 如果输入的是ESC键,则keyin等于0x011b; 如果输入的是F1键,则keyin等于ox3b00 等等。 如果输入的是ASCII码键,则bioskey(0)所返回值的低8位为该键的ASCII码,如果输入的是功能键,则返回的后8位是0,用前8位区分是什么功能键。 屏幕作图函数: initgraph(); /图形初始化 closegraph(); /关闭图形方式 cleardevice(); /清屏 setcolor(); /设置颜色 putpixel(); /画点 line(); /画线 circle(); /画圆 rectangle(); /画矩形 outtextxy(); /文本输出 具体格式和使用方法可以查阅集成环境中的Help菜单。1.4 基于DOS的Borland C/C+ 3.1 或Turbo C/C+ 3.0集成环境、编程调试经验和问题解答 Borland C/C+ 3.1 或Turbo C/C+ 3.0集成环境的使用非常方便,所需功能都可在下拉菜单中找到。 下列几项系统参数经常重新设置: 编绎模式 在菜单Options-Code generation-Model下,一般可以选择huge模式,这样可以定义几个64K的静态数据。 图形库选项 如果在link时找不到所有有关图形的函数,则在菜单Options-Linker-Libraries-Libraries下,把Graphics library选为X即可。 目录设置 如果在compile时找不到头文件或link时找不到库文件,则在菜单Options-Directories下,输入正确的存放头文件目录路径和库函数文件目录路径并清除源文件目录和输出文件目录。 一些常用功能的快捷键如下: F1 帮助。 F2 存盘一次。 F3 打开新文件。 Alt-F9 编绎。 Ctrl-F9 编绎连接并运行。 F7 单步执行,每按一次执行一条语句, 当碰到函数调用语句时,进入到函数内部中去。 F8 单步执行,每按一次执行一条语句, 当碰到函数调用语句时,不进入。 F4 程序从当前暂停位置执行到当前光标处后暂停。 Ctrl-F7 观察当前正在跟踪执行的程序中的变量值。 Ctrl-F2 停止执行正在调试运行的程序。 Alt-F5 切换到用户的输出屏幕,按任意键返回。 Ctrl-Break 加回车 强制中断(如遇到死循环)。 以上功能键在程序查错时极其有用。如果静态查错无效,则应该用这一动态查错方法来确定出错语句的位置。 程序调试中经常遇到且较难排除的报错有 “divided by 0” ,“float overflow”,“illegal intrstruction”等,引起这些问题的原因主要有以下几点: 1. 除法运算“/”的除数是0,这一问题找所有进行除法运算的语句对除数在程序执行过程中是否会变成0或接近0进行动态或静态分析。 2. 对数组元素赋值时其数组下标是否会超出下标的最大值,特别当下标是一个表达式,并在程序执行中动态计算。C语言数组的下标范围是从0开始的,例如对float a100,下标引用范围应该从099;向下或向上都会把程序的其它地方冲毁,由此引起各种各样的报错。 3. 在一个函数内局部变量(非静

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论