c语言程序范例6篇

前言:中文期刊网精心挑选了c语言程序范文供你参考和学习,希望我们的参考范文能激发你的文章创作灵感,欢迎阅读。

c语言程序

c语言程序范文1

关键词:Java;JNT;C++;DLL

在现今的软件开发领域中,Java以其跨平台的优势得到大量的应用,其代码可以一次编译多处执行。但这种特性给Java带来了一定的局限性,幸好Java提供了完备的C/C++语言接口,这样我们可以利用C语言的强大功能实现Java难以实现的功能,在一定程序上消除Java的局限性和低效率。

JNI是Java Native Interface的英文缩写,中文翻译为本地调用,自从Java 1.1开始就成为了Java标准的一部分。

C/C++是系统级的编程语言,可以用来开发任何和系统相关的程序和类库, 但是Java本身编写底层的应用比较难实现,使用JNI可以调用现有的本地库,极大地灵活了Java的开发。

C/C++的效率是目前最好的语言,可以使用C/C++来实现一些实时性非常高的部分。 C/C++和Java本身都是非常流行的编程语言,一些大型软件中经常使用语言之间的混合编程。

一、创建DLL文件

使用某一种C/C++开发工具创建Dll文件,实现某一功能,供JAVA调用,例如本文在此使用Visual studio 2005创建一个名为testdll的动态库文件。

二、使用JNI

JNI是Java Native Interface的缩写,中文为JAVA本地调用。它允许Java代码和其他语言写的代码进行交互。

1.JAVA类

在JAVA程序中,首先需要在类中声明所调用的库名称,如下:

static {

System.loadLibrary(“testdll”); //加载动态库,testdll为DLL文件名称

}

还需要对将要调用的方法做本地声明,关键字为native。并且只需要声明,而不需要具体实现。如下:

public native static void set(int i);

public native static int get();

然后编译该JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就会生成C/C++的头文件。

例如程序testdll.java,内容为:

public class testdll { static { System.loadLibrary(“testdll”); } public native static int get(); public native static void set(int i); public static void main(String[] args) { testdll test = new testdll(); test.set(10); System.out.println(test.get()); } }

用javac testdll.java编译它,会生成testdll.class。

再用javah testdll,则会在当前目录下生成testdll.h文件,这个文件需要被C/C++程序调用来生成所需的库文件。

2.C/C++

创建C/C++项目需要增加的头文件有jni.h、jni_md.h这两个文件是JNI中必须的;还有就是增加testdll.h。

对于已生成的.h头文件,C/C++所需要做的,就是把它的各个方法具体的实现。然后编译连接成库文件即可。再把库文件拷贝到JAVA程序的路径下面,就可以用JAVA调用C/C++所实现的功能了。

接上例子。我们先看一下testdll.h文件的内容:

#include #ifndef _Included_testdll #define _Included_testdll #ifdef __cplusplus extern "C" { #endif JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv * jclass); JNIEXPORT void JNICALL Java_testdll_set (JNIEnv * jclass jint); #ifdef __cplusplus } #endif #endif

在具体实现的时候,我们只关心两个函数原型 JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv * jclass);和 JNIEXPORT void JNICALL Java_testdll_set (JNIEnv * jclass jint);这里JNIEXPORT和JNICALL都是JNI的关键字,表示此函数是要被JNI调用的。而jint是以JNI为中介使JAVA的int类型与本地的int沟通的一种类型,我们可以视而不见,就当做int使用。函数的名称是JAVA_再加上java程序的package路径再加函数名组成的。参数中,我们也只需要关心在JAVA程序中存在的参数,至于JNIEnv*和jclass我们一般没有必要去碰它。

下面我们用testdll.cpp文件具体实现这两个函数:#include "testdll.h" int i = 0; JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv * jclass) { return i; } JNIEXPORT void JNICALL Java_testdll_set (JNIEnv * jclass jint j) { i = j+5; }

编译连接成库文件,这里就是testdll.dll。把testdll.dll拷贝到testdll.class的目录下,java testdll运行它,就可以观察到结果了。

三、总结

使用JNI可以在JAVA中调用其它语言编写的代码,在一定程度上消除JAVA的局限性和低效率。

参考文献:

c语言程序范文2

【关键词】C语言程序设计;教学内容;教学手段;教学方法;教学改革

C语言是一种广泛使用的程序设计语言,它具有高级语言的特性与直接操纵计算机硬件的能力。因而,在当前许多高校中,C语言被列为程序设计课程的首选语言,成为了计算机专业的必修课程,也越来越多地被非计算机专业所采用[3]。然而在《C语言程序设计》课程的教学中,由于C语言概念比较复杂,规则繁多,同时在实践中又具有灵活多变运用,所以教师对于课程教学难易度的把握有困难,学生对于课程的学习与实践亦感到迷惑,甚至产生一些畏难心理[2]。作为实践性很强的C语言程序设计课程,它的学习有自身特点:光听只看是不够的,还必须加以练习,通过大量的编程训练,反复夯实语言的概念基础,并在实践中培养程序设计的基本能力,逐步理解和掌握程序设计的思维与方法。所以,C语言程序设计课程的教学重点是培养学生的实践编程能力,以程序设计为中心来组织课程内容。在笔者多年的教学实践中,针对《C语言程序设计》课程的难点与特点,在教学内容、教学手段、教学方法等方面做出了一些改革与尝试,收到了较好的教学效果。

1、教学内容的改革[1][3]

1.1课堂教学内容的改革

