类C语言

2024-09-16

类C语言(共9篇)

类C语言 篇1

一、引言

实践教学是高职教育的特色, 抓好实践教学是办好高职教育的关键。实践课程通常由两部分组成:理论课和实训课。但由于课时数不够等原因, 导致了教师理论讲解不透彻、实践力度不够、理论与实践无法透彻融合, 影响了课程的实施效果。因此, 如何在有限时间内保证学生内化所学知识并提高实际动手能力, 是高职实践类课程教师面临的一个重要课题。

近年来, 伴随着网络技术以及移动技术的逐步发展, 高校数字化校园建设的逐步完善, 教育教学思想和教学模式不断革新, 数字化教学方式成为高职教育中实践类课程教学的主要方向之一。基于E-learning的教学模式和基于Blending Learning的微课教学模式也越来越受到大家的欢迎。MOOC作为一种新的学习和教学方法, 在包括美国在内的许多国家的高等教育中受到青睐, 并大规模地进行推广, 至今方兴未艾。

二、MOOC环境下混合教学模式的操作过程

MOOC环境下混合教学模式的具体流程大致可以分成三个阶段:课前学生自主、课堂教学以及课后实践与反思阶段。

1. 课前自主学习阶段。

课前, 教师根据教学内容制定教学重难点, 制作完成各位资源供学生进行自主学习;学生根据教师提供的视频、PPT、动画, 借助交互平台, 进行自主学习, 并简单评价。

2. 课堂教学阶段。

课中, 既有教师活动, 又有学生的活动, 线上线下相融合, 在线学习与课程教学相补充, 师生充分互动。

3. 课后实践与教学反思阶段。

课后, 主要是教师反思以及学生拓展实践为主, 可以通过兴趣小组、特长生工作室来辅助教学, 提高教学质量。

三、MOOC环境下实践教学所需创设的条件

明确了实践操作类课程在MOOC环境下混合教学模式的操作过程, 接下来就要为实施创造必须的条件。

第一要选择合适的信息化平台。学校的数字化校园为数字化学习提供了良好的网络环境, 学生与教师可以进行各方面的互动。平台应该能提供课程资料的上传下载、在线浏览、在线测试、作业讨论等。这样就能满足学生的自主学习, 满足不同基础的学生不同程度的学习要求与进度, 并能进行适当反馈。

第二是要有合适的教学软、硬件。以《C语言程序设计》为例, 所需要的硬件系统为Windows操作系统, Visual C++6.0的软件环境。就目前来说, 这个条件并不高, 基本上家用的机器都能满足, 可以保证学生的课前、课中、课后学习正常展开。

第三, 教师进行充分的课程开发。对于动手操作学习环节较多的实践类课程, 尤其要注意课程资源的碎片化、趣味化。以《C语言程序设计》为例, 课程依托于国家软件技术教学资源库的建设, 共建成设计了课程简介、学习指南、课件、视频、实训、习题试题库、项目库、考核方案、源代码等15大类资源, 方便学生进行在线学习、在线作业、在线测试、在线答疑及在线交流, 实现自主学习和个性化学习。而且, 课程开发应尤其注意以视频为中心。教师需将各知识点精心筛选、编排和整理, 针对各个知识点或抽象而难以理解的内容录制教学视频, 让知识点更直观、生动、有趣。视频必须短小精悍, 便于视频的上传和学生在电脑以及移动设备上正常观看, 格式建议为“mp4”。笔者以《C语言程序设计》第三单元“选择结构程序设计”为例, 共开发了9个微视频。除教学视频之外, 教师还需制作各种资源, 比如动画、PPT演示文稿以及教学案例等。以《C语言程序设计》课程“一维数组排序”知识点为例, 共制作了9个排序来辅助教学, 帮助学生理解排序过程, 从而内化知识。教师针对建成的丰富多样的素材, 能让学生通过网络平台自主进行选学, 弥补教与学之间的“断层”。

四、优化课堂教学

MOOC环境下, 学生可以通过课前的自主学习获得基本的知识, 但如何更好地发挥学生学习的主观能动性, 如何使其高效地参与到课堂教学中, 教师的指导以及监督就显得尤为重要了。实践类课程中课堂教学的主要任务是让学生有机会在教学环境中应用其所获取的知识, 参与到项目实践, 将抽象的理论知识转化为具体的工作实践。

以《C语言程序设计》中“一维数组”知识点为例, 在课前的学生自主学习中, 学生已经掌握了一维数组定义、初始化级使用的基础的知识。课堂中, 教学实施分成五个步骤:问题引入、教师示范、课堂实践、汇报展示和课堂总结。教师和学生将一起完成“学生成绩平均值”以及“学生成绩排名”两个任务。通过小组讨论、团队合作等方式让学生全员参与。在学生完成任务之后, 进行当场汇报, 这样既锻炼了学生的表达能力, 又检验了学习效果, 还能根据学生的实际操作情况, 进行当场评价。作为活动的引导者, 教师在设计完教学过程后, 在整个教学过程中主要起到巡视指导、答疑解惑的作用, 帮助学生解决问题, 提高学生的专业技能。

五、强化知识巩固

完成了课堂基础项目后, 学生对课堂知识点、难点与重点内容有了充分的理解, 掌握了知识的应用, 教师要及时鼓励学生对项目中出现的问题进行归纳总结。依托软件技术资源库, 我们专门建立了项目库, 里面有专门的单元案例库和课程综合案例库, 如图1与图2所示。学生将拓展项目完成情况汇报给教师, 以便教师掌握学生对知识巩固的情况, 为下一步教学设计提供依据。以《C语言程序设计》课程为例, 还专门开设了微信平台、QQ群辅助教学, 主要用于常见问题以及重难点问题的探讨, 实现了课上、课下教师联动, 有效提高了教学质量。

六、采用多元化考核方式

动手操作环节较多的实践类课程的学生评价采用多元化评价方式进行。课程评价由三部分组成, 分别是态度性评价、知识性评价以及技能型评价。知识性评价由“课堂作业+课后作业+测验+考试”组成, 主要评价学生对知识的掌握情况, 技能性评价主要评价学生的实际动手能力。

七、结语

实践类课程在MOOC环境下混合教学模式是教学改革的必然途径。这种教学模式, 不仅能够发挥教师引导、启发、监控教学过程的主导作用, 还能充分体现学生作为主体的主动性、积极性和创造性。采用实验软件与教师指导相结合的方式, 强化对MOOC课程中动手操作学习环节的教学, 提升教学效果。

摘要:随着慕课的广泛应用, 如何有效地指导学生进行自主学习, 尤其是对于动手操作环节较多的实践类课程的学习, 成为当下教师面临的一个重要课题。本文以《C语言程序设计》为例, 强化对MOOC课程中动手操作学习环节的教学, 提升教学效果。

关键词:混合教学模式,MOOC,实践操作

类C语言 篇2

课题:

教学目的: 教学重点: 教学难点: 第一章 C语言概述

1、了解C语言出现的背景

2、掌握C语言程序的构成、书写格式和上机步骤 C语言程序的构成 上机操作

步骤一 引入新课

从计算机应用基础中学过的计算机语言及语言处理系统引出C语言。步骤二 讲授新课

一、C语言出现的背景

