第一篇:C 实例教学(基础知识-03)
在本节以前给出的程序都是由一个函数组成的,实际上,一个真正的C++程序几乎都包含若干个由用户自定义的函数。
在下面的几个程序实例中,都调用了由用户定义的函数。
4.1 三次方程求根
按照Cardan公式,计算三次方程x3+px+q=0的一个实根的公式为:
在计算实根xr的程序中,把计算一个浮点数的立方根的程序作为一个用户定义的函数,而在主程序中两次调用这个函数。
程序代码如下: // program 4_1 #include
----------------------
4.2 四元排序程序
对于任意的四个整数,经过处理,令其按从大到小的顺序排序。// program 4_2.cpp #include Input 4 integers: 17 25 8 41 41 25 17 8 说明: 这是一个简单的程序。函数swap()是void类型,这表明它没有返回值,所有用户定义函数都必须指明返回类型,无返回值的函数必须说明为void类型。 函数swpa()有两个整型参数,在参数表中的符号'&'表明参数x和y是“引用参数”。这与上节中的float x不同,后者称为赋值参数。引用参数和赋值参数在使用中主要有下面几点区别: 1)在形参表中增加符号'&' 2)在调用该函数时,引用参数对应的实参必须是指定类型的变量。如调用swap(a,b)中的实参a,b都是整型变量。而在上节中的赋值参数却是一个表达式,表达式的念是包含了常量、变量和一般的表达式。比如在本例中,写成swap(a+b,a-c)或swap(41,a*a+d*d)等都是错误的。 引用参数和引用调用是C++语言的一种重要功能,如果swap()的两个参数说明为赋值形参,会出现什么情况? 本例中的排序并不是一个好的方法,实际上,关于排序有很多好的算法可用。 注意:在编程中函数的作用是太重要了,不过,函数有利于编程、用利于程序结构,却不能提高程序的效率。相反,在函数调用时由于要保留“现场”以备在函数计算完成返回时继续运行原来的程序。因此,函数的每次调用,系统都要额外在时间和空间上付出一些代价。为了解决这个问题,C++语言设置了内联函数“inline“,其具体规定是: 1)在函数定义和说明之前增加关键字inline: inline void swap(int &x,int &y){......} 2)调用内联函数与调用非内联函数的调用效果完全相同,不同的是,在对源程序进行编译时,对于非内联函数,其程序代码只有一份,在每个调用语句处,通过转移控制语句来运行,然后返回。 对于内联函数处理则不同,它是把函数体的程序代码放到每个调用该函数的语句处。例如可以把swap()函数说明为内联的: inline void swap(int &x,int &y){ int temp;temp=x;x=y;y=temp;} 经过这一改动,主函数仍不变,通过编译生成的目标程序将使swap()的函数体程序代码在其中出现6次。 由此,我们可以看出,采用内联函数一方面在源程序的编写中仍可因使用函数而使程序简短清晰,另一方面在执行中又不必付出调用过程的时间和空间代价,唯一的代价是目标程序加长了。 一般说,调用次数不多的函数或函数体规模较大的函数,其调用代价相对可以忽略,不宜采内联函数。而函数体积短小且又频繁被调用的函数可以说明为内联函数。例如对于更多个整数的排序算法,如果需要调用swap()的话,那么swap()函数应该说明为内联的。 --------------------------- 4.3 ”三色冰激淋“程序 这是一个由冰激淋商提出来的问题,有28种颜色的原料,可以组合成多少种三色冰激淋。一种答案是有 19656=28*27*26种,称为(28,3)的排列数A 3 28,它是把同样三种颜色的不同排列数也计算进来了,另一答案是3276=19656/3!种,称为(28,4)的组合数。其中28为元素数,3为选择数。下面的程序对输入的元素数和选择数计算相对应的排列数和组合数。// program 4_3.cpp #include cout<<”C(“< 程序运行结果如下: 说明:这个程序中很多地方使用了复合运算符,如*=、--、++等,它们的使用有利于使程序简短、书写方便,不过应准确掌握其应用方法。 *=是赋值符与=与乘法运算符*复合而成,它是一种双止运算符,a*=b等价于a=a*b,也可以把它看作为a=a*b的简化写法。 --和++称为减量和增量运算符,属于单目运算符。a--等价于a=a-1,--a也等价于a=a-1,a--与--a的区别只有当与其它运算共同组成表达式时才能显现出来。例如answer*=--elements是一个”运算“与”乘赋值“组合成的表达式,其运算顺序是: 首先完成--elements,即elements=elements-1 然后完成answer*=elements,即answer=answer*elements 设执行之前answer=20,elements=10,则执行answer*=--elements之后,首先令elements=9,然后answer=20*9=180.再来看一下value*=number--,运算顺序为: 首先完成 value*=number即value=value*number, 然后完成 number--.设执行前value=20,number=10,则执行value*=number--后,首先value=20*10=200,然后number=10-1=9.由此可以看出--a与a--;++a与a++之间的区别了。factorial()函数也可以采用递归函数的方式设计,即在函数体内又(直接或间接地)调用该函数本身,函数定义如下: long factorial(int number){ if(number<=1)return 1;else return number*factorial(number-1);} 这个程序与n!的数学定义式 1 n<=1 n!= n+(n-1)!n>1 相吻合。 递归程序往往使程序思路清晰,易编易读。 C语言基础知识:实例讲解 这篇文章旨在让各位对 C 有个总体的认识,有看不懂的地方请不必太在意,只要记住就可以了,继续往下学下去就会明白的。 首先请看下面这个简单的 C 程序,猜猜它会做些什么。猜不出来也没关系,后面会有详细的解说。 #include int main(void) /* 一个简单的程序 */ { intnum; /* 声明一个名叫num的变量 */ num = 1; /* 将 1 赋值给num */ printf(“This is a simple C program.”);/* 调用printf函数 */ printf(“My favorite number is %d because it is first.”, num); return 0; } 在对这个程序进行详细说明之前,我想先请您用编译器把它编译成可执行文件,并且运行,看看运行结果和您的猜想是否一致。如果不懂如何进行编译,请参考以下文章: 下面,我将分两步对这个程序进行详细的讲解。第一步是概要说明,也就是对程序中每一行代码的含义作简单讲解,以帮助您对这个程序有一个大致的理解。第二步是详细说明,也就是程序中的每一行代码进行详细的讲解,以加深您的理解。 一、概要说明 #include 把另外一个文件包含进来 这行代码命令编译器把头文件(.h 文件)stdio.h中的内容包含到我们的 程序中。stdio.h是C语言的标准头文件之一,提供对键盘输入和显示输出等的 支持。要使用printf函数,就应该包含这个头文件。顺带一提,stdio代表 standard input/output,也就是标准输入输出的意思。 int main(void) <- 函数头 C 程序由一个或多个函数组成。我们的这个程序只有一个函数:main 函数。圆括号()表明 main 是一个函数;int表明 main 函数返回一个整数;void 表明 main 函数不接受任何参数。在此,请您紧记,int main(void)是 ISO/ANSI C 标准中定义的 main 函数定义方法之一。 /* a simple program */ <- 注释 /* 和 */ 用于对程序进行注释说明,帮助读者更快更好地理解程序。编译器 会忽略 /* 和 */ 之间的内容(包括 /* 和 */),不会对它们进行编译。 { <- 函数体的开端 这个开大括弧 { 标志着函数体开始。函数体以闭大括弧 } 结束。在 { 和 } 之间的语句都属于这个函数。 intnum; <- 声明变量num 这个语句表明我们声明了一个名叫num的变量。int表明这个变量为 整型变量。 num = 1; <- 赋值语句 这个语句将 1 赋值给变量num。执行这个语句后,num的值等于 1。 printf(“This is a simple C program.”); <- 函数调用语句 printf函数是 C 语言标准函数库里的函数。这个语句调用printf函数在 屏幕上显示“This is a simple C program.”,并且换行。是换行符,它提示 printf开始新的一行,也就是将光标移动到下一行的开端。如果上面的语句中没有,那就不会换行,而且光标会紧跟在“This is a simple program.”后面。 printf(“My favorite number is %d because it is first.”, num); %d 告诉printf用num的值替换掉 %d,并且以整数形式显示num的值。因为num的值为 1,所以这个语句在屏幕上显示“My favorite number is 1 because it is first.”,并且换行。 return 0; <- 返回语句 C 程序应该返回一个数值给它的调用者。0 代表程序无误退出;而其它数字的含义 则由系统决定。通常,非零(如-1)代表程序运行中遇到某种错误而退出。 } <- 函数体结束 函数体以闭大括弧 } 结束。 二、详细说明 现在,让我们进一步来了解每一行代码的含义。下面的内容很基础,也很重要,必须认真弄懂,牢牢掌握。 1.#include 预处理指令和头文件 在编译器对我们写的源程序进行编译之前,预处理器会对我们的写的源代码 进行必要的处理,称为预处理。#include 就是一个预处理指令,它命令预处理器 进行的预处理是:把特定的头文件包含到我们的源代码里。 #include #include stdio.h是 C 语言标准中定义了的头文件,它包含着输入输出函数的信息。 所有 C 编译器都应该有这个头文件,这是 ANSI/ISO C 标准中规定的。当然,ANSI/ISO C 规定的编译器必须提供的头文件可不止这么一个。标准还规定了许多 别的头文件,那些我们会在以后慢慢学到。 有些程序需要包含stdio.h,而有些不需要。如果上面这个例子中没有使用 printf函数,那就不需要包含stdio.h。 头文件中包含着编译器进行编译时所需的信息。头文件中可能指明了函数名和 函数调用方法,但是这些函数的实现代码并不在头文件中,而是在预先编译好了的 库文件里。 链接器负责在库文件中寻找我们的程序所需的代码,并且把那些代码和我们写的 程序进行链接,从而将我的写的程序链接成可执行文件。一句话,头文件用于指导 编译器正确地将我们写的源程序编译成可执行文件。 2.main 函数 在 C 语言中,main 函数是主函数。每个 C 程序都必须有且只能有一个 main 函数(主函数)!C 程序从 main 函数开始执行,并且在 main 函数中结束。int是 main 函数的返回值类型,它表明 main 函数应该返回一个整数给程序的 调用者(如操作系统)。 如果您想了解更多关于 main 函数的东西,请点击下面的链接: C/C++ 误区一:void main 3.注释 /* a simple program */ /* */ 之间的内容都是注释。对程序进行适当的注释可以帮助读者(包括您自己) 更快更好地理解您写的代码。注释可以在源程序中的任何地方书写。/* 和 */ 之间的 任何内容(包括 /* 和 */)都会被编译器忽略掉。注意:/ 和 * 必须紧挨在一起,它们之间不能有空格。 /* 我是注释 */ /*我是 跨行注释*/ /* 我也是注释 */ 以上的注释都是合法的;但下面的注释是非法的,因为没写注释结束标记 */。 /* 非法,没有注释结束标记 下面这个注释可能会出乎你的意料: /* 我是注释开始标记 /* 哦哦,我不是注释开始标记 我是注释结束标记,我和第一个 /* 匹配,而不是和第二个 /* 匹配。*/ 上面这个注释中,注释结束标记 */ 和第一个 /* 匹配,它们之间的内容 都被视为注释。 C99 中增加了另外一种注释方式,这种注释方式使用 // 作为注释符,和 // 处于同一行,并且在 // 右边的内容都被当作注释。/ 和 / 之间不能有空格。 // 我是注释 intrigue; //注释放在这里也是合法的 上面的注释在 C99 中是合法的,但是在 C89 中是非法的。也就是说,老旧的 编译器可能不支持 // 注释符。VC6 支持 //,TC2 不支持。 4.大括号与函数体 C 语言中,所有函数都以大括弧({ })作为界定符。函数体从开大括弧 { 开始,以闭大括弧 } 结束。在后续教程中,我会对函数进行更详细的讲解。 5.intnum; 这个语句声明了变量num。这一行末尾的分号(;)表明这一行 是一个语句。;是语句的一部分,单独一个;也是一个合法的 C 语句。 int是 C 语言中的一个关键字,它代表 C 语言里的一种基本数据类型:整型。 关键字是语言的保留字,不能用作其它用途。例如:我们不能关键字来做变量名或者 函数名。 标识符是指我们为变量或函数等取的名字。在这个语句中,num就是标识符。 C 语言中,所有变量在使用前都必须声明。C89 中,变量的声明必须位于 函数体或者程序块的开端。例如: int main(void)/* C89 */ { /* 函数体开始 */ int doors;int dogs;doors = 5;dogs = 3; { /* 程序块开始 */ int dig;int dug;dig = 6;dug = 8; } /* 程序块结束 */ return 0; } /* 函数体结束 */ 而在 C99 中,声明可以位于函数体或者程序块的任何地方。但是,变量仍然 需要在声明之后才可使用。例如: int main(void)/* C99 */ { /* 函数体开始 */ int doors;doors = 5; { /* 程序块开始 */ int dig;dig = 6;int dug;dug = 8; } /* 程序块结束 */ int dogs;dogs = 3; return 0; } /* 函数体结束 */ 上面的程序在 C99 中是合法的,但是在 C89 中却是非法的。当前支持C99 的 编译器不多,所以上面的代码您的编译器很有可能编译不了。故而,为了使我们的 代码具有良好的可移植性,我们应该尽可能少用,甚至不用 C99 中的新特性。 6.赋值 num = 1;赋值是 C 语言中的一种基本操作。上面的语句是一个赋值语句,它的含义 是:将 1 赋值给变量num。赋值操作完成后,num的值等于 1。 7.printf函数 printf(“This is a simple C program.”);printf(“My favorite number is %d because it is first.”, num); 这两行代码都调用了printf函数。printf是一个标准 C 函数,也就是说,它是 C 语言标准函数库里定义了的函数。圆括号()表明printf是一个函数,圆括号里的内容会被传递给printf函数。例如,上面第一行代码把“This is a simple C program.”(不包括双引号)传递给printf函数,然后由printf 函数把这些信息显示于显示器。是换行符,它提示printf开始新的一行。正因为是换行符,所以不会显示出来,而是进行了换行。如果上面的语句中 没有,那就不会换行。 上面代码第二行中的 %d 告诉printf用num的值替换掉 %d,并且以 整数形式显示num的值。 %d 被称为占位符,它告诉printf应该在什么地方显示num的值。% 用于 提醒printf在此处显示一个变量的值(本例中是num的值);d 告诉printf以 十进制整数的形式显示num的值。 8.return(返回)语句 return 0;这个 return 语句是我们程序中的最后一个语句。int main(void)中的int 表示 main 函数应该返回一个整数,所以我们要使用 return 语句来返回一个整数。如果您想了解更多关于返回值的东西,请点击下面链接,查看文章的第四点。 C/C++ 误区一:void main 上面所说的某些内容您暂时可能还不太理解,但是不用害怕,牢牢地把它们记住,然后继续往下学吧!随着学习的深入,就会逐渐搞明白。现阶段只要有这个概念就足够了。 C语言程序实例讲解(二)首先请看以下代码,并且和我们的第一个 C 程序比较比较,看看这个程序新增了什么知识点。 /* meter2centimeters.c--以厘米为单位来表示两米 */ #include int main(void){ int meters, centimeters;meters = 2; centimeters = 100 * meters;/* 100 乘以 meters */ printf(“%d-meter is equal to %d centimeters.”, meters, centimeters);printf(“Yes, I said %d centimeters!”, 100 * meters); return 0;} 下面我们来仔细分析这个小程序。 1.文档 这段代码头部的注释标明了文件名和程序的作用,我们把这些注释称为文档。写文档是一个很好的习惯,可以帮助我们了解程序的作用。在由多个源文件组成的程序中,文档显得更为重要。由于我们目前为止所写的都是很简单的程序,您也许还不觉得写文档有多大的作用,甚至还觉得浪费时间。但是我们应该养成写文档的习惯,这对我们以后写复杂的程序很有帮助。对于复杂程序,我们应该尽可能把文档写得更详尽。可以参考以下格式: /*************************************************** * 文件名: meter2centimeters.c * 作者:Antigloss at http://stdcpp.cn * 编写日期: 05-9-9 0:00 * 最后修改日期: 05-9-9 0:00 * 功能:以厘米为单位来表示两米 * 算法: 1 米 = 100 厘米 **************************************************/ 2.多重声明 int meters, centimeters;上面那句声明语句声明了两个变量。我们可以在一句声明语句中声明任意数目的变量,只要变量名之间用逗号(,)隔开就可以了。例如下面这个语句声明了 4 个变量。int a, b, c, d; 3.乘法运算 C 语言中,* 是乘法运算符,所以 centimeters = 100 * meters;的意思是:用 100 乘以变量 meters 的值(本例中为 2),然后把相乘的结果赋值给变量 centimeters。 4.printf函数 printf(“%d-meter is equal to %d centimeters.”, meters, centimeters);上面这个语句中占位符 %d 出现了两次。第一个 %d 由变量 meters 的值替换;而第二个 %d 则由 centimeters 的值替换。注意:每个变量由逗号(,)隔开;“%d-meter is equal to %d centimeters.” 中的双引号是必须的,而且必须是英文的双引号,不能是中文的双引号。printf(“Yes, I said %d centimeters!”, 100 * meters);上面这个语句表明,用于替换占位符的不仅仅可以是变量,也可以是表达式(100 * meters 是一个乘法表达式)。 最终效果 原图(图片来自网络)Photoshop打造水灵灵的漂亮美眉教程: 1.Photoshop打开图片复制一层 2.图像-调整-匹配颜色(勾选中和.其它的不变) 图1 匹配颜色后的效果: 图2 3.图像-应用图像(以前的都是勾选的绿通道或是其它通道.这次勾选RGB通道) 图3 应用图像后的效果: 图4 4.这时就将近水灵效果了.然后我们再运用滤镜插件里的Neat Image来降低下噪点.怎么使用我就不多说了.如果没有那个插件的话可以手动磨下皮也可以的.图5 磨皮后的效果: 图6 5.虽然这个磨皮方法很受大家青睐,但是它也有它的不足之外.然后我们再用模糊工具对不足之处再处理一下。 6.再复制一层.执行图像-调整-去色 图7 7.图像-调整-反相 图8 8.将图层的混合模式改为:颜色减淡 图9 9.滤镜-其它-最小值 图10 10.下拉混合选项.按住ALT将那四个三角拉到最后 图11 11.到此效果也就出来了 图12 --本内容摘自liupengty的个人博客 http://hi.baidu.com/liupengty1/ 向作者致谢! 最前面的话 在创作中思维 前言 今天,电脑已经进入千家万户,许多父母本着“不让我的孩子输在起跑线上”的原则,对于辅导孩子学习电脑这件事,可说是相当费心,那么到底儿童学习电脑该有些什么内容呢?也成为家长们最为关心的话题。帮助少儿成为愿意使用、能够使用以及正确使用电脑科技的新新人类成员,是少儿学习电脑的主要目标。 将来的孩子必然要把计算机当做自己工作和接触世界的一个重要工具,就如同我们当年通过收音机,电视,图书,杂志来接触世界万物一样。做为家长来说,不应该对计算机产生恐惧。近来,国家也倡导孩子们“绿色上网”,而在学校也开设了信息技术课。现在大多数家长既想让孩子学习计算机,又不想让孩子沉迷于游戏,或接受不良的互联网文化。从某种程度上说,这是一个两难的问题。最好的方法,就是正确的引导和介入。 从我个人的经验上看,让孩子接触PC上的游戏,可以娱乐身心,提高智力。人对自己熟悉的东西是有把握能力的。孩子早接触游戏,就不容易上瘾。小学、初中阶段的孩子,还处在家长的教育有效期内,因此家长完全可以有效监控和引导孩子正确的使用电脑。但很多情况下,家长并不知道该怎么办,没有办法引导孩子,这本身是一个遗憾。更加不幸的是,现在有相当多的孩子,在小学、中学期间被禁止玩电脑游戏,甚至禁止使用电脑,等他或她到了大学,终于解放了,敞开来玩,这样人就荒废了。还有就是,家长首先不要游戏上瘾,否则孩子在这方面出问题的可能性就大了。 当然,让孩子玩游戏不是目的,第二步,要想让孩子不沉迷在游戏中,就要去引导,从被动的玩,到主动的创造。因此,要进一步丰富孩子的计算机知识,让他们自己动手去创作。我这里向各位家长推荐Scratch。网上有一段对Scratch的描述:刚下载了Scratch,安装运行后的几秒内,就眼前一亮,很有意思,软件会在你启动几秒后,自动测试你的操作系统版本,变换为简体中文的界面,在经过一段时间的使用和教学后,作为一名计算机老师,更是感觉有向我们的孩子们推荐的必要。孩子们首先是感兴趣,能很快上手,自己动手设计卡通作品。他们在创作过程中,学习积极性极大,想象力和创造力得到了极大的培养和锻炼。他们还把自己的作品上传到官方网站上去。他们试图去设计一些体现自己思想的作品,边做边体会,这个完全模块化的软件所带来的便捷,Scratch安装目录下带有大量的素材,能极大的满足孩子们的需求,他们有时还根据需要,自己制作素材!这个描述既贴切,又生动。 Scratch软件的优势是给孩子们提供尽可能方便的工具,让他们充分去发挥自己的想象力创作。使用scracth进行创作,孩子们不仅能学到计算机程序设计的基本方法、动画制作的基础知识,而且还能进一步深入体会我们的自然语言---汉语、英语,我们人类共同的语言----数学;Scratch创作中会用到一些数学知识,你可以只使用简单的数学,不过你的数学知识越丰富,你的创作能力越强。因此Scratch的学习能有效的提升孩子们对语、数、外的学习兴趣。 本书开始部分介绍了电脑基本构造、开关机、系统操作、常见工具软件操作说明等内容,为少儿自己动手创作动漫游戏做好准备。 本书一个突出的特点是简明易懂,写作采用了全新的图解方式,对少儿及成人均适用,是家长引导少儿正确使用电脑的指南! 第一部分电脑入门 基本电脑常规操作,略过 练习:打开Scratch自带的Projects下的作品看看。、响应键盘(1) 11、响应键盘(2) 附: 将scratch的Sb文件,转换成exe文件 最简单的方法如下: 1、下载转换程序请使用链接: http://chirp.scratchr.org/dl/ChirpCompiler-setup.exe 2、双击下载到的安装程序ChirpCompiler-setup.exe,并按提示安装ChirpCompiler。 3、安装完成后,双击桌面上的ChirpCompiler快捷图标 4、出现“Step1:Choose Scratch Project” 对话框, 选择待转的sb文件,并点击右下角的【打开】按钮 5、出现“Step2:(Optional):Chosse an Icon”对话框,点右下角的【取消】按钮 6、等待转换完成,进入【我的文档】下的【Scratch2exe文件夹】(此文件夹通常是转换完后自动打开的),双击生成的exe执行即可。完毕。 第一课 编一个“心灵感应”小游戏 我们的课程从这个小游戏开始吧。一些名词在这里不做解释,广大网友漫漫理解,或者自己去查一些资料,下面我就来介绍如何用Visual Foxpro 6.0来编制这个游戏。 1、在硬盘上建一个文件夹,例如D:DEMO。 2、启动Visual Foxpro 6.0,选择:“文件”——“新建”,出现“新建对话框”(图示1-1),文件类型选“项目”,按“新建文件”按钮,选择项目文件名“demo”(自己随便起名),保存在D:DEMO下(图示1-2),按“保存”按钮后,出现项目管理器,这样一个项目就建成了,项目名就是“demo”以后的一切操作都在这个项目内。项目管理器由两个文件组成,扩展名分别是“PJX”和“PJT”。(图示1-3)在这个项目内可以建立数据库、表单、程序、菜单等。 3、选择“文档”——“表单”,按“新建”按钮。出现(图示1-4) 4、按“新建表单”按钮,出现(图示1-5)。表单就是将来运行后出现的窗口或对话框,上图就是一个表单。下面我们就在这个表单上创建心灵感应游戏。 5、在Form1的属性(表单的属性一般在创建一个新表单后自动出现,若没有可右击表单,选择“属性”即可)中选择属性Caption(标题)将默认值“Form1”改为“心灵感应”(图示1-6),表单的标题就改为“心灵感应”。但表单的名字应叫“Form1”,要想更改请改属性——Name。 6、在d:demo下新建一文件夹pic,存入一些需要的图标、图片等,在Form1的属性中选择属性Icon的值为d:demopicmsgbox02.ico(图示1-7)。双击“Icon”或点击夹,选择msgbox02.ico图标,按“确定”按钮。 按钮,打开d:demopic文件 7、关闭表单设计器,出现(图示1-8),按“是”,出现(图示1-9),取文件名为xlgy,建一文件夹d:demoform将文件xlgy.scx保存到该文件夹里。则在项目管理器的表单中出现一个xlgy表单(图示1-10)。(你也可以全部编完再保存) 8、选中xlgy表单,按“修改”键,又返回表单编辑状态。调整表单窗口大小(可用鼠标拖拉),在表单控件工具栏的“图象”图标上点击一下,在表单上拖出一个长方形,即图片显示区域,其picture属性为d:demopicpkbm1.jpg(图示1-11); 在表单控件工具栏选“标签”图标,在表单上的图象下面拖出一个长方形,其capion属性为“本程序可以感应你在想什么。”,字体大小fontsize为“16”,你也可以设定其他属性,如:字体(fontname)、字体颜色(fontcolor)等;再建两个按钮“command1和command2”,其属性caption分别为“开始”、“退出”。(图示1-12) 9、双击“退出按钮”,在click过程中输入thisform.release或release thisform,意思为:当鼠标单击“退出”按钮时释放表单。下面你可以按!图标运行此表单,点击“退出”按钮,即可退出此表单。 10、下面我们要在“开始”按钮的click过程中输入一些命令,完成我们要做的工作。我们先做几张图片pk1.jpg(图示1-13)、pk2.jpg(图示14)、pkbm2.jpg(图示15),在“开始”按钮的click过程中输入如下命令: ThisForm.image1.picture='picpk1.jpg' &&将图片换成pk1.jpg this.caption='继续' &&将“开始”按钮名改为“继续”,因为在command1.click内,所以可用this代替thisform.command1 thisform.command2.enabled=.f.&&将“退出”按钮设为不可用 thisform.label1.caption='请在上面的扑克牌中选一张,记在心里。按继续键。' &&改变label1的内容 wait '' &&程序暂停,等你按任意键,“''”是两个单引号,不能缺少.ThisForm.image1.picture='picpkbm1.jpg' thisform.label1.caption='请你默念三遍。按继续键。' wait '' ThisForm.image1.picture='picpk2.jpg' thisform.label1.caption='我知道你记的是哪一张,我把它去掉了!' wait '' ThisForm.image1.picture='picpkbm2.jpg' thisform.label1.caption='' this.caption='再来一次' thisform.command2.enabled=.t.&&将“退出”按钮设为可用 retu &&重新运行 注: &&...为程序注释,它在程序运行时不执行。 11、到此为止,“心灵感应”就编完了,你可以运行此表单看看运行结果。 二:行程序或点击菜单、按钮等方法使它们运行。这一课,我将向大家介绍主菜单、快捷菜单和主程序。 一、主菜单的设计 1、在项目管理器中的“其它”中选中“菜单”,按“新建”按钮,出现新建菜单选择窗口(图2-1); 按“菜单”按钮,出现菜单编辑窗口,在“菜单名称”中分别输入“文件( 以上的六个菜单项中都有“<”,它的作用是建立一个热键:Alt加“<”后面的第一个英文字母,在当前窗口按“Alt+F”打开“文件”菜单,相当于鼠标点击。 2、点击游戏菜单后的“创建”按钮,编辑“游戏”的下一级菜单(图2-3),在“心灵感应”中选择“命令”,在命令框中输入“do form xlgy”,作用是打开xlgy表单。在其后面还有一个选项,点击选项按钮出现选项对话框,使“键标签”的文本框获得焦点,按Ctrl+G(图2-4)建立一个快捷键。快捷键与热键不同,热键只在当前窗口起作用,快捷键无论当前是什么窗口都起作用。例如:在主窗口中按 Ctrl+G,可以直接运行“心灵感应”表单,相当于用鼠标选择菜单中的“游戏”,再选择“心灵感应”。 3、反回到“菜单栏”,在“退出”的命令框中输入clear event命令。 4、按“预览”按钮,可以预览一下设计的菜单。 5、选择“菜单”中的“生成”,(图2-41) 出现图2-42,按“是”按钮,出现图2-43,菜单名为:main,保存在d:demo下,出现图2-44 按“生成”按钮。菜单建好了,可以关闭菜单设计器了。 二、快捷菜单的设计 1、在项目管理器中的“其它”中选中“菜单”,按“新建”按钮,出现新建菜单选择窗口,按“快捷菜单”按钮,建立快捷菜单yji.mnx:(图2-5) 2、保存菜单yji.mnx,生成菜单程序文件yji.mpr,在以后的库房管理软件中会用到。 三、主程序设计 1、选择“代码”——“程序”,按“新建”按钮,输入如下程序: CLEAR SET EXCL ON SET TALK OFF SET MESSAGE ON SET CENT ON RELEASE WINDOW 常用 &&关闭常用窗口 PUBLIC MYPATH &&定义全局变量MYPATH MYPATH=LEFT(SYS(16),RAT(“",SYS(16)))&&提取当前路径 SET DEFA TO(MYPATH)SET PATH TO data;form;pic &&指明路径 _SCREEN.backcolor=iif(mod(day(date()),2)=0,rgb(80,230,210),rgb(70,140,180))&&设置屏幕背景颜色,单、双号背景颜色不同 MODIFY WINDOW SCREEN TITLE ” xxx软件 Ver x.x 作者:王永成 “+;” 今天是:“+dtoc(date())+” “+cdow(date())&&设置主窗口标题 _SCREEN.ICON=”..picmsgbox02.ico“ &&设置主窗口图标 ZOOM WINDOW SCREEN MAX &&主窗口最大化 deactivate window ”项目管理器“ &&关闭项目管理器 do main.mpr &&运行主菜单程序 read event 2、保存主程序main.prg 3、右击主程序,选择“设置主文件”。 4、运行主程序看一看结果。 三:“猜数游戏”。 1、新建一表单csyx(图3-1),表单的caption属性为“猜数游戏”,背景颜色(BackColor)及各表单控件的字体颜色等,各位朋友可按个人的爱好选择。 2、命令按钮command1~command13的caption属性分别为:“确定”,“退格”,“新一局”,“0”...“9”。 3、文本框Text1的FontSize为26;FontColor为250,250,0;BackColor为0,128,128;ContorlSource为ctet1(变量ctet1的值与text1的值相关联)。 4、文本框Text2的FontColor为250,250,0;ContorlSource为jlun;BackStyle为“0-透明”;BorderStyle为“0-无”。 5、文本框t1~t10,zq1~zq10,cw1~cw10(name=t1...,zq1...,cw1...cw10),(controlsource=t1...),FontColor为250,250,0;BackStyle为“0-透明”;BorderStyle为“0-无”。 6、标签Label1~Label3的caption属性分别为:“选择的数”,“位置正确”,“位置错误”。 7、标签Label4的caption属性为:=”说明:选择4个数按确定键,在右侧显示这4位数有几位数与你要猜的数位置相同,“+chr(13)+” 有几位数包含在要猜的数中,但位置不同。根据以上提示猜出是哪4位数。“,其中chr(13)是一个回车换行命令,“=”和英文引号(单、双都行)不能少;BackStyle为“0-透明”。 8、标签L1~L10的caption属性分别为:“第一次”...“第十次”;BackStyle为“0-透明”。 9、表面工作做完了,下面我们来输入一些命令(程序),双击表单出现表单过程编辑框,在Init过程中输入如下命令: public ctx1,ctx2,ctx3,ctx4,ctet1,ctet2,n,zq,cw,p &&设置全局变量 zq=0 &&设置初始值 cw=0 ctet1='' ctet2='' n=0 thisform.command3.click()&&执行命令按钮(command3)的click过程,相当于点击”新一局“按钮。 10、双击按钮“0”(command4),在其click过程中输入如下命令: ctet2='0' do panduan &&执行panduan.prg程序 thisform.refresh 11、按钮“1”~“9”的click过程中的命令与按钮“0”的click过程中的命令的不同之处就是ctet2的值,即ctet2='1'...ctet2='9'。 12、因为在按钮“0”~“9”的click过程中都执行一些相同的命令,所以我们把这些命令提出来,作为一个程序来调用(也可以在表单中创建一个方法程序,请参见第九课),可以简化程序的设计。选择“代码”——“程序”按“新建”按钮,新建程序panduan.prg: if len(allt(ctet1))<>4 &&判断text1的值的长度,如果不是4位,执行下面的命令.if!ctet2$ctet1 &&判断按下的按钮的数值是否已被选过,若所选的数不包涵在已选的数值内.ctet1=ctet1+ctet2 &&把选定的数加在后面.endif endif 13、双击按钮“确定”(command1),在其click过程中输入如下命令: zq=0 &&正确值zq=0 cw=0 &&错误值cw=0 if len(allt(ctet1))<>4 &&如果text1的值不是4 位 wait window at 16,25 ”数据不够4 位“ &&提示 return &&返回 endif p=p+1 if ctx1$ctet1 &&判断cte1值是否在所选定的4位数中.(ctet1及ctet2、ctet3、ctet4的值是在表单运行时或点击了“新一局”按钮时机器随机产生的4位数值。) if ctx1=substr(ctet1,1,1)zq=zq+1 else cw=cw+1 endif endif if ctx2$ctet1 if ctx2=substr(ctet1,2,1)zq=zq+1 else cw=cw+1 endif endif if ctx3$ctet1 if ctx3=substr(ctet1,3,1)zq=zq+1 else cw=cw+1 endif endif if ctx4$ctet1 if ctx4=substr(ctet1,4,1)zq=zq+1 else cw=cw+1 endif endif do case case p=1 thisform.l1.visible=.t.thisform.t1.visible=.t.thisform.zq1.visible=.t.thisform.cw1.visible=.t.t1=ctet1 zq1=zq cw1=cw if zq=4 jlun=”你真能蒙!“ endif case p=2 thisform.l2.visible=.t.thisform.t2.visible=.t.thisform.zq2.visible=.t.thisform.cw2.visible=.t.t2=ctet1 zq2=zq cw2=cw if zq=4 jlun=”太棒了,你真能蒙!“ endif case p=3 thisform.l3.visible=.t.thisform.t3.visible=.t.thisform.zq3.visible=.t.thisform.cw3.visible=.t.t3=ctet1 zq3=zq cw3=cw if zq=4 jlun=”太棒了,蒙的吧?!“ endif case p=4 thisform.l4.visible=.t.thisform.t4.visible=.t.thisform.zq4.visible=.t.thisform.cw4.visible=.t.t4=ctet1 zq4=zq cw4=cw if zq=4 jlun=”太棒了,您是教授吗?“ endif case p=5 thisform.l5.visible=.t.thisform.t5.visible=.t.thisform.zq5.visible=.t.thisform.cw5.visible=.t.t5=ctet1 zq5=zq cw5=cw if zq=4 jlun=”大学生水平,很可以!“ endif case p=6 thisform.l6.visible=.t.thisform.t6.visible=.t.thisform.zq6.visible=.t.thisform.cw6.visible=.t.t6=ctet1 zq6=zq cw6=cw if zq=4 jlun=”智商不低吗!“ endif case p=7 thisform.l7.visible=.t.thisform.t7.visible=.t.thisform.zq7.visible=.t.thisform.cw7.visible=.t.t7=ctet1 zq7=zq cw7=cw if zq=4 jlun=”还算可以,要努力呀!“ endif case p=8 thisform.l8.visible=.t.thisform.t8.visible=.t.thisform.zq8.visible=.t.thisform.cw8.visible=.t.t8=ctet1 zq8=zq cw8=cw if zq=4 jlun=”一般人到这儿都能找到!“ endif case p=9 thisform.l9.visible=.t.thisform.t9.visible=.t.thisform.zq9.visible=.t.thisform.cw9.visible=.t.t9=ctet1 zq9=zq cw9=cw if zq=4 jlun=”太一般了!“ endif case p=10 thisform.l10.visible=.t.thisform.t10.visible=.t.thisform.zq10.visible=.t.thisform.cw10.visible=.t.t10=ctet1 zq10=zq cw10=cw if zq=4 jlun=”到现在才早找出来?!智商有问题!“ else jlun=”智商太低了,再来一次?“ endif endcase ctet1=”“ thisform.refresh 14、双击按钮“新一局”(command3),在其click过程中输入如下命令: jlun=”“ thisform.l1.visible=.f.thisform.t1.visible=.f.thisform.zq1.visible=.f.thisform.cw1.visible=.f.thisform.l10.visible=.f.thisform.t10.visible=.f.thisform.zq10.visible=.f.thisform.cw10.visible=.f.thisform.l2.visible=.f.thisform.t2.visible=.f.thisform.zq2.visible=.f.thisform.cw2.visible=.f.thisform.l3.visible=.f.thisform.t3.visible=.f.thisform.zq3.visible=.f.thisform.cw3.visible=.f.thisform.l4.visible=.f.thisform.t4.visible=.f.thisform.zq4.visible=.f.thisform.cw4.visible=.f.thisform.l5.visible=.f.thisform.t5.visible=.f.thisform.zq5.visible=.f.thisform.cw5.visible=.f.thisform.l6.visible=.f.thisform.t6.visible=.f.thisform.zq6.visible=.f.thisform.cw6.visible=.f.thisform.l7.visible=.f.thisform.t7.visible=.f.thisform.zq7.visible=.f.thisform.cw7.visible=.f.thisform.l8.visible=.f.thisform.t8.visible=.f.thisform.zq8.visible=.f.thisform.cw8.visible=.f.thisform.l9.visible=.f.thisform.t9.visible=.f.thisform.zq9.visible=.f.thisform.cw9.visible=.f.p=0 ctext='1234567890' for i=1 to 4 n=11-i cn1=rand()cn=int(cn1*n)+1 if cn=0 cn=1 endif txx='ctx'+allt(str(i))&txx=substr(ctext,cn,1)if cn=1 ctext1=right(ctext,(10-i))else if cn=11-i ctext1=left(ctext,(10-i))else ctext1=left(ctext,cn-1)+right(ctext,(11-i-cn))endif endif ctext=ctext1 endfor thisform.text1.value=”" thisform.refresh 15、双击按钮“退格”(command2),在其click过程中输入如下命令: if len(allt(ctet1))<>0 &&长度不为0 ctet1=left(ctet1,len(allt(ctet1))-1)&&删除后面的一为数 endif thisform.refresh 16、修改主菜单,在“游戏”的猜数游戏后填加命令:do form csyx,别忘了生成程序文件。 17、因为表单和程序不在同一目录下,所以单独运行表单会出现找不到某程序的错误,我们需要运行主程序main.prg,来看看运行结果。第二篇:C语言基础知识实例讲解
第三篇:Photoshop实例教学
第四篇:Scratch实例教学
第五篇:vfp教学实例