c语言范文
时间:2023-04-07 14:38:03
导语:如何才能写好一篇c语言,这就需要搜集整理更多的资料和文献,欢迎阅读由公务员之家整理的十篇范文,供你借鉴。
篇1
c语言是计算机的高级语言。
高级语言主要是相对于汇编语言而言的,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言,能以简易的方式编译、处理低级存储器。
C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括一些类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
(来源:文章屋网 )
篇2
关键词:C语言;教学方法;思维转化;启发式教学;软件工程
一、前言
C语言是一种通用性计算机程序设计语言。它兼有汇编语言和高级语言的双重优点,运用它既能编写操作系统软件,又能开发各个领域的应用软件。C语言的实用性使之成为编程的首选语言。学好了C语言,再进一步深造C++/VC++,JAVA等言语,就有了坚实的基础。但目前很多学生在学习《C语言程序设计》后,感觉读程序还凑合,编程则“难于上青天”部分学生甚至毫无编程想法,仅仅是为应付考试而死记硬背,完全背离了高职教育的初衷。因此,如何在C语言教学中启发并训练学生的编程思维,是每个教师应深思的问理。以下是笔者在C语言教学中的一些看法,愿和同行探讨。
二、上好第一堂课
如何上好第一堂《C语言程序设计》课是至关重要的。因为学生都是初次接触C语言,C语言对他们来说是神秘的,“兴趣永远是最好的老师”,有了兴趣他们才会积极主动地去学习,所以第一堂课的成功与否直接关系到学生能否对这门课产生兴趣,所以我觉得第一堂课应为“趣味C语言导学课”。
(一)程序结果展示,激发兴趣
要激发学生的兴趣。首先要让大家知道C语言的强大功能,利用它我们能编写各种软件,通过幻灯片向学生展示各种结果画面,例如从50年代玩的摇杆游戏到如今的电脑游戏。相信这时有些学生已经有些“蠢蠢欲动”了。恨不得立刻学好C语言。
(二)强调C语言的重要性
C语言是学生今后学好后继课程的基础,比如数据结构。C++,JAVA等。虽然程序设计语言更新很快,但如果真正掌握精了程序设计思想,具备了真正解决实际问题的能力。语言再更新可程序设计的本质不会变。
(三)传授C语言的学习方法
C语言是一门实践性课程,要理论结合实践,加强学生的动手能力,解决问题的能力,在学习方法上给以学生指导,告诉学生如何自学,如何听课,如何动手实践,明确一点:“C语言不是看会的,也不是听会的,而是亲自动手实践练会的”,强调实践的重要性。
(四)认识C语言的编译环境。
在visual studio2005环境下,举出几个简单的小程序演示给他们看,并逐一讲解,引导学生自己去发现程序中存在的缺陷以及改进的方式。熟悉C语言源程序到可执行文件的整个操作流程。让他们仿照所列举的几个程序模仿着编一个小程序。
二、C语言教学方法
(一)抽象思维到形象思维的转化
让学习过程变得轻松有趣是激发学生兴趣的关键所在,C语言本身是一门极其抽象难懂的学科,把抽象的问题形象化,使本来枯燥无味的C语言变得魅力无限,符合学生的认知规律,可以收到良好的效果。
(二)采用问题启发式授课,激发自主学习
针对C语言概念多,语法繁的现状,采用问题启发式教学可以将难理解、难记忆的概念和规则变成一系列时而醒目、时而深奥的问题呈现在课堂教学中,这样就能把学生的注意力集中起来,学习积极性调动起来,达到师生互动的效果,教师自问自答为主,有问有答,互问互答,改变单调死板、照本宣科的牧师讲法。这种启发式、讨论式、交流式的教法,不仅改变原来的灌输式,而且增强了学生自主学习的能力。
(三)“引申法”“框架法”和“求异法”相结合
所谓“引申法”是指是结合已经解决的问题,因势利导,引导学生在此基础上解决相关联的问题。“引申法”可以培养学生在程序设计方面的发散思维。提高程序设计中的应变能力。问题是活的,但程序是有章可循的。最终使学生明白,语法是有限的,可解决的问题是无限的。只有在分析实际向题的基础上,以清晰的思路去设计算法,才能举一反三,以不变应万变。
“框架法”可培养学生的全局思维和算法的整体设计能力。具体体现在两方面:一是在学生有了一点编程基础后要利用伪代码或流程图,从算法设计的角度讲解编程思路,而不应拘泥于语法细节,不分主次、逐条语句的讲解代码。通过此框架,可使初学者对函数设计的关键问题有清晰的认识,利于从统筹全局的角度去考虑问题,体现了程序设计逐步求精的思路。这样可以层次分明,突出算法设计的关键,利于培养学生的编程思路。二是在学习重点章函数时,由于新的算法已很少,主要是学习用函数调用的方法来重新编制以前所熟悉的程序,那么我们可以把着眼点放在函数的设计框架上,体现参数设计、返回值设计等关键问题,而无需细讲函数体的实现细节。
“求异法”:一个固定的问题。解决的方法可能不唯一,如果能启发学生多角度、多侧面去寻求解决问题的办法,则可激发学生思考的积极性,提高其学习兴致。在C语言中一题多解的情况有很多,有意识地引导新思路,鼓励新方法,以培养学生在编程中的求异思维,而不是死记硬背,墨守成规。
(四)理论教学与学生实践相结合,提高程序调试能力
对程序设计课来说,理论学习和上机要两手抓,两手都要抓硬。实验课不能流于形式,让学生照抄照搬,甚至身在曹营心在汉。必须给学生思考、创新的启迪,训练其实践能力,实验课要生动活泼,使学生既掌握书中的重点算法,又有充分的思考空间,让学生充分体会到顿悟和创造的乐趣。在进行每一部分的学习的时候,都应该配有相应的学生上机实践的机会。这样学生既锻炼了动手能力,又巩固了所学的知识。还应该让学生养成上机前分析题目,决定算法与数据结构,并编出程序源代码的好习惯,这样在上机时,学生就有的放矢,主要精力放在调式程序上需。对于普遍存在的问题,进行集中提示、讲解、演示以增加学生的印象。井及时检查总结学生上机实验的完成情况。
(五)在整个教学环节中,巧妙地引人软件工程的基本思想
计算机科学属工程技术科学,为使学生有良好的编程思维,应注重软件工程思想的渗透。对软件生存周期的几个阶段,即问题定义、可行性研究、需求分析、概要设计、详细设计、编码、调试、运行与维护,可以通过常规的C程序设计实例来体现,以培养学生编程中的工程思维。这样并没有费很大力气讲抽象的概念,却可培养学生在程序设计中从软件工程角度去系统分析问题的良好习惯。虽然问题小了些,但“窥一斑而知全局”,经反复强化问题求解中所蕴含的基本思想,将有效地训练学生程序设计中统筹全局的工程思维能力。
篇3
实验一 上机操作初步和简单的C程序设计
一、 实验目的
1、熟悉C语言运行环境Turbo C++3.0
2、会简单的程序调试
3、熟悉C语言各种类型数据的输入输出函数的使用方法
4、掌握顺序结构程序设计
二、 实验内容
1、 上机运行本章3个例题,熟悉所用系统的上机方法与步骤。(习题1.7)
2、 编写一个C程序,输入a、b、c 3个值,输出其中最大者。(习题1.6)
3、 设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。注意:在Trubo C++ 3.0中不能输入汉字,只能输入英文或拼音。(习题4.8)
4、 运行如下程序,写出运行结果。kt250.com整理该文章,版权归原作者、原出处所有...
#include
void main()
{
int a=1,b=2;
a=a+b; b=a-b; a=a-b;
printf("%d,%dn",a,b);
}
篇4
关键词:Java
面向对象
c++
编程语言
中国分类号:TP312
文献标识码:A
文章编号:1002-2422(2010)03-0088-03
1 Java语言的特点
(1)简单性
Java继承了C/C++的语法,丢弃了其中不常用又容易引起混淆的功能,特别是非面向对象的内容,取消了c语言的结构、指针、#define语句、多重继承、全局变量和函数、GOTO语句、操作符重载和自动类型转换等等。
(2)面向对象
Java是一种纯面向对象的语言,具有封装、继承和多态的特性,无全局变量或函数,可以被用于面向对象这种现代软件工程。
(3)分布式
Java包括一个支持HTTP和FTP等基于TCP/IP协议的子库。因此,Java应用程序可凭借URL打开并访问网络上的对象,象本地一样。
(4)解释型
Java写成的源代码需要被编译成高阶的字节码,其与机器架构无关。然后,这种字节码在任何Java的运行环境中由Java虚拟机解释执行。保证了Java与平台无关性和可移植性。解释执行与及时编译技术的完美结合,提供了相当高的运算性能。
(5)多态的支持
Java是一种非常注重对象形态转换的语言,所以在编译时期就会做形态转换检查,在执行时期,Java也会做一些形态上的检查。
(6)垃圾收集和异常处理
由于Java垃圾收集器会做自动的垃圾收集,这里的垃圾指一些不会被再使用的对象,所以程序设计者不需费心。内存会被自动地管理,Java本身提供了许多面向对象的异常(Exception)处理,所以程序在执行时期所发生的错误,都可以由程序自己来处理。
(7)安全性
Java设计时对系统的安全,特别是网络安全做了周密的考虑。通过字节码验证、内存调用方式、资源使用权限等进行多层次的安全管理。Java被认为是在任何系统上最安全的应用程序之一。
2 Java的技术平台
Java不仅仅是一种语言,更重要是一种区别于传统系统,遵循“网络就是计算机”信条的平台技术。Java平台将面向对象系统扩展成包括程序和数据的网络计算机,而这个平台的核心就是Java虚拟机。Java虚拟机的概念和实现使Java平台成为万能开发平台,实现了Java程序“编写一次,到处运行”。Java虚拟机是一种抽象化的计算机,可以在其上面执行Java的字节码。其本身的设计原则是“小而简单”,目的是为了尽可能在所有机器上都能安装。这样的精简原则,使得其能够在现有的各种平台上都可以顺利执行,适合各种网络的环境。Java的技术平台的工作原理:第一步Java用一个编译器将源程序代码(.java)转换成可执行程序(.class),Java编译器生成的是独立于处理器结构的字节代码。第二步字节代码用一个Java虚拟机来执行,JVM是理想化的Java处理芯片,通常是在软件上实现而不是在硬件上实现。
3 Java语言和c++语言的比较
c++和Java都属于杂合语言,允许采用多种编程风格。C++是一种杂合语言,支持与c语言的向后兼容能力。由于C++是c的一个超集,所以包含的许多特性都是c语言不具备的,这些特性使C++在某些地方显得过于复杂。但在Java中,设计者觉得这种杂合并不象在C++里那么重要。JavB保留了C++的语法,但忽略了资源引用、指针算法、操作符重载等潜在危险,是C/C++的简化版本。所以Java虽然是从C++衍生出来,Java和C++之间仍存在一些显著的差异,这些差异代表着技术的极大进步,证明了Java是一种比c++更优秀的程序设计语言。从面向对象(00)程序设计的角度,论述一下Java和C++的重要差异:
(1)单根结构
在c++中,可在任何地方启动一个新的继承树,所以最后往往看到包含了大量树的“一片森林”。在Java中,采用了一种单根式的分级结构,因此所有对象都是从根类统一继承。尽管这表面上看似乎造成了限制,但由于每个对象肯定至少有一个object接口,所以往往能获得更强大的能力,Java的强制单根结构更好地符合了面向对象(00)语言的标准。
(2)取消指针
Java和C++用new创建一个对象的时候,例如:Strings=new String(“object”):都会获得一个对象引用。然而,C++对象引用在创建时必须进行初始化,而且不可重定义到一个不同的位置。但Java对象引用并不一定局限于创建时的位置。可根据情况任意定义,这便消除了对指针的部分需求。指针通常被看作在基本变量数组中四处移动的一种有效手段。在c++里,必须用大量采用指针指向任意一个内存位置,这同时会使其变得不安全,也是Java不提供这一支持的原因。在Java里,没有象C++那样的指针,Java允许其以更安全的形式达到相同的目标。Java没有全局函数,只有类,因而可以用传递的方式实现对象的引用。
(3)自动垃圾收集机制
Java中没有C++“破坏器”,变量不存在“作用域”的问题。Java有个finalize()方法是每一个类的成员,在某种程度上类似于c++的“破坏器”。但finalize()是由垃圾收集器调用的,而且只负责释放“资源”,如打开的文件、套接字、端口、URL等。如需在一个特定的地点做某件事情,必须创建一个特殊的方法,并调用它,不能依赖finalize()方法。由Java不支持破坏器的概念,针对类内的基础类以及成员对象,Java采用垃圾收集器自动清除,所有对象都会被当作“垃圾”收集掉。自动垃圾收集意味着在Java中出现内存漏洞的情况会少得多,但也并非完全不可能。若调用一个用于分配存储空间的固有方法,垃圾收集器就不能对其进行跟踪监视。而在另一方面,C++中的所有对象必须用finalize()方法破坏,然而,内存漏洞和资源漏洞多是由于编写不当的finalize()造成的,或是由于在已分配的一个块尾释放一种资源造成的。Java垃圾收集器是在C++基础上的一种极大进步,使许多编程问题得以解决。
(4)异常控制机制
Java的异常规范比c++的出色得多。Java中的所有异常都是从基础类Throwable里继承而来的,所以可确保得到的是一个通用接口。丢弃一个错误的异常后,不是象C++那样在运行期间调用一个函数,Java异常规范是在编译期间检查并执行的。被取代的方法必须遵守那一方法的基础类 的异常规范,可丢弃指定的异常或者从那些异常衍生出来的其他异常。这样一来,最终得到的是更为“健壮”的异常控制代码。
(5)单一继承
Java中的继承具有与c++相同的效果,但采用的语法不同。Java用extends关键字标志从一个基础类的继承,并用super关键字指出准备在基础类中调用的方法,与当前所在的方法具有相同的名字。然而,Java中的super关键字只允许访问父类的方法,亦即分级结构的上一级。通过在c++中设定基础类的作用域,可访问位于分级结构较深处的方法,亦可用super关键字调用基础类构建器,所有类最终都会从Object里自动继承。和C++不同,Java不存在明确的构建器初始化列表,但Java编译器会强迫在构建器主体的开头进行全部的基础类初始化,而且不允许在主体的后面部分进行这一工作。其语法如下:
public class A extends B{public A(String msg){super(msg);∥调用基础类构建器}pubic C(int i){ super.C(i);∥调用基本方法}}
Java提供了一个interface关键字,其作用是创建抽象基础类的一个等价物。在其中填充抽象方法,且没有数据成员。这样一来,对于仅仅设计成一个接口的东西,以及对于用extends关键字在现有功能基础上的扩展,两者之间便产生了一个明显的差异。不值得用abstract关键字产生一种类似的效果,因为不能创建属于那个类的一个对象。一个抽象类可包含抽象方法,并不要求在其里面包含什么东西,但其也能包含用于具体实现的代码。因此,其被限制成一个单一的继承。通过与接口联合使用,这一方案避免了对类似于c++虚拟基础类那样的一些机制的需要。为创建一个实例的一个interface(接口),需使implements关键字。其语法类似于继承的语法,如下:
public interface Face
public void Output():}
public class C extends B implements Face{public void Output()fSystem,out,println(“an object”),}}
篇5
关键词:C语言;指针;程序设计
中图分类号:TP311.1 文献标识码:A文章编号:1007-9599 (2010) 05-0000-01
C Language Pointer
Li Peng
(Tianjin Polytechnic University,Tianjin300160,China)
Abstract:C-language is a programming language,teaching in the program design plays an important role.In the C language,difficult to understand is the pointer.This article intends to discuss the indicators of definitions,classifications,operations and 3 special purpose,so that we can more clearly understand the nature pointer.Can be expected that only a thorough grasp of the pointer can truly grasp of the C language. Applications through in-depth pointers,C language will be used more widely in the field.
Keywords:C language;Pointer;Programming
一、引言
C语言是目前教学中使用最广的程序设计语言。虽然近年来产生了许多功能丰富的计算机程序设计语言,但鲜有能代替C语言的。其主要原因就是它不仅是一门高级语言更重要的是它能直接对物理地址进行访问,具有双重功能,是嵌入式设计中必不可少的一门语言。C语言功能强大的主要原因就是具有指针结构。指针是一种特殊的数据类型,直接指向目标的存储地址,实现直接访问对象存储空间的功能,具有重要的作用。
二、C语言中的指针简介
在C语言中,任何一个变量总结起来包括变量的数据类型、存储空间。在数据类型中定义的变量的基本范围和操作类型。存储空间就是变量在计算机中的存储地址,如何有效的存储变量并能有效的访问到它这是一个必须解决的问题。指针就是表示地址的一种变量,所以指针的范围严格来说只能是自然数的,并且不能在两个指针间进行加、乘、除这样的运算。由于在C语言中每个数据类型都必有存储空间,所以指针可以应用于几乎所有的数据类型中。所以,从这个角度出发可以将指针分为:指向变量的指针、数组指针、字符指针、指向指针的指针、函数指针、结构变量的指针以及文件指针等等。其中,指向变量的指针就是存储变量的地址的。如 int * s这就是一个指向整型的指针,可以用于指向一个整型变量。如int a; 当p=&a时,就是将p存储整型变量a的地址。这是指针最简单的一种类型。所谓数组指针,就是指数组的名称实际上是指向整个数组空间的首指针。如 int a[10];其中a本质上是一个指针,指向该数组的第一个位置,a[2]表示距离a指向空间向后2个位置所在空间中的存放的值。所以,a[2]=*(a+2)。字符指针本质上是数组指针的一种特殊情况,就是存放字符串的数组所对应的数组名。指向指针的指针这是一类很特殊的指针,用于存放指针的一类指针,在本质上与指向变量的指针十分相似。例如 char *ss[N]={“java”,”sss”,’’rrr”}。指向函数的指针就是指向函数入口地址的指针。结构变量的指针这类指针和指向变量的指针很类似,主要的区别在于结构变量可能有多个类型不同的变量,所以一般空间较大。文件指针就是对文件进行操作的指针。从上述的分类可以看出无论什么类型的指针其功能都是一样的就是用于指向对象的地址空间罢了。
上面简要的介绍了指针的定义和分类,现在简要的论述一下指针涉及到的运算操作。首先由于指针是存放的变量地址的,所以第一个操作就是对指针进行地址赋值。如int a,*p;
P=&a,这就是对指针p进行进行赋变量a的地址,p指向变量a。当然也可以通过指针获取指针指向地址空间所存储的值。如int b=2,*p;p=&a,这是*p就表示p指向空间所存储的值,在本例中就是a的值2。为了能在数组指针中通过指针能访问到整个数组的值,所以。可以对指针进行加减整数值,表示地址的前移或后移。如int a[10],*p,*s; p=a;s=p+2;其中s 的值表示数组中首地址向前移动2的位置,表示 a[2]对应的地址。 为了表示两个地址间存在的距离,可以通过指针间的减法实现。当然指针涉及到的还有其他运算,现不详述了。
三、C语言中的指针应用
在C语言中指针的十分应用广泛,除具有一般的功能外,具体特殊功能的应用总结起来有三个方面:一是用于在函数中可以返回多个值;还有就是可以实现动态调用函数;最后就是实现数组的动态定义。其中,由于由函数的特点,一个函数只能有一个返回值,但在有些场合需要返回多个值,就可以定义指针参量来实现,其定义的基本框架如下:
Sss( int a,int *p )
{int s;
…….
………
Return s;
}
在这中情况下,函数不仅可以得到返回值(通过Return s来实现的),还可以通过指针p来返回相应的值。所谓指针能实现动态调用函数,这里用到的指针就是上文中提到的函数指针。函数指针就是指向函数入口地址的指针,我们还知道其实函数名就是一个函数指针。我们就是通过函数名实现动态调用函数的。在主调函数的参数中采用函数名充当实参就能实现函数的动态调用。该方法以简短的代码实现了复杂的功能。最后讲到指针能实现数组的动态定义。从C语言的学习中,我们知道在定义数组时一定要指定数组的大小,否则,不能完整数组的定义。那么如何实现数组的动态定义?数组从本质上来讲就是连续的空间集合罢了。那么,我们可以通过申请一个空间并赋值给一个指针变量,以此指针变量为首空间,就能获取连续的空间,这与数组相同。当然数组还有许多应用,只有认真分析就能得到更多更好的应用实例。
四、结论
C语言是到目前为止学习最多的程序设计语言之一,也是计算机教育中的必修课。在整个C语言教学中,指针是一个十分重要的部分,也是最难掌握的部分之一。论文通过对指针的概念、分类、运算类型和应用等方面,系统的论述了指针,目的就是让大家能清晰的了解指针、掌握指针,从而实现高效的应用指针。只有掌握好了指针,才能发挥C语言的优势,可见指针具有重要的作用。
参考文献:
篇6
【关键词】指针;情景创设;主动探索;协作学习;游戏案例导入
一、引言
指针是C语言中广泛使用的一种数据类型,运用指针编程是C语言最主要的风格之一。正确而灵活地运用它,可以有效地表示复杂的数据结构;能动态分配内存;能方便地使用字符串;有效而方便地使用数组;在调用函数时能得到多于1个的值;并能像汇编语言一样处理内存地址,从而变出精练而高效的程序等,这对设计系统软件是很必要的。掌握指针的应用,可以使程序简洁、紧凑、高效。指针极大地丰富了C语言的功能。每一个学习和使用C语言的人,都应当深入地学习和掌握指针。可以说,不掌握指针就是没有掌握C语言的精华。
二、教学现状
高职学生的基础普遍较差,数学与英语基础较为薄弱,在碰到程序逻辑思维分析,程序代码编写及调试的过程中,往往会感到困难,这是高职C语言课程教学中的共性问题。学习指针是学习C语言中最重要的一环,能否正确理解和使用指针是学生是否掌握C语言的一个标志。同时,指针也是C语言中最为困难的一部分,学生很难正确理解基本概念,就指针的教学谈谈自己的想法。
三、教学方法
1、情景创设教学法。课堂教学是获取知识和技能的主要阵地,应当成为培养学生独立思考的摇篮。情景创设教学方法把学习设置到简单的、有意义的问题情境中,学生通过互相合作来解决这些问题,发现隐含于问题背后的科学知识,形成让学生掌握解决问题的技能和提高自主学习的能力。例如,讲解指针的基本概念,计算机中的所有数据都是顺序存放在存储器中的。一般把存储器中的一个字节称为一个内存单元,不同数据类型的值所占用的内存单元数亦不同。为了正确地访问这些内存单元。内存单元的编号也叫地址,通常也把这个地址称为指针。内存单元的指针和内存单元的内容是两个不同的概念。为让学生掌握并理解内存单元的指针和内存单元的内容,我采用了情景创设的教学方法。我们到银行去存、取款时,银行工作人员将根据我们的账号去查找存款单,找到之后在存单上写入存款、取款的金额。在这里,账号就是存单的指针,存款数就是存单的内容。这样就能让学生明白内存单元的指针和内存单元的内容之间的关系了。
2、主动探索、协作学习教学法。根据已有信息,从不同角度、不同方向思考问题,从多方面寻求多样性答案的一种思维形式,是主动探索的教学方法。为走出传统教学中的泥滩,教师应转变教学观念,砸碎应试教育的模式和框架,克服单纯传授知识的倾向,注重顺向思维、逆向思维、多向思维的训练,培养学生思维的深刻性、批判性和创新性。具体来讲,就是要通过挖掘教材中能一题多解、一法多用、一题多变的教学内容,来引导学生主动探索,使他们的思考朝多种方向扩散,提出各种设想、多种解答。在指针教学中还可以进行协作学习中培养学生们的思维。协作学习是在解题中,尽可能利用自己已有的知识和经验与同学一起讨论,将不同的方法进行比较,从中确定出最佳方案。在教学中,引导学生从不同方向利用其他学科的理论,开阔思路,找出解决问题的多种方法。然后在众多的解法中,经过归纳、判断和比较,最终得出一个最优化的结论。比如在教学生如何通过指针引用数组元素,先请学生协作学习开阔思路用不同方法编写“输出数组中的全部元素”程序。
方法一:下标法
方法二:通过数组名计算数组元素地址,找出元素的值
方法三:用指针变量指向数组元素
通过该教学方法,这个知识点学生掌握得很好,找出解决问题的多种方法,能深刻地、高水平地掌握知识,并能把这些知识广泛应用到学习新知识的过程中,举一反三,提高了对知识的理解能力,使学习活动顺利进行。
3、游戏案例导入教学法
在指针教学中通过游戏案例导入教学法可以营造学生独立思考的心理氛围。在分析指向多维数组的指针和指针变量中的“多维数组的地址”知识点,我先请同学做游戏,一个当“排长”,三个当“班长”,十二个当“战士”,游戏是:有一个排,下设3个班,每个班有4名战士。规定排长只管理到班,班长管理战士。在排长眼里只有第0、1、2班。排长从第0班的起始位置走到第1班的起始位置,看来只走了一步,但实际上他跳过了4名战士。为了找到某一班内某一个战士,必须给两个参数,即第i班第j个战士,先找到第i班,然后由该班班长在本班范围内找第j个战士。这个战士的位置就是a[i]+i.。开始时班长面对第0个战士。注意,排长和班长的初始位置是相同的。但他们的“指向”是不同的。排长“指向”班,他走一步就跳过1个班,而班长“指向”战士,走一步只是指向下一个战士。可以看到排长是“宏观管理”,只管班,班长则是“微观管理”,管理到战士。如果要找第1班第2个战士,则先由排长找到第1班的班长,然后,由班长在本班范围内找到第2个战士。二维数组a相当于排长,每一行(即一维数组a[0]、a[1]、a[2])相当于班长,每一行中的元素(如a[1][2])相当于战士。
请同学们打开书,仔细看插图,边看边想:谁是排长?班长在哪儿?管多少个战士?
这段游戏导入把贯穿全文的线索用三个问题串起来,让学生从静态的图中找答案,思考、讨论结果。这一过程学生的思维也是最活跃的,对问题的思考是深入而全方位的,这些问题激发了学生们的心理驱动力,在讨论争议中,让学生迸发出创新思维的火花。
篇7
关键词: C语言 变量 变量的存储类别
C语言是一种应用广泛的、结构化的程序设计语言。程序设计的一项主要任务就是对数据进行处理,编写程序时需要用到各种变量来存放数据。因此,变量在C语言中是一个很重要的概念。由于C语言的数据结构丰富,变量的内容也很多,包括变量的概念、定义、数据类型、作用域、存储类别和存储方式等。灵活掌握C语言中的各种变量,对程序设计将起到至关重要的作用。
一、变量的概念
变量是内存或寄存器中用一个标识符命名的存储单元,可以用来存储一个特定类型的数据,并且数据的值在程序运行过程中可以进行修改。可见,变量首先是一个标识符或者名称,就像一个客房的编号一样,有了这个编号,我们就可以找到房间的客人。为了方便,我们在给变量命名时,最好能符合大多数人的习惯,应见名知义,便于交流和维护。
二、变量的定义和初始化
在C语言中要使用变量必须先定义,再使用。一个变量定义的完整格式是(里的部分表示可以省略的部分):
[存储类型]数据类型 变量名1[=表达式1],变量名2[=表达式2],……,变量名n[=表达式n]。
定义一个变量的过程就是向内存申请一个符合该数据类型的内存空间,以后对该变量的操作就是对对应内存空间的存取操作。
在这个定义中,存储类型决定了变量存放在何处,数据类型决定了这个变量所占的字节数,变量名决定了这个变量在本程序中的名字,表达式则决定了这个变量的初始值,使用变量之前应该给一个值,编译程序将帮助我们发现那些还没有被给定一个值就被使用的变量。不过,变量不一定需要初始化。在函数外部定义的变量或者在函数内部用static关键字定义的变量在没有明确地被初始化之前都已被系统初始化为0了。在函数内部或程序块内部定义的不带Static关键字的变量都是自动变量,如果没有明确地对这些变量进行初始化,它们就是会具有未定义值。如果没有对一个自动变量进行初始化,在使用它之前就必须保证先给它赋值。
三、变量的数据类型
程序设计最基本的问题是解决对所要处理数据的描述。任何一个数据,都有一个确定的表示形式。一个确定的值和确定的能参与的各种运算,就是数据类型。程序中变量的本质表现在存在时间和占用空间这两个方面。变量的数据类型决定了变量占用的存储空间。它受类型说明语句的制约。任一变量都必须具有确定的数据类型。不管变量怎样变化,其值都必须符合该类数据类型的规定。
四、变量的存储类型
C语言中变量不仅仅有数据类型,还有存储类型。数据类型用来说明变量所占的存储空间的大小和可以进行的操作,存储类型用来表示变量的生命期和作用域,即变量起作用的范围。在C语言中,按照变量的作用域把变量分为两种:局部变量和全局变量。
1.局部变量
在一个函数内部定义的变量,只在本函数内部有效,这种变量称为“局部变量”。例如:主函数与被调用函数中可以有相同的变量名,但这些变量只作用在它自己的范围内,即两个函数中的同名变量,在内存中占有不同的存储单元,是两个不同的变量。局部变量存在于以下几种形式中:
(1)在一个函数内部定义的变量是局部变量,只能在函数内部使用。
(2)在主函数内部定义的变量也是局部变量,其它函数也不能使用主函数中的变量。
(3)形式参数是局部变量。
(4)在复合语句中定义的变量是局部于复合语句的变量,只能在复合语句中使用。
(5)局部变量在函数被调用的过程中占有存储单元。
(6)不同函数中可以使用同名变量。在不同的作用域内,可以对变量重新进行定义。
2.全局变量
在函数外部定义的变量是全局变量,其作用域是变量定义位置至整个程序文件结束。使用全局变量,可增加函数间数据联系的渠道。全局变量可以将数据带入到作用域范围内的函数,也可以将数据带回到作用域范围内的其它函数。提前引用外部变量,需对外部变量进行说明,或称声明。局部变量如与外部变量同名,则在局部变量的作用域内,外部变量存在,但不可见,外部变量的作用被屏蔽。全局变量在程序运行过程中均占用存储单元。在编程时,原则上尽量少用全局变量,能用局部变量,不用全局变量,要避免局部变量全局化。
在C语言中,按照变量在内存中存在的时间(生存期)角度来分,可分为动态存储方式和静态存储方式。
(1)静态存储变量
凡是用关键字Static定义的变量全部被称为静态变量。所有的静态变量全部存储在静态存储区,在程序的运行期间一直存在。
(2)动态存储变量
动态存储变量是存储在动态存储区的,这种变量只在定义它们的时候才创建,在定义它们的函数返回时系统回收变量所占内存。对这些变量的创建和回收是由系统自动完成的,所以也叫自动变量(用关键字Auto定义)。最典型的例子就是函数中定义的局部变量。
变量的特性除了数据类型之外,还有存储类别。C语言中变量的存储类别有四种:自动型(Auto)、静态型(Static)、外部型(Extern)、寄存器型(Register)。
①自动型(Auto)
Auto表示自动变量,通常关键字Auto可以省略,自动变量必须定义在函数内部,我们以前所说的变量基本上都是这种类型,函数的形式参数也是这种类型。自动型变量是局部变量,所以作用域是本函数。若是在复合语句中说明的自动变量,其作用域是本复合语句。
②静态型(Static)
在函数内部以Static进行说明的变量。它是局部变量,作用域与自动变量相同。它的存储方式是静态的,当它被说明后就占有存储单元,直到本程序执行结束,所以它的生命期是从被说明开始到程序执行结束。当一个变量被定义为静态型时,如果它没有赋值,系统自动赋0值,而自动变量不赋值,它的值是不确定的。
③外部型(Extern)
在函数外部说明的变量,它是全局变量,所以作用域是从说明开始到程序结束。它的存储方式是静态型,所以它的生存期是从说明开始到整个程序执行结束。外部变量有定义性说明和引用性说明两种形式,定义性说明作用是定义一个外部变量,不需要使用Extern。若外部变量在程序的后面说明,当前不能直接使用,若要使用就必需使用Extern进行引用性说明。
④寄存器型(Register)
Register关键字用于声明寄存器变量,频繁使用的变量声明为Register型可以提高程序效率,也可以交给编译器自行优化(编译器一般把循环控制变量存储类型定为Register),Register类型的变量受处理器寄存器长度的限制,不符合要求的Register变量将会被处理成Auto型内存变量。Register变量在作用时驻留于处理器的寄存器,故其作用域也只限于相应的函数和复合语句,和Auto类似。
总之,C语言中的变量类型丰富,运用灵活。只有多想、多练、多编写程序,我们才能真正掌握其中的含义。
参考文献:
篇8
关键词: C程序设计 运算符 预算顺序 算法 结构
一、引言
现在许多院校的计算机专业开设了C语言课程,将其作为学生学习程序设计技术的入门课程,这与C语言的特点是分不开的。C语言不但可以编写系统软件,而且可以根据用户的需要编写出满足用户要求的应用软件,尤其是C语言具有很好的对计算机的硬件编程能力。同时,C语言具有逻辑性强、处理问题周密、严谨的特点,是集知识和技能于一体,实践性很强的课程。学生通过学习C语言可掌握程序设计的一些基本方法和技巧。然而C语言的数据类型较多、表达式丰富、语法结构较复杂,是一门教师难教、学生难学的课程。
《C程序设计》的内容很丰富,按照我们现在的教学大纲,教学的主要内容是基础知识、四种结构的程序设计、函数与数组的应用和一些简单的算法。在学习时,同学们应该把主要精力放在这些部分,多进行练习和上机调试。当然,在初学C语言时,可能会遇到有些问题理解不透,或者表达方式与以往数学学习中不同(如运算符等),这就要求不要气馁,不明白的地方多问多想,鼓足勇气进行学习,待学完后面的章节知识,前面的问题也就迎刃而解了。学习C语言始终要记住“曙光在前头”和“千金难买回头看”。学习后面的知识,不要忘了回头弄清遗留下的问题和加深理解前面的知识。这是我们学生最不易做到的,然而却又是最重要的。学习C语言就是要经过几个反复,才能前后贯穿,积累应该掌握的C语言知识。那么,我们到底该如何学好《C程序设计》呢?
二、奠定基础――了解、学好运算符和运算顺序
C语言的运算非常灵活,功能十分丰富,运算种类远多于其他程序设计语言。在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单。但初学者往往会觉得这种表达式难读,关键原因就是对运算符和运算顺序理解不透不全。当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则显得十分重要。在学习中,只要我们对此合理进行分类,找出它们与我们在数学中所学到运算之间的不同点之后,记住这些运算也就不困难了,有些运算符在理解后更会牢记心中,将来用起来会得心应手,而有些可暂时放弃不理,等用到时再记不迟。对于运算符的优先级也是必须明确的。《C程序设计》运算符可分为15种优先级,从高到低,优先级为1―15,且除第2、3级和第14级为从右至左结合外,其他都是从左至右结合,它决定着同级运算符的运算顺序。这里就给大家介绍一个优先级口诀:
括号成员第一
全体单目第二
乘除余三、加减四
移位五、关系六
等于(与)不等排第七
位与异位和位或
“三分天下”八九十
逻辑或跟与
十二和十一
条件高于赋值
逗号运算级最低。[1]
下面我们来举个例子:
a=3;b=5;c=++a*b;d=a++*b;
对于c=++a*b来说,按表中所列顺序,++先执行,*后执行,所以++a执行后,a的值为4,由于++为前置运算,所以a的值4参与运算,C的值计算式为4*5=20而不是3*5=15了。而对于d=a++*b来说,由于a++为后置运算,所以a值为4参与运算,使得d的值仍为20,而a参与运算后其值加1,值为5。这个例子执行后,a的值为5,b的值为5,c的值为20,d的值也是20。
三、砌砖垒墙――了解、学好四种程序结构
(1)顺序结构
顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。例如:a=3,b=5,现交换a,b的值。这个问题就好像交换两个杯子的水,这当然要用到第三个杯子,假如第三个杯子是c,那么正确的程序为:c=a;a=b;b=c;执行结果是a=5,b=c=3。
(2)分支结构
顺序结构的程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构。分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。分支结构适合于带有逻辑或关系比较等条件判断的计算,设计这类程序时往往都要先绘制其程序流程图,然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。程序流程图是根据解题分析所绘制的程序执行流程图。学习分支结构不要被分支嵌套所迷惑,只要正确绘制出流程图,弄清各分支所要执行的功能,嵌套结构也就不难了。嵌套只不过是分支中又包括分支语句而已,不是新知识,只要对双分支的理解清楚,分支嵌套是不难的。那么就先来简单介绍一下二分支选择结构。C语言的if语句有两种基本形式,即独立的if结构和if-else结构。[2]其语法形式如下:
1)独立的if结构
if(表达式)
语句
2)if-else结构
if(表达式)
语句1
else
语句2
再来看一下分支嵌套的语法形式
if(表达式1)
if(表达式2)语句1
else语句2
else语句3
(3)循环结构
循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构。C语言中提供四种循环,即goto循环、while循环、do-while循环和for循环。[3]四种循环可以用来处理同一问题,一般情况下它们可以互相代替换,但一般不提倡用goto循环,因为强制改变程序的顺序经常会给程序的运行带来不可预料的错误,在学习中我们主要学习while、do...while、for三种循环。常用的三种循环结构学习的重点在于弄清它们相同与不同之处,以便在不同场合下使用,这就要清楚三种循环的格式和执行顺序,将每种循环的流程图理解透彻后就会明白如何替换使用,如把while循环的例题,用for语句重新编写一个程序,这样能更好地理解它们的作用。特别要注意在循环体内应包含趋于结束的语句(即循环变量值的改变),否则就可能成了一个死循环,这是初学者的一个常见错误。对于它们的异同点,我们也应该了解,明确:用while和do...while循环时,循环变量的初始化的操作应在循环体之前,而for循环一般在语句1中进行的;while循环和for循环都是先判断表达式,后执行循环体,而do...while循环是先执行循环体后判断表达式,也就是说do...while的循环体最少被执行一次,而while循环和for就可能一次都不执行。另外还要注意的是这三种循环都可以用break语句跳出循环,用continue语句结束本次循环,而goto语句与if构成的循环,是不能用break和continue语句进行控制的。[4]在这里介绍一下三种常见循环的一般格式:
1)while循环:
while(表达式)
循环体
2)do-while循环:
do
循环体
while(表达式)
3)for循环:
for(表达式1;表达式2;表达式3)
循环体语句(组)
(4)模块化程序结构
C语言的模块化程序结构用函数来实现,即将复杂的C程序分为若干模块,每个模块都编写成一个C函数,然后通过主函数调用函数及函数调用函数来实现一大型问题的C程序编写。因此常说:C程序=主函数+子函数。因此,对函数的定义、调用、值的返回等中要尤其注重理解和应用,并通过上机调试加以巩固。[5]
其实,顺序结构、分支结构和循环结构并不是彼此孤立的,在循环中可以有分支、顺序结构,分支中也可以有循环、顺序结构,但是不管哪种结构,我们均可广义地把它们看成一个语句。在实际编程过程中常将这三种结构相互结合以实现各种算法,设计出相应程序,但是要编程的问题较大,编写出的程序就往往很长、结构重复多,造成可读性差,难以理解,解决这个问题的方法是将C程序设计成模块化结构。[6]
四、修饰――掌握一些简单的算法
所谓算法,就是解决某类问题的方法。确切地说,就是对某一类特定的问题,给出解决该问题的一系列(有穷的)操作,而每一操作都有其确切的意义,并在有限时间内可以计算出结果。一个算法有多少个输入量,它是问题给出的初始数据,经过算法的实现,它有一个或多个输出量,这就是算法对输入运算的结果,即问题的解答。《C程序设计》教学大纲,只要求我们掌握一些简单的算法,在掌握这些基本算法后,要完成对问题的分析就容易了。[7]如两个数的交换、三个数的比较、选择法排序和冒泡法排序,这就要求我们要清楚这些算法的内在含义,其中选择法排序和冒泡法排序稍难,但只要明白排序的具体过程,对代码的理解就不难了。如要将两个变量X、Y的值交换。
用自然语言描述如下:
步骤1,将X值存入中间变量Z中:XZ。
步骤2,将Y值存入变量X中:YX。
步骤3,将中间变量Z值存入Y中:ZY。
用伪代码可表示如下:
BEGIN
xz
yx
zy
END
当然还可以用流程图表示,这里就不列举了。
五、结语
在大学里,许多学C语言的人,都有着不同的目的。有的人是认真对待每一门所学的课程,包括C语言,有的人是对程序设计有着浓厚的兴趣,还有的人只是为了获得学分而学习C语言。这样,一部分人会觉得C语言容易学,一部分人又会觉得C语言难学,还有一部分人会觉得C语言容易学,但是不会编写程序。这样就导致了学习C语言效果的差异。其实,学习C语言并不是进行一种职业培训,而是一种综合思维的训练。我们应当正确认识什么是程序,并学会一种思考问题的方法,初步掌握用C语言来进行程序设计。
参考文献:
[1]田祥宏,荣政.C语言程序设计.西安电子科技大学出版社,2007.
[2]李丽娟.C程序设计基础教程.
[3]Stephen Prata著.云巅工作室译.C Primer Plus.
[4]Kenneth A.Reek著.徐波译.C和指针POINTERS ON C.
篇9
关键字:“C语言”;C;AI-CODE;游戏教学;程序设计
前言
传统的计算机程序设计教学方式大部分都是以教师讲授为主,而学生被动地接受知识。这种教育模式往往存在着枯燥乏味、无趣,而且很大程度上存着单向性(也就是常说的填鸭式教学),教授者和被教授者之间缺乏互动性,使学生普遍产生学习只为了应付考试等厌学的情绪,不能积极地发展和挖掘学生的智力,甚至会扼杀学生的求真求新的天性,他们的创造力逐渐在枯燥无味的程序设计教学中消磨殆尽。
如何能让学生能体会到学生程序设计的乐趣,并逐渐地像迷上“网络游戏”那样“迷上”程序设计的学习呢?
“游戏教学”是旨在用一种寓教于乐的高效学习方法,利用人们“爱玩”的天性,让学习者在“玩”中学习,从而充分调动学习者的学习兴趣,使学习的效率和主动性得到极大的提高。正如苏格拉底的名言:教育不是灌输,而是点燃火焰!
一、AI-CODE游戏系统简介
AI-CODE游戏教育平台是一套全新的教育平台,以寓教于乐的游戏教育方式,打破了传统的教育模式??么蠹以诜茄蛊鹊木杭贾胁恢痪醯靥岣咦约旱募扑慊绦蛏杓扑胶拖喙氐氖А⑽锢怼⑼纭⑷斯ぶ悄艿妊Э浦兜挠τ盟健I-CODE为程序和算法设计的学习和实践提供了全方位的环境,由于其游戏主题的有趣性、直观性,使学生在学习的同时感到了快乐和成就感,而在娱乐的同时发现自己以前的知识不够用,所以为了得到更多的快乐和成就感,便又投入于学习中,让学生在玩,学习,玩,学习的循环的过程中不断提高自己的程序设计和策略算法设计的水平,整个过程是一个自主的学习过程,是一种逐渐“迷上”的过程,而非被强迫的。AI-CODE学习三者的关系如下图:
AI-RCJ是AI-CODE中一套虚拟足球机器人的制作和竞技仿真的教育平台,并实现了C、C++、Java、C#等多种编程语言同台竞技。为了让自己的足球在竞技中具有良好的攻防性和机动性,必须给虚拟足球机器人赋予一定的智能,智能化程度的高低取决于使用者数学、物理、计算机等相关学科知识的灵活运用程度。AI-RCJ界面如下图:
二、快乐的学习之旅
下面在“AI-RCJ”教育平台上,以几个简单的例子展示C语言的快乐学习之旅,在这些快乐的有“成就感”的竞技中逐渐掌握C程序设计语言一些关键语法,体会到“游戏教学”的乐趣。
(一)我的第一个会动的机器人
在AI-RCJ教育平台中我们只须书写几句简单的代码,就立刻可以看到一个会动的“足球机器人”,会让我们马上感到有些小小的“成就感”,并吸引我们继续的深入。
#includeairobot/c/SimpleRobot.h
/**
*机器人执行函数
*/
voidrun()
{
/*在这里添加控制机器人的代码*/
doMoveTo(30,30);/*移动到坐标点(30,30)*/
}
这段代码代表了一个“函数”,这个函数的名字叫做run。函数是c语言程序的一个主要组成部分,每个函数都有自己的名字,并且可以完成相应的功能。run函数只由单个语句组成,doMoveTo(30,30)完成控制机器人移动到(30,30)这个坐标点。
(二)让机器人会撞球
要让机器人撞击足球就要知道足球的坐标。在程序中调用getBallX和getBallY可以获取足球的坐标。
voidrun(void)
{
doubleballX,ballY;/*定义两个变量*/
ballX=getBallX();/*获得足球的x坐标*/
ballY=getBallY();/*获得足球的y坐标*/
doMoveTo(ballX,ballY);/*向足球撞击*/
}
在run函数里面,第一条语句定义了两个“变量”,变量是c语言中的一个基本元素,可以用它们来存放不同的数值,程序设计中变量的作用和代数中的未知数的作用类似。在使用一个变量之前,必须先定义它,“doubleballX,ballY;”这条语句完成了变量的定义。这两个变量的名字是ballX和ballY,以后可以通过这两个名字来使用变量,就像使用函数的名字来调用一个函数一样。变量是有“类型”的,变量的类型规定了变量可以存放什么样的数据,ballX和ballY这两个变量的类型是double,表示他们可以存放浮点数,也就是我们通常所说的小数。转载于范文中国网。
语句ballX=getBallX()使用了变量ballX,这是一个“赋值语句”,等号“=”将赋值
语句分成了左右两部分,等号的左边一般是一个变量,等号表示赋值操作,就是把右边的数值存放到左边的变量当中,在这里等号并不是要表示两边的内容相等。在这条赋值语句中,等号右边的部分是一个函数调用,被调用的函数叫getBallX,这个函数是一个有“返回值”的函数,这表示调用这个函数后,我们可以得到一个数值,这个数值代表了函数执行的结果。getBallX函数的返回值是足球的ballX坐标。赋值语句“ballX=getBallX();”把getBallX函数的返回值保存到了变量ballX里,执行这个语句的时候,实际上发生了两件事,首先是调用getBallX函数,并取得函数的返回值,然后就是将这个返回值保存到变量ballX里。语句ballY=getBallY()是类似的,这条语句把对手的ballY坐标保存到的变量y里。
现在知道了足球当前的坐标,语句“doMoveTo(ballX,ballY);”完成了向足球所在位置撞击的工作。在这里我们将变量ballX,ballY作为参数传递给doMoveTo函数,因为变量ballX,ballY里存放了足球所在位置的坐标,通过用这两个变量作为参数调用doMoveTo函数,也就是将足球所在位置作为撞击的目标点,实现向足球所在位置撞击。
但我们看到机器人在刚开始时撞击了一下足球,之后便停止不动。
如何能让机器人能不断地撞球呢?我们用一种新的语句:循环语句,实现一个不断撞击足球的机器人。
voidrun(void)
{
doubleballX,ballY;/*定义两个变量*/
while(1){
ballX=getBallX();/*获得足球的x坐标*/
ballY=getBallY();/*获得足球的x坐标*/
doMoveTo(ballX,ballY);
}
}
就这样让我们体会到循环语句的“威力”!(三)让机器人聪明起来——避免“乌龙”球
好了,我们的机器人已经能动起来啦,但如何让我们的机器人变“聪明”起来呢?能实现一个可以根据自己的进攻方向和足球的运动方向来尽量避免踢“乌龙”球的机器人。
我们会不知不觉地想办法去不断学习,让我们机器人越来起“聪明”!
voidrun(void)
{
intshoot;/*定义控制变量*/
doubleballHeading;/*定义变量,存储球的运动方向*/
doubleheading;/*定义变量,存储机器人的进攻方向*/
doubleballX,ballY;/*定义变量,存储球的ballX,ballY坐标*/
doublegoalMin,goalMax;
doublecourtWidth,courtHeight;
doublegoalSize;/*定义变量,存储球门的大小(宽度)*/
/*定义变量,存储球的运动直线方程ballY=k*ballX+b中的b和k*/
doubleb,k;
heading=getAttack();/*得到机器人的进攻方向*/
courtWidth=getCourtWidth();/*得到场地的宽度*/
courtHeight=getCourtHeight();/*得到场地的高度*/
goalSize=getGoalSize();/*得到球门的大小*/
goalMin=courtHeight/2-goalSize/2;
goalMax=courtHeight/2+goalSize/2;
while(1){
/*求出足球的运动直线*/
ballX=getBallX();
ballY=getBallY();
ballHeading=getBallHeading();
k=tan(ballHeading);
b=ballY-k*ballX;
/*如果机器人是由左向右进攻,而且当前球的运动方向是由右向左运动*/
if(heading0ballHeadingPI/2ballHeadingPI*3/2){
if(goalMin50*k+bgoalMax50*k+b){
shoot=0;
}else{
shoot=1;
}
}
/*如果机器人是由右向左进攻,而且当前球的运动方向是由左向右运动*/
elseif(heading=0
(ballHeading=0ballHeadingPI/2
||ballHeading2*PIballHeading3*PI/2))
{
if(goalMink*courtWidth+b
k*courtWidth+bgoalMax){
shoot=0;
}else{
shoot=1;
}
}
/*其他情况*/
elseshoot=1;
if(shoot==1){
doMoveTo(ballX,ballY
}else{
doTurnTo(PI*3/2);
doMoveBack(300);
}
}
}
通过循环语句(while)和选择语句(if)等知识的综合应用,让我们的机器人变得越来越“聪明”啦。接着下来,我们又会想让我们的机器人变成有策略的进攻和防守,团队协作。。。。。。,最后让整个“足球”比赛变得越来越有意思,学习变得越来越有趣。
四、结语
AI-CODE中的AI-RCJ让学生在这“虚拟足球竞技”的教育平台上,让自己的机器人动起来,不断地撞球,聪明起来,有策略的进攻和防守。。。。。。等一系列有“成就感”的快乐游戏中,逐渐“迷上”程序和算法设计。为了更好地“玩”,不断地学习,不断地提高自己的计算机程序设计水平和策略算法设计水平,真正体会到寓教于乐的乐趣!
参考文献
[1]龚睿.AI-CODESYSTEMS在智能机器人教学中的应用[J].2004.
[2]沙有威.程序设计教学的新载体——智能机器[J].2002.
篇10
关键词:C语言 图形函数 应用
引言
C语言是国际上广泛流行的很有发展前途的计算机高级语言。它既具有一般计算机高级语言的可读性、可移植性的特点,又具有低级语言能够对计算机硬件进行操作的特性,因此,它适合用于操作系统的描述语言,用C语言开发系统软件和应用软件。但在87ANSIC中并没有规定C语言的图形功能,许多C语言教材没有介绍C语言的图形功能,这给许多需要用C语言设计完美、漂亮的用户界面的初学者带来了困难[1-2]。本文旨在通过介绍Turbo C 2.0的主要图形函数及一个具体的实例简介这些函数的用法。
1 与图形绘制有关的系统硬件[2-3]
要使计算机能够绘制图形,必须有一定的硬件基础作为保障。图形绘制的硬件基础主要是显示器和显示卡。显示器的工作方式一般有文本方式和图形方式。要在屏幕上显示图形,必须将其设置成图形方式。衡量显示器的主要性能指标是点距和分辨率。目前显示器常用的点距有0.39mm、0.31mm和0.28mm三种。高档微机配置的彩色显示器目前流行的是VGA档次,它最低的分辨率为640×480,中档的是800×600,高档的是1024×768。显示器必须与显示卡配套使用才能发挥其图形功能。显示卡所能支持的不同分辨率的显卡类型称为显示模式。下表给出Turbo C中常用的几种显示卡的图形模式:
2 Turbo C 2.0中与绘图有关的常用图形函数
2.1 设置图形工作方式的函数:initgraph()。
Turbo C绘图,首先必须设置显示器为图形方式。该函数通过选定参数可确定显卡的类型及图形模式。
如:
int driver,mode;
driver=IBM8514;
mode=IBM8514HI;
initgraph(&driver,& mode,“c:\temp”);
将图形方式设置为IBM8514类型,IBM8514HI图形模式,1024×768的分辨率,搜索路径temp为C盘一级子目录。
2.2 颜色控制函数setbkcolor(int color)及setcolor(int color)。
其中setbkcolor( )设置背景颜色,setcolor( )设置划线颜色。
2.3 基本绘图函数
A. line(int x1,int y1,int x2,int y2)
功能:从点(x1,y1)到点(x2,y2)画一直线。
B. arc(int x,int y,int stange,int endangle,int r)
功能:以(x,y)为圆弧的中心,以stange为起始角度,以endangle为终止角度,以r为半径作一圆弧。
C. setfillstyle(int pattern,int color)
功能:用参数pattern所确定的填充模式,用参数color确定的颜色进行填充。
D. floodfill(int x,int y,int color)
功能:填充一个含有点(x,y)在内的有界封闭区域,这个有界封闭区域的边界由参数color确定,填充模式与填充颜色由函数setfillstyle设定。
2.4 字符输出函数
A. settextstyle(int font,int direction,int size)
功能:在图形方式下设置字符的字体,式样和放大因子。
B. outtextxy(int x,int y,char &str)
功能:在窗口(x,y)的位置输出字符或字符串。
C. getch( )
功能:从控制台取得一字符且不输出,用来使程序暂停,按任意键后使程序继续运行。
3. 绘制一个圆饼型统计图的程序如下
#include
main( )
{ int driver,mode;
driver=VGA;
mode=VGAHI;
initgraph(&driver,&mode,“ ”);
setbkcolor(0);
setcolor(15);
arc(320,240,0,360,180);
line(320,240,500,240);
line(320,240,443,112);
line(320,240,266,70);
line(320,240,200,374);
setfillstyle(4,2);
floodfill(340,230,15);
setfillstyle(5,9);
floodfill(340,180,15);
setfillstyle(7,4);
floodfill(300,240,15);
setfillstyle(8,3);
floodfill(340,280,15);
setcolor(14);
settextstyle(1,0,4);
outtextxy(410,180,“14%”);
settextstyle(1,0,4);
outtextxy(330,110,“16%”);
settextstyle(1,0,4);
outtextxy(200,200,“34%”);
settextstyle(1,0,4);
outtextxy(340,310,“36%”);}
上述程序在Turbo C 2.0中上机通过编译、连接、运行,可得到精美的圆饼型图。读者通过阅读并上机调试运行该程序可以对C语言的图形设置、绘制;颜色的控制、填充等函数的应用有一个感性的认识,对复杂枯燥的C函数提高学习兴趣。
结语
目前许多C语言教材很少介绍C语言的图形功能,而许多C语言学习者对C语言的图形功能很感兴趣,为帮助初学者学习C语言绘图函数并提高学习兴趣,本文简单介绍了C语言一些常用的绘图函数及其应用,权当抛砖引玉!还有一些图形函数没有列出,读者若有兴趣可参阅《C语言函数大全》。
参考文献:
[1]徐士良.PC机C图形编程手册.北京:清华大学出版社,1994.2.
[2]谭浩强.C程序设计(第二版)[M].北京:清华大学出版社,1999.