1.ALGOL60 :1960年面向问题、结构化,可读性、可移植性好,不能对硬件操作; 2.CPL:63年接近硬件,规模较大、难以应用;

3.SIMULA:1966~1967 SIMULA 66是ALGOL 60的扩充;SIMULA 67引进了“对象”和“类”等概念而成为第一个面向对象的语言;

4.BCPL :67年由CPL改制,结构化、直接处理硬件;

5.B语言:1970年贝尔实验室的Ken Thompson以BCPL语言为基础设计的,开发了第一个UNIX操作系统;

6.C语言:1972-73年间,保持了BCPL和B语言的精炼与接近硬件的优点,克服了它们过于简单、数据无类型的缺点,重写了UNIX操作系统的90%;

7.标准 C:以1978年发表的UNIX第七版中的C编译程序为基础,Brain W.Kernighan&Dennis M.Ritchie合著的《The C Programming Language》问世; 8.ANSI C:1983年美国国家标准化协会(ANSI)制定的标准

9.C++:1986年 与C兼容,保持了C的所有优点并进行了增强:增强了面向对象的机制,成为典型的面向对象和面向过程的混合语言,适用于大型系统软件和应用软件的开发;

10.87 ANSI C:1987年制定的新标准;

11.ISO C:1990年ISO接受87 ANSI C为ISO C的标准,该标准是目前C编译器的标准。

二、C语言的特点

1.语言简洁、紧凑,使用方便、灵活; 2.运算符丰富

3.数据类型多(整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类等)4.具有结构化的控制语句 5.语法不太严格,自由度大

6.既是高级语言,又具有低级语言的功能 7.生成目标代码质量高,程序执行效率 8.可移植性好

三、C语言程序的构成

1.C语言是由函数构成的,至少有一个main()函数;

2.每个函数由函数首部和函数体组成;函数体由说明语句、执行语句组成; 3.每个C程序从main()函数开始执行,并在main()中结束; 4.每个语句和数据定义的最后必须加分号;

5.C程序无输入、输出语句

输入功能由scanf()函数完成;输出功能由printf()函数完成; 6.可加注释/*……*/

借助程序实例加以说明,并提倡良好的程序设计书写风格: 1)每个语句占一行;

2)同一层次的语句从同一位置处开始书写;

3)同一层次中嵌套的结构,应从不同位置开始书写;

4)编译控制行、外部数据定义、函数定义之间空一行书写; 5)对于函数体的大括号的书写约定 6)学会使用注释。

四、上机步骤

1.进入环境c:tctc 或进入ms-dos,>cd,>cd tc,>tc 2.编辑源程序 3.保存源程序 4.编译源程序F9 5.执行程序Ctrl-F9,查看结果Alt-F5 6.退出C环境Alt-X

步骤三 课堂小结

1、C语言的构成要素,main函数在程序中的作用

2、上机操作的过程

步骤四 布置作业 上机练习:

1、进入C编辑环境,按良好的程序设计风格输入例题,按步骤编译、运行、查看结果

类C语言 篇3

关键词:汇编语言,C/C++语言

在计算机系统的应用程序中, 所有汇编任务都由汇编语言来完成, 这样虽然完成任务的效率很高, 但是工作量却非常大, 会影响到对于应用程序的维护。若是所有的程序都是由C/C++语言进行编程, 虽然执行过程比较的简单, 但是这种方式却导致了目标代码的执行任务效率低, 实时性很差。所以在嵌入式系统中, 主要采用的编程方式是汇编语言与C/C++语言混合编程形式, 在编程过程中, 初始化任务由汇编语言来完成, 主要的任务则是由C/C++语言来完成, 从而达到了最大的效果。

1 ARM处理器

ARM处理器主要是利用编译器将汇编语言以及C/C++语言进行相互的切换, 并且ARM制定了相关标准, 来保障切换过程中的顺利实施。

1.1 寄存器使用规则

ATPCS为ARM寄存器进行不同命名, 从而在编程的过程中来利用ATPCS寄存器进行编程。

1.2 堆栈的使用规则

在ATPCS中规定, 堆栈的主要类型是FD, 被称为满递减堆栈, 所以必须要利用STMFD/LDMFF进行堆栈的操作。

1.3 参数传递规则

参数传递的规则不一样, 利用参数的数量可以将子程序分为参数数量固定, 以及参数数量不固定的子程序, 对于参数变化的子程序, 若参数的数量少于四个, 那么要利用寄存器来进行参数的传递, 若参数的数量多余四个, 那么必须要利用堆栈来进行参数的传递, 所以参数之间传递的规则不同。

2 C语言

2.1 汇编语言调用C语言

在对计算机程序的开发中, 前期由汇编语言进行初始化的编程, 然后在进行C语言之间的切换, 对于C语言的切换, 主要是通过BL来实现的。以下是调用的字符:

汇编语言的集成环境如图1所示。

2.2 C语言调用汇编语言

在程序中, 使用“C++”程序来调用C程序, 以下是调用C程序的字符:

2.3 汇编程序调用C++程序

在汇编语言与C++程序的切换时, 必须要利用关键词进行声明, 在C++程序的结构中, 如果没有基类, 则要使相应的存储结构与ARMC相同。并且在汇编过程中将参数的数据放在数据栈中, 只有这样才能使被调用的C++程序访问到相应的参数。

3 混合编程

在进行混合编程的过程中, 若汇编代码较短, 那么可以利用内嵌汇编的方式进行混合编程, 不会直接指定寄存器, 而是直接利用编译器进行分配。主要的内嵌汇编语言如下:

以下是利用字符串复制的方式实现混合汇编:

4 结语

在计算机系统嵌入式应用程序的开发中, 利用ARM汇编语言与C/C++语言相互结合的混合编程方式, 可以在很大程度上提高编程的最佳效果。本文主要举出了ARM汇编语言以及C/C++语言汇编中的实例, 提出了设计的方法, 阐述了ARM汇编语言与C/C++语言相互结混合编程方式的实现。

参考文献

[1]翟乃强, 隋树林.汇编语言与C语言及Visual C++混合编程[J].青岛科技大学学报 (自然科学版) , 2003.

[2]王付山.汇编语言程序设计教学初探[J].福建电脑, 2005.

C语言与语言互相调用 篇4

C语言是目前非常流行的一种编程语言,除具有高级语言使用方便灵活、数据处理能力强、编程简单等优点外,还可实现汇编语言的大部分功能,如可直接对硬件进行操作、生成的 目标代码质量较高且执行的速度较快等。所以在工程上对硬件处理速度要求不很高的情况下,基本可以用C代替汇编语言,编写接口电路的控制软件。但C也不能完全取代汇编语言,如在一些对速度要求很高的实时控制系统中,以及对硬件的特殊控制方面,C有时也不能完全很好胜任,还需要汇编语言来编写。因为汇编语言目标代码更精练,对硬件直接控制能力更强和执行速度更快,但汇编语言编程烦难、表达能力差也显而易见。比较好的解决办法是C与汇编语言混合编程,即用C编写软件的调度程序、用户界面以及速度要求不高的控制部分,而用汇编语言对速度敏感部分提供最高速度的处理模块,供C调用。这种方法提供了最佳的软件设计方案,做到了兼顾速度效率高和灵活方便。由于本人的毕业设计需要C程序中调用汇编模块的方法来提高ARM定点指令的执行速度,故对这方面进行了学习。学习心得如下:

