c语言编程十篇

时间:2023-04-09 13:08:07

c语言编程

c语言编程篇1

关键词: C 语言;汇编语言;混合编程

中图分类号:TP313 文献标识码:A 文章编号:1006-4311(2014)24-0231-02

0 引言

汇编语言是一种面向机器的语言,其优点是运行速度快,占用存储空间小,可直接对硬件进行控制。缺点是编写、调试困难、移植性差。C语言简洁、灵活、库函数丰富、调试方便、移植性好,目前已被广泛地应用于系统软件和应用软件的开发中,为了发挥各自优势,取长补短,采用混合编程。大部分程序,如界面、人机接口(外壳程序)、数据处理等用C语言编写,以提高程序的开发效率。而某些程序,如需要缩短程序的运行时间,或需要对硬件进行直接操作,或需要利用操作系统的某些功能模块,或频繁使用的程序、或需要占用内存空间少的程序(内核程序),则用汇编编写,以提高程序的运行效率。

1 嵌入式汇编

嵌入式汇编也称行内汇编,源程序中直接插入汇编语句。汇编语句可直接访问C程序中定义的常量、变量、函数。不必考虑二者之间的接口,方便编程。

1.1 嵌入式汇编语句的格式

格式:asm操作码 操作数[;或换行]

其中:操作数可以是汇编语句中的立即数、寄存器、表达式等还可以是C中的常量、变量、标号等。分号;是汇编语句结束符,并非注解,要用注解,用C的注解。如下例

所示。

1.2 汇编语句访问C的数据

嵌入的汇编语句可以访问C语言程序中的任何标识符,包括变量、常量、标号、函数名、寄存器变量、函数参数等。如下例所示。

1.3 汇编语言与C语言接口规则

1.4 编译过程

命令行键入命令:TCC-B-Iinclude-Llib 文件名.c即可. TCC会自动调用TASM.EXE和TLINK.EXE,并且TLINK.EXE能正确的找到需要的.obj和.lib文件,要保证TC目录下存在TASM.EXE文件。如果单步编译,可能会碰到很多的问题,主要是TLINK.EXE不会自己去找.obj和.lib文件。该命令的功能是:.C编译TCC.ASM汇编TASM.OBJ连接TLINK.EXE。

2 Turbo C模块连接方式

C、汇编程序各自编程,各自编译,然后连接在一起。

2.1 汇编语言与C语言接口规则

①命名约定:汇编的名字前加一个下划线,C的名字前不加下划线(编译后内部自动加),以确保两个模块内部名字一致。

3 结语

混合编程,主要涉及接口,汇编调C的函数、全局变量。C调汇编的函数、变量。本文对此做了浅述。

参考文献:

[1]谭浩强.C语言程序设计[M].清华大学出版社,2004.

c语言编程篇2

关键词:C语言;计算机软件;编程

网络时代的到来,使的计算机得到了广泛的应用,计算机软件在日常生产和生活中具有不可替代的作用,其可以提高生产效率和经济效益。C语言是软件编程过程中的基础语言,其不但有其他高级语言的主要特点,同时还具备汇编语言的优势,是提高计算机软件更新速度和优化编程过程的关键,充分利用C语言进行编程,可以有效提升编程的效率。

一、C语言在计算机软件编程过程中的具体应用

(一)编程技巧

利用C语言进行软件编程时,指针是具有特殊意义的一种变量。指针可以是编程人员将复杂的问题进行清晰表达,还能够准确的解决这些复杂问题。因此,编程人员要熟练掌握指针的运用技巧,以提高软件编程的效率。指针主要分为名称、类型以及数值三个重要部分,其相当于一般变量,只是存在类型和数值的不同。指针的特点是既能表示数组,还可以充当参数返回值在函数中表示。

(二)C语言有函数的有效运用

利用C语言进行软件编程时,往往会有特殊的地方会使用特有函数。而不同的函数名称可以体现不同函数的特有功能。在对函数过进行定义时,函数的具体名称和参数以及返回值的类型确定都是有编程人员来完成的。C语言的翻译系统只是进行库函数的提供,同时对函数的名称进行定义。在程序调试过程中,编程人员只需利用“#include指令”将头文件纳入到相应的文件,无需再进行复杂的操作。

(三)各种算法的灵活运用

在计算机软件程序的设计过程中,算法是整个设计的核心内容,编程人员要对各种算法清晰认识并灵活运用。通常情况下,算法可以通过自然语言、流程图等进行表示,但是流程图表示需要编程人员熟悉各种流程图的表示符号,才能准确表示算法。也就是说,数学知识在计算机编程过程中具有重要的地位,编程人员具有良好的数学素养才能真正提高计算机软件编程的效率。

(四)位运算和文件知识的灵活运用

利用C语言进行编程时,位运算是唯一的,其重要性不言而喻。二进制位是位运算主要的对象,位运算在运算过程中往往还要结合其他的相关程序。文件是计算机的重要组成部分,其位置不可替代。文件主要分为程序和数据文件两种,文件中能够储存编程人员设计好的程序,可以简化数据查找的步骤,提高查找的效率。

二、混合应用C语言和汇编语言的编程方法

利用C语言对汇编语言的子程序进行调用、利用汇编语言对C语言子的程序进行调用、将C语言的程序嵌入至汇编语言中是混合编程的三种主要方式。

(一)利用C语言对汇编语言的子程序进行调用

利用C语言对汇编语言的子程序进行调用时,要根据程序中参数的具体顺序,将参数按照反序的顺序压入到堆栈中,传递时要按照参数的数值,利用“EXTERN”说明函数的具体显示。函数名要通过8个字符内的下划线格式进行命名,同时要进行代码段的具体说明,通过“―TEXT”进行代码段的命名。汇编程序参数可以C语言的参数,汇编程序要对寄存器进行保护。在混合利用C语言和汇编语言进行编程时,汇编的整个过程需要严格遵守已经规定好的开头和结尾格式。

(二)利用汇编语言对C语言子的程序进行调用

利用汇编语言对C语言的子程序进行调用时,无需对汇编语言的主程序、子程序两种程序的格式进行改变,只要保持主程序、子程序的一直的格式即可,在开始编程前通过“EXTREN函数名”表明身份后,即可代表此函数是对C语言程序进行调用的函数。

(三)将C语言的程序嵌入至汇编语言

将C语言的程序嵌入至汇编语言主要包括C语言程序对汇编子程序模块进行调用以及嵌入到汇编的指令。若C语言为主程序,汇编语言的模块,就要用C语言对汇编子模块进行调用。C语言程序嵌入到汇编指令的应用主要针对C语言难以控制的硬件上。

三、总结

目前,C语言在软件编程时得到了广泛的应用,其独立、简易的特点可以提高计算机编程的效率和质量,具有确保计算机软件的不断开发和更新的作用。(作者单位:海南师范大学)

参考文献:

c语言编程篇3

关键词:计算机;软件编程;C语言分析

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)31-0074-02

在计算机软件编程人员的世界中,C语言是一门简单的高级语言,在计算机软件编程中有着重要的作用。C语言具有编译、连接、编辑及运行的功能,编程人员在计算机软件编程中可以灵活的使用C语言,因为C语言具有简单灵活、操作自由的特点。在计算机软件工程及其他与计算机相关的专业学习中,C语言是一门最基础也是最重要的语言,学习者可以灵活尝试,进行自由编程。另外C语言还具有通用性,较人性化,适用于不同的操作系统。

