c语言程序范文

时间:2023-03-02 19:16:49

c语言程序

c语言程序范文第1篇

本课介绍c语言程序设计的基本方法和基本的程序语句。

从程序流程的角度来看,程序可以分为三种基本结构,即顺序结构、分支结构、循环结构。这三种基本结构可以组成所有的各种复杂程序。c语言提供了多种语句来实现这些程序结构。本章介绍这些基本语句及其应用,使读者对c程序有一个初步的认识,为后面各章的学习打下基础。

c程序的语句

c程序的执行部分是由语句组成的。程序的功能也是由执行语句实现的。

C语句可分为以下五类:

1.表达式语句

2.函数调用语句

3.控制语句

4.复合语句

5.空语句

1.表达式语句

表达式语句由表达式加上分号“;”组成。其一般形式为:表达式;执行表达式语句就是计算表达式的值。例如:x=y+z;赋值语句y+z;加法运算语句,但计算结果不能保留,无实际意义i++;自增1语句,i值增1

2.函数调用语句

由函数名、实际参数加上分号“;”组成。其一般形式为:函数名(实际参数表);执行函数语句就是调用函数体并把实际参数赋予函数定义中的形式参数,然后执行被调函数体中的语句,求取函数值。(在第五章函数中再详细介绍)例如printf("CProgram");调用库函数,输出字符串。

3.控制语句

控制语句用于控制程序的流程,以实现程序的各种结构方式。

它们由特定的语句定义符组成。c语言有九种控制语句。可分成以下三类:

(1)条件判断语句

if语句,switch语句

(2)循环执行语句

dowhile语句,while语句,for语句

(3)转向语句

break语句,goto语句,continue语句,return语句

4.复合语句

把多个语句用括号{}括起来组成的一个语句称复合语句。在程序中应把复合语句看成是单条语句,而不是多条语句,例如

{

x=y+z;

a=b+c;

printf(“%d%d”,x,a);

}

是一条复合语句。复合语句内的各条语句都必须以分号“;”结尾,在括号“}”外不能加分号。

5.空语句

只有分号“;”组成的语句称为空语句。空语句是什么也不执行的语句。在程序中空语句可用来作空循环体。例如while(getchar()!=''''\n'''');本语句的功能是,只要从键盘输入的字符不是回车则重新输入。这里的循环体为空语句。

赋值语句

赋值语句是由赋值表达式再加上分号构成的表达式语句。其一般形式为:变量=表达式;赋值语句的功能和特点都与赋值表达式相同。它是程序中使用最多的语句之一。在赋值语句的使用中需要注意以下几点:

1.由于在赋值符“=”右边的表达式也可以又是一个赋值表达式,因此,下述形式变量=(变量=表达式);是成立的,从而形成嵌套的情形。其展开之后的一般形式为:变量=变量=…=表达式;

例如:

a=b=c=d=e=5;按照赋值运算符的右接合性,因此实际上等效于:

e=5;

d=e;

c=d;

b=c;

a=b;

2.注意在变量说明中给变量赋初值和赋值语句的区别。给变量赋初值是变量说明的一部分,赋初值后的变量与其后的其它同类变量之间仍必须用逗号间隔,而赋值语句则必须用分号结尾。

3.在变量说明中,不允许连续给多个变量赋初值。如下述说明是错误的:inta=b=c=5必须写为inta=5,b=5,c=5;而赋值语句允许连续赋值

4.注意赋值表达式和赋值语句的区别。赋值表达式是一种表达式,它可以出现在任何允许表达式出现的地方,而赋值语句则不能。

下述语句是合法的:if((x=y+5)>0)z=x;语句的功能是,若表达式x=y+5大于0则z=x。下述语句是非法的:if((x=y+5;)>0)z=x;因为=y+5;是语句,不能出现在表达式中。

数据输出语句

本小节介绍的是向标准输出设备显示器输出数据的语句。在c语言中,所有的数据输入/输出都是由库函数完成的。因此都是函数语句。本小节先介绍printf函数和putchar函数。printf函数printf函数称为格式输出函数,其关键字最末一个字母f即为“格式”(format)之意。其功能是按用户指定的格式,把指定的数据显示到显示器屏幕上。在前面的例题中我们已多次使用过这个函数。

一、printf函数调用的一般形式

printf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中。但作为一个特例,不要求在使用printf函数之前必须包含stdio.h文件。printf函数调用的一般形式为:printf(“格式控制字符串”,输出表列)其中格式控制字符串用于指定输出格式。格式控制串可由格式字符串和非格式字符串两种组成。格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。如“%d”表示按十进制整型输出,“%ld”表示按十进制长整型输出,“%c”表示按字符型输出等。后面将专门给予讨论。

非格式字符串在输出时原样照印,在显示中起提示作用。输出表列中给出了各个输出项,要求格式字符串和各输出项在数量和类型上应该一一对应。

voidmain()

{

inta=88,b=89;

printf("%d%d\n",a,b);

printf("%d,%d\n",a,b);

printf("%c,%c\n",a,b);

printf("a=%d,b=%d",a,b);

}

a<--8,b<--89

printf("%d%d\n",a,b);

printf("%d,%d\n",a,b);

printf("%c,%c\n",a,b);

printf("a=%d,b=%d",a,b);

本例中四次输出了a,b的值,但由于格式控制串不同,输出的结果也不相同。第四行的输出语句格式控制串中,两格式串%d之间加了一个空格(非格式字符),所以输出的a,b值之间有一个空格。第五行的printf语句格式控制串中加入的是非格式字符逗号,因此输出的a,b值之间加了一个逗号。第六行的格式串要求按字符型输出a,b值。第七行中为了提示输出结果又增加了非格式字符串。

二、格式字符串

在TurboC中格式字符串的一般形式为:[标志][输出最小宽度][.精度][长度]类型其中方括号[]中的项为可选项。各项的意义介绍如下:

1.类型类型字符用以表示输出数据的类型,其格式符和意义下表所示:

表示输出类型的格式字符格式字符意义

d以十进制形式输出带符号整数(正数不输出符号)

o以八进制形式输出无符号整数(不输出前缀O)

x以十六进制形式输出无符号整数(不输出前缀OX)

u以十进制形式输出无符号整数

f以小数形式输出单、双精度实数

e以指数形式输出单、双精度实数

g以%f%e中较短的输出宽度输出单、双精度实数

c输出单个字符

s输出字符串

2.标志

标志字符为-、+、#、空格四种,其意义下表所示:

标志格式字符标志意义

-结果左对齐,右边填空格

+输出符号(正号或负号)空格输出值为正时冠以空格,为负时冠以负号

#对c,s,d,u类无影响;对o类,在输出时加前

缀o对x类,在输出时加前缀0x;对e,g,f类当结果有小数时才给出小数点

3.输出最小宽度

用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。

4.精度

精度格式符以“.”开头,后跟十进制整数。本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。

5.长度

长度格式符为h,l两种,h表示按短整型量输出,l表示按长整型量输出。

voidmain(){

inta=15;

floatb=138.3576278;

doublec=35648256.3645687;

chard=''''p'''';

printf("a=%d,%5d,%o,%x\n",a,a,a,a);

printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b);

printf("c=%lf,%f,%8.4lf\n",c,c,c);

printf("d=%c,%8c\n",d,d);

}a<--15

b<--138.3576278

c<--35648256.3645687

d<--''''p''''main()

{

inta=29;

floatb=1243.2341;

doublec=24212345.24232;

charc=''''h''''

printf("a=%d,%5d,%o,%x\n",a,a,a,a);

printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b);

printf("c=%lf,%f,%8.4lf\n",c,c,c);

printf("d=%c,%8c\n",d,d);

}

本例第七行中以四种格式输出整型变量a的值,其中“%5d”要求输出宽度为5,而a值为15只有两位故补三个空格。第八行中以四种格式输出实型量b的值。其中“%f”和“%lf”格式的输出相同,说明“l”符对“f”类型无影响。“%5.4lf”指定输出宽度为5,精度为4,由于实际长度超过5故应该按实际位数输出,小数位数超过4位部分被截去。第九行输出双精度实数,“%8.4lf”由于指定精度为4位故截去了超过4位的部分。第十行输出字符量d,其中“%bc”指定输出宽度为8故在输出字符p之前补加7个空格。