对于C和汇编语言的接口主要有两个问题需要解决。

一、调用者与被调用者的参数传递

这种数据传递通过堆栈完成,在执行调用时从调用程序参数表中的最后一个参数开始,自动依次压入堆栈;将所有参数压入堆栈后,再自动将被调用程序执行结束后的返回地址(断点)压入堆栈,以使被调程序结束后能返回主调程序的正确位置而继续执行。例如一调用名为add汇编程序模块的主函数:main(){......add(dest,op1,op2,flages);......}。在此例中对主函数进行反汇编,主函数在调用add函数前自动组织的堆栈。...lea 0xfffffffe8(%ebp),%eax #flages数组的首地址入栈

..执行完add调用语句后,栈内数据结果如图一所示。

进入汇编子程序后,为了能正确获取主调程序并存入堆栈中的数据,被调的汇编子程序先后要做如下一些工作: 1、保存esp的副本

进入汇编子程序后,子程序中免不了要有压栈和出栈的操作,故ESP时刻在变化。为了能用 ESP访问堆栈中的参数,安全办法是一进入子程序后,先为ESP制副本,以后对传递参数的访问 都用副本进行。一般可用EBP保存ESP,如: push %ebp mov %ebp,%esp push %eax pushl 0xfffffff8(%ebp)#OP2入栈 pushl 0xfffffffc(%ebp)#OP1 入栈 pushl 0xfffffff0(%ebp)#dest地址入栈

call 0x80483f0 #调用add函数

2、保留数据空间

如果汇编子程序中需要一些局部数据,可以简单地减小ESP的值,以便在栈空间中保留出一段存贮区,用于存放局部数据,该区域须在子程序结束后恢复。如下语句可以保留一个局部数据区: push %ebp

mov %ebp ,%esp subl space,%esp;设space=4 movl $0x0,%ebp movl $0x0,-2(%ebp)如上语句段中,space是局部数据的总字节数。在以后的应用中,由于ESP是变化的,而 EBP是 固定的,用负偏移量可以存取局部变量。上例利用EBP及偏移量,将两个字的局部数 据初始化为0。

3、保留寄存器值

如果在被调子程序中用到ESI、EDI等其它寄存器,则应先把它们压入堆栈,以保留寄存器原值。例如,下例就是将ESI和EDI寄存器的值压栈: pushl %ebp movl %ebp ,%esp subl $space ,%esp, pushl %esi pushl %edi

4、获取传递参数

作完了1~3步的操作后,结合上面C程序传送参数这一例子,现在栈结构如图二所示。

由此可见,EBP保留了ESP在参数传递完并将EBP压栈后的一个副本,利用EBP可以很方便地访问各参数。现假设各参数都是2字节的整数值,在小模式编译方式共占用2个字节。如果要将传递的参数op1、op2取出,并分别赋给ebx、ecx寄存器,可由下列语句完成这一功能:

movl 0x8(%ebp),%eax movl 0xc(%ebp),%ecx

5、子程序返回值

当子程序的执行结果需要返回时,根据返回值的字长,C按如下约定接收返回值:1字节在AL 寄存器中;2字节在EAX寄存器中;4字节则高位部分在EDX中、低位部分在EAX寄存器中。C可从这些寄存器中取出返回值。

6、退出汇编子程序

结束汇编子程序的步骤如下:

1)若ESS、EDS、ESI或EDI已被压栈,则需按保存它们的相反顺序弹出它们。

2)若在过程开始时分配了局部数据空间,则以指令 mov %esp和%ebp 恢复%esp。

3)以指令pop %ebp 恢复%ebp,该步是必须的。或者可以用leave语句来恢复%ebp。它相当于movl %ebp, %esp;popl %ebp 4)最后以ret结束汇编程序。

二、说明和建立调用者与被调用者间的连系

为了建立调用与被调用模块间的连接关系,被调用的汇编程序应用global,说明其可被外部模块调用;而调用程序则应预先说明要引用的外部模块名。下面通过我的例子进行说明,该例是C调用add0的汇编子程序。程序清单如下: /* add.c */ #include extern void add(int *dest,int op1,int op2,short int*flages);/*声明调用外部的汇编函数*/ int main(void){ int op1,op2,result;int *dest=&result;short int flages[4]={0,0,0,0};printf(“please enter two soure operater:”);scanf(“%x%x”,&op1,&op2);add(dest,op1,op2,flages);/*调用add0函数*/ printf(“The result

of

ADD

is

:%xn

flages

N(negative)

Z(zero)

C(carry)V(overflow:%d,%d,%d,%dn”,*dest,flages[3],flages[2],flages[1],flages[0]);return 0;} #add.s.text.align 2.global add.type add,function #定义add为外部可调用的函数

add:

push %ebp #ebp寄存器内容压栈,保存add函数的上级调用函数的栈基地址

mov %esp,%ebp #esp值赋给ebp,设置add函数的栈基地址

mov 0x8(%ebp),%edx

mov 0x10(%ebp),%eax

add 0xc(%ebp),%eax

mov %eax,(%edx)

mov 0x14(%ebp),%eax

jo OF

C:

jc CF

S:

js SF

jz ZF

jmp out

OF:

movw $0x1,(%eax)

jmp C

CF:

movw $0x1,0x2(%eax)

jmp S

SF:

movw $0x1,0x6(%eax)

movw $0x0,0x4(%eax)

jmp out

ZF:

movw $0x1,0x4(%eax)movw $0x0,0x6(%eax)

out:

leave

#将ebp值赋给esp,pop先前栈内的上级函数栈的基地址给#ebp,恢复原栈基址

ret

#add函数返回,回到上级的调用函数

其中.text 标志一个代码段的开始,这是AT&T的段格式;global add;n type add,function说明add是公用的,可以由外部其它单独编译模块调用。

将C源程序以文件名add.c存盘,汇编语言源程序以add.s 存盘;通过MAKE进行编译和连接连接代码如下:

all: myadd

myadd: adds.o addc.o

gcc –o myadd adds.o adc.o

adds.o: add.s

as –o adds.o add.s

addc.o: add.c

类C语言 篇5

关键词:高校,C语言编程,改善对策

1 C语言及其优势

C语言作为目前世界上使用最广泛、最流行的计算机编程语言,要想学习起来得心应手,对其的了解也是必不可少的,C语言起源于上世纪60年代,成型于70年代,在近50年的使用过程中表现出了以下特点:C语言简介紧凑、灵活方便,语法限制不严格,程序的书写比较自由,将高级编程语言的结构性和低级编程语言的实用性有效的结合起来,形成了新的功能强大的编程语言;应用广泛,可植性强,C语言适用于多种操作系统;C语言中各种运算符丰富,在C语言编程过程中灵活的使用各种运算符,可以实现其他很多高级语言无法实现的功能;数据结构丰富:多种的数据结构类型的使用使C语言除了可以完成各种复杂的数据运算外还具有强大的图形功能;结构式的语言特点使代码和数据分割,程序层次清晰,便于使用、维护、调试;用C语言可以直接对物理地址进行访问,由此可见C语言的强大功能,所以在信息技术的世界中C语言的地位是很高的。