1 浅析C语言及特点

1.1浅析C语言

C语言是在1972年被美国D.M博士提出的,到了1978年,C语言已经被运用到大型计算机中,目前的C语言已经可以被灵活运用到微型计算机中。C语言不仅是一种应用程序设计语言,也是一种工作系统设计语言。C语言可以使用到各种操作系统中,不过C语言一开始只是在unix操作系统中使用。在计算机软件编程中,C语言是一门最基本、最简单、最重要的语言,它是将低级语言与高级语言两者的特点相结合。C语言作为低级语言编写unix应用程序的时候,只能用于unix自身。但是C语言作为高级语言,完美地将低级语言的实用性特点与自身的结构算法相结合,从而满足现代人类的编写软件需求。在计算机程序设计中,C语言有着重要的作用,C语言不仅升级了低级语言,还基于低级语言延伸了多种后续语言,在计算机软件编程及开发中有着重要的作用。【1】

1.2 C语言的编程技巧

(1)具有独特的函数。不同的函数在计算机软件编程中都有着不同的功能及特性,但是在C语言编程中,就需要特定的函数。在函数中,函数名能够对反映出函数的工E呢,所以在对函数进行定义的时候,计算机软件编程人员要将函数名字、返回值类型及参数名等等进行定义。另外在进行编程时,C语言编译系统会提供函数库,此系统将函数定义之后,计算机软件编程人员通过头文件中引入“#include 指令”,就可以调用及使用这些程序。比如在程序编译中需要使用sqrt函数的时候,头文件就要以#include“string.h”这种形式进行,以保证程序的正常运行。【2】

(2)编程的指针运用。指针在软件编程中是一种非常特殊的类型变量,指针主要包括三个要素,分别是指针类型、指针名和值,在软件编程中的指针作用就是控制赋值及建立变量关系。在软件编程中,指针有着重要的作用,其与编程的难易程度有着一定关系。将C语言使用到计算机软件编程中是非常复杂的工作,所以就要计算机软件编程工作人员就要熟练使用指针,并且能够使用指针进行软件编程。首先计算机软件编程人员就要依据科学对指针的类型及名称赋予正确的值,能够使指针及变量得以区分。另外,在计算机软件编程人员使用指针的时候,就可以使用C语言的函数对其进行定义,根据编程方程式及流程图表示其内容。最后,计算机软件编程人员要根据相应的函数名称、返回值类型、相应的指令、文件及运算位,使其满足自身的需求,明确二进制对象。还要将一系列的程序文件及数据文件的步骤精心布置,便于数据查找。【3】

(3)位运算及运算技巧。C语言在计算机高级语言运算中,最具有特点的就是位运算,其对象是二进制,具有独特性及唯一性,位运算也是计算机软件编程中最基础及最重要的内容,计算机软件编程人员要根据相关规定进行运算。另外在程序运算过程中,程序文件是尤为重要的,计算机软件编程人员要在文件中存储程序,便于日后查找数据,使运行效率进一步提高。在程序设计过程中,运算方法是灵魂,掌握运算技巧是每一位计算机软件编程人员应该具备的。运算方式可以使用流程图及自然语言表示,在使用流程图的时候,计算机软件编程人员要熟练掌握流程图符号,还应具备一定的数学知识,从而使软件编程效率得到进一步提高。【4】

2 计算机软件编程中的C语言特点

2.1 简单便捷

在执行C语言的时候,主要包括编译、编辑、连接及运行,在C语言中除了关键字可以大写之外,其他都用小写,并且大小写不能随便改动,C语言的函数、变量名字不能以关键字命名。C语言中有9种控制语句及3中循环语句,其语言简单,适合初学者。

2.2 丰富的运算符

C语言具有算数运算符,比如加、减、乘、除;还有逻辑运算符,比如是、非;还有关键运算符,比如大、小、等、按位于等等。

2.3 数据类型

包括队列、指针、堆栈、普通、构造等等。这些都是最简单及最基础的数据类型,可以有效解决编程中的开发问题。

2.4 标识符

要使用函数名、变量名、符号常量、数组名等命名,其中不能有关键字,并且只能使用下划线、字母及数字命名,且第一个字符不可以是数字。【5】

3 计算机软件编程中的C语言分析

c语言编程篇4

关键词 单片机;计算机语言;C语言

中图分类号:TP315 文献标识码:A 文章编号:1671-7597(2013)22-0055-01

单片机是一个小型的电脑系统,它具备完成一项某项任务的功能,有的甚至可以完成多项功能,这在工业控制以及智能开发上有巨大用途。单片机系统的实现是建立在大规模集成电路技术发展成熟的基础之上,它将中央处理器CPU,数据存储ROM,负责信息传输的线路和I/O接口整合到一起,放在集成电路板上,完成电脑系统的制作。至于C语言,就是一种特定的机器语言,能帮助我们编译计算机能够识别的指令,而且整个编译过程不需要依靠计算机硬件的应用程序,非常的简单可行。

1 单片机C语言的编程优点

1)单片机因为是集成电路系统,能在一个很小的原件上完成较为复杂的操作反应,运行简单,价格便宜,还能支持C语言的编译。今天我们所提到的单片机C语言是C语言的一种,它能为单片机提供更多的数据类型,帮助用户分析遇到的问题,并且针对问题做出专业性处理。整体流程如下:命令以单片机C语言的形式下达,然后通过传输接口传到单片机的存储器上,CPU在从存储器上提取信息,进行计算并发出指令,发出的指令在通过接口传到给执行机器,如此完成整个动作。整个过程没有异步过程,而且提供标准函数库,程序员不需要熟记单片机的指令库就可以完成整个编译过程。

2)C语言作为一种高级语言,能直接用于操控机器,而不需要软硬件的驱动程序,为软件的开发提供了可靠的保障,C语言的应用极大的增加的程序编译员的工作效率,给开发者更多的时间跟精力去专心研究编译程序的功能,不用在分精力在硬件与软件的契合方面。但是单片机C语言占用系统量较大,对一般的单片机来说,CPU直接读取的存储是有限的,用C语言进行编译,很容易将原本简单的编译信息写成多条信息,这就增加了直接存储的负荷,导致单片机直接存储不够用或者栈溢出等问题。

2 单片机C语言的编程问题分析

1)研究表明,单片机C语言编辑器也不是万能的,不可能支持所有的数据类型。不过现今比较流行的几种数据类型还是能够支持的。像是拥有16位数据的char型存储数据类型,它主要是运用ASCII字符集。像存储位数为四字节的Int数据存储类型,它是一个整型数据。整型数据中又有长整型数据,也就是long数据。另外一种数据是浮点型数据,我们在C语言编辑中经常用到,逻辑开头为float。单片机除了上述的语言类型外,还支持Sfr这种特殊功能寄存器,不仅仅能够存储数据,还能任意访问数据存储所在的位置。作为一种跟程序存储器资源相结合的编译语言,单片机C语言也具有一定的缺陷性,我们拿最常见的51系列单片机为例子。作为单片机中最常见的,我们知道51系列的单片机CPU是八位的,要计算二的八次方个数据,我们如果想提高代码的准确率,一般都是采用减少单片机的位数的长度,也就减少了CPU的数据计算数量。我们在使用中,为了避免占用内存过大,通常会减少程序执行过程中的运算次数,减少输入字符串的总体长度,能够用小字符串进行定义的绝不使用大的,能够用整型变量进行定义的就尽量不用长整型变量,这也是我们进行C语言设计时需要遵循的一个原则。在C语言的处理过程中,必须从数据库里提取公式,但是浮点型的数据就有一定的内部函数来支持,整个浮点型函数经过如此变化,会生成较长代码,所以我们在运用数据时,要尽量选取合适数据类型,本着减少代码长度的觉悟,尽量做到合理。