使用printf函数时还要注意一个问题,那就是输出表列中的求值顺序。不同的编译系统不一定相同,可以从左到右,也可从右到左。TurboC是按从右到左进行的。如把例2.13改写如下述形式:

voidmain(){

inti=8;

printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i--,i++,-i--);

}i<--8

这个程序与例2.13相比只是把多个printf语句改一个printf语句输出。但从结果可以看出是不同的。为什么结果会不同呢?就是因为printf函数对输出表中各量求值的顺序是自右至左进行的。在式中,先对最后一项“-i--”求值,结果为-8,然后i自减1后为7。再对“-i++”项求值得-7,然后i自增1后为8。再对“i--”项求值得8,然后i再自减1后为7。再求“i++”项得7,然后I再自增1后为8。再求“--i”项,i先自减1后输出,输出值为7。最后才求输出表列中的第一项“++i”,此时i自增1后输出8。但是必须注意,求值顺序虽是自右至左,但是输出顺序还是从左至右,因此得到的结果是上述输出结果。

字符输出函数

putchar函数

putchar函数是字符输出函数,其功能是在显示器上输出单个字符。其一般形式为:putchar(字符变量)例如:

putchar(''''A'''');输出大写字母A

putchar(x);输出字符变量x的值

putchar(''''\n'''');换行对控制字符则执行控制功能,不在屏幕上显示。使用本函数前必须要用文件包含命令:

#include<stdio.h>

#include<stdio.h>

voidmain(){

chara=''''B'''',b=''''o'''',c=''''k'''';

putchar(a);putchar(b);putchar(b);putchar(c);putchar(''''\t'''');

putchar(a);putchar(b);

putchar(''''\n'''');

putchar(b);putchar(c);

}

数据输入语句

c语言的数据输入也是由函数语句完成的。本节介绍从标准输入设备—键盘上输入数据的函数scanf和getchar。scanf函数scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。

一、scanf函数的一般形式

scanf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中,与printf函数相同,c语言也允许在使用scanf函数之前不必包含stdio.h文件。scanf函数的一般形式为:scanf(“格式控制字符串”,地址表列);其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。地址表列中给出各变量的地址。地址是由地址运算符“&”后跟变量名组成的。例如,&a,&b分别表示变量a和变量b的地址。这个地址就是编译系统在内存中给a,b变量分配的地址。在c语言中,使用了地址这个概念,这是与其它语言不同的。应该把变量的值和变量的地址这两个不同的概念区别开来。变量的地址是C编译系统分配的,用户不必关心具体的地址是多少。变量的地址和变量值的关系如下:&a--->a567a为变量名,567是变量的值,&a是变量a的地址。在赋值表达式中给变量赋值,如:a=567在赋值号左边是变量名,不能写地址,而scanf函数在本质上也是给变量赋值,但要求写变量的地址,如&a。这两者在形式上是不同的。&是一个取地址运算符,&a是一个表达式,其功能是求变量的地址。

voidmain(){

inta,b,c;

printf("inputa,b,c\n");

scanf("%d%d%d",&a,&b,&c);

printf("a=%d,b=%d,c=%d",a,b,c);

}

注意&的用法!

在本例中,由于scanf函数本身不能显示提示串,故先用printf语句在屏幕上输出提示,请用户输入a、b、c的值。执行scanf语句,则退出TC屏幕进入用户屏幕等待用户输入。用户输入7、8、9后按下回车键,此时,系统又将返回TC屏幕。在scanf语句的格式串中由于没有非格式字符在“%d%d%d”之间作输入时的间隔,因此在输入时要用一个以上的空格或回车键作为每两个输入数之间的间隔。

如:789

7

8

9

格式字符串

格式字符串的一般形式为:%[*][输入数据宽度][长度]类型其中有方括号[]的项为任选项。各项的意义如下:

1.类型

表示输入数据的类型,其格式符和意义下表所示。

格式字符意义

d输入十进制整数

o输入八进制整数

x输入十六进制整数

u输入无符号十进制整数

f或e输入实型数(用小数形式或指数形式)

c输入单个字符

s输入字符串

2.“*”符

用以表示该输入项读入后不赋予相应的变量,即跳过该输入值。如scanf("%d%*d%d",&a,&b);当输入为:123时,把1赋予a,2被跳过,3赋予b。

3.宽度

用十进制整数指定输入的宽度(即字符数)。例如:scanf("%5d",&a);

输入:

12345678

只把12345赋予变量a,其余部分被截去。又如:scanf("%4d%4d",&a,&b);

输入:

12345678将把1234赋予a,而把5678赋予b。

4.长度

长度格式符为l和h,l表示输入长整型数据(如%ld)和双精度浮点数(如%lf)。h表示输入短整型数据。

使用scanf函数还必须注意以下几点:

a.scanf函数中没有精度控制,如:scanf("%5.2f",&a);是非法的。不能企图用此语句输入小数为2位的实数。

b.scanf中要求给出变量地址,如给出变量名则会出错。如scanf("%d",a);是非法的,应改为scnaf("%d",&a);才是合法的。

c.在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,TAB或回车作间隔。C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。

d.在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。例如:

scanf("%c%c%c",&a,&b,&c);

输入为:

def

则把''''d''''赋予a,''''f''''赋予b,''''e''''赋予c。只有当输入为:

def

时,才能把''''d''''赋于a,''''e''''赋予b,''''f''''赋予c。如果在格式控制中加入空格作为间隔,如scanf("%c%c%c",&a,&b,&c);则输入时各数据之间可加空格。

voidmain(){

chara,b;

printf("inputcharactera,b\n");

scanf("%c%c",&a,&b);

printf("%c%c\n",a,b);

}

scanf("''''C14F14%c%c",&a,&b);

printf("%c%c\n",a,b);由于scanf函数"%c%c"中没有空格,输入MN,结果输出只有M。

而输入改为MN时则可输出MN两字符,见下面的输入运行情况:inputcharactera,b

MN

MN

voidmain(){

chara,b;

printf("inputcharactera,b\n");

scanf("%c%c",&a,&b);

printf("\n%c%c\n",a,b);

}

scanf("%c%c",&a,&b);本例表示scanf格式控制串"%c%c"之间有空格时,输入的数据之间可以有空格间隔。e.如果格式控制串中有非格式字符则输入时也要输入该非格式字符。

例如:

scanf("%d,%d,%d",&a,&b,&c);其中用非格式符“,”作间隔符,故输入时应为:5,6,7

又如:scanf("a=%d,b=%d,c=%d",&a,&b,&c);

则输入应为

a=5,b=6,c=7g.如输入的数据与输出的类型不一致时,虽然编译能够通过,但结果将不正确。

voidmain(){

inta;

printf("inputanumber\n");

scanf("%d",&a);

printf("%ld",a);

}

由于输入数据类型为整型,而输出语句的格式串中说明为长整型,因此输出结果和输入数据不符。如改动程序如下:

voidmain(){

longa;

printf("inputalonginteger\n");

scanf("%ld",&a);

printf("%ld",a);

}

运行结果为:

inputalonginteger

1234567890

1234567890当输入数据改为长整型后,输入输出数据相等。

键盘输入函数

getchar函数getchar函数的功能是从键盘上输入一个字符。其一般形式为:getchar();通常把输入的字符赋予一个字符变量,构成赋值语句,如:

charc;

c=getchar();#include<stdio.h>

voidmain(){

charc;

printf("inputacharacter\n");

c=getchar();

putchar(c);

}

使用getchar函数还应注意几个问题:

1.getchar函数只能接受单个字符,输入数字也按字符处理。输入多于一个字符时,只接收第一个字符。

2.使用本函数前必须包含文件“stdio.h”。

3.在TC屏幕下运行含本函数程序时,将退出TC屏幕进入用户屏幕等待用户输入。输入完毕再返回TC屏幕。

voidmain(){

chara,b,c;

printf("inputcharactera,b,c\n");

scanf("%c%c%c",&a,&b,&c);

printf("%d,%d,%d\n%c,%c,%c\n",a,b,c,a-32,b-32,c-32);

}

输入三个小写字母

输出其ASCII码和对应的大写字母。

voidmain(){

inta;

longb;

floatf;

doubled;

charc;

printf("%d,%d,%d,%d,%d",sizeof(a),sizeof(b),sizeof(f)

,sizeof(d),sizeof(c));

}

输出各种数据类型的字节长度。

分支结构程序

关系运算符和表达式

在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。比较两个量的运算符称为关系运算符。在c语言中有以下关系运算符:

<小于

<=小于或等于

>大于

>=大于或等于

==等于

!=不等于

关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,<,<=,>,>=的优先级相同,高于==和!=,==和!=的优先级相同。

关系表达式

关系表达式的一般形式为:表达式关系运算符表达式例如:a+b>c-d,x>3/2,''''a''''+1<c,-i-5*j==k+1;都是合法的关系表达式。由于表达式也可以又是关系表达式。因此也允许出现嵌套的情况,例如:a>(b>c),a!=(c==d)等。关系表达式的值是“真”和“假”,用“1”和“0”表示。

如:5>0的值为“真”,即为1。(a=3)>(b=5)由于3>5不成立,故其值为假,即为0。

voidmain(){

charc=''''k'''';

inti=1,j=2,k=3;

floatx=3e+5,y=0.85;

printf("%d,%d\n",''''a''''+5<c,-i-2*j>=k+1);

printf("%d,%d\n",1<j<5,x-5.25<=x+y);

printf("%d,%d\n",i+j+k==-2*j,k==j==i+5);

}

charc=''''k'''';

inti=1,j=2,k=3;

floatx=3e+5,y=0.85;

printf("%d,%d\n",''''a''''+5<c,-i-2*j>=k+1);

printf("%d,%d\n",1<j<5,x-5.25<=x+y);

printf("%d,%d\n",i+j+k==-2*j,k==j==i+5);

在本例中求出了各种关系运算符的值。字符变量是以它对应的ASCII码参与运算的。对于含多个关系运算符的表达式,如k==j==i+5,根据运算符的左结合性,先计算k==j,该式不成立,其值为0,再计算0==i+5,也不成立,故表达式值为0。

逻辑运算符和表达式

逻辑运算符c语言中提供了三种逻辑运算符&&与运算||或运算!非运算与运算符&&和或运算符||均为双目运算符。具有左结合性。非

运算符!为单目运算符,具有右结合性。逻辑运算符和其它运算符优先级的关系可表示如下:

按照运算符的优先顺序可以得出:

a>b&&c>d等价于(a>b)&&(c>d)

!b==c||d<a等价于((!b)==c)||(d<a)

a+b>c&&x+y<b等价于((a+b)>c)&&((x+y)<b)

逻辑运算的值

逻辑运算的值也为“真”和“假”两种,用“1”和“0”来表示。其求值规则如下:

1.与运算&&参与运算的两个量都为真时,结果才为真,否则为假。例如,5>0&&4>2,由于5>0为真,4>2也为真,相与的结果也为真。

2.或运算||参与运算的两个量只要有一个为真,结果就为真。两个量都为假时,结果为假。例如:5>0||5>8,由于5>0为真,相或的结果也就为真

3.非运算!参与运算量为真时,结果为假;参与运算量为假时,结果为真。

例如:!(5>0)的结果为假。

虽然c编译在给出逻辑运算值时,以“1”代表“真”,“0”代表“假”。但反过来在判断一个量是为“真”还是为“假”时,以“0”代表“假”,以非“0”的数值作为“真”。例如:由于5和3均为非“0”因此5&&3的值为“真”,即为1。

又如:5||0的值为“真”,即为1。

逻辑表达式逻辑表达式的一般形式为:表达式逻辑运算符表达式其中的表达式可以又是逻辑表达式,从而组成了嵌套的情形。例如:(a&&b)&&c根据逻辑运算符的左结合性,上式也可写为:a&&b&&c逻辑表达式的值是式中各种逻辑运算的最后值,以“1”和“0”分别代表“真”和“假”。

voidmain(){

charc=''''k'''';

inti=1,j=2,k=3;

floatx=3e+5,y=0.85;

printf("%d,%d\n",!x*!y,!!!x);

printf("%d,%d\n",x||i&&j-3,i<j&&x<y);

printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);

}charc=''''k'''';

inti=1,j=2,k=3;

floatx=3e+5,y=0.85;

printf("%d,%d\n",!x*!y,!!!x);

printf("%d,%d\n",x||i&&j-3,i<j&&x<y);

printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);

本例中!x和!y分别为0,!x*!y也为0,故其输出值为0。由于x为非0,故!!!x的逻辑值为0。对x||i&&j-3式,先计算j-3的值为非0,再求i&&j-3的逻辑值为1,故x||i&&j-3的逻辑值为1。对i<j&&x<y式,由于i<j的值为1,而x<y为0故表达式的值为1,0相与,最后为0,对i==5&&c&&(j=8)式,由于i==5为假,即值为0,该表达式由两个与运算组成,所以整个表达式的值为0。对于式x+y||i+j+k由于x+y的值为非0,故整个或表达式的值为1。

if语句

用if语句可以构成分支结构。它根据给定的条件进行判断,以决定执行某个分支程序段。c语言的if语句有三种基本形式。

1.第一种形式为基本形式if(表达式)语句;其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。其过程可表示为下图

voidmain(){

inta,b,max;

printf("\ninputtwonumbers:");

scanf("%d%d",&a,&b);

max=a;

if(max<b)max=b;

printf("max=%d",max);

}

输入两个整数,输出其中的大数。

scanf("%d%d",&a,&b);

max=a;

if(max<b)max=b;

printf("max=%d",max);

本例程序中,输入两个数a,b。把a先赋予变量max,再用if语句判别max和b的大小,如max小于b,则把b赋予max。因此max中总是大数,最后输出max的值。

2.第二种形式为if-else形式

if(表达式)

语句1;

else

语句2;

其语义是:如果表达式的值为真,则执行语句1,否则执行语句2。

voidmain(){

inta,b;

printf("inputtwonumbers:");

scanf("%d%d",&a,&b);

if(a>b)

printf("max=%d\n",a);

else

printf("max=%d\n",b);

}

输入两个整数,输出其中的大数。改用if-else语句判别a,b的大小,若a大,则输出a,否则输出b。

3.第三种形式为if-else-if形式

前二种形式的if语句一般都用于两个分支的情况。当有多个分支选择时,可采用if-else-if语句,其一般形式为:

if(表达式1)

语句1;

elseif(表达式2)

语句2;

elseif(表达式3)

语句3;

elseif(表达式m)

语句m;

else

语句n;

其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。if-else-if语句的执行过程如图3—3所示。

#include"stdio.h"

voidmain(){

charc;

printf("inputacharacter:");

c=getchar();

if(c<32)

printf("Thisisacontrolcharacter\n");

elseif(c>=''''0''''&&c<=''''9'''')

printf("Thisisadigit\n");

elseif(c>=''''A''''&&c<=''''Z'''')

printf("Thisisacapitalletter\n");

elseif(c>=''''a''''&&c<=''''z'''')

printf("Thisisasmallletter\n");

else

printf("Thisisanothercharacter\n");

}

if(c<32)

printf("Thisisacontrolcharacter\n");

elseif(c>=''''0''''&&c<=''''9'''')

printf("Thisisadigit\n");

elseif(c>=''''A''''&&c<=''''Z'''')

printf("Thisisacapitalletter\n");

elseif(c>=''''a''''&&c<=''''z'''')

printf("Thisisasmallletter\n");

else

printf("Thisisanothercharacter\n");

本例要求判别键盘输入字符的类别。可以根据输入字符的ASCII码来判别类型。由ASCII码表可知ASCII值小于32的为控制字符。在“0”和“9”之间的为数字,在“A”和“Z”之间为大写字母,在“a”和“z”之间为小写字母,其余则为其它字符。这是一个多分支选择的问题,用if-else-if语句编程,判断输入字符ASCII码所在的范围,分别给出不同的输出。例如输入为“g”,输出显示它为小写字符。

4.在使用if语句中还应注意以下问题

(1)在三种形式的if语句中,在if关键字之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。例如:if(a=5)语句;if(b)语句;都是允许的。只要表达式的值为非0,即为“真”。如在if(a=5)…;中表达式的值永远为非0,所以其后的语句总是要执行的,当然这种情况在程序中不一定会出现,但在语法上是合法的。

又如,有程序段:if(a=b)

printf("%d",a);

else

printf("a=0");本语句的语义是,把b值赋予a,如为非0则输出该值,否则输出“a=0”字符串。这种用法在程序中是经常出现的。

(2)在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。

(3)在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句。但要注意的是在}之后不能再加分号。

例如:

if(a>b){

a++;

b++;

}

else{a=0;

b=10;

}

if语句的嵌套

当if语句中的执行语句又是if语句时,则构成了if语句嵌套的情形。其一般形式可表示如下:

if(表达式)

if语句;

或者为

if(表达式)

if语句;

else

if语句;

在嵌套内的if语句可能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。例如:

if(表达式1)

if(表达式2)

语句1;

else

语句2;

其中的else究竟是与哪一个if配对呢?

应该理解为:还是应理解为:

if(表达式1)if(表达式1)

if(表达式2)if(表达式2)

语句1;语句1;

elseelse

语句2;语句2;

为了避免这种二义性,c语言规定,else总是与它前面最近的if配对,因此对上述例子应按前一种情况理解。

voidmain(){

inta,b;

printf("pleaseinputA,B:");

scanf("%d%d",&a,&b);

if(a!=b)

if(a>b)printf("A>B\n");

elseprintf("A<B\n");

elseprintf("A=B\n");

}

比较两个数的大小关系。

printf("pleaseinputA,B:");

scanf("%d%d",&a,&b);

if(a!=b)

if(a>b)printf("A>B\n");

elseprintf("A<B\n");

elseprintf("A=B\n");

本例中用了if语句的嵌套结构。采用嵌套结构实质上是为了进行多分支选择,例3.16实际上有三种选择即A>B、A<B或A=B。这种问题用if-else-if语句也可以完成。而且程序更加清晰。因此,在一般情况下较少使用if语句的嵌套结构。以使程序更便于阅读理解。

voidmain(){

inta,b;

printf("pleaseinputA,B:");

scanf("%d%d",&a,&b);

if(a==b)printf("A=B\n");

elseif(a>b)printf("A>B\n");

elseprintf("A<B\n");

}

条件运算符和条件表达式

如果在条件语句中,只执行单个的赋值语句时,常可使用条件表达式来实现。不但使程序简洁,也提高了运行效率。

条件运算符为?和:,它是一个三目运算符,即有三个参与运算的量。由条件运算符组成条件表达式的一般形式为:

表达式1?表达式2:表达式3

其求值规则为:如果表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。条件表达式通常用于赋值语句之中。

例如条件语句:

if(a>b)max=a;

elsemax=b;

可用条件表达式写为max=(a>b)?a:b;执行该语句的语义是:如a>b为真,则把a赋予max,否则把b赋予max。

使用条件表达式时,还应注意以下几点:

1.条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。因此max=(a>b)?a:b可以去掉括号而写为max=a>b?a:b

2.条件运算符?和:是一对运算符,不能分开单独使用。

3.条件运算符的结合方向是自右至左。

例如:

a>b?a:c>d?c:d应理解为

a>b?a:(c>d?c:d)这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条

件表达式。

voidmain(){

inta,b,max;

printf("\ninputtwonumbers:");

scanf("%d%d",&a,&b);

printf("max=%d",a>b?a:b);

}

用条件表达式对上例重新编程,输出两个数中的大数。

switch语句

c语言还提供了另一种用于多分支选择的switch语句,其一般形式为:

switch(表达式){

case常量表达式1:语句1;

case常量表达式2:语句2;

case常量表达式n:语句n;

default:语句n+1;

}

其语义是:计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。

voidmain(){

inta;

printf("inputintegernumber:");

scanf("%d",&a);

switch(a){

case1:printf("Monday\n");

case2:printf("Tuesday\n");

case3:printf("Wednesday\n");

case4:printf("Thursday\n");

case5:printf("Friday\n");

case6:printf("Saturday\n");

case7:printf("Sunday\n");

default:printf("error\n");

}

}

本程序是要求输入一个数字,输出一个英文单词。但是当输入3之后,却执行了case3以及以后的所有语句,输出了Wednesday及以后的所有单词。这当然是不希望的。为什么会出现这种情况呢?这恰恰反应了switch语句的一个特点。在switch语句中,“case常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch语句,所以出现了继续执行所有后面case语句的情况。这是与前面介绍的if语句完全不同的,应特别注意。为了避免上述情况,c语言还提供了一种break语句,专用于跳出switch语句,break语句只有关键字break,没有参数。在后面还将详细介绍。修改例题的程序,在每一case语句之后增加break语句,使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。

voidmain(){

inta;

printf("inputintegernumber:");

scanf("%d",&a);

switch(a){

case1:printf("Monday\n");break;

case2:printf("Tuesday\n");break;

case3:printf("Wednesday\n");break;

case4:printf("Thursday\n");break;

case5:printf("Friday\n");break;

case6:printf("Saturday\n");break;

case7:printf("Sunday\n");break;

default:printf("error\n");

}

}

在使用switch语句时还应注意以下几点:

1.在case后的各常量表达式的值不能相同,否则会出现错误。

2.在case后,允许有多个语句,可以不用{}括起来。

3.各case和default子句的先后顺序可以变动,而不会影响程序执行结果。

4.default子句可以省略不用。程序举例

输入三个整数,输出最大数和最小数。

voidmain(){

inta,b,c,max,min;

printf("inputthreenumbers:");

scanf("%d%d%d",&a,&b,&c);

if(a>b)

{max=a;min=b;}

else

{max=b;min=a;}

if(max<c)

max=c;

else

if(min>c)

min=c;

printf("max=%d\nmin=%d",max,min);

}

本程序中,首先比较输入的a,b的大小,并把大数装入max,小数装入min中,然后再与c比较,若max小于c,则把c赋予max;如果c小于min,则把c赋予min。因此max内总是最大数,而min内总是最小数。最后输出max和min的值即可。计算器程序。用户输入运算数和四则运算符,输出计算结果。

voidmain(){

floata,b,s;

charc;

printf("inputexpression:a+(-,*,/)b\n");

scanf("%f%c%f",&a,&c,&b);

switch(c){

case''''+'''':printf("%f\n",a+b);break;

case''''-'''':printf("%f\n",a-b);break;

case''''*'''':printf("%f\n",a*b);break;

case''''/'''':printf("%f\n",a/b);break;

default:printf("inputerror\n");

}

}

floata,b,s;

charc;

printf("inputexpression:a+(-,*,/)b\n");

scanf("%f%c%f",&a,&c,&b);

switch(c){

case''''+'''':printf("%f\n",a+b);break;

case''''-'''':printf("%f\n",a-b);break;

case''''*'''':printf("%f\n",a*b);break;

case''''/'''':printf("%f\n",a/b);break;

default:printf("inputerror\n");

}

本例可用于四则运算求值。switch语句用于判断运算符,然后输出运算值。当输入运算符不是+,-,*,/时给出错误提示。

循环结构程序

循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。c语言提供了多种循环语句,可以组成各种不同形式的循环结构。

while语句

while语句的一般形式为:while(表达式)语句;其中表达式是循环条件,语句为循环体。

while语句的语义是:计算表达式的值,当值为真(非0)时,执行循环体语句。其执行过程可用图3—4表示。统计从键盘输入一行字符的个数。

#include<stdio.h>

voidmain(){

intn=0;

printf("inputastring:\n");

while(getchar()!=''''\n'''')n++;

printf("%d",n);

}intn=0;

printf("inputastring:\n");

while(getchar()!=''''\n'''')

n++;

printf("%d",n);

本例程序中的循环条件为getchar()!=''''\n'''',其意义是,只要从键盘输入的字符不是回车就继续循环。循环体n++完成对输入字符个数计数。从而程序实现了对输入一行字符的字符个数计数。

使用while语句应注意以下几点:

1.while语句中的表达式一般是关系表达或逻辑表达式,只要表达式的值为真(非0)即可继续循环。

voidmain(){

inta=0,n;

printf("\ninputn:");

scanf("%d",&n);

while(n--)

printf("%d",a++*2);

}inta=0,n;

printf("\ninputn:");

scanf("%d",&n);

while(n--)

printf("%d",a++*2);

本例程序将执行n次循环,每执行一次,n值减1。循环体输出表达式a++*2的值。该表达式等效于(a*2;a++)

2.循环体如包括有一个以上的语句,则必须用{}括起来,组成复合语句。

3.应注意循环条件的选择以避免死循环。

voidmain(){

inta,n=0;

while(a=5)

printf("%d",n++);

}inta,n=0;

while(a=5)

printf("%d",n++);

本例中while语句的循环条件为赋值表达式a=5,因此该表达式的值永远为真,而循环体中又没有其它中止循环的手段,因此该循环将无休止地进行下去,形成死循环。4.允许while语句的循环体又是while语句,从而形成双重循环。

do-while语句

do-while语句的一般形式为:

do

语句;

while(表达式);

其中语句是循环体,表达式是循环条件。

do-while语句的语义是:

先执行循环体语句一次,再判别表达式的值,若为真(非0)则继续循环,否则终止循环。

do-while语句和while语句的区别在于do-while是先执行后判断,因此do-while至少要执行一次循环体。而while是先判断后执行,如果条件不满足,则一次循环体语句也不执行。

while语句和do-while语句一般都可以相互改写。

voidmain(){

inta=0,n;

printf("\ninputn:");

scanf("%d",&n);

doprintf("%d",a++*2);

while(--n);

}

inta=0,n;

printf("\ninputn:");

scanf("%d",&n);

doprintf("%d",a++*2);

while(--n);

在本例中,循环条件改为--n,否则将多执行一次循环。这是由于先执行后判断而造成的。

对于do-while语句还应注意以下几点:

1.在if语句,while语句中,表达式后面都不能加分号,而在do-while语句的表达式后面则必须加分号。

2.do-while语句也可以组成多重循环,而且也可以和while语句相互嵌套。

3.在do和while之间的循环体由多个语句组成时,也必须用{}括起来组成一个复合语句。

4.do-while和while语句相互替换时,要注意修改循环控制条件。

for语句

for语句是c语言所提供的功能更强,使用更广泛的一种循环语句。其一般形式为:

for(表达式1;表达式2;表达3)

语句;

表达式1通常用来给循环变量赋初值,一般是赋值表达式。也允许在for语句外给循环变量赋初值,此时可以省略该表达式。

表达式2通常是循环条件,一般为关系表达式或逻辑表达式。

表达式3通常可用来修改循环变量的值,一般是赋值语句。

这三个表达式都可以是逗号表达式,即每个表达式都可由多个表达式组成。三个表达式都是任选项,都可以省略。

一般形式中的“语句”即为循环体语句。for语句的语义是:

1.首先计算表达式1的值。

2.再计算表达式2的值,若值为真(非0)则执行循环体一次,否则跳出循环。

3.然后再计算表达式3的值,转回第2步重复执行。在整个for循环过程中,表达式1只计算一次,表达式2和表达式,3则可能计算多次。循环体可能多次执行,也可能一次都不执行。for语句的执行过程如图所示。

voidmain(){

intn,s=0;

for(n=1;n<=100;n++)

s=s+n;

printf("s=%d\n",s);

}

用for语句计算s=1+2+3+...+99+100

intn,s=0;

for(n=1;n<=100;n++)

s=s+n;

printf("s=%d\n",s);

本例for语句中的表达式3为n++,实际上也是一种赋值语句,相当于n=n+1,以改变循环变量的值。

voidmain(){

inta=0,n;

printf("\ninputn:");

scanf("%d",&n);

for(;n>0;a++,n--)

printf("%d",a*2);

}

用for语句修改例题。从0开始,输出n个连续的偶数。

inta=0,n;

printf("\ninputn:");

scanf("%d",&n);

for(;n>0;a++,n--)

printf("%d",a*2);

本例的for语句中,表达式1已省去,循环变量的初值在for语句之前由scanf语句取得,表达式3是一个逗号表达式,由a++,n--两个表达式组成。每循环一次a自增1,n自减1。a的变化使输出的偶数递增,n的变化控制循次数。

在使用for语句中要注意以下几点

1.for语句中的各表达式都可省略,但分号间隔符不能少。如:for(;表达式;表达式)省去了表达式1。for(表达式;;表达式)省去了表达式2。

for(表达式;表达式;)省去了表达式3。for(;;)省去了全部表达式。

2.在循环变量已赋初值时,可省去表达式1,如例3.27即属于这种情形。如省去表达式2或表达式3则将造成无限循环,这时应在循环体内设法结束循环。例题即属于此情况。

voidmain(){

inta=0,n;

printf("\ninputn:");

scanf("%d",&n);

for(;n>0;)

{a++;n--;

printf("%d",a*2);

}

}inta=0,n;

printf("\ninputn:");

scanf("%d",&n);

for(;n>0;)

{a++;n--;

printf("%d",a*2);

}

本例中省略了表达式1和表达式3,由循环体内的n--语句进行循环变量n的递减,以控制循环次数。

voidmain(){

inta=0,n;

printf("\ninputn:");

scanf("%d",&n);

for(;;){

a++;n--;

printf("%d",a*2);

if(n==0)break;

}

}

inta=0,n;

printf("\ninputn:");

scanf("%d",&n);

for(;;){

a++;n--;

printf("%d",a*2);

if(n==0)break;

}

本例中for语句的表达式全部省去。由循环体中的语句实现循环变量的递减和循环条件的判断。当n值为0时,由break语句中止循环,转去执行for以后的程序。在此情况下,for语句已等效于while(1)语句。如在循环体中没有相应的控制手段,则造成死循环。

3.循环体可以是空语句。

#include"stdio.h"

voidmain(){

intn=0;

printf("inputastring:\n");

for(;getchar()!=''''\n'''';n++);

printf("%d",n);

}

本例中,省去了for语句的表达式1,表达式3也不是用来修改循环变量,而是用作输入字符的计数。这样,就把本应在循环体中完成的计数放在表达式中完成了。因此循环体是空语句。应注意的是,空语句后的分号不可少,如缺少此分号,则把后面的printf语句当成循环体来执行。反过来说,如循环体不为空语句时,决不能在表达式的括号后加分号,这样又会认为循环体是空语句而不能反复执行。这些都是编程中常见的错误,要十分注意。

4.for语句也可与while,do-while语句相互嵌套,构成多重循环。以下形成都合法的嵌套。

(1)for(){…

while()

{…}

}

(2)do{

for()

{…}

}while();

(3)while(){

for()

{…}

}

(4)for(){

for(){

}

}

voidmain(){

inti,j,k;

for(i=1;i<=3;i++)

{for(j=1;j<=3-i+5;j++)

printf("");

for(k=1;k<=2*i-1+5;k++)

{

if(k<=5)printf("");

elseprintf("*");

}

printf("\n");

}

}

转移语句

程序中的语句通常总是按顺序方向,或按语句功能所定义的方向执行的。如果需要改变程序的正常流向,可以使用本小节介绍的转移语句。在c语言中提供了4种转移语句:

goto,break,continue和return。

其中的return语句只能出现在被调函数中,用于返回主调函数,我们将在函数一章中具体介绍。本小节介绍前三种转移语句。

1.goto语句

goto语句也称为无条件转移语句,其一般格式如下:goto语句标号;其中语句标号是按标识符规定书写的符号,放在某一语句行的

前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto语句配合使用。

如:label:i++;

loop:while(x<7);

c语言不限制程序中使用标号的次数,但各标号不得重名。goto语句的语义是改变程序流向,转去执行语句标号所标识的语句。

goto语句通常与条件语句配合使用。可用来实现条件转移,构成循环,跳出循环体等功能。

但是,在结构化程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,使理解和调试程序都产生困难。

统计从键盘输入一行字符的个数。

#include"stdio.h"

voidmain(){

intn=0;

printf("inputastring\n");

loop:if(getchar()!=''''\n'''')

{n++;

gotoloop;

}

printf("%d",n);

}intn=0;

printf("inputastring\n");

loop:if(getchar()!=''''\n'''')

{n++;

gotoloop;

}

printf("%d",n);

本例用if语句和goto语句构成循环结构。当输入字符不为''''\n''''时即执行n++进行计数,然后转移至if语句循环执行。直至输入字符为''''\n''''才停止循环。

break语句

break语句只能用在switch语句或循环语句中,其作用是跳出switch语句或跳出本层循环,转去执行后面的程序。由于break语句的转移方向是明确的,所以不需要语句标号与之配合。break语句的一般形式为:break;上面例题中分别在switch语句和for语句中使用了break语句作为跳转。使用break语句可以使循环语句有多个出口,在一些场合下使编程更加灵活、方便。

continue语句

continue语句只能用在循环体中,其一般格式是:

continue;

其语义是:结束本次循环,即不再执行循环体中continue语句之后的语句,转入下一次循环条件的判断与执行。应注意的是,本语句只结束本层本次的循环,并不跳出循环。

voidmain(){

intn;

for(n=7;n<=100;n++)

{

if(n%7!=0)

continue;

printf("%d",n);

}

}

输出100以内能被7整除的数。

intn;

for(n=7;n<=100;n++)

{

if(n%7!=0)

continue;

printf("%d",n);

}

本例中,对7~100的每一个数进行测试,如该数不能被7整除,即模运算不为0,则由continus语句转去下一次循环。只有模运算为0时,才能执行后面的printf语句,输出能被7整除的数。

#include"stdio.h"

voidmain(){

chara,b;

printf("inputastring:\n");

b=getchar();

while((a=getchar())!=''''\n''''){

if(a==b){

printf("samecharacter\n");

break;

}b=a;

}

}

检查输入的一行中有无相邻两字符相同。

chara,b;

printf("inputastring:\n");

b=getchar();

while((a=getchar())!=''''\n''''){

if(a==b){

printf("samecharacter\n");

break;

}b=a;

}

本例程序中,把第一个读入的字符送入b。然后进入循环,把下一字符读入a,比较a,b是否相等,若相等则输出提示串并中止循环,若不相等则把a中的字符赋予b,输入下一次循环。

输出100以内的素数。素数是只能被1和本身整除的数。可用穷举法来判断一个数是否是素数。

voidmain(){

intn,i;

for(n=2;n<=100;n++){

for(i=2;i<n;i++)

if(n%i==0)break;

if(i>=n)printf("\t%d",n);

}

}intn,i;

for(n=2;n<=100;n++){

for(i=2;i<n;i++)

if(n%i==0)break;

if(i>=n)printf("\t%d",n);

}

本例程序中,第一层循环表示对1~100这100个数逐个判断是否是素数,共循环100次,在第二层循环中则对数n用2~n-1逐个去除,若某次除尽则跳出该层循环,说明不是素数。如果在所有的数都是未除尽的情况下结束循环,则为素数,此时有i>=n,故可经此判断后输出素数。然后转入下一次大循环。实际上,2以上的所有偶数均不是素数,因此可以使循环变量的步长值改为2,即每次增加2,此外只需对数n用2~n去除就可判断该数是否素数。这样将大大减少循环次数,减少程序运行时间。

#include"math.h"

voidmain(){

intn,i,k;

for(n=2;n<=100;n+=2){

k=sqrt(n);

for(i=2;i<k;i++)

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代码和其他语言写的代码进行交互。

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的局限性和低效率。

参考文献:

[1]高晶,王建华.JNI技术在嵌入式软件开发中的应用[J].哈尔滨师范大学自然科学学报,2007,(06) .

c语言程序范文第4篇

[关键词]C语言程序设计 探究教学 实施目标

中图分类号:TP312.1-4 文献标识码:A 文章编号:1009-914X(2014)17-0126-01

一、 C语言程序设计探究教学实施的目标:情感目标、能力目标和认知目标

1、体验C语言程序设计的编程思想,激发和保持对C语言程序设计课程的求知欲,形成积极主动地学习和参与C语言程序设计课程探究活动的态度。

2、能辩证地认识C语言程序设计对社会发展、科技进步和日常生活学习的影响。

3、获得亲自参与研究探索的积极体验、培养严谨的科学态度。

4、能从日常生活、学习中发现或归纳可以利用C语言程序设计解决的问题,通过问题分析确定程序功能。

5、能根据任务的要求,确定所需信息的类型和来源,并鉴别信息的真实性、准确性和相关性。

6、掌握计算机程序的基本概念,理解并掌握C语言程序设计语言的基本知识,包括语句、数据类型、变量、常量、表达式、函数等,熟悉语言的语法规则,熟悉计算机程序执行的基本过程。

7、了解C语言程序设计语言,掌握编写程序、编译程序、连接程序以及程序开发环境等基本知识,掌握调试、运行程序的基本方法与技巧。

二、C语言程序设计探究教学实施的条件

1、掌握一定的计算机操作基础

C语言程序设计课程由于其学科自身的特点,需要在计算机上调试程序,所以要求学生具有一定的计算机操作知识,如:开关机、键盘和鼠标的使用、文件的建立与查找、常用软件的使用等。

2、良好的C语言程序设计认知结构

认知结构就是学生头脑里的知识结构,是学习者观念的全部内容和组织。奥苏伯尔的认知结构理论是针对新学习内容的影响(即迁移)提出的,良好的认知结构有利于知识的提取和正向迁移。C语言程序设计探究教学强调在已有知识经验上的主动建构,面对新的问题和任务,需要学生及时从头脑中提取信息,建立新旧知识间的联系,在已有C语言程序设计知识的基础上思考解决新问题的办法,并试图将新知识纳入自己的认知结构中。

3、良好的探究环境

良好的探究环境是学生顺利进行探究的保证,至少包含两方面的内容:(1)要有充足的探究时间和灵活的探究条件。探究时间应该根据学习任务进行合理安排,应该考虑到学生假设错误时所耽误的时间以及讨论交流所需要的时间。探究教学中可能需要查阅大量的资料,教师还应该准备书籍、网络等辅助资源。(2)学生在探究学习的时候不能有太多压力,不同的学生由于其自身的因素不可能以相同的速度学习,所以教师在进行评价的时候也应该因人而异,应该为每个学生提供充分的思考机会和时间,让每个学生都能以自己的进度进行探索,并在此过程中感受到乐趣。

三、C语言程序设计探究教学情境的创设

心理学研究表明,恰当、适宜的环境能有效激发人的热烈情绪,提高活动的质量和效果。教学情境是指教师人为创造的“典型场景”,创设目的在于引出教学任务,将学生的注意力吸引到学习任务中来。教师把将要学习的C语言程序设计知识通过一定的情境呈现给学生,使得学生认知结构与周围环境不平衡,引起他们对学习目标的注意和兴趣,并通过探究活动把学生过去的活动和将来的活动联系在心理学研究表明,恰当、适宜的环境能有效激发人的热烈情绪,提高活动的质量和效果。教学情境是指教师人为创造的“典型场景”,创设目的在于引出教学任务,将学生的注意力吸引到学习任务中来。教师把将要学习的C语言程序设计知识通过一定的情境呈现给学生,使得学生认知结构与周围环境不平衡,引起他们对学习目标的注意和兴趣,并通过探究活动把学生过去的活动和将来的活动联系在一体。探究教学情境的创设应做到:(1)创设的情境是为C语言程序设计教学服务的,要以C语言程序设计探究教学目标为依据。(2)探究情境要接近学生的真实生活经验,能够吸引学生的注意力,激发他们的认知冲突和求知欲。(3)学生在情境中能够感觉到问题的存在,自然地将新旧知识联系起来。(4)情境中必须包含学生未知的新内容,而且是能够通过探究掌握的。

四、C语言程序设计课程中的探究形式

C语言程序设计课程中开展探究教学主要有4种形式:探究性提问、探究性讨论、探究性演示和探究性实验。这4种形式是相辅相承的,而不是孤立存在的,在C语言程序设计探究教学中,需要用到多种形式来构成一个完整的探究教学过程。C语言程序设计探究教学通常都是由探究性提问开始,然后进行探究性讨论、探究性演示或探究性实验;也可能从探究性演示或探究性实验开始,在演示或实验的过程中发现问题,再进行探究性讨论。在实际教学过程中,要根据学习内容和课堂情况灵活地选用这些形式。

五、C语言程序设计探究教学评价

教学评价指依据一定的标准,通过各种策略和相关资料的收集,对教学活动及其效果进行客观衡量和科学判定的系统过程。C语言程序设计探究教学评价是对C语言程序设计探究教学过程及其影响的测量、分析和评定,评价中我们更关注学生学习和成长的过程,寻找适合学生发展的学习方式,满足学生知识和能力发展的需要。评价对探究教学的积极作用是很明显的,但是如果评价指标制定不合理,或者评价方法的选用、评价结果的表述不当,不仅不能达到预期效果,还会对学生的C语言程序设计学习产生消极影响。

参考文献

[1] 《基础教育课程改革纲要(试行)》教育部文件,教基[2001]17号.

[2] 保罗 朗格朗.终身教育引论瞰[M].北京:中国对外翻译出版公司,1985,p15~31.

[3] 联合国教科文组织.学会生存――教育世界的今天和明天[M].上海:上海译文出.

版社,1979,p2.

[4] 张大均。教育心理学[M].北京:人民教育出版社,2005,p68--71.

[5] 靳玉乐.探究教学论[M].重庆:西南师范大学出版社,200l.

作者简介

c语言程序范文第5篇

关键词:C语言程序设计;教学方法;教学手段

中图分类号:TP3-4

C语言是在国际上被广泛应用的计算机程序设计高级语言,受到很多大学的青睐,有不少学校将其作为第一门程序设计教学语言来进行学习。在我校C语言也是各理工科专业的公共基础课。但是,由于高职学生的基础不好,而程序设计课程逻辑性又很强,有不少学生不能很好地理解算法,编写程序也很困难,在教学过程中,出现了亟待解决的问题,对此,笔者结合自己在教学中遇到的问题,提出了相应的应对方法,以激发学生学习兴趣,提高教学质量。

1 教学目标的定位

教学目标作为教学活动中学习者要预期达到的学习效果,对教学活动起着导向、激励、调节、检测和评价的作用,有利于教学目的明确化,应用能力培养的具体化,是教学活动的出发点和归宿。通过对我院C语言程序设计的教学目标的改革,旨在提高学生的实践能力,培养应对信息化发展变化的良好素养。

2 教学内容的更新

2.1 从实际问题出发开展教学。C语言程序设计是一门逻辑性很强的课程,有的同学课堂上老师讲的也能听的懂,课本上的例题也能看明白,可是等到自己动手编程时,却不知道从哪里下手。他们所谓的听的懂看的明白,只是很肤浅的语法知识,而编写的程序或软件则是需要根据相关问题的实际需要结合相关的逻辑分析,编写语句控制程序的流程,如果没有深刻地理解C语言的语句的执行流程,是没办法编写程序解决相关实际问题的。所以笔者经常提醒同学,当拿到相关问题时,首先结合实际,思考解决问题的方法和步骤,然后再结合C语言语法语句编写相关程序。

2.2 注重实践环节教学。C语言是一门实践性很强的课程,光学不练、“纸上谈兵”是学不好C语言的。笔者在进行C语言教学时,讲解了相应的C语言语句语法等理论之后,都会根据相应的理论知识布置1-2个相应的同学们比较感兴趣的问题,让同学通过编程并上机运行调试求得问题的结果,来刺激同学们编写程序调试程序的兴趣,以此来提高同学们编写程序的实际操作能力。另外实验指导书,也是旨在让同学们逐步的由阅读程序、分析程序内容及结果、补充程序、程序改错慢慢过渡到能够独立编写程序,每一个实验所安排的内容都比较多,若仅靠课堂上有限的90分钟来完成所有实验内容几乎是不可能的。所以,我在每次实验之前都要求同学们对相应的实验内容进行提前预习,实验前完成对程序内容分析理解、有需要填充程序的提前结合题目要去及上下程序段意义完成填空、有需要改错的结合实际意义找出程序中的错误并在实验指导书上改正过来、有需要编写程序的提前在课下编写好程序等,在上机实验时,将补充完整的或改写好的或编写好的程序输入C语言编辑器中进行编辑、运行,这样在上机实验时只需要调试程序中的错误,找出错误的原因,然后对程序进行运行查看运行结果,用来检验实际运行结果与分析结果是否一致,这样不仅大大提高了课堂利用率,而且还锻炼了同学们分析问题、解决实际问题的能力。

2.3 注意提高学生调试程序的能力。在C语言程序设计中,调试程序是一件很重要的事。俗话说,“人无完人”,所以即使是比较优秀的程序员在编写程序时也难免会出错,而且还可能是那种最低级的语法错误,但他能快速的发现错误并改正,这是因为他们一般都具备相应的程序调试能力;而对于大多数C语言初学者在面对错误提示时,却无从下手,不知错在哪里,如何改正,这就是差别。笔者在C语言的教学中这样引导同学进行调试:

首先要求同学们按照教材上的程序实例进行原样输入,运行一下程序是否正确。如果能正常运行,再要求同学们在该程序的基础上进行试验性的修改,然后再运行一下程序对照一下看程序运行结果发了什么变化,并引导同学分析结果发生变化的原因,以加深同学们对所学知识点的理解。

有时还会引导同学们将教材中的正确程序改写成错误的程序,并上机运行,让同学注意查看出现的错误提示信息,并记下该信息,然后再将程序改写成正确的,并再次运行。不过要求同学每次只改错一个地方,目的是让同学能准确找出发生该错误的真正原因,避免因为改动过多,搞不清发生错误的真正原因;另外,要求同学们上机调试程序时每个人都带一个小本子和一支笔,当程序出现错误时,记下英文错误提示信息和解决相应错误的方法,用于积累调试程序的经验,避免以后编程时再犯同样的错误。同学们通过这样的反复修改、运行,就能够掌握相应的调试C语言程序的方法,找出C语言程序发生错误的原因及相应的修改方法提高修改错误的能力。

当同学们有了一定的C语言编程基础了之后,要求同学在不看教材的情况下,根据给定的实际问题完成程序编写、上机调试、运行,如果所编写程序不能正常运行,看自己能否找出错误原因并将其改正过来,使其能正确运行。这样经过多次练习,必然能提高学生的编程和调试程序的能力。

2.4 注意学生综合能力的提高。笔者经常鼓励同学可以先编写一些小程序,然后对多个相关小程序进行连接,形成一些稍大一点的程序,提高自己的综合解决实际问题的能力。鼓励同学在上机实践的同时多动脑、多思考,多了解并借鉴别人优秀的解题思路和方法,多看别人优秀的源程序代码,尝试着自己独立实现编程或者模仿着去实现编程,来提高自己的综合能力。

3 教学方法与教学手段的研究

3.1 多种教学方法的综合运用

对于C语言程序设计课程教学来说,相关知识点繁杂,概念多,理论抽象,学生不容易掌握,在授课过程当中,需要根据授课的内容和学生的具体情况,灵活地运用分小组讨论、任务驱动、案例式教学、启发式教学等多种教学方法,并适当的将多种教学方法进行有机结合,同时,也可以借助于多媒体和网络等现代教学手段使这些方法得以有效实施。

例如课堂上,不再采用教师满堂灌的陈旧教学方式,在新课教学时,合理采用任务驱动法:先提出待解决的问题,再引导学生分析问题找出解决问题的相应方法和具体步骤,之后再结合C语言语法给出源代码,并对源代码进行分析,再将新知识点引出,对知识点进行讲解、强调,最后再留给学生一些相应任务,学习小组经过讨论、研究,将任务完成,达到巩固知识点的目的。新的授课方式使同学们更易接受,更为直观形象,而且同学们可以直接参与问题的分析与讨论,同学上课的积极性得到很好的提高,上课质量和课堂效率得到很好的保障。

3.2 采用多媒体教学

现代社会是个多元化的社会,原始的三尺讲台,一面黑板,一支粉笔的教学方式已远远不能满足现在多元化信息社会的需要,现代的课堂教学需要根据学生的理解和接受能力,借助于多媒体课件进行演示、讲解,能更加形象更加直观地对问题进行分析进行讲解,同时对同学们的多个器官进行多方面的刺激引起学生更浓厚的兴趣,并且还减少了板书时间,使课堂效率得到更有效的提高。

3.3 课堂教学与网络教学相结合

在90分钟的课堂教学中,给予我们的时间毕竟是有限的,并且课堂知识点相对来说比较凌乱繁杂,在一堂课中这么繁琐的内容要求学生仅靠课堂90分钟就能熟练掌握是不太现实的。因此,我们可以借助于精品课程网站,将电子课件、教学大纲、经典程序、经典算法、练习题和解答等资料上传至精品课程网站这个平台,供学生复习、巩固和自学,这样就可以使学生利用网络教学这个公共平台查找自己所需要的相关信息,并且还可以使学生养成主动学习的好习惯。

参考文献:

[1]谭浩强.C语言程序设计(第四版)[M].北京:清华大学出版社,2010.

[2]谢延红.C语言程序设计公共课教学模式改革与实践[J].计算机时代,2010,12:45-47.

[3]陈国章.TurboC程序设计技巧与应用实例[M].天津:天津科学技术出版社,1995,5.

[4]梁翎,李爱齐.C语言程序设计实用技巧与程序实例[M].上海:上海科普出版社,1996,5.

c语言程序范文第6篇

关键词:C语言 程序设计 算法 兴趣

中图分类号:G64 文献标识码:A 文章编号:1672-3791(2012)09(b)-0164-02

《C语言程序设计》是我校计算机类各专业开设的一门专业基础课程,也是非计算机专业理工科开设的一门公共基础课程。主要讲授C程序设计语言的基本知识和程序设计的方法与技术。通过本课程的学习,使学生掌握计算机程序设计的思想和方法,初步具有在各领域应用计算机的能力,并为后续课程的学习创造条件。但从教学过程来看,学生们普遍反映C语言难学,概念难理解,学完后编程不知如何入手等问题,因此,学习失去兴趣,挂科率一直高居不下,使学生对该课程产生了畏惧心理。教师教学效果不理想。在此,结合教学实践,根据遇到的一些问题提出自己的解决思路。

1 激发学生的学习兴趣

要想学生学好C语言,提高学生的学习兴趣,首先必须让学生对课程有个全局的认识。学生在接触一门新课程前,最关心的问题就是这门课程是学什么、学完之后可以做什么[1]。因此,在教学之初,教师应首先使学生明确学习这门课程的目的、要求以及目标,使学生初步了解该课程在本专业中处于什么位置,为什么要学习该课程,学好该课程对于个人的专业发展有什么作用,教师可以结合程序设计在本专业中应用的实例,使学生明白学习该课程的重要性和必要性,从而激发学习兴趣。另外,由于C语言的概念比较抽象,在每一章初期概念讲解阶段,可以多举一些与生活密切相关的例子,为概念的引入做准备,以激发学生的学习兴趣。例如,在介绍数组这个概念时,由于数组是一种新的数据类型,为加深学生的理解,可以提出一个问题让同学们思考:一个班学生的学习成绩应该如何存储呢?并提示学生这些数据有何特点,从而引出在C语言中如何存储,从而引出数组这个概念。这种方法能够发展学生的探索能力,避免了直接的理论说教,不仅能激发学生的学习兴趣,还能加深学生对新知识点的理解。此外,在教学过程中,布置一些有趣味性的编程题目,积极鼓励有能力的同学参加软件设计大赛,使学生通过独立或团体完成一个软件设计,增强他们的学习自信,调动学习热情,提高学习兴趣。

2 注重知识的归纳总结

和自然语言一样,许多字词可能是相近的、相反的或者是相同的,字词间存在着内在的联系[2]。在C语言中,涉及到此类的知识点时,可以采用归纳总结的方法进行教学。例如,循环结构中的while语句,do-while语句和for语句。在学生充分掌握三种语句的基础上,教师对这三种循环语句进行归纳总结,归纳三种语句的异同点,并针对同一程序详细介绍如何用这三种语句分别实现。便于学生对循环结构的灵活掌握。另外,C语言中学到的知识点都是零星、片面的,有些甚至是容易混淆的,比如说运算符的优先级和结合性,教师在课堂中对此类知识点进行归纳总结,方便学生的比较与记忆。并且在新的一章开始学习之前,对上一章的内容进行重点、难点以及小结的归纳总结,便于学生温故而知新,避免学生边学边忘,前后知识不衔接的问题。

3 注重算法思维的培养

算法是程序设计的灵魂,在程序设计中要设计一个好的程序首先要对程序的算法有较详细的了解,其次才是采用编程语言对算法的实现。但很多学生学完C语言课程后不会编程,甚至不知道从何下手。造成这一现象的主要原因是由于程序设计的思想与学生传统的思维方式不一致,学生缺乏对算法的抽象思维能力,因此不会分析问题,无法写出算法,这就需要教师在介绍程序范例时注重学生算法思维能力的培养。教师首先提出问题,可以选择一些与实际生活贴近的小例子,如鸡兔同笼问题,引发学生进行思考,然后详细分析问题,启发学生用现有的思维方式去思考如何解决,得到解决问题方法后再启发学生将其转化为算法,并可以改变现有条件,使学生在对新问题的思考过程中,培养学生对算法举一反三的能力,最后教师对算法进行总结归纳,加深学生对这类问题的理解。将具体问题和学生的现有知识联系起来,有利于克服学生的畏难情绪,也有利于使学生快速掌握算法。

4 认真上好实验课

《C语言程序设计》是一门实践性很强的课程,“边学边练”是掌握这门课程的最好方法。因此,我们根据理论教学进度安排了实验课,并制定了专门的实验指导书,实验指导书明确了上机实验目的和要求,制定了实验内容和详细的操作步骤,并为程度较高的学生设置了选做题目。在实验过程中,注重以学生为主体,教师为主导,安排的实验内容循序渐进,采用模仿-改正-编程的实践训练思路来培养学生[3],使学生在运行程序和调试程序中锻炼分析问题和解决问题的能力,对于实验过程中学生提出的疑难问题,教师首先加以引导或者提示,启发他们独立思考解决问题,经过自己思考解决问题往往印象比较深,也能激发学生的学习热情,对于实验中存在问题比较多的题目,教师及时进行总结,并在课堂中统一进行指导,不仅节约时间,满足同学们的需要,而且对知识的掌握起到巩固加强的目的。

5 提高教师素质

由于《C语言程序设计》课程教学任务较重,所以计算机专业老师难以承担所有的课程教学任务,造成许多任课老师都是各个院系的非专业老师,缺乏系统的程序设计思想。针对这一情况,学校每学年都多次组织计算机学院多年从事课程教学并且经验丰富的专业老师对任课教师进行培训,针对课程内容进行串讲,在串讲过程中,任课老师可以对在教学过程中的疑难问题以及教材中出现的问题进行讨论。促进教师之间的教学交流,并创建了QQ群以及网络平台,便于老师们之间的信息共享以及交流,努力提高教师素质。另外,学校每学年组织《C语言程序设计》教学竞赛,教师教学的积极性显著提高,使教师不断扩充自己的知识水平和能力,不断学习新的教学方法和手段,从而提高课堂教学效果。

6 改革考核方式

为了扎实推进学校教学改革,切实提高《C语言程序设计》课程教学质量,对《C语言程序设计》课程考试环节进行了改革,在传统的考核方式理论成绩(70%)和平时成绩(30%)基础上,新增了上机考试环节,课程成绩由平时成绩(15%)、理论成绩(70%)、机试成绩(15%)等3部分组成。理论考试重点考核学生的C语言基础知识、编程思想和算法分析能力,上机考试重点考核学生的动手编程操作能力和程序调试能力。机试的考试系统由学校自主开发,学生考试时由系统自动从100套试题库中随机抽题进行考试,做到了严格的公平公正。实践后表明,这种考核方式能够更加客观地反映学生的知识掌握程度,同时能够促进学生主动学习,提高学生的动手操作能力。

实践证明,C语言的教学改进可以提高学生的学习兴趣,有利于学生对相关概念的理解以及编程能力的培养,使学生逐步掌握分析问题、解决问题的思维能力,同时也为非计算机类专业学生将程序设计思想灵活运用到自己的专业领域打下了基础。

参考文献

[1] 胡丹.非计算机专业《C语言程序设计》教学探讨[J].电脑知识与技术,2011,7(34):8983-8985.

[2] 邓静.C语言程序设计教学方法的探讨[J].教育教学论坛,2010(9):88.

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.

上一篇:智力测验范文 下一篇:应用程序范文