2 学习C语言枯燥原因分析

C语言的强大功能决定了它的“江湖地位”,所以社会重视、企业重视、学校重视使得学习C语言、想掌握C语言技术的人也越来越多,但是大部分人在学习过程中却表示:C语言的学习是非常难,非常枯燥的,经常是一个学期下来感觉毫无所获,还是处于云里雾里,对学科没有整体清晰的概念。为什么会出现这样的状况呢,为什么越重视效果越不行?笔者认为C语言属于高级语言,是跟面向对象的语言有很大的区别的面向过程的编程语言,它不能直接看到很华丽的画面效果,编写过程稍有不慎就会出错,而且C语言中的很多算法和数据结构如果不加以理解而只是死记硬背的话是会非常枯燥且容易出错的。在运行过程中不能很直接的看到出错的地方,需要自己投入其中进行深入分析,还应该积极的研究算法,因为只有充分地了解算法才能够在C语言的学习上游刃有余,将C语言知识融会贯通,教师在教学过程中也不能一味的讲解,而不考虑学生的接收情况,想当然学生都应该懂。笔者认为C语言编程的学习中,C语言编程技巧可以帮助C语言的学习。

3 C语言编程技巧

现在的C语言学习过程中,学生普遍感觉枯燥无味,其实笔者认为初学C语言觉得比较复杂是人之常情,但是只要你具备了一定的编程经验,再掌握一些编程技巧,其实C语言也不是很难,而且可以更加有效地提高编程的效率和编程能力。在此介绍几种在实践中比较有用的编程技巧:

首先熟练掌握指针,指针的重要性是学习过C语言的人都知道的,指针为什么重要,因为其可以大大提高运算的速度,并且使用的语句简单,但是可以达到意想不到的效果,当然指针也有缺点,就是占用了大量的内存,但是获得了程序执行的高效率。如果系统的实时性要求很高,内存还有一些可以使用指针操作会达到良好的效果。其次运用数学方法解决问题,在C语言的学习过程中,一般有大量的算法和数据结构需要去了解,通常这个阶段是最难熬的阶段,因为对于初学者来说显得比较复杂和枯燥,IT界有一句比较实在的话“数学是计算机之母”,由此可见数学在计算机学习中的重要地位,同理,在C语言的学习过程中,数学思想的应用会让人有豁然开朗之感,一般而言程序的编写都是要解决问题,而简单的运算问题的解决其实就是在数学领域的,编写程序是为了让计算机可以代替人操作运算过程,从而减少人力。从这个角度上来说,在编程前应该用数学的思维寻找规律,用数学的威力来提高编程效率,拓展编程人员的思维。最后要用高效的C语言编程,可以使用位操作,在所有的计算机程序中,可以说位是最小的数据单位,一般而言所有的运算和操作都可以通过“位运算”来解决,足见“位”在编程语言中的重要性,在C语言编程过程中使用位操作可以使代码更简洁,效率更高,当然使用任何技巧都应该视情况而定,如位操作的使用有时可能导致程序的安全隐患。

上面介绍的几种提高编程效率的编程技巧总体来说对于学习C语言指明了方向,让人们在C语言的学习中有重点和方向可寻,必定能使得人们学习C语言的积极性提高,将C语言应用地更加广泛。

4 结语

C语言的强大功能和可植入性一直是其他编程语言望尘莫及的,所以C语言在IT界广受追捧,熟悉C语言的人都被人称为“电脑高手”,所以这些年来,C语言在高校中也有原来的计算机专业课程发展到现在的理工类公共课程,自然,这对于C语言的发展来说是一件好事。与面向对象的编程语言不同,C语言是一门面向过程的编程语言,这就决定了其对算法和数据结构的要求比较高,而算法和数据结构恰恰是编程语言中比较难的部分,正因如此,现在在C语言的学习过程中,大部分人都表示这是一门很重要却很难学的课程,要让C语言更好地服务,必须打破这种现状。笔者认为在C语言的编程教学中加入C语言编程技巧的教学可以很好地改善现状。因为C语言编程技巧可以让人们提高学习兴趣、学习起来也比较有目的性,可以很好地提高C语言的学习效果。

参考文献

[1]李利国,王磊.C语言编程风格之六大章法[J].成才之路,2007,(20).

[2]王展运.C语言编程中常见错误及解决办法[J].长江职工大学学报,2002,(03).

[3]李自清.浅谈C语言编程中的常见错误和解决方法[J].科技信息(科学教研),2007,(33).

[4]王彤,张小志,王大鹏.C语言编程的技巧探讨[J].科技信息(学术研究),2007,(09).

类C语言 篇6

1 C语言概述及其具有的特征

当前时期, C语言已经成为全球范围中的计算机软件开发以及编写领域中的运用最为普遍的一种编程语言, 其传播速度以及发展速度均是极为迅速的[1]。C语言开发于20世纪60年代, 其在20世纪70年代不断发展完善, 经过50多年的发展, 目前C语言已经发展得较为成熟, 当前C语言拥有着以下一些基本特征。第一, C语言自身拥有着极为普遍的应用范围, 具有非常显著的可移植性, 可以在众多形态操作系统实现良好的适用。第二, C语言从外在形制方面来说, 其拥有着十分明显的简洁和紧凑等性能, 在进行实际使用过程中, 拥有着显著的灵活性和方便性。由于其自身语法欠缺一定的严格性, 为编程人员在进行程序编写过程中打下了较为自由的基础条件, 能够将高级编程语言与地基编程语言进行很好地衔接。第三, C语言拥有着非常多的数据结构。第四, C语言对于进行语句表意方面, 其拥有着多种多样而且数量众多运算符号, 利用这些运算符号能够完成其他高级语言不能很好实现的功能。第五, C语言拥有着典型与鲜明的应用和建设特点, 可以使数据对象和编程代码间可以进行有效的分割, 在软件编写过程中能够拥有着非常显著的清晰性, 给技术员进行使用、调试以及维护等工作带来极大的便利性[2]。第六, C语言可以对物理地址进行最为直接的访问。第七, 运用诸多的数据结构能够让C语言在实现数据运算的前提下, 还拥有着较为显著的图形元素处理以及引入方面的功能。

2 C语言学习过程中存在的问题

C语言因其具有强大以及丰富的使用功能, 使其得到了现代人们普遍的关注以及普遍的使用, 这便要对C语言使用技巧和基础知识加以有效地掌握与学习。然而, 事实上存在诸多的因素造成大量的C语言初学者常常在学习过程中感觉枯燥。虽然位过一定时间的学习以及实践, 但是无法对C语言的基础知识以及操作能力有显著的提升, 而且对于C语言整体认知也存在较大的缺陷[3]。这一学习问题主要可以从如下几点原因进行分析。

一方面, C语言对于目前大多数编程语言而言, 其处于高级语言范畴之内, C语言和以往的面向对象型的编程语言有着较为显著的差异, 这就造成C语言在进行学习过程中无法对编写的语言进行直观查看, 并且只能在编写完成并进行调试过程中才能对所编写的程序进行真实的感知, 此外, 在进行实际编写时, 一旦某一流程存在些许偏差均会造成程序输出存在错误。另一方面, 由于C语言具有的表意元素体系内存在有大量的算法和数据结构, 这便对学习者进行基础知识和应用技巧方面的学习与理解时带来了显著的制约, 致使部分学生在学习过程中感到枯燥乏味, 最终出现厌烦心理, 而且在学习时也会不断失去学习C语言的意愿, 不能确保学生学习效果得到显著的提升。