目前关于C语言的教材很多,内容主要包括数据类型、表达式、分支、循环、函数、数组、指针、结构体、文件的概念和应用以及指针和各种构造类型的混合运用、基本算法等。很多教材侧重于语言本身的理论体系介绍,而对于编程方面的介绍却相对较少,这样的安排虽然突出了知识结构的认识,但是也弱化了学生的程序设计能力和语言应用能力,而这些能力对于学生学好这门课程又恰恰是至关重要的。笔者在教学中,尝试以程序设计为向导,辅以编程应用,将案例和问题引入课堂,使学生尽快建立起程序设计的思想和方法,然后在这些框架上穿插讲解相关的语言知识。在前几次课中,简单介绍相关的背景知识和利用编程求解问题的过程,然后引入实例,在对问题的解决过程中介绍顺序、分支和循环3种控制结构以及函数的使用,使学生对C语言有一个大概的了解。然后深入讲解程序设计的思想和方法,并演示应用C语言解决问题。通过实例程序的引入来介绍语言知识,在每节课中介绍一些程序设计的方法、技巧以及编程中的常见错误,并设置练习题,鼓励学生多思考、多练习,提高综合能力,每章课程结束后, 设置综合性的习题,包括本章的综合以及从第一章到本章的综合,主要是程序设计题。学生要想学会并应用C语言进行程序设计,除了对程序设计语言了解外,更重要的是在实践中领会并掌握程序设计的基本思想和方法,要求学生从开始学习C语言起就试着编写程序,先模仿例题中的程序,然后尝试加以改写,循序渐进,最后能独立地编写程序来解决比较复杂的问题。

1.2实验教学内容的改革

C语言的教学特别需要重视实践环节,包括编程和上机实验。针对不同水平的学生,笔者在教学班中抓两头,学得好的学生鼓励给大程序,难一点的实验,学得一般的学生做基础性的题目。在保留基础性实验的同时,增加一些实用性强的、难度略大的实验,并组织学生讨论得出算法流程,然后上机编程调试。

按照实验指导书上的内容,每个实验内容以编程题为主,学生可以先模仿课堂案例操作,然后再做实验题,通过“模仿-改写-编写”三步曲的上机实践过程,在循序渐进的引导中逐步熟悉编程环境,理解和掌握程序设计的思想、方法和技巧,以及程序调试方法[4]。

实验题分为必做题和选做题,在实验过程中针对学生有问题的程序统一讲解,然后再选一个有错误的程序让学生自己找错误(开始一个月内的时间,让学生学会找到语法错误)。这样学生能力会提高很快,在后期发现逻辑错误,也会自己先找出,然后再求助老师。实验题量一次课(2节课)至少留6-8题实验。

2、教学手段的改革

运用多媒体技术辅助教学,是当前课堂上很流行的一种教学手段,因为这种方式包含的信息量大、丰富,学生学习起来感觉生动,提高了学习的兴趣,同时也能够优化教学过程。但是多媒体辅助教学的弊端也越来越被了解,比如不恰当的使用会分散学生注意力,甚至影响学生对主要问题的理解。所以将多媒体教学引入C语言程序设计课程教学过程中,必须要考虑到两者的特点与优势,取长补短,将传统教学与多媒体教学进行有机的结合。比如:对于C语言的概念性知识点如数据类型、变量类型、运算符、程序结构等,可以采用多媒体教学,通过课件的制作,既满足了课堂上演示的需要,也简化了传统教学大量板书的缺点。而对于程序的编写或案例的分析,就需要发挥传统教学的优势,更灵活的进行板书讲解、课堂讨论,使问题在师生之间的良性互动中得以解决。因此,教学中将各种手段如PPT、板书、现场编程并运行等多种手段有机结合,使得课堂教学达到最优化,如果条件允许尽量现场编程(或事先准备好的程序),学生可以学习教师的思路考虑问题,收到更好的效果,同时也能加快教学进度。

另外,利用网络资源的便利性,将大纲、电子教案、课件、练习题等放在网络上,方便学生随时查用学习,同时通过飞信、QQ、Email等网络交流手段与学生进行答疑、讨论等互动交流,从而扩展了课堂教学的空间。

赏识学生,注重学习兴趣的培养。在教学过程中,教师应运用多种信息技术适时的辅导,创设丰富的情境,发挥最佳效应,运用多种教学手段激发学生主动学习获取知识的热情。

c语言程序范文3

关键词:C语言;空指针;NULL

中图分类号:G642 文献标识码:B

1引言

指针在C语言编程中占有非常重要的地位,使用指针可对内存进行动态分配、直接访问内存以及表示复杂的数据结构等。正确而灵活地使用指针可编写出优质的程序,可以说指针充分体现了C语言的优点。但由于指针具有高度的灵活性,对它的完全掌握也较为困难。

在某些场合下会使用到一种称为空指针的指针,由于这种指针在程序中不以普通指针的形式出现,并没有对它进行显式的定义或赋值,所以常常被忽视,但作为指针的一类,空指针这一概念却是不应该被忽略或混淆的。

那么,什么是空指针呢?

2空指针的概念

空指针是一种不指向任何对象的指针,它的值为NULL。NULL在中是这样定义的:

#define NULL0

或:

#define NULL 0L

也即是说,NULL的值是一个纯粹的零,这样,空指针就与普通指针有了区别:空指针的值是一个整型值,而普通指针值是不允许是整型值的。但这个纯粹的零需要时可以被强制转换成void *或char *类型。

3空指针的用途

3.1用作函数调用失败时的返回值

某些函数的返回值是一个指针,若函数调用成功,返回一个指向某一对象的指针;反之则返回一个空指针。很多C库函数在调用失败时的返回值就是一个指针,如:

#include

main( )

