1、7 月 5 日VB 与 C 的区别 (2)表格左边是 VB 内容,右边是 C 语言的内容,下同。 基本认识 VB 是面向对象的,基于 windows 操作平台下的可视化编程语言。用户可以用鼠标编写代码。 C 语言是面向过程的程序语言。 Turbo C 是基于 DOS 平台的 C 编译系统。用户无法使用鼠标块操作。 Ctrl+KB 块头标记; Ctrl+KK 块尾标记;Ctrl+KC 块复制; Ctrl+KH 取消;Ctrl+KV 块移动 快捷键 打开工程 Ctrl+O 新建工程 Ctrl+N 保存 Form1:Ctrl+S 退出:Alt+Q 运行:F5 装载文件(Load ):F3 Alt+F
2、5: 查看结果 保存(Save): F2 激活主菜单: F10 退出 TC 返回 DOS(Quit): Alt+X Ctrl+F9:编译+连接+ 运行 Esc: 返回上一级菜单 运算符 算术运算符(幂 -取负 *乘法 /浮点除法 整数除法 Mod 取模 +加法 -减法) 字符串连接运算符( 直接说明结构变量。 struct 成员表列 变量名表列; 易混淆语句 用 DefType 语句定义变量类型: 格式:DefType 字母范围 注意:Def 和类型标志之间不要有空格。字母范围用“字母字母”的形式表示。 实例:DefDbl A-B, X-Z 把以字母 A、B、X 、Y 、Z 开头的所有变量名定
3、义为双精度类型。 用 typedef 声明新的类型名来代替已有的类型名。 实例:typedef int INTEGER; typedef float REAL; 则:以下两行等价: a) int i, j; float a, b; b) INTER|GER i, j; REAL a, b; 用 typedef 亦可声明结构体类型。 注释语句 注释部分对程序的运行不起作用。 VB 中的注释是“Rem”或一个撇号 “”。 注释部分必须用“/*”和“*/ ”括起来。 “/*”和“*/”必须成对地出现, “/”和“*”之间不可有空格。可多行注释。 程序语句的书写格式 在一般情况下,程序语句要按照“一行
4、一句,一句一行”的规则书写。 但 VB 允许使用复合语句行,即把几个语句放在一行中,各语句之间用冒号(:)隔开。在输入程序时,也可以通过续行符把程序分别放在几行中。VB 中续行符是下划线(_) 。注意:续行符与它前面的字符之间至少要有一个空格。 C 程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。C 程序没有行号。 标点 一般在一行输入一条语句,每条语句行以回车键结束。Print 方法: 格式: 对象名.Print表达式表 ,| ; 使用逗号:标准输出格式,又称分区输出版式,以 14 个字符宽度划为一个区段,每个数据项位置占一个区段。 使用分号:以紧凑输出格式输出,每个数值数
5、据前面有一个符号位,后面有一个空格。 每个语句和数据定义的最后必须有一个分号。 分号是 C 语句的必要组成部分。分号不可少。即使是程序中最后一个语句也应包含分号。 关于标点的几个注意事项 注意:参数缺省时逗号不可丢。 MsgBox ( “除数为 0”, , “运算提示”) 提示信息 图标按钮类型值缺省 标题 注意:不要在不该加分号的地方加分号。在if、for、 while 语句中,不要画蛇添足多加分号。 错误:if (ab); for (; ; ); while (i y , x , y) End Function 实例:printstar ( ) main ( ) int max (int
6、x, int y) float add (float x, float y) int max (int x, int y) int z; z = x y ? x : y ; return(z); 调用格式 Sub 过程的调用格式: Call 过程名(实参表) 过程名 实际参数 Function 过程的调用格式: 函数过程名(实参表) 实例:Call test (n,10) Test n,10 Comb = fact(n)/(fact(m)*fact(n-m) 调用 Sub 过程相当于执行一个语句,不直接返回值;而调用 Function 过程要返回一个值,因此可以像内部函数一样在表达式中使用。由
7、 Function 过程返回的值赋给了 “过程名” 。 函数调用的一般形式为:函数名(实参表列) ; 按函数在程序中出现的位置来分,可以有以下三种函数调用方式: 函数语句。把函数调用作为一个语句,这时不要求函数带回值,只要求函数完成一定的操作(类似于 VB 中的 Sub 过程调用) ; 函数表达式。这时要求函数带回一个确定的值以参加表达式的运算。 (类似 VB 中Function 过程的调用) ; 函数参数。函数调用作为一个函数的实参。函数调用作为函数的参数,实质上也是函数表达式形式调用的一种,因为函数的参数本来就要求是表达式形式。 实例:printstar (); c=2*max (a, b
8、); m=max (a, max (b, c); printf (“%d”, max (a, b); 实参和行参之间的传送 在 VB 中参数传送有两种方式:“传值”和“传地址” 。 传值:单向传送。行参的改变不影响实参的值。 (类似于 C 语言实参和行参的传送。 ) 传地址:行参与实参共用一个地址,共享一个存储单元。行参的改变会导致实参的值也跟着变化。 (类似 C 语言指针的概念) 举例: Private Sub Command1_Click() Dim a As Integer, b As Integer a = Val(InputBox(“请输入字母 a 值“) b = Val(Input
9、Box(“请输入字母 b 值“) If a b Then Call swap(a, b) Print “max=“; a, “min=“; b End Sub 注意区别 Sub swap(x As Integer, y As Integer) temp = x x = y y = temp End Sub 输入:4 9 结果:max=9, min=4 C 语言中实参和行参之间的传递是单向的“值传递”方式。 若想通过调用函数用行参来改变实参的值,必须通过用指针作为参数来实现。 举例: swap(int x,int y) int temp; temp = x; x = y; y = temp; m
10、ain() int a,b; scanf(“%d%d“, if (ab)swap(a,b); printf(“max=%d,min=%d“,a,b); getch(); 输入:4 9 结果:max=4 , min=9 返回值研究 函数过程(Function 过程)有且只有一个返回值。 子程序过程(Sub 过程)不直接返回值。但可以通过在 Sub 语句的参数表中增加形参的方式来带回返回值。 由于一个 Function 过程只能有一个过程名,也因此只能带回一个返回值。而 Sub 过程通过增添参数的方式可以带回任意多个返回值。 因此可以说,凡是能够用 Function 过程实现的程序,都可以用 Su
11、b 过程来实现。由于返回值个数的限制导致 Function 过程不能实现的可以通过 Sub 过程来实现。 因此 Sub 过程的使用范围比 Function 过程更广泛。 (其实这两种过程都可以利用全局变量带回多个返回值。 ) 函数的调用可以(而且是只可以)得到一个返回值(即函数值) 。 有时可以利用全局变量增加与函数联系的渠道,从函数中得到一个以上的返回值。 可以运用指针变量做参数,得到多个变化了的值。详见谭浩强编著.C 程序设计(第二版)第 210 页例 10.4。七指针 关于指针 VB 中没有指针变量。但 VB 中许多内容都无形中涉及了指针的概念。 比如: 数组的赋值“b=a”语句。 详见
12、我校 VB 课本黎明,刘成安编著.Visual Basic 程序设计教程.第 100 页 6.4.4 VB 中行参与实参按地址传送时。 EOF 函数,指针是否指向文件末尾。 (此处是我自己总结的,不知道恰不恰当,欢迎指正!) 指针是 C 语言中一个很重要的概念。 C 中有专门的指针类型变量。 正确而灵活地使用指针能够有效地表达复杂的数据结构;能动态分配内存;能方便地使用字符串;有效而方便到使用数组;在调用函数时得到多于一个的值;能直接处理内存地址等。 可以说,不掌握指针就是没有掌握 C 的精华。 具体学习详见谭浩强编著.C 程序设计(第二版)的 10 章。 利用指针来访问内存是 VB 语言所办
13、不到的。VB 与 C 的区别 (6)八文件 文件的组成单元 VB 文件由记录组成。 记录由字段组成,字段由字符组成。 在 VB 中,以记录为单位处理数据。 C 语言中文件并不是由记录(record)组成的(这是和 PASCAL 或其他高级语言不同的) 。一个 C 文件是一个字节流或二进制流。 在 C 语言中对文件的存取是以字符(字节)为单位的。我们把这种文件称为流式文件。 C 语言允许对文件存取一个字符,这就增加了处理的灵活性。 文件扩展名 VB 在工程资源管理器窗口中,含有一个应用程序所需要的文件的清单。 工程资源管理器窗口中的文件可以分为 6 类,即窗体文件(.frm)、程序模块文件(.b
14、as) 、类模块文件(.cls) 、工程文件(.vbp)、工程组文件(.vbg) 和资源文件(.res)。 源程序文件(.C)经过编译得到目标程序文件(.obj ) ,再将目标程序文件输入内存,与系统提供的库函数等连接,得到可执行的目标程序文件(.exe),最后把目标程序文件(.exe)调入内存并使之运行。文件的打开和关闭 文件的打开或创建: 格式:Open “文件整个路径和文件名” For 方式Access 存取类型锁定 As #文件号Len=记录长度 方式:顺序文件:Append Output Input 随机文件:Random 二进制文件:Binary 文件的关闭: 格式:Close #
15、文件号 ,#文件号 实例:Open “c:abcabcfile.dat” For Input As #1 Close #1 文件的打开: FILE *fp; fp= fopen (“文件名” , “使用文件方式 ”); 文件的关闭: fclose(文件指针) ; 实例:FILE*fp; fp = fopen (“a1”,”r”); fclose (fp); 检测是否到文件末尾的函数 EOF 函数。格式:EOF(文件号) EOF 函数返回被打开文件是否到了文件末尾,返回值为 True,表示到达文件末尾;否则返回值为 False。 实例:顺序读出数据并显示在窗体上。 While Not EOF(1
16、) Input #1, temp Wend Do While Not EOF(1) OneChar=Input(1,#1) Print OneChar; Loop feof 函数。 格式: feof(文件指针) 用来测试文件指针所指向的文件当前状态是否“文件结束” 。如果文件结束,函数的值为“真” (非 0) ,否则为假(0) 。 实例: 将一个磁盘文件中信息复制到另一个磁盘文件中。 while ( ! feof ( fp1 ) fputc (fgetc ( fp1 ) , fp2) ; 文件的读写 顺序文件的读操作: Input #语句:Input #文件号,变量列表 Input$函数:In
17、put$(n , #文件号) Line Input# 语句:Line Input #文件号,字符串变量 随机文件的读操作: Get #文件号, 记录号,变量名 二进制文件的读操作: Get #文件号, 位置,变量名 顺序文件的写操作: Print #语句: Print #文件号,Spc(n)|Tab(n)表达式表,|; Write 语句:Write #文件号,表达式表 随机文件的写操作:Put #文件号,记录号 ,变量名 二进制文件的写操作:Put #文件号,位置 ,变量名 C 语言中关于文件读写的主要函数:fputc 函数 putc (ch , fp); fgetc 函数 ch=fgetc (fp); fread 函数 fread (buffer , size , count , fp) ; fwrite 函数 fwrite (buffer , size , count , fp); fprintf 函数 fprintf (fp , 格式字符串,输出表列 ); fscanf 函数 fscanf (fp,格式字符串,输入表列); fgets 函数 fgets (字符数组,n,fp); fputs 函数 fputs (字符数组, fp);