3 C语言所需的编程技巧

即便C语言拥有着众多的技术优势, 但是在实际学习过程中依旧存在较大的难度, 采取一定的编程经验以及技巧, 不但能够有效地提升编程效率, 而且可以在很大程度上对C语言学习有着帮助。

3.1 指针

C语言所具有的特征通常是利用指针表达来实现, 指针具有更为简单的语句, 而且能够有效地提高C语言的运行时的速度, 但是也存在占用内存相对较大的不足。诸如对于字符串进行赋值方面, 其中一种代码为:#defune LEN 32;char string 1[LEN];memset (string, 0, 1LEN) ;ct rcpy (st r ing1, ”this is a example”) ;另一种方式的代码为:const char string2[LEEN]=“this is a example”;char*cp;cp=string2。从上述两个代码来看, 他们的运行效率是无法相比的, 前者一定要对两个字符函数进行调用才能实现, 而后者对指针进行运用便可实现。但是后者灵活性不如前者好, 一旦字符串出现大量变更时, 前者所具有的灵活性便会展现出来, 后者将会对内存中的字符串加以大量占用。

3.2 数学方法

数学计算对于计算机而言是不可或缺的, 学习C语言过程中, 一定会遇到处理大量数据形式的结构, 编程的目的便在于解决这一问题, 利用计算机来对人工的繁重运算进行有效的代替, 从而有效地节省人工。对于一些相对较为简单的运算能够利用数学方式加以解决, 所以在利用C语言进行编程之前, 应该将数学思维运用在其中, 能够有效地提高工作效率, 对工作人员思维有着显著的扩展作用。

3.3 使用位操作

位操作能够显著的提升C语言编程的效率, 这是由于位操作使全部计算机程序内最为基础的数据单元, 拥有着非常重要的作用, 可以使代码显得相对简洁, 从而使效率得到极大的提升, 全部的运算操作基本上都可以根据位运算来进行处理, 但是位操作也存在一定的安全隐患, 因此这一技巧在实际使用过程中要根据其实际状况进行充分的考量。

4 基于单片机的C语言编程技巧

单片机已经是产品开发今后的必然发展趋势, 单片机计算机操作愈发复杂与繁重, 使其性能也得到了很大的提升, 其内部存储器也在逐渐扩大, 在代码量以及运行速度上均是汇编语言, 并不存在显著的差异, 因此利用单片机实现编程也是一项重要的研究内容[4]。C语言虽然拥有着众多的优势, 但是其所生成出来的代码相对较长, 除非拥有着较好的编程基础, 要不然的话其效果相对较差, 对此简单介绍一些有关单片机进行编程方面的技巧。

4.1 选择数据类型

基于单片机形式的C语言编程要与程序存储器进行有效的结合, 可以提供大量的数据类型, 能够被计算机进行直接读取的语言只要有bit和char, 其所产生的代码相对较短。而浮点型与整形等形式的数据无法被计算机进行直接读取, 要利用相关程序以及函数等才能实现, 而且所产生的代码相对较长。要想降低代码长度, 在对数据类型进行选取时要与实际情况相结合。

4.2 算法优化

明确所选取的数据库类型之后, 便要对程度算法实现一定的优化, 主要是针对程序运行速度以及程序代码量。此二者一般是相互独立, 拥有着此消彼长的联系, 如果空间复杂度得到了优化, 便会使时间复杂度得到一定的增加, 所以, 对算法进行优化时, 要根据具体情况取二者的平均值。代码效率一般是指代码从发出至返回所需的时间, 对时间复杂度进行优化的话, 主要是通过代码执行时间来实现, 对于执行时间方面的计算, 可以利用计时器来实现, 令单片机所自带的计时器方式调整成为自动重载形式之后, 调用代码过程中, 要将计时器进行开启, 在程序执行完成之后, 对计时器进行及时停止, 通过对时间进行计算, 基于此对其进行适当的优化。

5 结语

总而言之, C语言由于具有诸多的技术优势以及强大的功能, 使其在诸多的领域之中得到了非常普遍的运用, 对于我国诸多高校而言, 特别是理工科, 对C语言进行了大力的推动。由于C语言是一种面向过程形式的编程语言, 其中的关键部分使算法和数据节, 这也是学习过程中的重难点内容, 为了解决初学学生学习过程中的学习困难, 可以利用C语言进行编程过程中的技巧来有效地提高学习兴趣, 而且可以对教学效果以及学习效率具有显著的提升。

参考文献

[1]刘小艮.探究C语言编程技巧在C语言学习中的应用[J].科技展望, 2016 (7) :298.

[2]胡渝苹.关于计算机C语言编辑程序技巧探究[J].信息与电脑 (理论版) , 2014 (11) :158.

[3]邢如意.Linux系统下计算机C语言的编程技巧分析[J].电脑知识与技术, 2014 (36) :8674-8675, 8690.

C语言教学探究 篇7

一、教学对象

本学年我所教授的班级是中职二年级的学生, 学生的综合素质不高, 抽象思维水平较低;学习的积极性和主动性还不够, 遇到学习困难具有畏难心理, 不能刻苦钻研, 选择放弃的较多。 教学进度要适中, 不能太快, 教学内容不能太难, 要让学生能够接受, 教学方法要灵活多变, 只有这样才能教好C语言, 学生才能学好C语言这门课。

二、把握课堂教学方法, 提高课堂教学质量

(一) 做笔记。 采用讲解结合做笔记的方法进行课堂教学, 帮助和引导学生做好笔记。

C语言教材中的内容很多也很零碎, 为了不使学生产生疲劳感, 教师讲授的内容要突出重点, 使用信息化的手段突破难点。 学生基础不是太好加上C语言的学科特点 (不适合自学) , 帮助学生做好笔记是关键。 做好笔记一方面可以把书本上的关键知识点提取出来供学生学习, 另一方面可以防止学生上课走神, 使基础好的学生学到知识, 基础差的学生有事可做, 但是在C语言中基础性的语法学习没有捷径, 必须刻苦努力, 让学生记牢。

(二) 机房上课。 在机房上课, 让学生多写多练。 实践证明C语言程序是写出来的, 而不是看出来的, 更不是听出来的。 要学好C语言, 就要对程序多写, 多练。 老师讲完本课的知识点后把做好的笔记通过教师机发给学生, 让学生根据教师的笔记对知识点进行重构, 以自己的方式存储知识, 接着让学生对老师的程序案例进行上机编写、调试和运行, 确保成功。 这个过程比较简单, 学生只是临摹老师的程序, 通过这个过程学生可以体验C语言编程的乐趣, 树立编程的信心。 这个过程最好让学生独立完成, 当然对于学习困难的学生, 教师还要给予较多的指导, 以免其丧失学习信心;对于学习能力强、个性独立的学生给予较少的指导, 培养其独立探究的精神。