{char *string[5];

int i=0;

while(i

{if((string[i]=(char *)malloc(32))= = NULL)

{ printf(“failure”);

exit(0);

}

else

gets(string[i];

i++;

}

for(i=0;i

}

这个程序中定义了一个指针数组分别指向五个字符串,这五个字符串的存储位置在是程序执行过程中调用malloc( )函数动态分配得到的,若分配失败,malloc( )函数的返回值即为一个空指针,程序中if语句的条件就是以判断malloc( )函数的返回值是否为空指针来确定程序的流向。

3.2用来终止对递归数据结构的间接引用

单链表是一种常见的递归数据结构,其结构非常简单,包含一个值域和一个指向链表中下一个元素的指针域。下面以一个只含一个整型数据域的单链表为例:

struct linklist

{intdata;

struct linklist*next;

};

在这样一个链表中,通过指向第一个元素的指针(头指针)开始引用该链表,并通过每个元素的指针不断引用下一个元素,将链表中最后一个元素的指针赋值为NULL,用以控制对该链表引用的终止。如下例是对如上定义的单链表求其长度的函数:

int length(struct linklish *head)/*head为头指针,函数结果用i返回*/

{struct linklist *p;p=head;

int i=0;

while(p!=NULL)

{p=p->next;

++i; }

return(i);

}

在本例中,while循环的执行条件“p!=NULL”判断指针p是否移动到链表尾,若该条件不成立,表示已到链表最后一个元素,终止对链表的引用。

3.3用作main函数形参argv[ ]的结束警戒值

一般情况下main函数是不带参数的,但有时它可有两个形参:argc和argv[ ]。一个带形参的main函数如下例:

#include

main(argc, argv)

int argc;

char *argv[ ];

{ int i=0;

while(argv[i]!=NULL)

{printf(“argv[%d]=%s\n”,i, argv[i]);

i++;}

}

其中argc是指在操作命令状态下执行main函数时命令行中参数的个数,argv[ ]则是一个指针数组,指向命令行各参数字符串的首地址。

若该函数编译后生成的可执行文件名为file,则可在操作命令状态下输入如下命令行:

filepara1para2para3

则argc的值为4(文件名也看作一个参数),argv[0]指向命令行中第一个字条串“file”,argv[1]指向“para1”,argv[2]指向“para2”,argv[3]指向“para3”,实际上还有一个argv[4],其值即为NULL。该程序的功能是依次输出命令行中的各参数字符串,while循环体的执行条件是“argv[i]!=NULL”,该循环体执行四次依次输出命令行中四个参数字符串后,到达指针数组的最后一个元素argv[4],其值为空,循环终止。

4关于空指针的讨论

4.1空指针与void指针的区别

空指针与void指针是完全不同的,前面已经说明空指针是不指向任何对象的,而void指针却需指向某个对象,只是这个被指向的对象是不属于任何类型的,void指针在需要时可与其它类型的指针互换。

void指针常用作指向函数的指针,而这对空指针而言是不可想象的。

4.2空指针的值是否总是为0

对于空指针的值是否总是为0这一问题,如果理解为“NULL与0比较,结果相等”,那么回答是肯定的,也就是说NULL总是等于0;但是如果将这一问题理解为“其存储方式总是与整型值0相同”,则并不一定,因为就存储方式而言,不同类型的“0”显然是不同的,所以程序中若在需要时将NULL的值强制转换成void *或char *类型后,其存储方式必然与整型的0不同了,一个字符型的0在内存中存放的是其ASCII代码的值(048),一般而言占用一个字节,而一个整型的0在内存中存放就是其本身的值(0),则所占字节数随编译系统的不同而不同,一般为两个字节,因此,在这种意义下则可说空指针的值并不一定总是为0。

4.3NULL与NUL的不同

前面在说明空指针的概念时已经知道NULL是在中定义的一个宏,其值为0或0L。而NUL则是指ASCII中第一个字符----空字符’\0’,常用作字符串的结束标志,它并不是C语言中预定义的宏,它与NULL是完全不同的。

5结束语

在程序设计语言的发展历程中,C是一个重要的里程碑。在面向对象、可视化、基于网络的程序设计语言占据主流地位的今天,C仍然是计算机专业和非计算计专业学生进入程序设计领域的重要基础。指针是C语言中的一个极为重要的概念,全面正确地掌握指针是进行C语言程序设计的必备基础。空指针虽然不像C语言中其它普通指针那样得到广泛的使用,但对其有一个明晰的概念,了解了它的用途后,对程序的阅读及实现某些编程技巧却是很有用的。

参考文献:

c语言程序范文4

目的:研究用C语言实现DSP程序设计的有关问题。方法;选取TMS320C4X系列芯片为样本,采用C语言完成了2种设置DSP中断向量表的方法。结果:用C语言实现DSP程序设计,可以使设计方法得到简化,同时能够达到提高系统集成性,节约开发与设计成本的目的,提高效率的目的。结论:应采用C语言实现DSP程序设计,以解决传统设计方法存在的问题,提高系统可靠性。

【关键词】C语言 DSP程序设计 实现

DSP程序设计语言存在很多种,汇编语言与C语言都是非常重要的组成部分。在过去很长一段时间内,前者一直是DSP程序设计所以来的主要语言,但其在实现过程中,通常存在开发周期长的特点,且维护相对困难。采用C语言实现DSP程序设计,可以有效解决这一问题,对程序设计开发效率的提高具有重要价值。

1 用C语言实现DSP程序设计的过程

1.1 中断向量表

中断向量又称中断服务程序地址,其需要装载到存储器的合适区域内,中断向量表的功能正在于此,能够通过对中断向量的定位,实现存储。目前有效的中断向量表基地质包括0x0以及0x1000等多种。

1.2 用C语言实现DSP程序设计的方法

1.2.1 将汇编语句嵌入C语言

采用该种方法实现对中断向量表的设置,其地址为0x0,需要将IVTP寄存其中:

asm (“PUSH R0”);

asm (“LDI Oh, R0”);

asm (“LDPE R0, IVTP”);

asm (“POP R0”);

纳鲜鍪迪止程中可以看出,采用将汇编语言嵌入到C语言中的方法,实现DSP程序设计,其设计过程十分简单,不仅能够有效的解决传统设计方法中存在的设计过程长,需要时间多的问题,同时其设计效果也能够达到较高的标准。由此可见,采用上述方法实现DSP程序设计很有必要。

1.2.2 采用TMS320C4X的PRTS实现DSP程序设计

在TMS320C4X系列芯片的运行过程中,需要依赖与其并行运行的支持库来提高运行的可靠性。以上述原理为基础,实现对中断向量表的设置,是一种主要的设计手段,同时也能够使设计效率得到提高,使效果得到改善。采用上述方法完成设计,地址为0x02ff800,具体实现方法与过程如下:

-1 prts40. Lib

MEMORY

{

RAMO; org=0x02ff800, len=0x400

SECTIONS

}

“. Vector”:{}>RAM0

中断向量表设计完成之后,其安装的过程与方法如下:

#include

voide-int99 (void)

{

set -ivtp (DEFAULT);

Install-int-vector((void*)e-int99, 2);

相对于将汇编语言嵌入到C语言中的方法而言,采用该种方法实现设计,其过程相对复杂,但实现效果相对较好。

2 结果

在C语言的支持下,采用上述两种方法实现对TMS320C4X系列芯片的设计,增强了芯片应用系统的集成度,使其得到了极大的增加,在此基础上,降低了设计成本,相对于传统汇编语言而言,其经济性得到了体现,同时芯片的性价比也得到了提高。除此之外,以将汇编语言嵌入到C语言中的设计方法为例,其同时具有设计过程简单,设计效率高的特点,这同样成为了其主要优势之一,对于以该芯片为主的产品设计效率的提高能够起到积极的促进作用。鉴于该设计方法易于维护与修改的特点,将其用于产品的设计,还能够使产品的升级换代过程更加简单,在社会创新水平不断提高,新产品出现速度不断加快的今天,这一优势必定能够使产品的市场占有率得到提高。

3 讨论

DSP又称数字信号处理,是随着信息化技术水平的提高而出现的一种新技术与新方法。功能在于对数字信号进行处理。数字信号主要包括一维、二维和多维三种,其维度与自变量的个数有关,一维为例,其指的是一个自变量的函数。采用DSP对数字信号进行滤波以及压缩等方面的处理,能够使数字信号得到优化,更好的体现出来。

DSP程序设计是支持DSP功能实现的基础,传统采用汇编语言实现对程序设计过程,但随着信息化水平的不断提高,以及社会对DSP程序设计水平与效果要求的增加,汇编语言中存在的问题也开始逐渐暴露出来。程序设计效率低、过程复杂、对成本要求高,均属于其缺陷的主要体现。将C语言用于DSP程序设计,能够使上述问题得到有效解决。采用将汇编语言嵌入到C语言中的方法,实现程序设计,具有设计简单,效率高的特点,且能够达到较好的设计效果,易于修改与维护。采用TMS320C4X的PRTS实现DSP程序设计的方法,同样能够达到提高设计水平的目的。由此可见,信息与通信工程领域,应加强对上述程序设计方法的重视,这对于该领域的长远发展具有重要价值。

TMS320C4X芯片作为数字信号处理的主要代表,其设计过程可以应用上述设计方法来实现。随着设计成本的降低,以该芯片为代表的数字信号处理器,必定能够被应用到更多领域当中,进而为社会的发展带来更大的促进作用。

综上所述,鉴于传统汇编语言实现DSP程序设计的方法中的缺陷已经开始逐渐暴露,将C语言应用到设计过程中,已经成为了DSP程序设计应用的主要方法之一,C语言的应用能够使设计效率得到提高,使设计成本得到降低,各领域应将C语言应用到数字信号处理过程中,以为自身的发展提供更好的保障。

参考文献

[1]胡世锋,张海涛.用C语言实现DSP程序设计的新方法[J].河北北方学院学报(自然科学版),2009(03):64-66.

[2]武晓春.用C语言设计TMS320VC54x系列DSP的用户bootloader程序[J].计算机与网络,2009(Z1):142-144.

[3]李理.用C语言设计程序实现多页程序的引导装载[J].计算机与数字工程,2007(09):200-202+214.

[4]白汉斌,刘峰,张明敏.基于TMS320C6000系列DSP的Flash编程方法[J].电子测量技术,2006(06):107-109.

[5]胡洪凯,郑红,吴冠.TMS320C54X DSP混合编程的方法研究[J].电子技术应用,2001(08):68-70.

c语言程序范文5

关键词:C语言;实验教学;教学改革

中图分类号:G434 文献标识码:A 文章编号:16727800(2012)011016703

作者简介:温菊屏(1979-),女,硕士,佛山科学技术学院电子与信息工程学院讲师,研究方向为数据挖掘、信息安全。

0 引言

《C语言程序设计》课程是大学计算机专业及理工类非计算机专业一门重要的公共基础课程,它不仅是其它高级编程语言的基础,而且通过这门课的学习可以掌握程序设计的思想。该门课程具有较强的理论性和实践性,学好这门课程将为后续专业课程的学习打下扎实的理论和实践基础。学生普遍反应,C语言课程内容繁多,虽然感觉课堂上基本听懂教学内容,但上机实验也常常显得力不从心,课堂和上机严重脱节。值得一线教师思考的是程序设计类课程上机实验的重要性丝毫不亚于课堂教学,这是巩固和发展课堂知识十分重要的一环,在抓课堂教学质量的同时,要切实重视实验教学环节。因此,必须认真思考这门课程实验环节存在的种种问题,找到解决问题的办法,切实提高实验教学的效果。

1 实验教学存在的问题

1.1 实验课效率低下

在以往上机实验课上,有相当一部分学生事先没有预习实验内容,坐在电脑前看教材、看实验指导书,而不是打开电脑动手编写程序,导致上机实验课效率十分低下,根本无法完成实验任务。

1.2 过度依赖老师解决问题

很大一部分学生在上机调试程序时,不会根据提示的编译错误找到错误所在,一味依赖教师把错误指出加以改正,造成学生发现、解决问题的能力没有得到锻炼与提高。

1.3 实验素材有待完善

通过上机实验环节,可以加深学生对讲授内容的理解,尤其是一些繁琐、枯燥的语法知识,可以通过上机实验加以巩固。因此,上机实验的素材和实验内容安排是否合理显得尤为重要。以往使用的实验教材是和教材配套的实验指导书,实验项目基本上是教材每章后面的程序编写题,每个程序代码都可以在实验指导书中找到答案,学生只需要把书中的源程序代码输入计算机,进行一些简单的调试工作。这样一来,学生只能依葫芦画瓢,无法很好地掌握所学知识点,学生丧失独立思考和创新的能力。

1.4 学生自我检测和老师测评环节缺失

学好C语言这门课程,仅靠课堂和上机实验的有限时间是不够的,需要学生课后花很多时间上机实践。以往学生课后只能依靠教材、实验指导书和课件复习所学知识点,学习资源匮乏,并且学生无法对自己知识点的掌握情况做评估,不能很好地补缺补漏。教师也没有提供阶段测评环节及时掌握学生各阶段的学习情况。

2 实验教学探索

2.1 抓好实验预习工作,培养学生良好的预习习惯

上机实验是程序设计课程一个非常重要的环节,通过上机实验编写程序,可以进一步巩固对理论知识的理解。在以往的实际教学中,教师往往容易忽视实验课前预习工作,学生事先不做准备,到机房才开始看题目思考如何编写程序,很难在有限的课堂时间内完成作业。因此,近几年的教学中,教师要求学生事先将要完成的实验程序代码在预习本上写出,在上机实验时将代码输入计算机进行调试。教师做到每次上机课检查学生的预习本,实施“没有完成预习工作的学生不能进机房”的惩罚措施,经过严格的督促,所有学生养成了事先预习的好习惯,保证了上机实验的效率。

2.2 养成良好程序书写规范,掌握程序调试工具,培养学生发现问题、解决问题的能力 以往在批改学生作业时,发现大部分学生的程序代码虽然没有语法错误,但程序书写很不规范,给查错、日后阅读带来很大的不便。程序书写应该清晰,便于阅读、理解、维护,遵循以下规则:①一个语句占一行;②使用{}时,两个花括号单独占一行,并且在同一列的位置;③低一层次的语句比高一层次的语句右缩进几个字符;④在必要的地方加上注释语句。

其实在VC 6.0编译环境中,系统有自动右缩进的功能,代码书写每次换行,系统会根据层级关系自动右缩进几个字符;并且对于没有正确采取右缩进对齐的代码,可以通过按ALT+F8组合键进行自动对齐。

由于C语言内容比较复杂,对初学者而言,很容易在编写程序时遇到各种各样问题,加上学生的英语水平有限,对于调试出现的错误和警告信息看不明白,出现问题就会有畏难情绪和依赖思想。

程序调试能力是程序设计能力一个非常重要的方面,在以往的教学中,学生调试错误能力的培养往往被忽视。很多教师在辅导上机时,只要学生出现调试错误,教师直接把错误指出,学生发现问题、解决问题的能力没有得到锻炼。

程序错误包括两类:一类是语法错误,一类是逻辑错误。语法错误是学生比较容易犯的错误,对于这类错误,教师要告诉学生找错方法。对于逻辑错误教师应该在课堂上教会学生使用调试工具,强调调试工具使用的重要性,在上机实验时,鼓励学生经常使用调试工具,特别对于循环结构的程序,通过调试工具,可以很好地观察一些重要变量的变化情况。

2.3 完善实验教材,合理安排实验内容

以往教学中,使用的实验教材是谭浩强版的《C语言程序设计题解与上机指导》,这门书的实验内容基本上是程序编写题,并且已经附有答案,学生使用该教材实验效果很不理想。

2009年10月,在广东省教育厅下达的课题“C语言程序设计立体教材开发”的资助和要求下,课题组集中精力编写了一本有助于从多个层次培养学生读程序、分析程序、修改程序以及编写程序能力的实验教材——《C语言实训教程》。该实验教材共有12个实验,其中1个验证性实验、9个设计性实验、2个综合性实验。验证性实验立足于语法规则,目的在于巩固C语言的基础语法知识。设计性实验是在给定实验目的和要求的条件下,由学生结合所学知识,自行设计实验方案并加以实现的实验,目的在于培养学生充分运用所学知识,去发现问题、解决问题。设计性实验突破以往只有编写程序题的模式,每个实验的实验任务都设置了3个层次:

(1)程序改错题:读程序找出其中的错误,通过改错训练,可以让学生掌握调试工具的使用,并且避免以后编写程序时犯类似常见错误。

(2)程序扩展题:培养学生在分析、理解原始程序的基础上,对程序进行扩充修改,为独立编写程序打下基础。

(3)程序编写题:训练学生独立编写程序能力以及解决实际问题的能力。

经过“读程序—模仿改写程序—编写程序”实验环节,让学生在由浅入深的逐步引导中理解和掌握程序设计的思想、方法和技巧。

综合性实验是学生经过一个阶段的学习之后,运用所学知识点,对实验技能和方法进行综合训练的实验。综合性实验是学生反映最难,也是收获最大的一个部分。在以往教学中,综合性实验在课程快结束的时候布置,学生面对如此综合性的实验任务,要一步到位,从无到有写出一个完整的程序,显得思绪混乱、手忙脚乱、无从下手。教师应该在学习初期就把综合性实验要求提出,演示程序,让学生直观感受课程最后要完成一个怎样的任务。在这样一个大任务的驱使下,激发学生的学习兴趣,随着知识点的不断学习,将一个简单的小程序逐步完善成一个复杂的程序。以《C语言实训教程》为例,综合性实验具体实验任务是编写一个学生信息管理系统,每个学生信息包括学号、姓名、性别、班级、3门课成绩,主要功能包括数据输入、数据输出、数据修改、按照某字段排序、查询学生信息、统计平均分及不及格科目等功能模块,通过选择不同的菜单项来实现各功能模块。此综合性实验涉及到知识点有选择结构、循环结构、函数、结构体数组等内容,基本上涵盖了C语言中所有知识点。

综合性实验不是一步到位的,而是分步骤实施,逐步完善程序代码,具体步骤如下:①在选择结构实验环节中,要求学生编写程序1.cpp:使用switch语句完成“学生信息管理系统”菜单的输出显示;②在循环结构实验环节中,要求学生修改程序1.cpp:在1.cpp基础上,使用while或do while语句实现菜单的循环显示,修改后的文件名为2.cpp;③在函数实验环节中,要求学生修改程序2.cpp:在2.cpp基础上,对每个菜单项对应设计一个空函数(只有函数名,函数体内是空语句,留待以后加以完善),选择不同菜单项则调用不同的函数,此时管理信息系统最初的程序框架已经修改,建立修改后的文件名为3.cpp;④在数组和结构体的实验环节中,要求学生把综合性实验中的每个功能模块分别用一个独立的cpp文件编写调试成功,假设有n个模块,此时程序名分别为41.cpp,42.cpp,…,4n.cpp;⑤新建一个新的cpp文件——5.cpp,在该文件中写入所有功能模块对应的函数定义,函数定义部分代码提炼于步骤4所有独立的cpp程序文件(41.cpp,42.cpp,…,4n.cpp),main( )函数里顺序调用各函数,顺序执行各功能模块;⑥要求学生修改程序3.cpp:将5.cpp程序中所有函数定义的代码,填入到3.cpp程序中对应的空函数的函数体内部,经过调试修改,最终完成综合性实验程序。

通过以上循序渐进的步骤,学生能够深刻体会如何将一个复杂的问题分解成一个个小任务加以解决,从而使得学生编写复杂程序的能力得到很好的锻炼。

2.4 借助立体化资源,培养学生自主学习能力

《C语言程序设计》课程具有信息量大的特点,仅仅依靠64学时课堂教学和上机实验无法达到良好的教学效果。因此,如何把课堂进行延伸为学生搭建一个课堂外的课堂,为学生自主学习提供一个平台是值得教师思考的一个问题。

本课题组除了编写实验教材之外,还制作了实验教材配套的辅导学习光碟,光碟中提供了每个实验项目问题分析及解决方法的讲解视频、流程图及参考程序;搭建Blackboard网络教学管理平台,BB平台除了提供学生自主学习的课程资源之外,还提供了学生进行自我测评的“在线测试”,测试题目以章节为单位,涉及单选、填空、阅读程序及编程题,此环节允许学生反复练习,点击“提交”按钮之后,客观题会自动评分并提供正确的参考答案,让学生对自己所学知识的掌握情况有个全面了解。通过“实验教材+辅导光碟+网络平台”三位一立体化的资源,使得本课程的实验教学模式由原来单一的依赖实验指导书资源学习,转变为学生依托立体化资源进行自主学习的模式。

2.5 增加阶段性测试,及时了解学生学习情况

以往教师只能通过学生提交的实验程序来了解学生知识掌握情况,而大部分实验作业是学生通过翻看教材和共同讨论完成的,教师无法了解学生掌握知识的真实情况,无法及时对掌握不好的知识点加以强化学习。针对这一问题,本课题组利用计算机技能自动测评系统对学生进行阶段性测试,通过2~3次的小测试,了解各阶段学生知识点掌握情况,及时补缺补漏。测试成绩也作为平时成绩的一部分,从而督促学生及时复习所学知识点,不至于边学边忘。

3 结语

针对多年来C语言实验教学中存在的若干问题,本课题组经过一系列教学实验改革和实践,取得了较好的效果,学生对课程和教师的满意率也显著提高。在学生对26名任课教师的教学质量评价中,有5位《C语言程序设计》任课老师排名前7名,是历年来教学评价最好的一次。由此可见,对于C语言实验教学环节,改进方法在实际教学实施过程中取得了良好教学效果。今后要在实践教学中勤于思考、时时总结、不断改进,争取在教学实践中取得更好的成绩。

参考文献:

[1]侯建花,杨长青.《C语言程序设计》实验教学的改革与实践——以淮海工学院为例[J].计算机教育,2010(1).

[2]潘丽丽,钟少宏,姜瑜.非计算机专业C语言程序设计实验教学模式[J].计算机教育,2011(18).

c语言程序范文6

关键词:C语言程序设计;以应用为本位;启发式教学

中图分类号:G642 文献标识码:A 文章编号:1009-3044(2013)10-2412-03

C语言功能丰富,应用面广,当下,很多高校依然把C语言作为非计算机专业学生的一门通识平台课开设。然而,在C语言课程的开设过程中,教师和学生不同程度地存在着缺位和误区,教与学的效果不尽如人意。在C语言的教学过程中,不少任课教师因循守旧,教学目标不清,教学方法单一,教学观念陈旧,使C语言的课堂蜕化为单纯的语法规则的灌输,使C语言的学习变为简单的语法知识的学习,学生普遍反映难学厌学。C语言程序设计课程一般面向的都是大学一年级的新生,他们刚刚结束高中生活步入大学校园,对一切充满了新鲜感和不适应感,学习观念、学习目的和学习方法有待转变和调整,学习的主体意识和自觉性有待增强和提高。针对这些问题和现象,笔者在自己的教学过程中进行一些了探索和实践,取得了一定的效果。

1 教师自觉转变教学观念,提高自身素质

纵观C语言程序设计课程的教学,现在最典型影响面最大的教学模式就是由教师和学生构成一个教学体,教师在讲台上自我表演,学生充当看客或听众【1】。所谓知识也好、信息也好,都是一个从教师到学生的单向流动。在这种以教师为主导、以教材为核心、以课堂为中心的教学模式下,教学蜕化成为一种单纯的知识传授,学生学习的积极性和主动性的调动,学生创新能力和创新思维的培养,都无从谈起。面对这样的现状和背景,教师教学观念的转变和自身素质的提高显得尤为重要。本着对学生负责,对学校负责的态度,教师应在自身责任感的驱使下,主动了解先进的教育思想和教学理念,像教学互动性、学生主体性和知识建构性等等;认真思考大学教育的功能,比如授人以鱼还是授人以渔;结合教学实际,转变教学观念,改变传统的教与学的地位,由过去的“以教师为中心”转变为“教师主导,以学生为主体”,营造民主的教学氛围;改变课堂老师单向灌输、学生被动听讲的授课模式,引入多元化的教学方法,比如启发式,探究式,引导学生独立思考,鼓励学生主动参与学习。

2 引导学生转变学习观念,培养学生学习的主体意识

C语言程序设计课程的开设面对的多数是大学一年级的新生,而对于刚入校的大学生来说,受中学养成的学习习惯的影响,学习的自主意识淡薄,学习还习惯性地全部寄托在老师身上,对老师的依附心理严重。同时,面对大学里比中学多得多的自由学习时间不知如何有效地管理和支配,对新的学习环境和新的学习生活有不同程度的不适应和困惑。面对这样一个处在比较特殊阶段的学生群体,承担C语言程序设计课程的任课教师要有针对性对学生进行引导和管理。首先,任课教师从一开始就让学生明确一个观点,即C语言是学生自己学会的,而不是老师教会的。俗话说,“师傅领进门,修行在个人”,尽管教师的教在教学活动中起着主导作用,但更重要的是学生的学,学习的主体是学生本人,只有学生充分发挥自己学习的自觉性和主动性,教师的教学思想才能得到很好地贯彻,教学效果才能得到很大的提高,整个学习活动也才会成功。其次,强化学生的责任意识。对绝大多数学生来说,如果单从年龄判断,步入大学校园也往往意味着步入成年人的行列。而成年人也就意味着要对自己负完全责任了。教师在教学过程中要不断强化学生对这一点变化的认知,让他们知道要对自己负责,对自己的学习负责,而不应再完全依赖教师或家长的监督。最后,教师的指导和管理。学习观念的转变,新的学习习惯的养成,不是一蹴而就的事情,需要在实际的学习活动中逐步完成。课前的预习、课堂的参与、课后的作业、实验的完成、期末的考试等是C语言教学活动不可或缺的环节,每一个环节里需要学生完成的任务,任课教师从一开始都给出一个明确的要求并严格按照要求去管理,将大大有益于转变学生的学习观念,培养学生学习的主体意识。

3 激发学生的学习兴趣,调动学生学习的积极性

在C语言程序设计课程的教学过程中,往往有学生反映C语言比较抽象,课堂教学又枯燥无味,很容易丧失学习的兴趣和热情。如何激发学生学习C语言的兴趣并始终保有这种兴趣,也常常是教授C语言课程的老师很头疼且又不能回避的问题。“兴趣是最好的老师”,每位教师都深知学生的学习兴趣对教学活动成功的重要性,但C语言程序设计课程侧重思维训练的特点又决定了在这方面留给任课教师的空间是有限的。笔者在自己的教学实践中做了一些尝试。

1)演示典型的完整的C语言应用,培养学生的学习兴趣

学生在学习C语言程序设计课程之初,对该门课程的学习目的和学习目标多数是模糊的,对C语言的认识也多半是空白,任课教师适当的引导很容易引起学生学习的兴趣和探究的欲望,因此该门课程的开篇很重要。笔者摒弃了以往通过文字抽象地介绍C语言的产生、C语言的特点和C语言的应用的做法,直接从演示典型的完整的C语言的应用开始。演示的程序有难有易,涉及的范围涵盖实际生活中的应用、有趣的数学问题、图形动画、游戏等。笔者一度选择了图书管理系统、文本编辑器、学生成绩管理系统、兔子产子问题、百钱百鸡问题、图形时钟、扑克牌的自动发牌、猜数游戏、五子棋游戏等应用,引起了学生浓厚的学习兴趣。

2)营造轻松的学习氛围,创造愉快的学习体验,强化学生的学习兴趣

要引起学生对C语言一时的兴趣不是一件难事,但要让学生在整个C语言程序设计课程的教学过程中始终抱有这样的学习兴趣就不是一件易事了。哪位任课教师做到了这一点,他的教学活动无疑就是成功的。C语言比较抽象,课堂教学容易枯燥无味,是一个不争的事实。为此,在实际的教学活动中,选择难易适中贴近生活的问题,比如利息的计算、持有的股票价值的计算、学生成绩的管理、募捐活动的模拟等;涉及C语言的语法特性时,尽量使用生活化的直白的语言,少用专业术语;课堂教学的开展过程中鼓励学生积极参与,对学生提出的任何有意义的问题都及时地给予肯定;面对问题,对学生做出的任何有价值的回答都及时地给予表扬,都有助于营造轻松的学习氛围,有助于让学生体验到成功的欢乐,有一种成就感,有助于强化学生学习的学习兴趣和热情。

4 践行以应用为本位的教学思路,有选择性地采用以知识为本位的教学思路

C语言程序设计课堂教学的组织有两种思路两种模式。一种是以知识为本位的教学思路下形成的“建筑模式” 【2】,课堂教学以讲授语法为主,先是提出语法概念,然后解释该语法概念,最后举例说明其应用,强调先系统学习理论打下宽厚的理论基础,然后再进行应用,讲究的是理论的系统性与严密性。另一种是以应用能力为本位的教学思路下形成的“生物模式”,课堂教学以程序设计为中心,以编程为目的,从应用的角度切入,先是提出问题,然后引导学生分析解决问题,最后着重介绍涉及的C语言的语法特性,强调结合应用学习必要的理论知识,随着应用的展开,编程难度的逐步提高,算法和语法的学习同步趋向深入,有利于学生能力的培养。

C语言系人工设定的具有确定内涵的概念和知识体系[3],同时C语言程序设计又是一门实践性很强的学科。为此,在C语言程序设计课堂教学的组织上,笔者始终践行以应用为本位的教学思路,同时根据课程内容的特点有选择性采用以知识为本位的教学思路,比如C语言中的基本数据类型、运算符和表达式、文件等基本概念和语法知识,在教学中只需把规定的内容阐述清楚,使学生理解并接受,同时又不破坏这些理论知识的系统性,就适宜采用以知识为本位的教学思路。

5 根据课程内容特征,选择灵活多样的教学方法

教学方法是在教学过程中,教师为了实现教学目的、完成教学任务而采取的教与学相互作用的活动方式的总称。C语言程序设计课程的教学目的是使学生掌握用C语言进行程序设计的基本思想和方法,并具有灵活应用这些思想和方法分析解决实际问题的能力。实现这一教学目的要完成的教学任务包括C语言基本语法的介绍,结构化、模块化程序设计思想和方法的引入,基本程序设计训练以及程序调试方法的演示等。面对这些多样的教学目标和任务,灵活多样的教学方法的选择和恰当应用成为必须。笔者在自己的教学实践中,结合课程内容的特点,有选择性地应用了如下的教学方法。

1)启发式教学,引导学生思考,在应用中学习。

在C语言程序设计的课堂教学中,根据课程内容的特点,精心设计任务或场景,引导学生发现问题、思考问题,使学生在启发诱导下获取知识,解决学习中的疑难问题。比如,在引入数组时,笔者设计了这样一个任务,即编写一个C语言成绩管理程序,要求能够统计出学生C语言成绩的平均分、最高分、最低分以及各个分数段的人数(为了说明问题的方便,假设当前要处理的有10个学生的成绩)。第一步,引导学生描述出10个学生的成绩。根据之前的学习经验,学生很容易想到用10个float类型的简单变量表示,比如score1,score2,、、、,score10。第二步,为节省时间,直接给出用这10个相互独立的简单变量实现的程序,引导学生观察。在学生感叹程序复杂之余,带领学生读程序,引导学生发现,当前的程序无论是成绩的录入、求学生成绩的最高分、最低分,还是统计各个分数段的人数,对每位学生成绩的处理方法都是一样的,存在大量的相似的操作。同时提出问题,这些相似的操作能不能用循环结构描述和实现,让学生思考。诱导学生分析发现,要想用循环结构描述这些相似的操作,学生成绩的描述必须有一个统一的表示方法。适时地给出score[i]这一表示方法,指出让i从0到9变化表示10个学生的成绩,和学生一块用该表示形式改写之前程序的关键部分。让学生比较改写前后的两个程序,很容易得出结论,用score[i]描述批量数据,方便和循环结合起来使用,数据的处理更为有效。最后指出score[i]这一描述形式就是数组,接下来介绍数组的定义完善改写后的程序。

和学生一块模拟执行该程序,由之前的知识积累学生知道,形参m、n和实参a、b对应的是不同的存储单元,m、n和temp是自动变量,从变量的作用域和生存周期的角度,容易得出一个让学生意外的结论,该swap函数中形参m、n值的交换影响不到实参a、b。在学生诧异之余,启发学生思考,诱导学生尝试给出不同的解决方法。往往有学生提出定义a、b为全局变量,诚然这不失为一种解决方法,在鼓励学生的同时,再次诱导学生发现问题的关键并在此基础上找解决方法。和学生一块梳理思路,发现swap函数中形参m、n值的交换传递不到实参a、b,一方面是因为彼此对应的是不同的存储单元,另一方面是由于变量的作用域和生存周期的问题。学生提出的定义a、b为全局变量的解决方法显然是从后者考虑的,现在有意识地诱导学生只从前者考虑,让学生大胆假设在什么样的前提下形参m、n值的交换即是实参a、b值的交换。毋庸置疑,只有当形参m、n和实参a、b对应的是相同的内存单元时。在学生给出了这一假设之后,启发学生思考该假设能不能成立以及如何成立。和学生一块分析,要使形参m、n和实参a、b对应的是相同的内存单元,表面上看它们不能是相同的类型,但实现又要求形参m、n操作的对象是实参a、b,显然形参m、n操作的对象和实参a、b应该是相同类型,同时形参m、n指向的是和实参a、b相同的内存单元,学生相对容易想到形参m、n应该是指向实参a、b的指针变量,问题由此迎刃而解。最后结合该任务的完成引导学生总结,在主调函数和被调函数之间双向传递数据变化,全局变量和指针变量都是不错的解决方法。

2)注重当堂实践,现场编程互动,在学习中应用。

C语言程序设计是一门实践性很强的课程,在践行以应用为本位的教学思路的过程中,笔者不仅重视实验课这一实践环节,更是把实践延伸到课堂教学中。在带领学生对特别设计的问题做了充分的分析之后,引导学生当堂实践,或者师生现场编程互动,不仅可以调动学生学习的积极性,更能培养学生解决实际问题的能力。

参考文献:

[1] 李克东.教育技术学研究方法[M].北京:北京师范大学出版社,2003:132-137.

上一篇电商金融论文

下一篇清风荷影