if(n%i==0)break;
if(i>=k)printf("\t%2d",n);
}
}
小结
1.从程序执行的流程来看,程序可分为三种最基本的结构:顺序结构,分支结构以及循环结构
2.程序中执行部分最基本的单位是语句。c语言的语句可分为五类:
(1)表达式语句任何表达式末尾加上分号即可构成表达式语句,常用的表达式语句为赋值语句。
(2)函数调用语句由函数调用加上分号即组成函数调用语句。
(3)控制语句用于控制程序流程,由专门的语句定义符及所需的表达式组成。主要有条件判断执行语句,循环执行语句,转向语句等。
(4)复合语句由{}把多个语句括起来组成一个语句。复合语句被认为是单条语句,它可出现在所有允许出现语句的地方,如循环体等。
(5)空语句仅由分号组成,无实际功能。
3.c语言中没有提供专门的输入输出语句,所有的输入输出都是由调用标准库函数中的输入输出函数来实现的。
scanf和getchar函数是输入函数,接收来自键盘的输入数据。
scanf是格式输入函数,可按指定的格式输入任意类型数据。
getchar函数是字符输入函数,只能接收单个字符。
printf和putchar函数是输出函数,向显示器屏幕输出数据。
printf是格式输出函数,可按指定的格式显示任意类型的数据。
putchar是字符显示函数,只能显示单个字符。
4.关系表达式和逻辑表达式是两种重要的表达式,主要用于条件执行的判断和循环执行的判断。
5.c语言提供了多种形式的条件语句以构成分支结构。
(1)if语句主要用于单向选择。
(2)if-else语句主要用于双向选择。
(3)if-else-if语和switch语句用于多向选择。
这几种形式的条件语句一般来说是可以互相替代的。
6.c语言提供了三种循环语句。
(1)for语句主要用于给定循环变量初值,步长增量以及循环次数的循环结构。
(2)循环次数及控制条件要在循环过程中才能确定的循环可用while或do-while语句。
(3)三种循环语句可以相互嵌套组成多重循环。循环之间可以并列但不能交叉。
(4)可用转移语句把流程转出循环体外,但不能从外面转向循环体内。
(5)在循环程序中应避免出现死循环,即应保证循环变量的值在运行过程中可以得到修改,并使循环条件逐步变为假,从而结束循环。
7.c语言语句小结
名称一般形式
简单语句表达式语句表达式;
空语句;
复合语句{语句}
条件语句if(表达式)语句;
if(表达式)语句1;else语句2;
if(表达式1)语句1;elseif(表达式2)语句2…else语句n;
开关语句switch(表达式){case常量表达式:语句…default:语句;}
循环语句while语句
while(表达式)语句;
for语句for(表达式1;表达式2;表达式3)语句;
break语句break;
goto语句goto;
continue语句continue;
c语言程序范文第2篇
关键词:考试系统;多媒体技术;数据源;连接数据库
中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)03-10854-03
1 课题研究的意义和目的
1.1研究意义
现在,多媒体技术日趋成熟,多媒体系统以其能输出精彩的图形和图像、美妙的声音、动感的画面赢得了用户和社会各界广泛的关注和应用。如果把按传统考试方式同现代化的多媒体技术相结合,并且用多媒体著作工具及其它多媒体技术,编制一套符合高校考试需求的系统及其配套的多媒体教学软件,利用多媒体技术生动、直观、形象展示信息的特点,辅助教师授课和学生进行考试,尤其对部分有限制性的实验环节,可利用活动视频技术进行展示,这将会解决一系列目前存在的问题。总之,该课题是在计算机辅助教学及考试上进行的一次积极有意义的尝试,为其他实践性较强的课程进行多媒体辅助教学开辟一条新的路子,具有一定的理论和现实意义。
1.2目的
传统的考试手段主要依靠有纸试卷,几乎没有可重用性。本课题将实现:用计算机辅助考试系统,把多媒体生动、直观的显示出来,使学生不再将考试视为一种枯燥无味的东西,提高了考试效果,使学生在一种愉悦的心情中进行考试,把枯燥的重复变为充满乐趣、具有启发性的考试过程,使学生能比较全面的学习知识,掌握技能,达到素质教育的要求。
2 系统流程图设计
2.1初始化流程设计
在使用Authorware创建任何多媒体项目的时候,都应该先设置当前项目文件的窗口大小,将其设置为“800×600”,然后选择“演示居中屏幕”,同时取消对“显示标题栏”和“显示菜单栏”复选框的选择。
2.2主界面的设计
本界面采用了Photoshop7.0图形图像处理软件来绘制。为了避免界面的单调和呆板,用蒙版和滤镜技术加以美化。该界面把Photoshop中的图层技术、图层蒙版技术、文字效果及滤镜等功能完美的结合了起来。并且在底部设置了一个Flas,增加视觉效果。
2.3背景音乐的交互控制
该多媒体教学以MIDI作为背景音乐,背景音乐的交互控制包括背景音乐的随机选曲播放、停止等功能,另外当该教学程序处于活动状态时,能够随时调整背景音乐和讲解声音的大小及比例,让使用者在一种轻松悦耳的环境中考试(调出WINDOWS的音量控制实现),还能够暂停背景音乐,当再次进入活动状态时则能重新播放背景音乐。
为了充分考虑用户计算机的不同配置情况,首先利用BUDAPI.U32的BASOUNDCARD函数判断用户机器是否已经安装了声卡,如果已经安装则执行背景音乐播放,否则不允许播放任何背景音乐操作.程序如下:
IF BASOUNDCARD() THEN
MIDI:=1
TEST(MIDI,MIDILOOP (FILELOCATION^”MUSIC\\MUSIC-”^RANDOM(1,5,1)^”.MID”),STOPMIDI())
END IF
软件中的背景音乐交互控制是通过交互响应来实现的。在程序执行过程中,用户始终可以通过按钮控制背景音乐的播放与暂停。在计算图标“播放音乐”后添加一交互图标并命名为“音乐控制”,并在交互图标右边添加三个计算分支。设置“STOP/PLAY”分支为按钮响应交互,其功能是实现对背景音乐的控制。由于在整个程序执行过程中它都是有效的,因此须设置其为永久按钮,即选择“PERPETUAL”属性选项,同时设置“ACTIVE IF”条件为:BASOUNDCARD(),即检测到用户没有安装声卡的情况下该按钮及响应分支无效。
2.4内容的导航设计
该多媒体教学涉及内容繁多,不仅包括文本、图片、声音和动画,而且还有其它多媒体工具与Authorware 配合,同时,还把视频文件导入,以增加实用性。为使用户操作简单方便,设计了合理的教学内容导航。主文件与各章节之间的导航设计根据结构规划中的该章节内容的栏目划分,在流程设计中为这些栏目设计了导航,如图1为主程序内容导航的设计流程图。
这样的流程设计使整个主程序结构清晰,可读性强。由于该文件结构是主-分结构,即主文件调用各章节模块文件的方式,因此在主文件的章节内容中实际存放的是一个起链接桥梁作用的调用脚本,而具体的考试试题题型内容则放在各章节的模块文件内。
2.5各模块的内容流程设计
图中的考试模式、练习模式、教学模式及退出系统这四部分主要程序流程图如下图2、图3、图4、图5所示。
第五部分的原理演示则是通过热区交互以及调入用VC6.0制作的演示内容的库文件,抽象的工作原理形象化,具体化。在打包的过程中采用了分步打包,首先对每部分进行打包。通过主文件调用其它各部分,这样避免了主文件过大,影响运行速度。
3 以完成单选题为例来看具体实现过程
从单选题的数据库题库中随机抽取相应题数的问题;每一题只能选择一个答案;用户可以按次序做答,可跳过不答,在回答过程中,可以随时返回已做过的题目进行修改;交卷后会给出完成情况可以查看每题的回答情况.最后回到选题主界面,并把学生所做的答案成绩保存到数据库中。
当用户在主界面中,选择了“考试模式”后,系统就会进入到登录界面系统会提示输入用户名和密码,当输入后,点击“确定”后,系统将会进入到题型选择界面。在提示框中输入用户名和密码,我们点击“确定”后,就会进入到正式的单选题型界面中,选择“单选题”单击。
C语言程序设计考试系统的选择题从数据库中取出选择题,在一个界面上显示。利用三个热区域交互按钮“上一题”“下一题,”“完成”,按钮和四个热区域设置计算图标用来记录学生所选择的答案。在学生选择“完成”后,弹出学生做题的情况界面,然后回到选题主界面,并把学生所做的答案成绩保存到数据库中。
3.1“未命名”用来擦除以前的图像
(1) 打开“未命名”的属性,进入“未命名”的属性窗口。
(2)在“属性窗口”中单击擦除标签在设置过渡效果进行设置。
(3)单击“确定”按钮
3.2 设置“单选界面”插入一个图像
(1)双击“单选界面”图标进入显示图标窗口
(2)单击绘图工具箱 图标进行绘制一个和窗口矩形一样大的矩形
(3)设置矩形的颜色为“绿色”
(4)单击显示图标窗口的关闭按钮,关闭保存对“单选界面”的设置。
3.3 设置交互“进入”
(1)在交互图标的右边拖放一个群组“单选”。
(2)设置单选的热区为“按钮”。
(3)单击确定后,双击“选择”。
3.3.1“未命名”用来擦除上次运行的图形
3.3.2 在“打开数据库”的输入如下源程序:
hint0:="您的数据库没有连接上......"
--显示连接数据库的信息
title:="数据库连接...."
ODBChandle:=ODBCOpen(WindowHandle,"","database","","")
--得到数据源
getrecord:="select count(sequence) from erigister"
--得到记录的个数
record:=ODBCExecute(ODBChandle,getrecord)
if ODBChandle=0 then--测试连接数据库是否连接成功
MessageBox(WindowHandle,hint0,title,17)
end if
ODBCClose(ODBChandle)
ODBChandle:=ODBCOpen(WindowHandle,"","database","","")
if ODBChandle=0 then
MessageBox(WindowHandle,hint0,title,17)
end if
sqlstring1:="select ssdb from erigister where sequence="^record^"" -从表中选择单选库表题
ssdatabase:=ODBCExecute(ODBChandle,sqlstring1)
getrecord:="select count(sequence) from "^ssdatabase^""
record:=ODBCExecute(ODBChandle,getrecord)
--ssdb数据库的记录个数,以便产生随机数
sssum:=0
number1:=1
sui:=[]
sui[1]:=Random(1,record,1)
--下面程序用来产生一个随机数不能出现相同的题目
i:=2
repeat while i
flag:=0
repeat while flag=0
sui[i]:=Random(1,record,1)
flag1:=0
repeat with p:=1 to i-1
if sui[i]=sui[p] then flag1:=1
end repeat
if flag1=0 then flag:=1
end repeat
i:=i+1
end repeat
3.3.3 在“做选择的背景”显示图标中设计单选题的界面如上图5.4
3.3.4 在“数据库的操作”中输入如下代码:在这里,我们就要实现对数据库的随机读取和跟踪答案的长短来选择界面
x:=0
ran:=sui[number1]
result:=""
record1:=Number(record)
record:=record1--得到记录的个数
sqlstring1:="select topic from "^ssdatabase^" where sequence="^ran^""分别得到选择题各项
sqlstring2:="select a from "^ssdatabase^" where sequence="^ran^""
sqlstring3:="select b from "^ssdatabase^" where sequence="^ran^""
sqlstring4:="select c from "^ssdatabase^" where sequence="^ran^""
sqlstring5:="select d from "^ssdatabase^" where sequence="^ran^""
sqlstring6:="select result from "^ssdatabase^" where sequence="^ran^""
get1:=ODBCExecute(ODBChandle,sqlstring1)
--get1得到选择题目内容
get2:=ODBCExecute(ODBChandle,sqlstring2)
--get2得到选择项A内容
get3:=ODBCExecute(ODBChandle,sqlstring3)
--get3得到选择项B内容
get4:=ODBCExecute(ODBChandle,sqlstring4)
--get4得到选择项C内容
get5:=ODBCExecute(ODBChandle,sqlstring5)
--get5得到选择项D内容
get6:=ODBCExecute(ODBChandle,sqlstring6)
--get6得到选择题的答案
inputa:=1 --用来设置热区域的激活条件
3.3.5空“操作”用来设置跳转标志
3.3.6在交互图标右边拖入四个热区域
在计算图标中从左到右的四个计算图标中输入: result:="A" result:="b" result:="c" result:="d"在交互属性中设置激活条件为inputa=1: ,鼠标指针设置为标准鼠标指针,其它的为默认设置.其中result变量用来记录用户所选的答案.
3.3.7拖一个交互图标“未命名”在它的右边拖两个计算图标为“上一题”和“下一题”,再拖一个群组“完成”放在“下一题”右边 ,设置热区为按钮。在“上一题”的激活条件中输入number1>1,鼠标指针设置为:标准的鼠标指针。在“下一题”的激活条件中输入:number1
4 结束语
根据对教师上课时课堂练习的分析,开发出该考试系统,主要是能够方便课堂练习,同时还可用于期中期末测试,该系统主要是针对《C语言程序设计》课程来设计的。对该系统做简单修改,即可用于其它课程。
参考文献:
[1]王嘉宁,朱隽.Photoshop7.0中文版新概念百例[M].中国水利水电出版社,2004,4.
[2]龚祥国.主编.Photoshop图像处理实用教程[M].科学出版社,2002,2.
[3]王龙,金海.主编.Flash MX实战入门新概念[M].中国水利水电出版社,2005,5.
[4]李恒.Authorware 6.0多媒体实例大制作》[M] 冶金工业出版社,2002,4.
[5]袁海东.Authorware 7.0教程[M].电子工业出版社,2004,9.
[6]郝蕾蕾.Authorware课件制作[M].中国水利水电出版社,2001,7.
c语言程序范文第3篇
关键词: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代码和其他语言写的代码进行交互。
www.zjmangrove.org类
在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++的头文件。
例如程序www.zjmangrove.org,内容为:
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 www.zjmangrove.org编译它,会生成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的局限性和低效率。
参考文献:
[1]高晶,王建华.JNI技术在嵌入式软件开发中的应用[J].哈尔滨师范大学自然科学学报,2007,(06) .
c语言程序范文第4篇
关键词:C语言;程序设计;学习方法;学习兴趣
中图分类号:TP312.1-4
《C语言程序设计》是计算机专业的一门核心专业基础课程,是专升本、考研和等级水平考试的必考科目,也是学生学习中感到比较吃力的一门课。那么,如何学习《C语言程序设计》这门课程呢?现根据自己多年在教学中的体会,谈一些粗浅的认识。
1 为什么要学习《C语言程序设计》
《C语言程序设计》是用C语言来编写程序的,每个程序员在他们的编程生涯中都应该学习C语言,因为它有太多难以忽视的好处了。除了它会给你提供更多的工作机会之外,C语言还会教给你更多的关于计算机的知识。它的好处如下:
1.1 C语言是一种计算机程序设计语言
它既具有高级语言的特点,又具有汇编语言的特点,既可以用来编写系统软件,又可以用来编写应用软件。它不仅具有绘图能力强,还具备很强的数据处理能力,因此也适于编写三维,二维图形和动画。
1.2 C语言具有功能强大、使用灵活、丰富的数据类型和运算符、结构化的控制语句、目标代码运行效率高、适用范围大、可移植性好等优点。
1.3 C语言是各大操作系统的基础,Unix、Linux、Windows其内核都清一色是C语言开发的,(某些地方是和汇编语言混合开发的),还有各种语言的编译器,包括java虚拟机,各种嵌入式设备,如手机、PDA等都是C语言开发的。
1.4 C语言是基础,如果你学习过C语言,你就能学习现在任何的高级编程语言
因为所有的高级语言都是以C语言为基础的(像JAVA,C++,C#等等)。C语言学好了,将来想学其他的语言,就比较好入门了。
2 如何学习《C语言程序设计》
2.1 克服畏难心理,充满自信的学习《C语言程序设计》
大多数学生一看到《C语言程序设计》课程的教材,就有畏难的情绪,觉得C语言难学,学不会,因为他们对计算机语言不了解,另外有些英语差的同学,看到计算机编程是用英语编写的,就未学先弃了。其实学习语言并没有他们想象的那么难,英语差也对学习计算机语言影响不大,比如学C语言,真正要记的关键字不多,语法也不复杂,只要大家不带着畏难的心理,充满自信,一定能学好的。
2.2 要明确《C语言程序设计》的学习目的
通过《C语言程序设计》课程的学习,掌握C语言基本知识,掌握程序设计的基本方法并逐步形成正确的程序设计思想,能够熟练运用基本程序结构解决简单问题,理解模块化程序设计原则并能熟练使用C语言进行程序设计,具备调试程序的能力,为后继课程及其他程序设计课程的学习和应用打下基础。
2.3 要明白《C语言程序设计》与一般的计算机操作课程有所不同
《C语言程序设计》是计算机的一门软件编程课程,是用C语言来编写程序的,它具有难度性、抽象性、连续性和逻辑严密性。如果你第一次课来听了,第二次课没来,第三次课很可能就听不懂了。比如,第一次课讲的是数字1,2,3,4……,第二次课讲的是运算符号+,-,*,/,第三次课老师让你算1+2=?,如果你前两次课都来听了,那么你就能算出它的结果,否则你就算不出它的结果。因此,如果要想学好《C语言程序设计》,必须坚持每次课都来,如果那天确实不能来,就应在家自学,不懂的地方应及时向老师请教,一定不能落课。
2.4 要整体把握《C语言程序设计》
C语言是一种通用的程序设计语言,在开发系统软件和应用软件中得到广泛的应用,已成为当今计算机世界最流行的语言之一。C语言是一个整体,各个方面是有机联系的,要从总体上把握它,不要把它割裂成互不关联的部件。它包括C语言概述、数据类型(整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等)、运算符和表达式、流程控制语句、函数、数组、字符与字符串、指针、结构体、文件等。通过《C语言程序设计》的学习,掌握程序设计的基本概念、基本思想、基本方法和基本技能,进而学会利用C语言解决实际问题,培养计算机程序设计的能力和素质,以及思维方法,为以后学习其它计算机程序语言和后续的专业课程打下基础。
简单的C程序是由主函数和函数体两大部分组成。它的基本框架如下:
main()
{
}
其中main表示“主函数”。每一个C程序都必须有一个main函数,而且只能有一个main函数,它表示程序从这里开始执行。由花括号“{ }”括起的部分是函数体。其中函数体又包括定义变量、变量赋值、函数调用、输出打印等。
例:一个简单的求和程序
main() /*主函数*/
{
int a,b,sum; /*定义变量*/
a=123;b=456; /*变量赋值*/
sum=a+b; /*求两数之和*/
printf(“sum is %d\n”,sum); /*输出和值*/
}
这是一个简单的求和程序。/*...*/表示注释部分,只给人看的,对编译和运行不起作用。第3行是声明部分,定义变量a、b、sum,指定a、b、sum为整型(int)变量。第4行是两个赋值语句,使a和b的值分别为123和456。第5行使sum的值为a+b,第6行中“%d”是输入输出的“格式字符串”,用来指定输入输出时的数据类型和格式,“%d”表示“以十进制整数形式输出”。Printf函数中括弧内最右端sum是要输出的变量,现在它的值为579(即123+456之值)。因此输出一行信息为:
sum is 579
从这个例子可以看出,想要把《C语言程序设计》这门课学好,不仅要知道《C语言程序设计》的基本框架,还要学好函数体中的内容(变量类型、定义变量、变量赋值、输入输出格式字符串、输入输出函数格式、调用函数等)。另外还要学好C语言的运算符、运算顺序 、四种程序结构(顺序结构、分支结构、循环结构、模块化程序结构 )、掌握一些简单的算法等。
2.5 熟练C程序的上机步骤
在编好一个C源程序后,如何上机运行呢?要经过编辑、编译、连接和运行四个步骤。
(1)编辑源文件。在编辑(Edit)状态下输入或修改源程序。
(2)编译源程序。选择“C编译”菜单并选择“编译到OBJ”,进行编译,得到一个后缀为.obj的目标程序。
(3)然后再选择菜单“L连接EXE文件”,进行连接操作,可得到一个后缀为.exe的可执行文件。
(4) 运行程序。在“RUN”菜单中选择“R运行程序”项,或直接按Ctr+F9键,系统就会运行已编译好的可执行目标文件。此时,TC集成环境窗口消失,屏幕上显示出程序运行的结果。如果程序需要输入数据,则应在此时,从键盘输入所需数据,然后程序会接着执行,输出结果。
2.6 要加强编程训练
《C语言程序设计》是实践性非常强的课程,要求学员要理论联系实际,在掌握C语言的基本语法和基本知识后,重点应放在提高编程能力的训练上。根据学生学习的认知特点,我认为主要应从以下几个方面进行强化训练:
(1)吃透课本例子。每学完一次新课,让学生对课本例子先分析任务、再仔细阅读程序,然后按书上的源代码敲出来,编译执行输出结果,如果结果跟书上一致就算完成,如果不一致,就要仔细找原因。再后不看书自己编写代码与课本对照,找出自己的不足,然后改进。最后在此例的基础上自己加以改造,举一反三,变为其它的例子,如此反复练习,不仅培养了学生动脑思考的习惯,而且养成了遇事三思、认真、周密的作风。
(2)精选上机题目,要求调试通过。每章找出一个或两个综合性的具有代表性的应用题目,如编写一个程序,计算一个整数的名位数字之和;用选择法对数组中10个整数,按由小到大的顺序进行排序等,要求用C语言编写可执行的源程序,上机调试。这样不仅锻炼了学生解决实际问题的能力,更重要的是激发了学生学习课程的兴趣,抽象变具体 ,理论变实践,对这门课有了更深的认识。
(3)阅读填空法。找一些经典程序,配上必要的说明,适当去掉语句或表达式,让学生通过阅读填补空白,训练学生的程序设计能力。例编写一个程序,输入月份号,输出月的英文月名,还有求和、排序、报号等。
(4)准备一个经验本,记下C语言重要的语法和知识点,还有自己出错的解决方法及老师讲解的其他同学出现的常见错误,抽空常翻看,逐步积累经验,加深印象,使以后避免。
(5)带着作业去上机。每次理论课结束后,老师都会给学生布置一些作业(如习题)让学生做,那么学生一定要认认真真的把作业完成好,先把程序编写在作业本上,上机时再把这些程序敲到计算机上,进行修改、调试、运行,最后输出结果。如果学生不带作业去上机,第一次老师警告下次一定带作业上机,如果第二次还没带作业,不准学生进机房,让学生到教室把作业做完后再到机房上机调试。有人说学生可以直接在机器上编写程序,固然没错,但对于初学者来说,如果在机器上边思考边编写,也就是说想一句编一句,再想一句再编一句,这样太浪费时间,一节课说不定连一个程序都编不好,所以老师一定要求学生在课下把程序编好,上机只需把程序敲出来进行修改、调试、运行,这样能节约大量的时间,学生上机时间本身都是有限的。
上述方法在教学实践中证明是行之有效的,学生对问题分析、程序设计的自觉性和能动性得到提高,动手能力加强,对后继课如《C++》、《面向对象程序设计》等,学习起来倍感轻松,较好地完成了该门课程的学习目标。总之,实践出真知,多学、多练、多思、多交流,勤奋好学才能学成。
参考文献:
[1]严桂兰.C语言程序设计与应用教程[M].福建:厦门大学出版社,2001.
[2]谭浩强.C程序设计(第三版)[M].北京:清华大学出版社,2005.
[3]陈东.计算机多媒体教学改革的一些尝试[J].福建师范大学学报(自然版),2004,20(3):98.
[4]王兰.学好《C程序设计》的几点建议[J].科技信息,2007(9).
作者简介:薛玉莹(1976.07-),女,四川攀枝花人,研究生,计算机讲师,主要研究方向:计算机及经济学。
c语言程序范文第5篇
【关键词】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等网络交流手段与学生进行答疑、讨论等互动交流,从而扩展了课堂教学的空间。
赏识学生,注重学习兴趣的培养。在教学过程中,教师应运用多种信息技术适时的辅导,创设丰富的情境,发挥最佳效应,运用多种教学手段激发学生主动学习获取知识的热情。
3、教学方法的改革
c语言程序范文第6篇
关键词:C语言程序设计;计算思维;抽象;自动化
美国卡内基・梅隆大学的周以真教授在2006年系统地提出了计算思维的概念[1]:计算思维指的是运用计算机科学的基础概念进行问题求解、系统设计以及人类行为理解等一系列思维活动。其后,陈国良院士和李廉教授归纳出三种典型的科学思维,即以观察和归纳为特征的实证思维,以推理和演绎为特征的逻辑思维,以抽象和自动化为特征的计算思维[2-3]。计算思维是计算机类课程的主要思维方式。
有关计算思维在程序设计类课程中的研究,已经引起很多学者的兴趣[4-6]。这些研究虽然从案例设计和项目过程等角度做了有益探索,但却忽略了对计算思维本质的讨论。C语言程序设计课程中,我们采用李廉教授的观点,即计算思维的本质是抽象和自动化。抽象指的是使用符号系统对问题进行精确而严格的描述;自动化指的是对这些符号系统施加一定操作并按照某种结构自动地执行。
一、C语言程序中的计算思维本质之一:抽象
有些C语言程序设计课程教学的一开始就提倡使用案例教学。这虽然能够使得学生可以迅速进入实际编程环节并建立直观感性认识,但案例教学由于往往出现“程序就是编程工具”的工具论现象,导致出现“只知其然,而不知其所以然”的学习后果,不利于学生的后续发展。
对于C语言程序来说,抽象指的是使用符号系统对求解问题进行精确而严格的描述,抽象的过程就是对实际系统建模的过程。实际上,程序是用来描述现实生活中某个实际存在的或不存在的系统。程序就是对系统的抽象。系统之所以存在,是因为系统具有一些关键特征和核心功能。程序中对系统特征进行抽象的就是操作对象,对系统功能进行抽象的就是函数。系统功能往往有多个且存在着复杂的调用关系。例如,求一个函数定积分的功能必然涉及求函数在某一个点的取值功能,如果该函数比较复杂且含有正弦、余弦和正切等三角函数,还需要继续调用求这些三角函数值的功能,形成多级调用;有时函数执行过程中还需要调用本身,形成递归调用。
C语言程序中的操作对象分为变量和常量。常量是对系统中的取值不变的特征进行抽象,如圆的圆周率;而变量是对系统中取值可以改变的特征进行抽象,如圆的半径。不管是哪类特征,都会有一个取值范围以及所允许的操作。例如,对于课程成绩,其取值范围一般是从0~100,而允许对该特征进行的操作可以是加法和减法等算术操作以及大于和小于等比较运算;而对于课程名字这一特征,就不能进行加法和减法这样的算术操作。C语言程序中用来对特征的取值范围及允许的操作进行抽象的概念是数据类型。C语言程序中的抽象模块如表1所示。
现实生活中,经常需要描述多个相同数据类型的一个系统特征,如所有同学的高等数学课程的成绩,可以使用一维数组来进行描述;而描述多个不同数据类型的多个系统特征,如学生的姓名、学生的身高和学生的年龄等,可以使用结构体来进行描述;如果要描述多个相同数据类型的多个系统特征,如全班所有同学的高等数学和大学英语课程的成绩,则可以使用二维数组来进行描述。
表1 C语言程序中的抽象模块
C语言程序中的元素 现实生活中的元素
程序 系统
函数 系统功能
函数调用 功能调用
数据类型 常量 系统特征
变量
一维数组 多个相同类型的一个系统特征
多维数组 多个相同类型的多个系统特征
结构体 多个不同类型的多个系统特征
链表或结构体数组 多个不同类型的多个系统特征的集合
二、C语言程序中的计算思维本质之二:自动化
计算思维的另一个本质是自动化。自动化指的是对符号系统建模的各种元素施加一些操作,并按照某种顺序的或非顺序的结构自动地执行。对于C语言程序来说,自动化体现为函数内部的语句在EIP寄存器加法操作支持下顺序自动地执行以及函数之间的调用在内存堆栈区支持下自动地进行跳转。EIP是32位机的指令指针寄存器,用来存放下一条要执行的指令的地址。EIP寄存器中增加值的大小需要根据实际存储指令的大小来确定。
对于C语言程序来说,自动化过程中执行的对象是语句。不同类型的语句,执行的结果和效用是不一样的。例如,一个变量定义语句“int a”的执行结果是在内存中分配4个字节的空间,一个返回语句“return t”的执行结果是将程序的执行流程返回到主调函数中。这些语句的组合构成一个个函数,程序的执行就是在某个函数之中顺序自动地执行以及在多个函数之间来回自动地跳转。
既然程序的执行过程是在某个函数之中顺序自动地执行以及在多个函数之间来回自动地跳转,这种自动执行需要有相应的计算机软件和硬件基础。支持程序自动执行的软件基础是操作系统,支持程序自动执行的硬件基础是计算机硬件结构,即冯・诺依曼原理的程序存储思想。当用户点击执行按钮后,程序被提交给操作系统来执行,可以不需要人为干预。此后,程序在操作系统中以进程的方式出现。操作系统协调内存、中央处理器和外存等硬件资源执行该进程。
函数中的语句之所以能够一个接着一个顺序地执行,主要依赖于EIP寄存器的加法操作。当一条指令执行完成之后,EIP寄存器在原有内容的基础上再加上当前指令所占存储空间大小,其内容便是下一条指令的地址。如此进行下去,就可以一个一个顺序地执行函数中的语句。
程序控制之所以能够在函数之间进行跳转,主要依赖于操作系统管理的内存堆栈区。内存堆栈区是满足“后进先出”操作约束的存储区。当操作系统开始执行用户提交的C语言程序时,首先开始从main函数执行,main函数的相关局部变量被压入栈中;当执行到被调函数时,被调函数的相关局部变量再次被压入栈中,程序控制转移到被调函数,且操作只能对当前栈顶进行,而此时栈顶存储的就是被调函数的相关局部变量;而当被调函数执行结束时,被调函数的相关局部变量从栈中退出,程序控制转移到main函数继续执行,此时栈顶存储的是main函数的相关局部变量;当main函数执行结束时,main函数的局部变量从栈中退出,整个程序执行结束。下列程序执行时的堆栈变化过程示意如图1所示。
#include "stdio.h"
double s(double r)
{ return r*r; }
int main()
{ double r;
double area;
r=2.0;
area= s(r);
printf("area=%f",area);
return 0;
}
图1 函数调用过程的堆栈变化
自动化过程实际反映了C语言程序解决实际问题的算法流程。算法是解决某一问题的执行步骤。一般而言,使用C语言进行编程之前,需要进行相应的算法设计,即构思解决实际问题的思路和步骤。一旦这些步骤变成C语言程序语句并形成一个完整的程序,就可以提交给操作系统自动地执行这些步骤,这正是计算机解决问题的高效率的体现。
三、以计算思维为导向的C语言程序设计课程教学
1.教学内容
针对计算思维的抽象和自动化两大本质特征,C语言程序设计课程的教学内容需要在原有的基础上特别强调一些针对性的观点。例如,C语言中的各种数据类型和数据结构可以完成实际系统中各种不同元素的抽象,一个函数之中的顺序语句自动执行的基础是EIP寄存器的加法操作,多个函数之间的来回自动跳转的基础是内存堆栈区的支持等。具体强调的观点如表2所示。
表2 教学内容中需要强调的观点
C语言程序设计
课程的内容 强调的观点
C语言概述 程序是对系统的抽象
抽象过程就是C语言的建模过程
自动化过程反映C语言的算法流程
数据类型、表达式和语句 操作对象是对系统特征的抽象
语句是系统自动化执行的基本对象
控制结构 控制结构是问题求解步骤的抽象
函数中顺序语句自动执行的基础是EIP寄存器的加法操作
数组 一维数组是对多个相同类型的一个系统特征的抽象,多维数组是对多个相同类型的多个系统特征的抽象
函数 函数是对系统功能的抽象
函数调用是功能调用的抽象
函数之间的来回自动跳转的基础是内存堆栈区的支持
结构体 结构体是对多个不同类型的多个系统特征的抽象
指针 链表是多个不同类型的多个系统特征集合的抽象
2.教学方式
计算思维的本质是抽象和自动化。C语言程
序设计课程一般都是面向大一新生,理解抽象和自动化进而培养计算思维,对于还处在计算机学习起点的学生来说是比较困难的。
对于C语言程序来说,抽象过程实际就是运用C语言中各种符号对所描述系统的建模过程,培养抽象的计算思维方式就是培养使用C语言描述实际系统的思维过程。因此,可以通过启发式教学方式引导学生思考如何使用C语言中的符号来描述系统。可以提出这样的一系列问题:C语言中如何描述一个人的身高?如何综合描述一个人的姓名、年龄和籍贯等?如何描述一个班中所有学生的高等数学成绩?如何描述各路公共汽车站的网状信息?通过启发学生对这些问题的思考,让学生所学的C语言中的各种符号不再“虚幻”,让学生真正理解这些符号实际是一种建模元素,每种符号有着其特别的抽象描述能力。
对于C语言程序来说,理解自动化过程必须借助一些形象化的手段。例如,借助于Visual C++ 6.0平台的单步调试功能,可以形象地演示上述C语言程序的自动化过程,如表3所示。
表3 C语言程序执行过程中EIP和ESP寄存器内容的变化
断点 EIP寄存器内容 ESP寄存器内容 当前栈顶函数
r=2.0;语句 00401068 0013FF24 main函数
area=s(r);语句 00401076 0013FF24 main函数
return r*r;语句 00401020 0013FF18 s函数
printf("area=%f",area);语句 00401089 0013FF24 main函数
从表3可以看出,随着EIP寄存器内容的增加,main函数中的语句顺序自动执行,即从语句“r=2.0”到语句“area=s(r)”再到语句“printf("area=%f",area)”。ESP寄存器是另一个重要的寄存器,它始终存放栈顶的地址。随着main函数对s函数的调用开始,栈顶工作函数由main函数变化为s函数;当s函数调用结束后,栈顶工作函数又由s函数回到main函数。
3.考核内容
针对C语言程序设计课程的计算思维培养要求,考核方式上必须从以考查语言的语法知识为主转变为以考查学生的系统建模能力和算法设计能力为主。
系统建模能力的考查主要针对计算思维的抽象特征。例如,可以给出各种系统特征,考查学生使用数据类型进行描述的能力。
算法设计能力的考查主要针对计算思维的自动化特征。当然,C语言程序设计课程中涉及的都是一些如迭代、枚举和排序等简单算法。可将这些算法封装成各种函数来进行调用,以考查函数中顺序语句的执行以及函数间的伴随参数传递的跳转来理解自动化过程。因此,必须以简单算
法设计和函数调用为重点考核内容,突出对函数接口设计和算法流程设计的考核。
参考文献:
[1] Jeannette M. Wing. Computational Thinking[J]. Communications of the ACM, 2006, 49(3):33-35.
[2] 陈国良. 计算思维[J]. 中国计算机学会通讯,2012,8(1):31-34.
[3] 李廉. 计算思维――概念与挑战[J]. 中国大学教学,2012(1):7-12.
[4] 张耀文. 基于计算思维的程序设计课程案例教学法研究[J]. 重庆电子工程职业学院学报,2012,21(3):149-150.
[5] 吴绍兵. 计算思维和程序设计能力的培养[J]. 计算机教育,2011(16):11-14.
[6] 苏海英. 计算思维理论指导下的程序设计教学改革实践[J]. 现代计算机,2012(4): 32-34.
c语言程序范文第7篇
关键词:C语言程序设计实践教学;课时统一化;小组竞赛;网络平台
中图分类号:G642.41 文献标志码:A 文章编号:1674-9324(2015)51-0224-02
在21世纪信息技术时代,大学生不能只满足于会用办公软件。为了迎接新世纪的挑战,无论计算机专业还是非计算机专业的学生,都应当学习C程序设计课程,并且把它当作进一步学习与应用计算机的基础。C语言作为一种程序设计语言,它功能强大、使用灵活方便、应用面广、目标程序效率高、可移植性好,既具有高低级语言的许多优点和特点,适用于编写系统软件,又能方便地用来编写应用软件[1,2]。因此,C语言程序设计作为第一门计算机语言教学显得尤为重要,且实际上它也日益受到各个高校的重视。然而,当今大学生在学习这门课程的过程中却出现了各种问题,如学不会、不想学、听不懂,这些问题逐渐地恶性循环,致使这门课程没有完全发挥出价值,形同虚设。所以,我们亟需大家探讨并发现问题,解决问题。
一、实践教学现状
C语言程序设计作为一门计算机基础教育课程,已经在各高等院校开设,现各高校普遍采用板书或多媒体讲解概念、语法、教材,然后让学生上机操作,这种方式存在弊端,致使大部分学生只能读懂程序而不会编写程序,甚至一部分学生变成程序代码的“搬运工”,与我们的教学目的背道而驰。根据目前的教学状况,C语言程序设计的教学存在以下一些问题。
1.学生的参与度不够。在传统的教学中,教师采用的是全板书形式,如今,多媒体普及,教师又改为全多媒体教学[3]。实际上,多媒体就是节省板书时间,但依然是教师照本宣科地讲,学生一头雾水地听这种陈旧的模式。一味地采取“填鸭式”教学,从头讲到尾这样被动的课堂,学生就是一名观众,没有参与到学习与思考中来,正因如此,学生注意力不集中成为一件高频率事件,等学生再集中注意力回归课堂,会发现对教师的话已经是不知所云,所以为了保证学生高效率听课,一定要让学生参与其中。
2.理论与实践脱节。现在,大多数高校普遍存在的一个问题是课时总量不够,时间安排也不适当,表现在师资力量匮乏,教学班级多,教学任务繁重。以笔者所在的学校为例,一个学期理论课共42个授课课时,26个上机实验课时,加上各种节假日,上课的时间少之更少。C语言程序设计是长期的、逐步深入的教学过程,依照现在的教学任务设置,教师要想按照考试大纲要求进行讲解,就只能加快教学进度,顾不上对实践内容进行详细讲解,结果导致学生的实际操作能力偏低,但若全部进行机房实践,又不利于学生掌握基本理论。而且,为了教学课程的安排,通常学生的上机实验课会比理论课晚两天左右,甚至周一理论课,周五才安排上机操作,不能将实验与课堂教学环节很好地进行连贯,导致理论与实践的严重脱节[4]。
3.实践与应用太少。学以致用是学生学习的最终要求,我们的教学目的是让学生可以运用所学的知识读懂程序、编写程序,然后去解决实际问题,而现在高校的大部分学生做不到这一点。目前,多数高校的学生学习C语言程序设计这门课程的学习方法非常不到位,即在课堂上,学生仅仅翻开教材,盯着讲台听课;在上机课上,学生也只是按照课本照搬程序。除此之外,在课余时间,学生们不巩固复习教材,也不看程序,更不会自己编写代码。如此下去,他们的实践能力不仅不会提高,反而极大地降低了他们对C语言程序设计的学习兴趣。
4.实践未得到及时反馈。由于课时紧张,教师不能将学生上交的实践报告或上机操作的实验结果及时地反馈给学生本人,以致于学生不能在第一时间对自己的错误或疑惑有进一步的了解与解决,造成学生盲目地学习,甚至不学习。但等到课堂上,教师也不能占用大部分时间去点评学生的实践结果而耽误课程的进展。另外,新的知识点讲完就会有新的练习内容,如此积累,工作量繁杂,学生对之前编程的细节也会慢慢忘记,更重要的是程度较落后的学生会出现知识的缺陷,长此下去,学习困难的打击会使学生的学习兴趣急剧下降。
二、教学方法
要解决上述问题,我们就要紧紧抓住学生的实践锻炼,重视实践教学,明确实践教学方法,才能使我们的教学目标达到事半功倍的效果。
1.课时统一化,采用多种方式考察。既然由于课时原因,全理论授课与全上机操作导致学生的参与度不够,理论与实践脱节,我们可以统一课时,即我们的C语言程序设计课程全部在机房授课。如今,机房设施完备,软硬件已足够完善,我们可以选择在机房授课,利用机房的多媒体与黑板,讲解理论知识,遇到需要学生动手的地方,可以让学生及时地动手操作。教师完全不用担心在授课时,学生玩电脑游戏影响听课,我们可以远程控制桌面,实时控制学生的电脑,进行各种操作,提高学生的听课效率。同时,系统还可以自动统计出勤率,比点名更加快捷,具有实时的监督作用。另外,教师再也不用担心学生由于近视问题而看不清多媒体屏幕。其次,这种机房授课以多种方式对学生学习状况进行考察,例如提出问题法、纠错奖励法、学生演示法、小测试法……提出问题法是指教师提出一些重点或难点问题,由学生来回答;纠错奖励法指教师给出某个算法或程序让学生去发现其中的错误并纠正,最快找出的学生给予小小的奖励,如一张精美的书签、一句鼓励的话语等;学生演示法指的是找一名学生到教师端编写一个小程序或某个算法中的易错点,以此找出学生的通病,引起大家的注意;小测试法是在课堂最后十分钟左右给学生发放一份提前写好的试题,两到三题即可,可以按照计算机二级等级考试模式编写,学生提交,系统直接核对,省时省力。这样多种方式进行考察,真实地反映学生对该节课的掌握程度,也让教师真正了解学生的学习情况,以便进一步开展教学工作。
2.小组竞赛法,模拟各种编程竞赛。为了激发学生的学习兴趣,增强学生的动手实践能力,可以采用小组竞赛的方法来加强学生对C语言课程的学习。整个班级可以自由分组,两到三个人一组,教师布置相应的编程题目,要求学生在规定的时间内上交,由教师来评分,选出程序最清晰、代码更简练的一组。在学期中后期,学生拥有一定的基础和能力的情况下,可使其参与评选过程,通过评选人员相互交流讨论,在提高被评学生编程能力的同时使参评学生也有所提高,即所谓的“教学相长”。除了进行班级内小组竞赛,还可以进行班级之间、专业之间集体赛。依然是先在班级中进行初选,再经过层层选拔与淘汰,指出各方的优缺点,最终评出优秀、良好等。奖项不是重点,关键在于让学生都参与到实践活动中来。通过以上各种形式的竞赛,可以提升学生对C语言的学习兴趣和编程能力。
3.网络交流法,建立多种网络平台。伴随网络化时代的到来,教师可以通过多种网络平台与学生交流、互动,及时指出并解决问题。如教师可以给每个班建立一个QQ讨论组、微信群,如果学生在课下时间有难题或者对课堂上的知识点有疑问,可以在第一时间通过网络交流平台和教师取得联系,以此使得“教学课堂”在时间和地域上得到无限制的延续。另外,通过网络平台,教师还可以给每个年级建立公共邮箱、论坛,用来分配任务、布置作业、共享教学资源等。更重要的是,教师可以把一些实践或实验发到网上,对学生的作品进行网上点评,把优秀的程序分享给大家,同时指出学生的不足之处,到网上,学生自行查收,及时地给学生反馈。另外,这些平台还可以作为学生们的“讨论网”,大家自由交流各自的学习经验与学习心得,成为学生在线学习交流、在线测试的途径。通过各种网络平台,使教师与学生、学生与学生的交流不受时间的限制、地点的约束,由学生自主地选择学习,从而解决教学时间不充足的问题,消除教师与学生之间在时间和空间上的距离感,进一步方便学生及时解决疑惑,及时得到反馈,取得更有效的学习效果。
本文探索的一些方法和改革创新是优缺点共存的。研究发现,采用以上多种方法相结合,一环扣一环的教学组织与管理,能保证学生学到一定的知识。没有最棒的方法,只有最适合自己的方法,我们做的就是尽可能给予学生指导,建立良好的学习氛围。但是,如果学生对自己不负责任,学生之间存在相互包庇、帮忙完成实验上机报告等问题,将影响整个教学效果。所以,教师要特别关注这些学生,经常鼓励、辅导他们,督察学习情况,特殊情况特殊处理,引导和帮助他们找到自己的学习目标和学习方法。C语言程序设计成为越来越多高校学生选择的课程,也是全国计算机等级考试的选择之一。我们要紧跟时代的步伐,不断更新教学内容,分析和探讨C语言程序设计教学过程中存在的问题,进行教学方法的改革,适应时代需要,做好十足的准备去迎接未来的挑战。
参考文献:
[1]谭浩强.C语言程序设计(第四版)[M].北京:清华大学出版社,2010.
[2]薛小锋.《C语言程序设计》教学方法探析[J].福建电脑,2004,(01):87-88.
[3]余炳辉,孙娟.《C语言》课程教改浅论[J].科技资讯,2009,(27):222-223.
c语言程序范文第8篇
关键词: 《C语言程序设计》 教学方法 教学手段 实验教学
《C语言程序设计》是程序设计类课程的基础,是计算机专业和相关专业的核心课程,也是全校工科各专业的本、专科教学计划中占有重要地位和起着关键作用的一门课程。在计算机教育方面,C语言是为数不多的与国外保持内容同步的课程之一。因此,它在高校教学中的地位之重要不言而喻。我们的教学目标是让学生掌握程序基本编程思想和实用编程技能,训练学生严密的逻辑思维、严谨踏实的作风、精益求精的精神,通过全面、深入、系统地介绍程序设计方法和程序设计语言,使学生掌握C语言的基本语法、语句、控制结构,以及结构化程序设计的基本思想和方法,使学生认识到算法、良好的程序设计风格与实践在本课程学习中的重要性,培养学生熟练使用C语言编程分析和解决实际问题的能力。但在实际的教学过程中,经常有学生学不好、不愿学的情况。我根据自己多年的C语言教学经验,谈谈在C语言教学过程中的一些问题,希望对读者学习和使用C语言有所帮助。
1.存在的问题
很多学生在开始学习时热情高涨,但随着课程的深入,该课程里面需要记的规则和规则本身的灵活性特别是思维的转变使学生慢慢失去了学习的兴趣。主要原因有以下几点:第一,对知识理解不够透彻,没有深究里面的知识点。课本里面一般只介绍C语言的格式和规则,因为语言学习的一个渐进性,所以结合实例比较少,学生就比较难于掌握。例如if语句的用法:if(表达式)语句;当表达式为真时执行语句,否则执行if语句的后续语句,如果在“(表达式)”后面加一个分号虽然没有语法错误,但程序的逻辑结构发生了改变,很多初学者会犯此类错误。第二,学生的思维方式开始很难转变过来,经常会用数学里面的表达式来理解和表达C语言里面的表达式。如若要描述三个变量a、b、c的大小关系,很多学生就直接这么写了:a>b>c,虽然没有语法错误,但同样出现逻辑错误,实际上在C语言里应该这样描述:a>b&b>c。第三,学生对程序的理解不够。弄不明白程序的运行过程,实际上时对C语言的控制语句理解不够。第四,不会动手写程序。这是很多初学者出现的问题,很多程序能看懂,能理解,但是一叫他独立写一个程序,他就无从下手。这主要是平时动手不够,另外对算法的理解还没有深入。
2.解决方法
2.1教学方法。教学方法多种多样,不可采用单一的方式进行讲授,在教学过程中教师应该灵活地采用多种方法相结合,充分调动学生的积极性,使其从被动学习转变为主动学习具体方法如下。
2.1.1互动教学法。互动教学法的方式有多样,如课堂提问、课堂练习等。例如,在讲完一个知识点后,教师可拿出几分钟时间让学生自由提问,或者可以出一个相关习题让学生随堂练习,这样既不会让学生感到枯燥无味,又能加深学生对该知识点的理解。在课堂上还可让学生直接到黑板上编写程序,编写完毕后让其他同学上来进行点评、讲解,这样可及时发现学生的掌握情况和学生容易犯错的地方,从而对症下药,对学生还没有掌握的知识点再重新温习一遍,这样学生的印象深刻,比直接讲解效果更好。
2.1.2启发教学法。C语言教材中的例题和课后习题比较丰富,给出了一般问题的一般解法,应对其进行归纳、整理和分类,在讲解同一类问题时没有必要逐题讲解,而应该在讲解一、两个典型题目的基础上,拓展学生思路,启发学生归纳出求解这一类问题的基本算法,这样既节省了重复讲题的时间,又留出时间来给学生讨论和思考;或者在讲授新的内容时通过复习前面的知识引入新的内容,例如讲循环结构程序设计时,应首先让学生回忆顺序结构和分支结构的执行原理和过程,进而引出循环结构的思路和过程。
2.1.3类比教学法。如在讲解交换变量a和b的值时,很多学生会直接用a=b;b=a;来处理。这时教师可用交换两个杯子甲和乙里的饮料这样的例子来说明,要交换两个杯子甲和乙里的饮料,则应该要拿第三个杯子丙作为过渡,先将甲杯子里的饮料倒入丙,再将乙杯子的饮料倒入甲,最后将丙杯子里的饮料(亦即最开始甲杯子里的饮料)倒入乙杯子,这样就实现了甲乙两杯子的饮料的互换。同样要交换两变量的值,也应该要一个中间变量,假设为t,则程序段应这样写:t=a;a=b;b=t;如此,学生就很容易理解了。
2.1.4演示教学法。利用黑板或动画的形式生动地描述程序的运行过程,这样对一些比较复杂的结构块或程序段有很好的助理解作用。
2.2教学手段。教学手段也是多样,针对不同的教学内容和不同的学生个体采取不同的教学手段,这样才会有针对性。
2.2.1寓教于乐。兴趣是激发一个人学习的最大动力,所以教师在教学过程中尽可能地采取一切方法来激发学生学习的热情。在C语言课程中,也有很多趣味性的数学问题,如“水仙花数”,“完数”,“斐波那契数列”,“猴子吃桃问题”,“百钱买百鸡”,等等,这些有趣的问题可激发学生编程的兴趣。
2.2.2传统的板书和多媒体课件相结合。在教学过程中,教师一定不能单纯地使用多媒体教学或板书的方式。基于C语言这门课程的特殊性――特别注重动手和程序设计能力,所以在教学过程中,对概念或演示方面可以用多媒体,概念一定要讲详细,宁可少讲一个习题,也不能让学生对概念模糊;涉及程序(特别是学生刚接触到程序或比较复杂的程序)的时候,虽然多媒体课件上有,但讲解的时候最好将其板书出来边写边讲,哪个语句段实现什么功能,能否用其他程序段实现相同功能,等等,这样学生更容易接受这个程序、算法和思想,学习效果更佳。
3.加强实验教学的管理
《C语言程序设计》是一门实践性很强的课程,上机实验是学生消化、理解理论知识,熟悉算法,发现、验证错误,调试程序和提高编程能力的一个重要途径。学习C语言不能纸上谈兵,一定要通过上机来验证程序,而且学生独立上机编辑运行一个程序比单独看书效果强很多。所以教师一定要加强上机实验的管理,让学生重视实验。实验环节主要有以下几点。
3.1理论课结束后即要为学生布置实验课的内容,要有难有易以供不同层次的学生选择,让学生在课后先自己编写好程序或者写出问题的算法以提高实验课的上课效率。
3.2上机过程中督促和指导学生进行实验。上机调试程序的过程中,会出现各种问题,教师应耐心细致地为学生讲解并让其思考原因。另外基于C语言有不同的编译平台,常用的有TC2.0和VC++6.0,有个别程序(主要是数据类型里面的问题)在不同的编译平台上有不同的结果,一定要让学生弄清楚为什么。
3.3仔细批改实验报告。实验课结束后,要求学生写实验报告,上交之后,详细了解每个学生的实验情况,出现的问题,这样就相当于一个反馈了,以后就有针对性了。
C语言是高校计算机教育的一门非常重要的课程,因此C语言教学是一个非常值得探讨的问题。教师应尽一切努力让学生学好这门课程。
参考文献:
[1]谭浩强.C程序设计(第二版)[M].北京:清华大学出版社,1999.
[2]谢乐军.C语言程序设计及应用[M].北京:冶金工业出版社,2008.
c语言程序范文第9篇
1.1教学只注重课程的讲解,不注重教学过程的质量控制
传统的教学以课程内容的讲解为主,通过讲解变量、循环、数组、指针等内容,并结合一定的教学案例来推进教学过程的实施。这种传统的教学方法没有考虑到本阶段学生的特点,往往造成教学效果差,教学质量难以控制。C语言程序设计课程在大一新生中开设,许多学生缺乏程序的思维和一定的动手能力,学生难以跟上教学进度,造成一定数量的学生对学习语言失去兴趣,从而影响整个专业课程的学习。
1.2教学过程缺乏有效的互动
C语言程序设计的教学过程中主要使用PPT来讲解,案例程序也通过PPT展示,甚至包括程序运行结果也以截图的形式在PPT中显示。虽然在PPT中可以添加很多的动作,动态地标注、显示程序的运行过程,但这种方法以投影为中心,缺少与学生交流的环节,加上程序类课程相对枯燥,以致学生难以集中精力做到全程听课。
1.3代码编写规范强调不够
编码规范是软件专业学生必须要牢记并遵守的,良好的编码规范不仅能体现软件从业人员的素质,而且使代码有更好的可读性,更容易被别人所理解和交流。该课程的讲解主要以编写简单逻辑来解决一些日常问题、数学问题,编程的环节侧重于算法的实现,往往忽略了编码规范
。1.4考试以笔试为主,难以检验学生的动手能力
传统的C语言程序设计课程考试以笔试为主,考查学生对C语言基本的语法、简单逻辑编写的掌握情况。这种考试机制脱离了程序语言的实现介质,即计算机。虽然在试卷中也可以用编程题目来考查学生的编程能力,但在纸上写程序与在计算机上写程序有本质的不同。在纸上写程序只需要写出大致的逻辑即可,而在计算机上写程序不仅要写出正确的代码,而且需要调试和跟踪代码,最终保证程序的正确执行。因此,笔试并不能很好地检验学生的动手实践能力。
2教学改革措施
2.1加强教学过程的质量控制
C语言程序设计课程是一门实践性强的课程,仅通过做一些常规练习无法达到教学质量监控的目的。为了更好地控制教学质量,需要从学生语法规则的掌握到动手编程这一系列环节进行掌握和跟踪。为此,我们开发了一套在线作业系统用于教学质量的控制。⑴作业题库的建设C语言程序设计的任课教师根据自己的经验和理解来搜集和设计C语言题目,包括基础知识的题目和编程实践的题目。基础知识的题目主要用于C语言知识点的训练,包括填空题、选择题、判断题和程序阅读题;编程实践的题目主要用于编程能力的训练,这类题目需要学生对问题进行正确分析、设计算法、编程并运行,最终得到结果。教师在给出题目时,需要提供测试数据和对应的结果。⑵作业的布置与批改教师可以根据每次课的教学大纲、课程内容,从作业题库中选择一些填空题、选择题、程序阅读题、编程题来建立课程作业供学生在课外完成。学生在规定的时间之内完成作业后提交作业,系统根据教师预先设定的答案进行自动批改,形成每个学生的作业记录。如果学生在规定的时间之内没有完成作业并提交则失去本次作业的记录。教师通过查阅部分学生的解答来掌握学生对相关知识的掌握情况,特别是需要整理学生所犯的共性问题,并有针对性的开设习题课进行解答。⑶配套政策为了使学生重视平时作业的完成,课程的期末成绩将考查平时作业的情况。如果学生没有提交作业的次数在30%以上,则平时成绩计0分,其他情况按照提交作业次数和作业得分根据一定的公式进行计算得到学生的平时成绩。这种策略的主要目的在于督促学生跟着教学进度进行学习和训练,不至于严重滞后于教学进度而失去学习的兴趣,可有力地保证教学质量。
2.2加强教学过程中的互动
课堂教学应该在一定程度上脱离PPT的教学,这样才可以调动学生的积极性。加强师生之间的互动可以结合本课程特点进行。在讲解课程知识点后,配以适合的案例进行教学,这些案例都是需要编写C语言程序来实现的。此时,编程实现的环节不要通过PPT展示,而要在教师的计算机上动手编写并运行得到结果,这样可以改变教学节奏,吸引学生的注意力。C语言课程案例程序的一大特点是代码量少,一般在20~30行之间,适宜在课堂上完成。教师在编写程序的过程中,可以向学生展示编程中需要注意的问题,同时,进一步讲解C语言的语法和基本知识点。教师在编写程序的过程中难免会犯小错误,或者是有针对性的故意犯一些学生经常犯的错误,在编程后的编译运行时会有错误报出,这时对于提高师生交互是很好的机会。从学生的角度来说,他们的编程往往会有很多错误,编译时会出现大量的错误提示。此时,学生可能就比较迷茫,不知道如何定位并解决错误。因此,当老师也出现错误,而且是学生经常遇到的错误时,学生往往是比较兴奋的,希望能知道老师是如何处理错误的。从老师的角度来说,真实地反映程序编写、编译的过程,展示程序错误的发现、定位、解决的方法,能够更快地提高学生的动手实践能力。面对错误,教师还可以引导学生参与程序错误的解决,消除学生对程序错误的恐惧感。在解决程序错误时可以参考以下步骤。首先,教师要把所有错误信息读出来给学生听,因为一般编译出来的错误是用英文写的,而且有些单词学生不熟悉,因此,老师需要指出错误是变量重定义、变量没有定义、还是其他错误;然后,指出核心错误的位置,教师要告诉学生程序报出很多错误信息往往是由一个小错误导致的,因此,老师要指导学生学会确定引起其他错误的核心错误;最后,在源程序中找到错误的位置,修改错误并重新编译,得出运算结果。这个错误处理过程是针对简单语法错误的处理方法,如果程序中出现了逻辑错误,即程序编译正确,但运行结果不是预期结果,此时,错误的处理方法更为复杂,可能需要重新检查程序逻辑,并使用编译环境进行程序中可疑变量的监视,通过观察变量中的数值在程序运行过程的变化来确定错误。通过实地编写程序并调试,发现和解决程序错误,最终得到正确的计算结果,不仅能使同学更好地掌握程序编写的方法,而且还能更好地与学生进行互动,提高教学效果。
2.3强调代码规范
有些老师在教学的过程别是演示程序时,注重于解决问题而忽视代码规范,甚至是自己写程序也是这样,没有代码规范。虽然遵守代码规范并不能改善程序的性能,但遵守代码规范能够使程序具有更好的可读性、可维护性,是软件代码实施过程中软件从业人员良好素质的重要体现。改善代码规范可以从以下几个方面进行。⑴适当的缩进每一行代码不要顶格书写,而要根据情况缩进。具有良好缩进格式的代码不仅能少犯语法错误,还能够使阅读者快速掌握程序内容。⑵适当的空行函数与函数之间增加必要的空行,使得程序构成一目了然。⑶适当增加代码注释程序中函数的开头最好加上注释说明该函数的作用、参数的意义,在函数中重要逻辑的部分加入注释说明该逻辑的主要思路、算法。⑷代码块要用花括号界定代码块尽量使用花括号来界定代码范围,即使代码块里只有一行代码,这样可以提高代码的可阅读性,防止阅读者误解程序。⑸变量和函数的命名尽量使用多个字母来命名变量和函数,使得程序阅读者通过名称即可大致了解变量的意义、函数的作用,提高程序的可读性。通过编码规范的强调和实施,使学生认识到软件开发的专业素质,对于提高学生的专业素养具有潜移默化的作用。
2.4上机考试
上机考试采用在线考试的方式进行,考试环节包括如下几个部分。⑴试题库的建设C语言程序设计的任课教师负责组建上机试题库,试题库中的题目都是编程的题目,用于考核学生的编程能力。教师在组建试题库时,标明每个试题的知识点和大致难度,并提供测试案例和对应的答案。题库负责人负责查看、重新编辑每个题目,从题库整体的角度更新每个试题的难度。⑵上机考试的实施为单次考试准备7个知识点和1个综合知识点的题目,教师在考试之前为每个知识点选定难度相当的5个题目。每个学生登录系统后,系统自动建立考卷,具体策略是从为每个知识点准备的5个题目中随机选择1题组成一个考卷,因此,该考卷包含8个题目,这8个考题要求学生在4小时内完成编程。考试时间一般定为上午8:00至中午12:00点。学生根据随机组成的考卷题目进行解答,为每道题目编程求解,并在学生机上利用示例测试用例检验代码的正确性。如果在本地没有通过检测,则进行逻辑检查,修改程序;如果本地通过测试,学生需要将代码提交到服务器。服务器接收到代码后,自动调用教师提供的更多的测试用例来检测程序运行结果是否与预先设置的结果匹配,进行代码逻辑黑盒测试。如果全部通过,则说明学生的编程逻辑是正确的,此时将学生成绩记录中对应的题目标为通过,并回显“通过”给学生,学生继续做下一道题目;如果其中有的用例运行结果不正确,则返回“错误”给学生,学生可以接着做本道题目,也可以选做另外一道题目,同时,在学生成绩记录中对应的题目标为错误。教师在考试现场调取并查看所有学生成绩记录信息,如果发现异常信息,如在很短的时间内完成了过多的题目,则可能学生在作弊。此时,根据异常学生信息中的IP地址找到该学生,进行现场查证,如果确认为作弊则立即处理。如果学生正确完成了8道题中的5道题,则学生通过上机测试,否则,学生没有通过上机测试。为了减轻学生的压力,上机考试可以分两次进行,如果第一次没有通过上机考试,还可以组织学生进行第二次考试,取这两次考试的较高分作为学生成绩。
3结束语
C语言程序设计是软件工程专业的一门重要的基础课程,其教学效果直接影响后续语言类课程的教学效果。传统的C语言程序设计在教学过程难以进行质量控制;师生之间缺少良好的交互,没有强调编码规范,没有进行机试测试,导致教学效果难以保证。为此,本文提出了一系列改革措施,这些措施包括:利用在线练习系统来保障学生的课程作业得到及时的完成;通过课程程序的现场编写、编译等措施,加强与学生的互动交流;强调编码规范提高学生的专业素养;通过在线考试提高学生的程序思维能力和动手实践能力。通过这些措施,学生学习C语言的进度基本能够得以保证。由于学生平时就被要求在作业系统中进行程序的编写并在线评判,从而具有了良好的编程能力,而且所编写程序有较好的编码风格,最终大多数学生能够通过机试考试。实践表明,本文所提出的改革措施提高了本专业学生的专业素养和动手实践能力,有力地保证了后续语言课程的教学质量。
c语言程序范文第10篇
关键词: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语言中其它普通指针那样得到广泛的使用,但对其有一个明晰的概念,了解了它的用途后,对程序的阅读及实现某些编程技巧却是很有用的。
参考文献:
[1] 谭浩强. C程序设计(第三版)[M]. 北京:清华大学出版社,2005.