(三) 采用任务驱动法。 在C语言程序设计课程中, 有些概念之间的差别和程序的设计步骤如果只通过老师的讲述, 学生在课堂上就能够听懂, 但是课后很快就还给老师, 没有经过深度加工的知识遗忘得很快, 我们在学习C语言的过程中一定要多思考, 多联系, 加强记忆和学习迁移。

孔子曰:学而不思则罔, 教育我们在学习中一定要学会思考, 思考的最好办法就是给你一个任务或问题让你解决, 解决问题的过程即是思考的过程。 教师一定要根据本节课的内容精心设计出课堂作业, 课堂作业的知识点在笔记中是可查询的, 最好对本节课的内容做到全覆盖, 然后让学生去编程, 去思考。 例如在学完字符串复制函数strcpy () , 在后面的课堂作业设计中最好能够有此项内容, 例如使用字符串复制函数strcpy () 把字符数组S2复制到字符数组S1当中。 采用任务驱动法, 一切都要求学生自己动手设计, 动脑思考, 在操作过程中探究和解决问题的积极性和主动性得到调动, 从而达到教学目的。

(四) 注意 “互动式教学”, 不要 “自说自演”。 互动式教学是提倡教师主导, 让学生作为主体形式参与课堂。 互动式教学不但可以提高学生的参与热情, 而且可以避免学生上课疲劳、注意力不集中的现象。

大部分学生完成问题的编程后, 请具有独特思路的学生演示自己的程序和设计方法, 其他学生可以就此同学的演示提出看法和编程思路, 进行讨论, 对演示的程序进行正误剖析, 对比各种方法的优缺点, 鼓励大家再提出新方法, 解决普遍性的问题。 事实证明, 这种教学方法效果显著, 课堂气氛非常活跃, 学生的参与积极性较高。

三、实训教学

我系将对专业课进行为期两周的实训教学, 会进行阶段性的项目实训, 它将以案例的形式将每一阶段的学习进行小结性的贯穿和提高。 将有关知识点融入程序的编写中, 从而巩固知识点, 并将琐碎的知识点进行整合。 实训教学有很多好处, 它能集中一大段时间对C语言语法和编程思路进行集中训练, 效果很好, 给学生提供多写、多练的机会。 “书读百遍, 其义自见”道理一样, 程序的设计思想和方法在练习中慢慢被学生接受, 很多理论和方法练习多了, 就自然而然地懂了。 就像你进入一个新环境, 刚开始身边的很多人你可能不认识, 但是当你接触多了, 时间长了, 就基本上都熟悉了。 在学期快结束时计算机专业还会给学生集中安排一周的课题设计课, 通常会提供给大家几道题目让学生选择, 这几道题目涵盖非常广的知识点, 这些知识点在平时的课堂笔记中都是可查询的, 如果要编出程序就必须找到笔记中相应的知识点进行复习, 从而编出程序, 课题设计是对学科的终结性复习和总结。 形成案例后便于学生以后学习和查询, 学生普遍反映通过课题设计的实训训练, 编程能力有了显著提高, 以前很多不懂的内容通过钻研也懂了, 通过自己的努力体会到了编写程序的乐趣, 可以说收到了不错的成绩和效果。

四、结语

C语言的教学重点是培养学生编程思想和程序设计方法。这种能力的培养对初学者来说是极其困难的。 要学好C语言, 不仅需要学生刻苦学习, 更需要老师对教学进行精心的组织和科学的设计。 我相信, 只要运用有效的教学方法加上学生的努力, 就一定能使学生学好这门课。

摘要:C语言是绝大多数计算机专业学生学习的第一门计算机编程语言, 且难度比较大, 比较抽象, 但它却包含程序设计的基本思想和方法, 也是掌握其他高级编程语言的基础。通过对C语言教学方法的探讨, 能收到比较好的教学效果。

关键词:C语言,任务驱动,实训教学

参考文献

[1]陈琳.编程语言基础—C语言 (第3版) .北京:高等教育出版社, 2012.

C语言教学初探 篇8

C语言是计算机软件开发领域中流行的程序设计语言之一,它使用灵活、功能丰富、表达力强、生成目标程序质量效率高、可移植性好、语法简洁精妙,很便于描述算法,同时还可以方便直接地控制计算机的底层硬件,使我们能够深入系统底层进行编程,既可用来编写系统软件,也可用来编写应用软件,应用范围很广。其由于功能强大、效率高、简洁灵活和可移植性强的特点,在软件开发领域深受编程人员的喜爱。

C语言由于是理想的结构化语言,同样适合于程序设计教学,所以成为计算机语言教学的主流语言。通过对C语言的学习,可以使学生掌握基本的编程思想,为学习其他编程语言奠定基础。C语言掌握的程度,不仅能直接影响到学生对后继课程的学习,同时对他们以后的学习和发展也起着至关重要的作用。同时,它也是计算机等级考试的主要考试科目。大部分学校采用C语言作为非计算机专业学生计算机等级考试二级语言课程。

2. 教学中存在的问题

然而,但从目前的教学情况来看,学生在学习C语言时往往存在着一定的问题,实际掌握的情况并不理想。由于C语言涉及的概念多、规则广、使用灵活,初学者很难掌握,容易出错。对于大多数的初学者,C语言灵活的语法结构使他们望而生畏,繁琐的细节使他们头晕脑张。同时由于缺乏对计算机结构的全面了解,缺乏对计算机硬件尤其是内存结合很紧密的一些概念,学生基本上很难理解和掌握C语言。

(1)课堂教学中没有突出语言本身的特色。C语言作为一门高级计算机语言,和其他计算机语言有很多相似甚至相同的地方,对于已经掌握计算机基础和其他语言的人,就不能再重复这些知识。一些教师对C语言本身的一些特有的概念,尤其指针、链表的应用,强调不够,既浪费了学生课堂上宝贵的时间,又使得学生对新知识理解不深。

(2)没有充分调动学生学习的积极性。在目前的课堂教学中,还是以教师讲授为主,没有充分发挥学生学习的主动性,启发式教学没有得到充分运用。教师不了解学生课前预习的情况,不了解学生的真正需求、难点和问题所在,挫伤了学生学习的积极性和热情。

(3)对于实践教学环节重视不够。C语言是一门实践性很强的计算机语言,但目前的实践课教学存在很多弊端。例如:学生不明确上机实验的目的,实验的内容不清楚,想干什么就干什么,没有相应的实验要求,考核中上机没有一定的比例。这样,语言课就成了单一为了考试的一门课,其结果有的学生连最基本的实践操作也不会做。

3. 教学内容及方法的改革

学习程序设计不仅是为了掌握一种开发工具,更重要的是用计算机解决问题。因此在教学过程中,教师应改革传统的语法学习内容,将算法教学融入到语言教学中,通过实例由浅入深,使学生在解决具体问题的过程中掌握算法的精髓[2]。

在实践教学过程中,要对《C程序设计语言》教学内容进行调整和整合。首先,对书上的主要内容———I/O格式、控制结构、指针等内容,采用讲、练结合的方法让学生掌握精华部分,对结构体、公用体、文件等内容采用以学生自学为主、答疑为辅的方式让学生掌握这部分内容。其次,针对学生对语言课程学习的单调性和枯燥特点,采用多种教学方法,并在重点内容的教学上辅以大量的课内习题课和课外练习方式,让学生牢牢掌握基本内容。再次,让学生做针对性很强的练习来加强学生的理解。最后,对学生在作业过程中暴露的主要问题集中解决、个别问题单独解决,以此来弥补个体差异,同时兼顾到大多数学生的利益。