2)单片机C语言的算法的详解。C语言是算法组成的,它能够完成单一命令或多种命令。单片机C语言也是由一个个算法组成的,但是普通C语言跟单片机C语言的最大不同就在于存储量的大小,通常普通C语言的编译是不需要考虑编译程序代码的长度问题,我们只需要考虑编译的结果符合我们的要求即可。但是在单片机C语言编译中,因为单片机本身的存储性能有限,我们就必须对长度过长的代码进行重新设计排版,让程序算法最少。当然算法少的程序并不一定是代码少的程序,有些本身代码不长的程序,因为要在运行中走函数或者子程序,造成原本认为少的程序在运行中涉及的算法更多。为了降低程序消耗的内存,不仅仅要考虑编辑好的程序算法,还要考虑算法运行的本身。通常我们都知道算法是包括控制结构以及原始操作结构的,原始操作结构也就是我们常说的输入机构,控制结构与原始操作机构的运行得出结果的时间就是算法执行的时间,但是普通的一个算法,会因为编译算法的语言不通,编译程序的软件不通,编译完成后在运行计算机的不同产生不同的结果。所以我们在进行单片机上的算法设计时,要考虑解决一个问题时,哪种策略更简单,哪种策略使用规模最小,哪种策略书写的程序语言最少,就选用哪一种算法。在C语言中,算法直接影响对语言的实现级别。

3)单片机C语言存储器的分配结果。单片机的存储设备一般都是随即存储,存储数据非常少,一般也就64kb,也就是我们常说的单片机的内存,除了随即内存外,单片机有时还具备内部存储设备。在实际运行中,数据从内部存储转到随即存储,空余的存储地址在由新的存储数据填充。 这就涉及到全局变量以及静态存储变量,静态变量因为是函数调用的,所以所处的存储器地址基本是不变的,在全局变化中,能被释放的只有局部变量,我们为了保证单片机的内存,要尽量提高存储器的利用率,合理分配存储器地址。

4)存储器有三种不同的存储模式,分别为小模式,压缩模式以及大模式,判定的值是变量所处的地址范围。我们选取不同的模式,将直接影响到代码的长度以及程序的执行速度,在研究中发现,我们要把程序代码放在存储空间里,然后将一部分访问变量设计成xdata的类型,放在实时存储里面,就能减少不必要的时间。

单片机C语言这种通用的计算机语言有着很多优点,功能强大,便于结构化,可读性强,可移植性强,维护和运用方便,反应速度快,并且具有通用性。单片机的性能在飞速提高,这就需要编程者随时掌握学习知识,提升技术,在单片机目前有限的系统资源下研究开发出更加优秀的单片机系统。

参考文献

c语言编程篇5

关键词:高效;空间;位;嵌入

中图分类号:G623.58

C语言程序设计方法多种多样,一般以根据实际情况选择程序设计方法。现根据不同情况说明几种不同的高效编程方法。

1.以空间换时间

计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招--以空间换时间。比如说字符串的赋值:

方法A:通常的办法

#define LEN 32

char string1 [LEN];

memset (string1,0,LEN);

strcpy (string1,"This is a example!!");

方法B:

const char string2[LEN] ="This is a example!";

char * cp;

cp = string2 ;

使用的时候可以直接用指针来操作。

从上面的例子可以看出,A和B的效率是不能比的。在同样的存储空间下,B直接使用指针就可以操作了,而A需要调用两个字符函数才能完成。B的缺点在于灵活性没有A好。在需要频繁更改一个字符串内容的时候,A具有更好的灵活性;如果采用方法B,则需要预存许多字符串,虽然占用了大量的内存,但是获得了程序执行的高效率。

如果系统的实时性要求很高,内存还有一些,那我推荐你使用该招数。该招数的变招--使用宏函数而不是函数。举例如下:

方法C:

#define bwMCDR2_ADDRESS 4

#define bsMCDR2_ADDRESS 17

int BIT_MASK(int __bf)