在教学过程中,要坚持“结构化程序设计”原则。所谓结构化程序设计,是组织人的思维,以便在合理的时间里,将计算任务用较容易理解的方式表示出来。结构化程序设计方法的基本思路是,把一个复杂的问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。因此,在学生初学程序设计时,这一方法可以养成良好的思维习惯。在教学中,应当向学生强调这样的几点:第一,程序质量的优劣首先取决于程序模块结构的清晰度,要按照一定的标准、一定的原则、一定的风格设计。第二,结构化程序的三种基本结构:顺序、分支、循环,它们是构成程序的基本单位。如果在程序中,所有的模块都只使用这三种单入口、单出口的基本控制结构,那么,不论程序包括多少模块,也不论一个模块包含多少个基本控制结构,整个程序仍然能够显示清晰的流程,这就实现了程序语言的“结构化”。第三,结构化程序设计的基本方法是自顶向下、逐步细化、模块化设计、结构化编码。逐步细化总是和自顶向下结合使用,一般也把逐步细化看作自顶向下的具体表现。

4. 加强实验环节,注重学生动手能力的培养

C程序设计是一门实践性很强的课程,要把学生在课堂上所学的知识在计算机上用程序设计反映出来,必须加强实验环节的教学,强化实验能力和学生的动手能力[3]。为此要做好以下几点:

(1)编写符合学生实际情况的实验讲义,注重学生综合实验能力的培养。

(2)每一堂实验课前,检查学生的实验预习报告,了解学生的预习情况,并对本次实验内容提出具体的要求,在实验课结束前对实验中存在的问题进行总结。

(3)加强实验环节注重学生动手能力培养。

在实验教学过程中注意培养学生的动手能力、独立科研能力及合作精神,绝不允许“一人动手大家看”这种“放羊式”现象出现。学生在做完实验后都由教师检查其结果,打分后方可离开,凡无结果或结果不理想者,必须补做或提供条件让其重做,促使学生在实验中勤动手,也使学生们具有成就感。对于部分综合型的实验尤其强调分工合作,实行小组长负责制,争取小组成员一起协调配合完成。

数字图像处理技术案例教学法探讨