{

return ((1U

}

void SET_BITS(int __dst,

int __bf, int __val)

{

__dst = ((__dst) & ~(BIT_MASK(__bf))) |

/

(((__val)

& (BIT_MASK(__bf))))

}

SET_BITS(MCDR2, MCDR2_ADDRESS,RegisterNumber);

方法D:

#define bwMCDR2_ADDRESS 4

#define bsMCDR2_ADDRESS 17

#define bmMCDR2_ADDRESS BIT_MASK(MCDR2_ADDRESS)

#define BIT_MASK(__bf)

(((1U

#define SET_BITS(__dst, __bf, __val)

/

((__dst) = ((__dst) & ~(BIT_MASK(__bf)))

| /

(((__val)

& (BIT_MASK(__bf))))

SET_BITS(MCDR2, MCDR2_ADDRESS,

RegisterNumber);

函数和宏函数的区别就在于,宏函数占用了大量的空间,而函数占用了时间。大家要知道的是,函数调用是要使用系统的栈来保存数据的,如果编译器里有栈检查选项,一般在函数的头会嵌入一些汇编语句对当前栈进行检查;同时,CPU也要在函数调用时保存和恢复当前的现场,进行压栈和弹栈操作,所以,函数调用需要一些CPU时间。

而宏函数不存在这个问题。宏函数仅仅作为预先写好的代码嵌入到当前程序,不会产生函数调用,所以仅仅是占用了空间,在频繁调用同一个宏函数的时候,该现象尤其突出。

D方法是我看到的最好的置位操作函数,是ARM公司源码的一部分,在短短的三行内实现了很多功能,几乎涵盖了所有的位操作功能。C方法是其变体,其中滋味还需大家仔细体会。

2.数学方法解决问题

现在我们演绎高效C语言编写的第二招--采用数学方法来解决问题。数学是计算机之母,没有数学的依据和基础,就没有计算机的发展,所以在编写程序的时候,采用一些数学方法会对程序的执行效率有数量级的提高。

3.使用位操作

实现高效的C语言编写的第三招--使用位操作。减少除法和取模的运算。在计算机程序中数据的位是可以操作的最小数据单位,理论上可以用"位运算"来完成所有的运算和操作。一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效率。

运用这招需要注意的是,因为CPU的不同而产生的问题。比如说,在PC上用这招编写的程序,并在PC上调试通过,在移植到一个16位机平台上的时候,可能会产生代码隐患。所以只有在一定技术进阶的基础下才可以使用这招。

4.汇编嵌入

高效C语言编程的必杀技,第四招--嵌入汇编。"在熟悉汇编语言的人眼里,C语言编写的程序都是垃圾"。这种说法虽然偏激了一些,但是却有它的道理。汇编语言是效率最高的计算机语言,但是,不可能靠着它来写一个操作系统吧?所以,为了获得程序的高效率,我们只好采用变通的方法--嵌入汇编,混合编程。

建议不轻易使用此种方法,因为使用了嵌入汇编,便限制了程序的可移植性,使程序在不同平台移植的过程中,存在安全隐患!同时此种方法也与现代软件工程的思想相违背,只有在迫不得已的情况下才可以采用。

参考文献:

[1].《C语言趣味程序百例精解》,陈朔鹰 陈英主编,北京理工大学出版社,1996年。

[2].《Turbo C 2.0实用大全》,常玉龙等编写,北京航空航天大学出版社,1994年9月。

c语言编程篇6

关键词:C语言;编程规范;零缺陷;测试 

 

C语言简单、易用,是许多编程爱好者的首选语言。但由于C语言的语法不是很严格,许多程序设计者在编程过程中会遇到许多错误,在程序设计方法上,国外有许多学者对程序零缺陷程序设计提出了自已的观点和方法。如美国管理学家philipb。croby的“零缺陷”思想引进来,用以提高编程的质量,增大软件中的验证力度。IBM公司70年代末和80年代初提出的“净室软件工程”(clean room software engineering),“净室”一词源于精密半导体器件中的无尘生产车间,它强调在生产过程中就消除问题,而不是在产品生产以后,才依靠检测来挑选有问题的产品。传统的软件工程建模、形式化方法、程序验证(正确性证明)、以及统计SQA的集成使用已经组合成一种可以导致极高质量软件的技术。净室软件工程(Cleanroom software engineering)是一种在软件开发过程中强调在软件中建立正确性的需要的方法。本文通过建立良好的C语言的编程风格,避免出现常见的错误,并通过净室过程的方法来提高C语言编程的效率。 

 

1 良好的编程风格 

良好的编程风格可以在许多方面帮助开发人员。如果你阅读过 Linux 内核源代码的话,可能会对程序的优美编排所倾倒。良好的编程风格可以增加代码的可读性,并帮助你理清头绪。如果程序非常杂乱,大概看一眼就该让你晕头转向了。编程风格最能体现一个程序员的综合素质。 

许多人可能对 Windows 所推崇的匈牙利命名法很熟悉。这种方法定义了非常复杂的函 数、变量、类型等的命名方法,典型的命名方法是采用大小写混写的方式,对于变量名称,则采用添加前缀的办法来表示其类型,例如: 

char szBuffer[20]; 

int nCount; 

利用 sz 和 n 分别代表字符串和整数。为了表示一个变量名称,采用如下的变量名称是可能的: 

int iThisIsAVeryLongVariable; 

在 Linux 中,我们经常看到的是定义非常简单的函数接口和变量名称。在 Linux 内核的源代码中,可以看到 Linux 内核源代码的编码风格说明。UNIX 系统的一个特点是设计精巧,并遵守积木式原则。C 语言最初来自 UNIX操作系统,与 UNIX 的设计原则一样, C 语言被广泛认可和使用的一个重要原因是它的灵活性以及简洁性。因此,在利用 C 语言编写程序时,始终应当符合其简洁的设计原则,而不应当使用非常复杂的变量命名方法。C 语言编程代码格式要点如下: 

缩进时,使用长度为 8 个字符宽的 Tab 键。如果程序的缩进超过 3 级,则应考虑重新设计程序。 

大括号的位置。除函数的定义体外,应当将左大括号放在行尾,而将右大括号放在行首 。函数的定义体应将左右大括号放在行首。对变量名,不赞成使用大小写混写的形式,但鼓励使用描述性的名称;尽可能不使用全局变量;不采用匈牙利命名法表示变量的类型;采用短小精悍的名称表示局部变量;保持函数短小,从而避免使用过多的局部变量。保持函数短小精悍。不应过分强调注释的作用,应尽量采用好的编码风格而不是添加过多的注释。函数函数应该短小而迷人,而且它只作一件事情,并且只作一件事情,而且将它做好。一个函数的最大长度和函数的复杂程度以及缩进大小成反比。于是,如果你已经写了简单但长度较长的的函数,而且你已经对不同的情况做了很多很小的事情,写一个更长一点的函数也是无所谓的。然而,假如你要写一个很复杂的函数,而且你已经估计到假如一般人读这个函数,他可能都不知道这个函数在说些什么,这个时候,使用具有描述性名字的有帮助的函数。另外一个需要考虑的是局部变量的数量。他们不应该超过5-10个,否则你有可能会出错。重新考虑这个函数,将他们分割成更小的函数。 

注释是一件很好的事情,但是过多的注释也是危险的,不要试图区解释你的代码是注释如何如何的好,你应该将代码写得更好,而不是花费大量的时间去解释那些糟糕的代码。 

 

2 C语言中容易出现的问题 

C语言由于语法检查不是很严格,所以程序的编写过程中它会出现一些你意想不到的问题。下面举一些简单的例子来说明这一点。 

2.1 赋值语句与比较语句容易出现混淆 

我们举一个简单的例子: 

如果x等于y,则打印。我们有时候会写成 

(x=y) printf(); 

这实际上把比较语句和赋值语句混淆起来了,真正的语句应该写成这样 

(x==y) printf(); 

2.2 逻辑与(&&)和二进制与(&)运算之间的区别 

逻辑运算,就是“布尔代数”意义上的运算。运算结果只有两种情况,0和非0,即false与true。从中可以建立起一种判断逻辑表达式是否为“真”的语句。而按位运算,则是二进制意义上的运算。 

如(11)十进制=(1011)二进制 

(5)十进制=(0101)二进制 

则11 & 5为 

1011 

&0101 

=(0001)二进制=(1)十进制 

逻辑或(||)和二进制或(|)运算与上述相同。 

2.3 自加或自减 

简单的来说,++i 和 i++,在单独使用时,就是 i=i+1。 

而 a = ++i,相当于 i=i+1; a = i; 

而 a = i++,相当于 a = i; i=i+1; 

i++ 是先赋值后加减,++i 是先加减后赋值。所以我们在使用自加或自减进行赋值时,一定要注意变量使用的先后次序。 

C语言编程时的注意事项还有很多,这里由于篇幅的原因就不再一一列举了。 

 

3 “净室”化的程序设计方法 

净室(Cleanroom,无尘室或洁净室)是指一个具有低污染水平的环境,这里所指的污染来源有灰尘、空气传播的微生物、悬浮颗粒和化学挥发性气体。更准确地讲,一个净室具有一个受控的污染级别,污染级别可用每立方米的颗粒数,或者用最大颗粒大小来厘定的。净室被广泛地应用在对环境污染特别敏感的行业,例如半导体生产、生化技术、生物技术等。我们这里为了提高软件编程的水平引入了净室软件工程的方法,总体说来是采用传统的软件工程建模、形式化方法、程序验证(正确性证明)以及统计SQA的集成使用已经组合成一种可以导致极高质量软件的技术。净室软件工程(Cleanroom software engineering)是一种在软件开发过程中强调在软件中建立正确性的需要的方法用来代替传统的分析、设计、编码、测试和调试周期。净室软件工程的哲学是:通过在第一次正确地书写代码增量并在测试前验证它们的正确性来避免对成本很高的错误消除过程的依赖。它的过程模型是在代码增量积聚到系统的过程的同时进行代码增量的统计质量验证。净室方法在很多方面将软件工程提升到另一个层次。

净室过程强调在规约和设计上的严格性,以及使用基于数学的正确性证明来对结果设计模型的每个元素进行形式化验证。作为对形式化方法中采用的方法的扩展,净室方法还强调统计质量控制技术,包括基于客户对软件预期的使用的测试。当现实世界中软件失败时,则充满了立即的和长期的危险。这些危险可能和人的安全、经济损失、或业务和社会基础设施的有效运作相关。净室软件工程是一个过程模型,它在可能产生严重的危险前消除错误。 

净室方法使用增量软件模型的一个专门版本。一个“软件增量的流水线”被若干小的、独立的软件工程小组开发,一旦每个增量被认证通过,它将被集成为一个整体。因此,系统的功能随时间增加。开发一个采用增量策略的项目计划,建立每个增量的功能、它的项目大小、以及净室开发进度表。必须特别小心以保证通过认证的增量将被定时集成。使用一个运用盒结构的规约方法来描述功能规约。盒结构“在每一个精化级别上分离和分开行为、数据及过程的创造性定义”。使用盒结构方法,净室设计是规约的自然的无缝的扩展。 

4 严密的测试方法 

净室过程的测试方法描述通过箱式结构和统计质量验证(statistical quality certification)箱式结构来完成的。它是通过形式化方法来保证证软件是完美无缺陷的。它是将程序的初始状态、运行状态和结果以状态图的形式表出,它能够很严格发现程序运行中出现的问题。在程序完成后进行测试,其主要是测试质量,次要目的是发现那些在验证中没有被发现的缺陷。这种程序验证由程序员本人完成是不够的,应该由小组成员在验证回顾会议上进行验证。合理的验证小组成员3-8人,特别是新程序员要参加讨论,主持者最重要的任务是使团队的每一个成员都理解验证每一步并同意其正确性。 

验证的主要目的是: 

a 是否程序做了不合理的假设; 

b 是忘记了编程语言中的某些细节; 

c 是否忽略了某些程序逻辑中的可疑部分。 

通过这种方式用全新的眼光来看待工作,他们常常会提出自己发现不了的问题。 

验证的方式上可以采用“黑盒”、“ 白盒”或“灰盒”的检查模式。 

黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。 

黑盒测试方法主要有等价类划分、边值分析、因—果图、错误推测等,主要用于软件确认测试。“黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。 

白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。 “白盒”法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。“白盒”法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。但即使每条路径都测试了仍然可能有错误。第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。第二,穷举路径测试不可能查出程序中因遗漏路径而出错。第三,穷举路径测试可能发现不了一些与数据相关的错误。 

灰盒测试,是介于二者之间的。灰盒测试关注输出对于输入的正确性,同时也关注内部表现,但这种关注不象白盒那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态,有时候输出是正确的,但内部其实已经错误了,这种情况非常多,如果每次都通过白盒测试来操作,效率会很低,因此需要采取这样的一种灰盒的方法。灰盒测试结合了白盒测试盒黑盒测试的要素。它考虑了用户端、特定的系统知识和操作环境。它在系统组件的协同性环境中评价应用软件的设计。灰盒测试由方法和工具组成,这些方法和工具取材于应用程序的内部知识盒与之交互的环境,能够用于黑盒测试以增强测试效率、错误发现和错误分析的效率。 

在程序测试阶段可根据实际情况选择不同的具体的测试方法。 

 

5 总结 

本文通过C语言编程中的编程规范、易出错的地方和用净室的方法来提高C语言的编程质量,提高软件开发的效率。净室方法是一种理论性强的编程方法,严格按照此方法进行编程是很多程序员难以达到的,本文将这种方法用以提高C语言编程质量是一种尝试,供广大编程爱好者借鉴。 

 

参考文献 

[1]斯蒂夫里.零缺陷程序设计[M].夏昕,王尧,译.北京:机械工业出版社,2003. 

[2]佩腾.软件测试[M].张小松,等译.北京:机械工业出版社,2006. 

c语言编程篇7

关 键 词:C语言;计算机;软件编程;实验研究

一、C语言的概述

在1967年BCPL语言被英国MartinRichards 推出,到1970 年B 语言以BCPL 语言为基础被美国Ken Thompson推出[1]。但是B 语言过于简单,而且功能有限,经过研究者的多次试验研究,在1972—1973 年,C 语言在B 语言的基础上经过完善,被美国贝尔实验室D.M推出[2]。在各种计算机编程语言中,C语言属于一门高级语言,它是一切计算机语言的基础,拥有高级语言和低级语言的特点,灵活方便,简洁紧凑;而且它的语法限制不严格,程序员在设计时程序书写自由。不仅能够编写系统软件,同时还可以编写应用软件,能够适应于多种操作系统,应用广泛,可移植性强。总之,C语言对于信息技术的发展具有十分重要的作用和价值。

二、基于C语言的计算机软件编程实验研究

(一) C语言的编程技巧

1.灵活运用指针

在C语言编程的时候,指针是一种特殊类型的变量,它能够帮助程序员有效的表达和解决程序设计过程中遇到的复杂问题,熟练掌握指针是必要的。指针具有三要素:指针名以及指针类型和值[3]。在编程时,指针和一般变量名相同,但是在类型以及值上具有区别,另外,指针不仅能够被用于表示数组,还可以被作为函数的参数返回值。

2.C 语言的特有函数

在C语言编程的时候,有时需要用到一些特有函数。函数都具有一定的功能,同时函数名也反映了该函数的功能。在进行函数定义时,程序员需要把函数的名字、返回值类型以及参数名等各项都进行定义。另外,因为库函数是由C 编译系统提供的,这些函数均是系统首先定义好的,在程序调用的时候,程序员只需利用“#include 指令”把与之相关的头文件包含到所用文件中即可[4]。例如,在程序运行的过程中,如果用到了sqrt函数,则为了保证程序运行下去,头文件必须含有#include“string .h”。

3.算法技巧

在程序设计的过程中,算法是程序的灵魂,因此,掌握一定的算法技巧是必不可少的。通常情况下,算法不仅可以用自然语言表示,有的时候也利用流程图表示。需要注意的是,利用流程图表示算法时,程序设计员必须熟练掌握常用的流程图符号[5]。且“数学乃是计算机之母”,牢固的数学知识同样能够提升编程效率。

4.位运算以及文件知识

相比其他计算机高级语言的运算方法,位运算作为C 语言的重要特色,具有独特性和唯一性。位运算是以二进制位为对象,然后结合相关程序要求进行各种运算。文件包含有数据文件以及程序文件,是计算机不可缺少的,程序设计员在进行编程时,需要把所写的程序存储的文件之中,这样可以便于程序员查找数据,提升查找效率。

(二) C语言和汇编语言混合的程序设计案例分析

在本次的实验之中,在进行程序嵌入时,有其固定的格式,需要在嵌入的各行代码之前加“asm”关键字,也可以直接在asm代码块中放入汇编语句。但是程序设计者在进行嵌入时,一定要注意满足以下条件:汇编语言指令代码中关键字asm必不可少,且要放在指令代码之前;嵌入汇编语言指令代码能够和正常C语言程序混合,但是C语言的分隔符“;”必不可少;嵌入汇编语言时C语言的注释分界符必不可少,分别是“/*”和“*/” [6]。

(2)首先编写C语言程序以及汇编程序,然后独立编译目标代码模块,最终进行链接。

首先,在进行混合编程时,C语言程序能够调用汇编语言的各种子程序以及其定义的变量,同时,C语言编写的函数以及定义的变量等也可以被汇编语言调用。而且混合编程的过程中,一个任务往往是由若干个功能模块组成,且不同的功能模块均是利用合适的语言进行独立编程,且以函数的形式存在。因此,程序设计者要根据每一模块的特点选择相应的语言和语言编程系统进行独立编程,并形成目标文件,继而连接目标文件,形成完整的可执行文件。

在混合编程的过程中,设计者需要注意五个问题:参数传递问题;寄存器的使用问题;存储模式;变量以及函数的调用问题;子程序的返回值问题。

其中,关于参数传递问题,在进行C语言程序调用汇编程序时,必须遵从参数传递原则,利用堆栈把参数传递给汇编程序。例如,在C语言程序中含有函数:voidaa(char*p,int i),这个函数是利用汇编语言进行编写的,如果编译是在小内存模式下实施的,系统在进行调用时,则写成aa(&q , n);运行时程序首先把n压入堆栈,然后再把&q压入堆栈,当参数传递过来并被汇编语言的子程序取得时,BP寄存器便被用作基地址寄存器,实现对栈中所存数据进行存取操作。通常情况下,由于调用的子程序和C语言程序往往使用同一个堆栈,所以在程序执行时,汇编语言子程序需要执行两条指令:push bp pop bp、sp[7]。

2.混合的软件编程实例分析

三、小结

综上所述,随着信息技术的不断发展,人们对于计算机软件编程的功能要求也将越来越高,而利用C语言能够实现计算机软件的多种功能,因此研究者应当强化对于C语言的计算机软件编程实验研究,开发功能更加强大的软件。

参考文献

[1] 侯宏霞.提高“汇编语言”课程实验教学质量的几点思考[J].内蒙古农业大学学报(社会科学版),2011(01):25-26.

[2] 刘海峰.以培养实践能力为导向的“C语言”教学方法探讨[J].科技经济市场,2008(12):33-34.

[3] 阿娜古丽·阿布拉.C语言与汇编语言相互调用实现混合编程[J].电脑编程技巧与维护,2009(10):71-74.

[4] 刘丹,刘德山.C语言程序设计课程综合性和设计性实验研究[J].计算机教育,2012(09):31-32.

[5] 王应军,曲培新,赵晨萍.ARM汇编语言与C语言混合编程的实现方法[J].科技信息,2010(03):69-71.

c语言编程篇8

关键词:C语言;教学方法;趣味性;情境教学;实验教学

C语言是一种通用性计算机程序设计语言。对于学生来说,学好了C语言,再进一步深造C++/VC++,JAVA等语言,就有了坚实的基础。但目前很多学生在学习《C语言程序设计》后,感觉读程序还能凑合,编程则“难于上青天”,无从下手,部分学生仅仅是为应付考试而死记硬背程序,完全背离了中职教育的初衷。因此,在从事对口单招C语言教学中,我越发觉得对学生进行编程能力的培养是很重要的。结合近几年的教学实践,我觉得应该在以下几个方面重点培养。

一、上好第一堂课,诱导与激发学生的学习兴趣

如何上好第一堂课是至关重要的。因为学生都是初次接触C语言,C语言对他们来说是神秘的,“兴趣永远是最好的老师”,有了兴趣他们才会积极主动地去学习,所以我觉得第一堂课应为“趣味C语言入门课”。

1.明确C语言的地位

教师可以用最通俗的语言,以讲故事的方式向学生展示计算机以及程序设计的无穷魅力,让学生了解计算机对人类生活的影响,它是如何获得这种魔力的,程序设计扮演什么样的角色,程序设计语言是怎样的语言,怎样驾驭程序设计语言,从而成为“编程高手”等。

2.强调C语言的重要性

C语言是学生今后学好后续专业课的基础,比如数据结构、VB、VC++、JAVA等。虽然程序设计语言更新很快,但一旦真正掌握了程序设计思想和理念,具备了真正解决实际问题的能力,即使语言再更新但程序设计的本质是不会变的。

3.传授C语言的学习方法

C语言是一门实践性较强的课程,要理论联系实践,加强学生动手能力和解决问题能力的培养,在学习方法上给予学生指导,告诉学生如何自学、如何听课、如何动手实践,明确一点:“C语言不是看会的,也不是听会的,必须是亲自动手实践练会的”。从而强调实践的重要性。

二、以问题为核心组织课堂教学,采用灵活多样的课堂教学方法

C语言课堂教学应充分发挥其解决实用问题的导向作用,进行理实一体化教学,有机地将理论与实践结合起来,通过设计巧妙的教学内容,充分调动学生的积极性,让学生的思维围绕教师的思维而运动。要让学生感觉到所学知识能解决实际问题,通过一些有趣实用的例子去引导学生学习,在学生的思维中留下一定的期望与神秘感,促使学生驱动自己的好奇心,从而充分调动学生主动学习的欲望。

1.理论联系实际,激发学习兴趣

在教学中,我经常以讲故事、做游戏等形式,选取一些有趣的C程序经典例子穿插在课堂教学中,大大提高了学生的学习兴趣。

例如在讲函数时,如果直截了当引入函数的概念,就不会引起学生的兴趣,也不会让学生认识到函数在程序设计中的重要性。我从《三国演义》故事开始讲起,《三国演义》中有这样一段描写:懿问曰:“孔明寝食及事之繁简若何?”使者曰:“丞相夙兴夜寐,罚二十以上皆亲览焉。所啖之食,日不过数升。”懿顾谓诸将曰:“孔明食少事烦,其能久乎?”此话音落不久,诸葛亮果然病故于五丈原。“食少”可能因为身体欠佳,而“事烦”则纯粹是诸葛亮自己给自己套上的枷锁。他的行事原则就是“事无巨细”,“事必躬亲”,落得个手下一帮能人无从发挥,新人没有锻炼机会,自己却积劳成疾,最后“蜀中无大将,廖化当先锋”。从管理学的角度是极其排斥这种做法的,认为工作必须分工,各司其职,每人发挥专长。其中的思想,在程序设计里也适用。

自然而然地得出结论:程序设计就像一门艺术,主要体现在算法设计和结构设计上。就如同建筑,假如结构不科学,外表再华丽的大楼,也难逃倾覆的命运。对于一个软件项目来说,用户能看到的只有功能、界面、运行速度和价格等。虽然我们可以在main()里书写代码,完成全部功能,提供友好界面,保证运行速度并尽力压缩成本,但这样的main()就好比是诸葛亮,“事必躬身”,即便聪颖过人,也是“其能久乎”。这样的程序将带来一系列的弊端:稳定可靠较差、不可能精炼高效、不可能与时俱进、难以控制进度……

面对上面的诸多问题,该怎么处理?答案是:给程序一个好的结构!而函数和模块正是C语言为实现一个结构化程序的两样武器。当函数和模块在程序设计中的重要性解释清楚以后,学生才有兴趣和愿望去进一步学习如何定义和使用函数。

2.采用情境教学法,激发自主学习

让学习过程变得轻松有趣是激发学生兴趣的关键所在。C语言本身是一门极其抽象难懂的学科,把抽象的问题形象化,这样就能把学生的注意力集中起来,学习积极性调动起来,达到师生互动的效果。例如在讲数组的查找和排序问题时,由于算法往往比较抽象复杂,学生较难理解,教师不妨借助于多媒体课件生动的演示功能,或者干脆叫几个学生到黑板前面来,现场演示如何找到个子最高的学生,如何将他们按照个头高矮来排队,如何在队列里插入一位新同学,如何在队列里查找一位同学等等,这样,不仅不会让学生感到枯燥乏味,活跃了课堂气氛,而且还能给学生留下深刻的印象,使得原本枯燥的算法变得简单易懂。

3.采用“引申法”由浅入深,触类旁通

所谓“引申法”是指结合已经解决的问题,因势利导,引导学生在此基础上解决相关联的问题。如我在讲解利用for循环解决累加问题的时候,先举一个基本的累加题的例子:计算S=1+2+3+4+……+100,待学生掌握了解决问题的方法后,随即引申出一系列的问题:计算S1=1+3+5+……+99,S2=2+4+6+……+200,S3=12+22+32+……+102,S4=1!+2!+3!+……+10!等,这样类似的问题还有很多。“引申法”可以培养学生在程序设计方面的发散性思维,提高程序设计中的应变能力。问题是活的,但程序是有章可循的。最终使学生明白,语法是有限的,可解决的问题是无限的。只有在分析实际问题的基础上,以清晰的思路去设计算法,才能举一反三,以不变应万变。

三、重视实验课教学,提高学生动手能力

学习C语言程序设计应当充分重视实验教学。首先,教师在上实验课时尽量要求学生多编写程序,多上机调试程序,上机实验的主要目的在于让学生熟练掌握上机操作要领和调试程序技术,积累编程经验。其次,上机实验可以加深学生对讲授内容的理解,尤其是一些语法规定,光靠课堂讲授比较枯燥又难以记住,但它们又很重要,通过多次上机就能自然地熟练掌握,通过上机来掌握语法规则是行之有效的一种方法。最后,学生在上机调试通过一个程序后,可以自行修改程序中某些关键部分,甚至故意设置一些障碍,观察和分析在不同情况下的编译和运行结果。事实证明,上机实验的重要性绝不亚于课堂听课,这是巩固和发展课堂知识的十分重要的环节。

我认为可以从以下两个方面加强训练:一方面是规范上机实践内容。可以专门设计一套完整的实验大纲,为学生的实践提供指导。同时,对实验报告进行规范设计。这种规范对于学生基本程序设计素质和良好的程序设计习惯的培养,以及科学严谨的工作作风的训练能起到很好的促进作用。另一方面是采用“实践―查漏―再实践”的方式进行上机实践。在平常实验过程中,根据教学对象的不同,相关课程精心设计几组不同类型的有一定综合性的问题作为实验题。不仅抓实验过程中的辅导,同时还抓实验前的准备工作和实验后的总结工作。要求学生每次实验前熟知本次实验的目的,认真编写程序,保证在实验时能做到心中有数、有的放矢,杜绝学生在上机时临时编写程序。实验过程中要求学生仔细调试程序,一周后给出一个示范程序(示范程序基本上采用面向对象的方法和思想来设计)。要求学生对照示范程序发现自己程序设计中的漏洞或不足之处,改进或完善示范程序,然后再修改、调试自己的程序。最后要求学生写出完整的实验报告,实验报告批改后,对学生的上机实验情况做及时总结,指出成功之处和不足之处。通过这种“实践―查漏―再实践”的方法训练,对实验问题的深入分析、剖析,避免上机的简单重复,有效地提高了学生的编程能力,以及分析问题和解决问题的能力。

总而言之,C语言程序设计的教学要讲究方法,通过这门课的学习,不仅要使学生掌握C语言的基本语法规则,而且要切实培养学生逻辑思维和动手编程的能力,培养学生的创新精神、团队意识,为学生提供更好的展示才华的舞台。

参考文献:

[1]谭浩强,张基温.C语言习题集与上机指导[M].高等教育出版社,1993.

[2]陈国英.提高计算机语言课上机实践教学的改革与实践[J].洛阳农业高等专科学校学报,2002.

c语言编程篇9

一、研究目标及拟解决的主要问题

程序设计基础(C)具有较强的实践性,对学生以后参与专业领域的应用软件的开发和使用会有极大的帮助,它的学习效果将直接影响学生后续课程的学习。由于本课程的学习对象是大学一年级的学生,他们对计算机语言与编程还很陌生。一方面,C语言存在难点集中、跨度大的问题,要求学生记忆大量的语法规则、语句格式等,容易使学生产生畏难情绪;另一方面,该课程难以体现软件工程思想,不利于学生能力的培养。第三,传统的教学方式主要以教师讲授为主,培养出来的学生缺乏自主学习的能力,缺乏运用知识解决实际问题的能力。第四,对学生的学习评价方式单一,大多以卷面笔试成绩为依据,很难客观体现学生的实际应用能力。针对这些问题,本项目提出建立以培养能力为主线的教学体系;依靠网络信息技术和多媒体技术构建基于WebQuest教学模式的网络探究教学平台,提高学生实际编程能力。本项目拟解决的主要问题有:

(1)实行启发式、讨论式、探究式、趣味性教学,建立教与学互动的教学情境。广泛吸取先进的教学经验,以教师为主导,以学生为主体,完善教学课件,精选典型、趣味性案例,多媒体教学和黑板书写等多种方式相配合,实行启发式、讨论式、探究式、趣味性教学,建立教与学互动的教学情境,激发学生的学习兴趣,提高教学效果。采用“实例-理论-应用”的教学方式,任务驱动,用实例来引入、解释概念,用案例来演绎理论和方法,鼓励学生自己提出问题的解决方案,对遇到的问题,鼓励同学之间或师生讨论,或在老师的的启发与引导下解决问题。培养学生具有合作学习和探究性学习的能力,培养良好的团队精神,为以后的后续课程的学习打下良好的基础。

(2)构筑网络教学平台

构筑网络教学平台,教学资料全部上网,以教学课件、教学录像为基础,以学习指南、实验指导、作业习题为引导,以在线答疑、手机答疑、短信答疑、电子邮件答疑为互动,以在线测试、模拟考试为补充,鼓励学生自主学习、开放学习、灵活学习。

通过师生互动的教学,通过网络教学资源的配合,让学生掌握各学习环节,充分发挥学生的学习积极性和能动性,激发和促进学生的能力发展。

(3)考核方式

建立试题库,抽题组卷;实行全校统考,考教分离; 期末闭卷笔试(统考)成绩占70%,平时作业成绩占10%,平时实验成绩占20%。

(4)鼓励学生参加各社会实践大赛:全国大学生数学建模竞赛、挑战杯竞赛、电子设计竞赛、软件设计大赛等,锻炼和培养学生的创新精神和方案创新设计的能力。

二、研究内容

1、如何以培养学生分析问题、解决问题编程能力为目标,编写适合教学的教材,修定、完善“程序设计语言(C)”的课程教学大纲、实验大纲和实验指导书。

2、如何依靠网络信息技术和多媒体等新兴技术构建基于WebQuest教学模式的网络探究教学平台,建设“程序设计语言(C)”重点课程网站。

3、如何以“全国信息技术应用水平大赛”为载体,增强学生掌握应用开发技术的自信心与能力。

4、如何培养学生形成正确的程序设计思想,能够熟练地使用C语言进行程序设计并具备调试程序的能力,为后继课程VC,VC++及其他程序设计课程的学习和应用打下基础。

三、本项目研究解决教学问题拟采取的主要方法

1、对当前民办院校和独立学院计算机类专业基础课程体系进行比较研究,对当前IT行业要求学生应具有的主要应用开发能力进行比较研究,从而,编写适合学生的教材,合理的确定“程序设计语言(C)”的课程教学内容与学时、教学大纲、实验大纲和实验指导书;课程设计要求、方式、学时与学分、课程设计指导书(任务书)等,体现出课程的先进性、科学性,符合软件行业对人才的能力需求。

2、精讲课本知识,充分利用先进的教学手段,提高课程教学质量。加强师资与实验室建设,加强综合课程设计环节,切实提高学生实际动手能力的培养。

3、丰富和完善试题库、模拟试卷与解答、多媒体课件、教学录像、在线答疑等各类教学资源。在该项目实施的基础上,该项目组已经按照城市学院重点课程建设的要求,于2011年申报院级“程序设计基础(C)重点课程建设项目”。从而,在城市学院建立完善的、以培养学生掌握C语言为目标,掌握后续课程C++、VC++程序设计方法的教学体系。

4、改革课程与课程的考核方式。

四、项目研究(开发)的总体安排及进展情况

(1)第一阶段:

准备阶段:根据课程的特点,项目组的教师讨论提出最优方案,制定详细的计划,分工责任到人,并定期检查进展情况。

(2)第二阶段:

具体实施阶段:编写适合学生的教材,制作统一的教案和电子课件,合理的确定 “程序设计语言(C)”的课程教学内容与学时、教学大纲、实验大纲和实验指导书等,体现出课程的先进性、科学性,符合软件行业对人才的能力需求。申报院级“程序设计基础(C)重点课程建设项目”。

(3)第三阶段:

丰富和完善“程序设计语言(C)”课程试题库、模拟试卷与解答、多媒体课件、教学录像、在线答疑等各类教学资源。由相关教师完成网站建设工作。

(4)第四阶段:

评价项目研究成果;撰写项目“研究报告”;发表研究论文及应用论文。

五、预期成果

1、教学研究的研究报告。

2、教学研究的教材、教案、课件、教学大纲、实验大纲、实验指导书等。

3、以“全国信息技术应用水平大赛”为载体,增强学生掌握应用开发技术的自信心与能力。

c语言编程篇10

关键词:C语言,汇编语言,混合编程

现代电子设备中DSP芯片的开发越来越多地得到应用,使用C语言开发的DSP程序可读性和可移植性好,开发周期短,程序修改方便。但在某些情况下,C代码的效率还是无法与汇编代码的效率相比,而且一些硬件控制功能也不如汇编语言方便,甚至有些操作C语言无法直接实现。因此在DSP的软件开发中常用汇编语言实现对硬件的直接控制或用来编写一些效率要求较高的程序段,但由于汇编语言的移植性和可读性差,所以常采用混合编程的方法,以便达到最佳效果。

混合编程中两种语言相互调用,进行参数传递,共享数据结构及数据信息,但是由于两种语言在程序格式、函数调用、寄存器使用等方面都有不同之处,因此混合编程中主要是要解决二者的接口和参数传递问题。下面以C为例说明混合编程的几种实现方法:

一、直接在C程序中嵌入汇编语句

这种方法比较简洁直观,可以将C程序中无法实现的硬件控制及需要较高效率的关键部分用汇编语句编写,以优化程序。论文参考网。但这种方法的缺点是比较容易破坏C环境,因为C编译器在编译嵌入了汇编语句的C程序时并不检查或分析所嵌入的汇编语句。在Turbo C中嵌入汇编语句由关键字asm引导,其格式为:

ASM操作码 [操作数],[操作数]

例如在C语言源程序example1.c中嵌入汇编语言的语句

main()

{

int x;

int y;

x=8;y=10;

asmmov ax, [y]

asmadd [x],ax

printf (“x:%d ”,x)

}

上述C语言源程序不能用集成编辑器,因为编辑器tc.exe不支持嵌入式汇编程序,只能用DOS命令行tcc.exe实现。

二、独立的C和汇编模块接口

这种方法是混合编程中常用的方法,关键是要解决好汇编语言与高级语言的数据通讯。在这种方式下两种语言分别编写,分别产生各自的obj文件,然后经过连接,形成一个完整的程序,采用这种方法比较灵活,在使用中要遵循有关的调用规则和寄存器规则。

1、混合编程的规则

1)命名约定: C编译器对C源程序编译时要将其中的变量名、 函数名等标识符前加下划线,而汇编程序在汇编时直接使用,所以被C语言调用的汇编程序有标识符前都要加下划线。

2)声明约定: 在C语言中对C所使用的外部变量、过程、函数均用EXTERN说明:

extern 类型 函数名(参数表);

extern 类型 变量名;

使用前均应放在函数体外进行说明

3)汇编语言的变量名、子程序名等标识符,为了能让其他模块可见必须用public操作符定义它们。如

public

_bof,_array

4)由于C语言对大小写字母的区别,在汇编程序中子程序名和变量名都要使用小写字母。

2、寄存器的使用规则

对于寄存器AX、BX、CX、DX和ES在汇编语言中可任意使用,对于寄存器BP、SP、DS、CS和SS,如果C语言要求保护,在汇编语言子程序中使用它们之前,先进行保护,使用后再加以恢复。对于指针寄存器SI和DI,C语言用作寄存器变量,因此在汇编语言程序中使用它们之前都要进行保护,返回时再将其恢复。

3、混合编程的参数传递和返回

C语言程序调用汇编语言子程序时,参数通过堆栈传递给汇编程序。参数由C传递给汇编时,参数以其在参数表中出现的反序入栈,然后再存入主程序的返回地址IP的值。当被调用函数或子程序运行结束后,C主程序会自动调整堆栈指针SP使之恢复到压入参数之前的状态,不需要程序员平衡堆栈。但编程时应注意不同类型的参数占用字节数也不同如int占2个字节,real占8个字节,同时还要注意近调用和远调用时段地址CS和偏移地址IP在栈中占用字节数也不同。 当汇编子程序中有值返回时,若返回的结果是短整数,放在AX中,若为长整数放在DX:AX中。

4、编译连接

分别用C语言和汇编语言写出源程序后,下面就是要进行编译、连接生成可执行文件,这时可用Turbo C的tcc命令来完成。

其格式为:tcc [编译参数表] 文件名1文件名2…..文件名n

其功能是通过设置不同的编译参数将指定的各个文件编译连接。当文件中有扩展名为.asm的汇编源程序时,tcc命令立即调用tasm.exe宏汇编程序,对.asm源程序进行汇编。论文参考网。同时要注意如果用户使用的是masm.exe汇编程序时,要将masm.exe改名为tasm.exe,并和tcc命令存放在同一目录下。

三、利用codecomposer集成开发环境进行修改

这是一种简便易行快速优化C语言代码的方法,在Code Composer集成开发环境中,选择View菜单下的MixedSource/ASM选项即可看到交叉列表的汇编程序。在所生成的语句中,每个C语句的下面就是C编译器对该C语句编译所生成的汇编语句。论文参考网。通过查看交叉列表的汇编程序,可以对某些编译不是很优但却是比较关键的汇编语句进行修改。修改汇编语句时,必须严格遵守不破坏C环境的原则。

参考文献:

郭咏梅.C语言程序与汇编语言程序的接口分析[J].电脑学习,2002.(1):26-29