(台州职业技术学院,浙江台州

摘要:笔者就案例教学法在数字图像处理技术中的应用作了初步的探讨,同时,简要介绍了在尝试数字图像处理技术案例教学中的一些体会。

关键词:数字图像处理技术案例教学法分析

1.引言

随着数码技术应用日益普及和深化,数码设备及其产生的数字图像信息的数量以惊人的速度急剧膨胀,而且对数字图像信息的要求与日俱增,数字图像处理技术日益显示其重要地位。数字图像信息的处理涉及多方面的知识,仅仅掌握理论知识不足以指导实践,通过案例教学法,将实践中的实际案例引入课堂,可以很好地衔接教学与实践,具有极好的指导意义。

案例教学法是以对案例的分析解决为主线,通过对案例中的问题进行分析,激发学生的求知欲,调动学生的积极性,使学生自觉主动地学习案例,掌握原理和方法,实行科学的教育思想观念的一种教学方式。它是一种互动式的教学方法,可以实现启发式教学,能够极大地提高学生的学习兴趣,实现真正的教学相长。它更是实现理论联系实际的现实可实施的途径。案例教学法在数字图像处理技术教学中的应用将在更大程度上激发学生学习的学习兴趣和参与的积极性,同时,有利于学生掌握理论知识,并运用知识解决软件开发中的实际问题,最终提高教学质量,达到学校教育培养的目标。

有鉴于此,本文有对案例教学法在数字图像处理技术中的应用作了初步探讨,以期对教育同行和广大学习者有所启发和借鉴。

2.案例教学法的含义

案例教学法(case methods of teaching)可简单地界定为一种运用案例进行教学的一种方法,它是美国当今教育行业中非常盛行而有效的一种方法,在我国正在慢慢推广开来。1910年,美国哈佛商学院最先使用案例教学,开创了案例教学的先河。案例教学法于20世纪80年代初传入我国,它有利于培养学

5. 改进考核方式

采用书面考试、上机考试、课程设计相结合的方式全面考核。计算机语言课的实践性决定了它不要求学生死记硬背各种语法规则和语句格式,而是要求学生在解决实际问题的过程中掌握程序设计方法,提高逻辑思维能力。因此,计算机语言课的考核宜采用书面考试与上机考核相结合的方式,辅之以对课程设计情况的考查。书面考试可以侧重对基本概念的理解和掌握方面,编程题目的涉及面可以较宽,以考查学生对基础知识的掌握情况。上机考核可以让学生在规定时间内对给定的程序设计题目编出程序,并在机上调试通过,题目可以是基础知识的综合运用,这样可以考查学生的综合应用能力和快速编程能力。课程设计的具体做法可以结合实验课,将学生分成若干小组,每组布置一个稍大的有实际应用背景的程序设计题目,组内分工各人完成一部分,再由其中一个人负责完成联合调试任务。通过对课程设计情况的

生分析问题、解决问题的能力,提高教学效果。

案例教学是在学生掌握了有关基本知识和分析技术的基础上,在教师的精心策划和指导下,根据教学目的和教学要求,运用典型案例,将学生带入特定的现场进行案例分析,学生通过独立思考和集体协作,进一步提高识别、分析和解决某一具体问题的能力,同时培养学生的沟通能力和协作精神的教学方式。通过案例分析,学生可以获得蕴涵其中的那些已形成的教育原理、教学方法等知识,同时可以提高和发展学生的创造能力及解决实际问题的能力。更重要的是,学生通过案例教学获得的知识是内化了的知识,是“做中学”获得自己理解了的能驾驭的知识,不再像传统教学下获得的抽象的、过度概括化的生硬知识,它能立即被用到类似的教学实践情境中去解决处理类似的疑难教学问题。所以从美国教育家舒尔1986年在美国教育研究协会(AERA)年会重要演讲中发出要发展关于教学的案例知识的呼吁,时至今日,在众多国家的教育研究领域中都能发现案例教学法的应用。

3.数字图像处理技术案例的选择

概括而言,案例是含有问题或疑难情境在内的真实发生的典型性事件。没有案例,案例教学无从谈起,没有好的案例,便没有有效的案例教学,所以案例的选择在案例教学中至关重要。一个高质量的案例应该具备以下几个特点。

(1)目的性。案例教学的目的是为了让学生理论联系实际,通过案例让学生掌握基本的原理和概念,提高发现问题、解决实际问题的能力。一个好的案例应该使学生在讨论中加深对教材中某一重点或难点知识的理解和把握,能利用课堂学习的理论知识来分析和解决案例中所涉及的问题。所以案例的选择一定要围绕教学目的和教学要求。如果脱离这两个中心,即使案例再生动,其教学效果也大打折扣。

(2)真实性。案例一定是现实中发生的真实事件,是常见又复杂的问题,有助于学生实践能力的提高。

(3)启发性。一个好的案例需要蕴涵一定的问题,能启发学生思考,发现多种解决的途径。问题越诱人深入,越能够给

考查,了解学生运用语言解决实际问题的能力和协作编程的能力。

6. 结语

以上是本人在C语言教学过程中的几点体会,现总结出来,谨供各位同行参考,不当之处,敬请指正。教师需要在教学过程中不断总结,在教学方式、教学方法、课题设计等方面进行探索,为C语言课程建设积累经验,促进计算机语言教学学科的建设。

参考文献

[1]谭浩强.C程序设计[M].北京:清华大学出版社,2001.

[2]张敏霞.程序设计语言课程教学方法改革的探索与实践.中国高教研究,2004,(2).

C语言指针探究 篇9

1 C语言能直接访问内存———通过指针机制实现

高级语言编程是与硬件无关的[1]。语言中的许多对象符号就是对硬件的抽象。比如, 变量名称就是对内存单元的抽象, 函数名、数组名也都是对相应内存单元的抽象代表。

我们都知道, 程序中首先要定义变量、数组, 这是为编译程序服务的。

例如:定义变量、数组语句如下:

int a, x[10];

在程序编译时, 编译程序就会分配内存单元给变量及数组, 以便日后数据存入变量和数组中。所以变量名、数组名就是内存单元的代名词, 正像身份证号码就是某人的代号一样。但是, 如果想直接对内存单元读写数据可以吗?高级语言能做到吗?回答是, C语言可以。进一步讲, C语言是通过指针机制实现的。同时, 也可以说, C语言通过指针机制做到编程中可以直接和内存这样的硬件打交道。也就是直接访问内存。接下来就对指针机制访问内存做详尽的说明。

2 指针变量做函数形参———能完成一石三鸟的功能

高级语言编写的程序, 需要翻译成二进制代码程序, 并装入内存单元中, 才能运行。编译程序做翻译工作, 链接程序和装入软件做链接和装入代码到内存单元的工作。翻译程序还有一个非常重要的工作, 就是把程序中所有的名字和内存单元对应起来, 形成一一映射关系。举例说明如下。

程序中定义变量如下:

假设, 程序在编译处理时, 给变量a分配的内存单元是2字节, 从2000H到2001H这2个字节单元;数组x, 编译程序给它分配的内存单元从3 000H~3 013H共40个字节单元;针对函数max, 编译程序给它分配的内存单元从5 000H开始的一系列单元。显然, 内存分配工作是编译程序来做的工作, 与编程者没有关系, 对编程者是透明的。但是, C语言可以和内存直接打交道, 具体如下:

int*p, a;

p=&a;

*p=12;

上述语句定义两个变量:p, a。

p:是指针变量, 用它存储变量a的内存地址。

a:是整型变量, 用它存储一个整数。

上述语句有两个关键的运算符:&, *。

&:是取地址运算符。&a, 代表变量a的内存地址。

*:是取值运算符。*p, 代表p的内容 (&a) 所标识的内存单元, 即a。

这里, 有三个值要区分。分别是:变量地址、变量值、指针变量的值。用下图表达其中的关系。

图1中, 矩形框代表变量的单元, 假设, p变量的内存单元地址是:&p (5 000H) , a变量的内存单元地址是:&a (2 000H) 。p的值是:&a, a的单元地址是:&a, a的值是12, 也是:*p。所以, 取值运算符*, 就是获取地址对应单元的数据。在这里, 运算符&, *是功能互逆的。所以*p就是a。因为, *p等于*&a即a。

使用指针变量p可以间接访问a的数据。因为, a变量的核心信息———内存单元地址, 已经在p内存单元中保存了, 所以访问a, 完全可以通过p变量实现。为什么要这样曲线使用a的信息呢?请看以下例子。

程序代码:

分析以上程序, 程序功能是交换主函数中变量a, b的值。函数swap的形参是指针类型变量, 为什么要这样?因为, 主函数中的变量a, b, 要在swap函数中使用, 直接写成如下形式是不行的。

因为, 第一种情况是, 主函数中变量a, b的作用域仅在主函数中, 不能越权在swap函数中使用它们。第二种情况下, swap函数中使用的变量a, b是自己的形参变量, 也是函数swap内的变量, 并不是主函数中定义的变量a, b。

所以, 以上两种代码都不能完成主函数中变量a, b的交换任务。但是, C语言提供了解决此问题的方法, 那就是指针。通过获取主函数中变量a, b的指针 (地址) , 并把它以实参的形式传递给函数swap, 函数swap就可以得到主函数中a, b变量的信息, 以便于使用它们。这就是用指针的形式间接访问主函数中变量a, b的手段。不能直接访问就采用迂回的、间接的指针方法。下面再举一例说明指针还可以用在什么地方。

程序代码如下:

程序说明:

程序中, 排序的数据希望是主函数中x数组中的100个整数, 但, 排序工作是sort函数来实现。这就面临两个问题。其一, 主函数中的数据要在另一个函数sort中使用和访问, 面临作用域超界问题。同时, 其二, 是100个整数要一一传递给sort函数, 显然, 传递工作量太大, 会消耗许多系统时间, 完成数据的传递工作。但是, C语言提供了解决方法, 还是指针。用指针变量做形参, 传递实参数据时, 把主函数中数组的首地址传过来即可解决上述两个问题。即, 用传首地址代替传100个数值;用传首地址的方法, 就可以间接访问主函数中数组x中的100个数据, 避开作用域限制[2]。显然, 用指针做函数sort的形参, 可以起到一石二鸟的作用。也解决并弥补了C语言用return语句只能返回一个数据的不足。所以在本环境下, 用指针做函数sort的形参, 可以说是一石三鸟。

3 指针和文件操作

通过文件指针操作文件, 大大方便编程者。

下面再举一例, 说明指针在文件操作中的应用。

程序如下:

程序解释如下:

程序功能是打开文件, 读取文件中的一个个字符, 并显示到屏幕上。在这里, 文件指针fp是编程者抽象访问文件内容的关键。从而使程序与硬件 (磁盘) 脱钩, 为编写程序提供了大大的便利。在这里文件指针就是硬盘中文件的抽象, 也是访问文件的武器。所有的文件操作细节交由库函数承担, 库函数借助文件指针抽象操作文件内容, 编程者工作量大大减轻。

4 指针带来程序效率

另外, 指针在链表中的应用, 使得在批量数据中删除、插入操作, 效率大大提高。不会出现顺序存储数据时大量数据移动现象[3]。

5 指针小结

指针就是内存单元的地址编号, 指针变量是用来存储其他对象地址的特殊变量。用指针可以间接访问变量, 可以突破变量作用域的限制, 去访问其他函数中定义的变量。同时也是提高程序效率的方法之一[4]。也是函数处理批量数据的解决手段。真正要用好指针, 解决实际问题, 需要掌握指针理论和多编程实践。

参考文献

[1] (美) Stephen Prata.C Primer Plus[M].第5版.云巅工作室译.北京:人民邮电出版社, 2013.

[2] (美) Ivor Horton.C语言入门经典[M]第4版.杨浩, 译.北京:清华大学出版社, 2010.

[3] (美) Kenneth A.Reek.C和指针POINTERS ON C[M].第2版.徐波, 译.北京:人民邮电出版社, 2008.

上一篇:城市道路交通设施下一篇:分诊导医系统