c语言程序十篇

时间:2023-03-14 06:54:08

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;

c语言程序篇2

关键词: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).

c语言程序篇3

关键词:C语言;教材建设;项目驱动

C语言程序设计课程是计算机专业本科生的一门很重要的专业基础课,对后续数据结构、操作系统、面向对象程序设计等专业课程的学习,起到至关重要的铺垫作用。课程旨在培养学生熟练掌握C语言语法规则,具备扎实的软件开发基本技能,养成良好的编程风格,为进一步学习后续课程和将来从事应用软件开发工作奠定良好的基础。因此,学好C语言程序设计课程是计算机专业本科生能否顺利完成大学阶段学习的关键一步。教材是教与学的载体,拥有一本集科学性、完整性、趣味性于一体的C语言程序设计教材是学生学好这门课程的先决条件。

一、C语言程序设计教材建设现状

目前,市面上能够买到的C语言程序设计教材大多注重介绍语法规则,绝大部分篇幅都在反复陈述各种正确的或错误的C语句用法,枯燥无味,更像是工程人员手边使用的工具书,而非引领毫无编程基础的大一学生走入编程知识殿堂的读物。这些教材中缺少与现实生活联系紧密的项目实例,为数不多的例题也都是1到100累加、10个整数排序这样无法吸引学生兴趣的题目,因此造成学生在学习过程中把过多的精力放在记忆各种灵活多样的C语言语法规则上,而真正使用C语言解决实际问题的能力没有得到很好的培养。

然而,C语言程序设计课程的培养目标恰恰是要求学生在掌握C语言语法规则的基础上,具备用工程化思想分析实际问题的能力,掌握使用C语言解决实际问题的方法。因此,针对C语言程序设计课程特点、应用型本科院校生源水平以及C语言程序设计课程教材现状,编写注重引导学生兴趣,有利于学生专业素质和创新能力培养的教材势在必行。

二、C语言程序设计教材建设指导思想

结合C语言程序设计课程在课程体系中的地位、作用、任务确定教材基本内容;结合应用型本科院校计算机专业大一新生的实际情况确定教材难易程度;结合经典项目实例在教学中的作用,注重教材建设的整体性和趣味性;注重学生程序设计思路和技能的培养,避免多而杂的语法规则介绍,坚持少而精的教材建设原则;配合实验课教材和网上题库建设,注重培养学生实践动手能力。

三、C语言程序设计教材建设具体措施

1.理论课教材建设

(1)语言通俗易懂,重点突出,适合初学者。鉴于C语言程序设计是计算机专业本科生学习的第一门程序设计类课程,教材在语言组织上特别注意避免过于专业的术语,做到通俗易懂。在讲解过程中步骤详尽,版式新颖,重点突出,避免学生因一味追求细节而忽略C语言的精髓,舍本逐末。

(2)提纲挈领,注重知识点的实际应用。C语言中,每个单独的章节都讲授了一个全新的知识点,比如选择、循环、函数等。刚刚接触一个新知识时,学生经常找不到切入点,不知如何完成这一章的学习,重点难点也把握不住,导致眉毛胡子一把抓,好像都知道一些,却又都不精通,学得快,忘得也快。针对这种状况,教材各章节后部均设有小结,言简意赅地给出如何使用该章节知识点解决实际问题及使用时的注意事项,起到了事半功倍的效果。

(3)启发式设问引导教学,明确章节学习目标。C语言难学的原因有多种,学生面对多种不同的数据类型、语句功能结构、繁多的语法规则等,往往无所适从。从启发式教学的角度出发,在每章的开始部分都以设问形式提出问题,使学生在学习该章内容前先想到一些问题,提出问题,再给出该章节的学习要点,引领学生带着问题学。这样不仅在课程教学过程中简单明了地给出了章节学习目标,有利于教学活动的顺利开展,更为重要的是,激发了学生的学习热情,锻炼了他们主动思考、善于提问、敢于质疑的学习习惯,培养了专业的软件工程师工作风格,为将来实际的程序设计相关工作奠定良好的基础。

(4)采用实例趋动教学的方法,讲解C语言基本概念和实用程序设计技术。为了帮助学生对C语言各章节知识点有更加深刻的理解,提高程序设计的能力,各章节中配备精心选择的经典实例程序,所选的例题覆盖了C语言程序设计中最常用的方法、实用技术。并且,选取一个经典实例“学生成绩管理系统开发”,从第一章抛出问题,至以后各章节都结合该章节所学知识点逐步地分析、解决问题,由浅入深,最后完整地给出问题求解方法,引领学生循序渐进地掌握一个较大软件的实用程序设计技术。教师授课过程中,可以适时引入一些软件工程思想,从需求分析、系统设计、编码、测试等各环节加以讨论,让学生从大学一年级就对自己将来从事的职业有一个具体的认识,为其他后续课程做一个很好的铺垫。

(5)构造学习框架,强化程序设计思维。以往的C语言教学过程中,经常出现学生对于编程题有个大概的想法,但不会具体编写程序的现象。其根源在于C语言教学与实际问题的脱离,教学不注重培养解题思路与解题方法,而过多偏重语法规则介绍。因此,为使学生熟练掌握编程技术,在编程题目的讲解上提出了一个学习框架,各章节中实例的讲解均按照“变量分析——设计思路——程序源码——运行结果——说明”的思路。对于一个实际问题,首先分析解决问题需要设置哪些变量及变量设置技巧;其次分析解决问题的具体思路及步骤,给出程序流程图;然后,给出程序源码及运行结果,重点讲解编码规范;最后,针对程序设计和实现过程中容易出现的错误及需要注意的问题给出必要的解释说明,并配有大量图解来帮助学生更直观地了解内存变化情况,降低了阅读难度。

2.实验课教材建设

结合C语言程序设计理论课教材和学生实际水平,进行了C语言程序设计实验课教材建设。实验课教材的章节设置与理论课相同,每一章按实验目的、实验内容、实验习题的形式组织。实验目的给出该实验环节中学生必须了解、理解和熟练掌握的编程技能分别有哪些,学生可以根据实验目的并结合自身情况,有选择地进行实验题目练习及课后复习。实验内容按照验证性、设计性和综合性层次分别设计题目,每道题目给出题目描述、测试数据、题目分析、参考代码和参考运行结果。其中,题目分析从变量分析和设计思路两个角度讨论,题意明确,分析透彻,让学生能够充分体验程序设计整个过程中的思考方法。实验习题部分进行知识扩充,不给出标准答案,进一步锻炼学生的程序设计能力和创新思维能力。C语言程序设计实验课教材建设紧紧围绕理论课教材的重点难点,注重学生基本技能和实际应用的训练,强调对学生分析解决实际问题能力的培养。

四、结语

课题组教师结合多年实际教学经验,针对应用型本科院校计算机专业大一学生的实际情况,积极开展C语言程序设计课程教材建设工作,得到了学校领导的充分肯定。在大连理工大学出版社的大力支持下,课题组成员编写了《C语言程序设计》教材及配套的《C语言程序设计习题答案与上机指导》,现已公开出版发行。经教学实践检验证明,教材符合应用型本科院校学生认知规律,取得了较好的教学效果。

[参考文献]

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

[2]吴文虎.程序设计基础(第二版)[M].北京:清华大学出版社,2004.

[3]武桂力.C语言程序设计项目化教程[M].青岛:中国海洋大学出版社,2011.

[4]黄璐,于红,王建彬.C程序设计课程教学探讨[J].吉林省教育学院学报,2012(04).

c语言程序篇4

关键词: 《C程序设计语言》 误区 感悟

《C程序设计语言》课程是电子信息工程专业开设的第一门程序设计类课程。该课程在本专业的课程体系中处于承上启下的地位,对于学习后续高级编程语言具有很好的导引作用。笔者经过一个学期的系统学习后感觉受益匪浅,不仅学到了基础的编程语言知识,更重要是的掌握了逻辑性较强的编程思想。为了让更多学生很好地学习这门课程,笔者借此文总结出《C程序设计语言》课程学习时常见的误区,并给出解决上述误区的方法和途径,供广大同仁借鉴。

一、学习《C程序设计语言》课程时常见的误区

1.只注重写程序,而忽视读程序。

很多学生在刚学习这门课程时就希望自己能够独立编写出一些程序,但实际情况大相径庭,此时挫败感油然而生,甚至一些学生因为这种挫败感产生对这门课程的厌学情绪。其实就笔者的学习经历而言认为刚开始学习时,不要急于自己编程,因为此时你还没掌握好基础知识,不可能独立完成程序的编写,认真研读别人的优秀程序才是学习该课程入门最快,也是最好的方法,在读别人程序的过程中慢慢领悟别人的编程方法和思想。

2.没能将理论学习和上机实践进行有效衔接。

《C程序设计语言》课程的教学分为理论讲授和上机实践两个环节,因为学校主客观原因的限制二者之间存在一定的时间间隔,但二者在内容上又是相互连贯的。时间上的不连贯和内容上的连贯性会使得一些学习不主动的学生不能将理论课上老师所讲的知识和技能在上机实践中得到有效的验证和消化。因此,一些学生在上机实验时面对老师布置的作业会觉得无从下手,学习兴趣就会大大降低。而C课程的知识是承前启后的,前一部分知识没有掌握好,后面章节内容的学习也会大受影响,这样就进入了一个恶性循环。最大的问题是这部分学生不仅自身学不好内容,而且会影响其他学生,这样班级的整体学习效果就会大打折扣。

3.缺乏一定的逻辑思维能力。

很多学生错误地认为C程序设计语言就是变量、控制结构、函数、过程、数组的简单结合,认为只要掌握这些就可以编写出良好的程序了。其实不然,真正优良的程序是需要靠自己的逻辑思维对变量、控制结构、函数、过程、数组这些要素进行创造性的整合。所以C程序设计语言是一门锻炼学生逻辑思维能力的课程。当你具有抽象逻辑思维能力和弄清楚了变量、控制结构、函数、过程、数组相关知识后,编写C程序就是易事。

二、走出上述误区的方法

1.端正学习态度,充分认识到本门课程的重要性,并保持良好的学习心态和学习习惯。

《C程序设计语言》是很多高校学生接触的第一门编程语言,该课程对于培养学生较强的逻辑思维能力具有非常重要的导引作用,而逻辑思维对于处于信息社会的大学生而言是必不可少的,但是逻辑思维能力的培养又不是一朝一夕的,需要持之以恒地努力。对于学生而言,只有从内心认识到这一点才可以使自身在遇到学习困难时迎难而上。对于一些偏文专业的学生而言,在学习初期肯定会觉得一些概念晦涩难懂,与自己的思维方式存在差异,此时千万不能有畏难情绪,一定要相信自己,在自身努力、同学帮助和教师引导的三方努力下共同渡过难关,而自身的认真努力是首要的。课前一定要认真预习,对自己通过预习不能理解和解决的知识点和概念进行标记,上课时当老师讲授到这部分内容时要认真听讲,如果通过教师的讲解依然不能理解,千万不能就此搁置,一定要及时向老师和同学请教。C程序设计的入门学习并不难,却是一个十分重要的过程,因为程序设计思想就是在这时形成的,良好的程序设计习惯也在这个阶段养成的。

2.学习时要注重理解一些重要的概念,勤于动手编写程序,并借鉴别人编写的好程序。

C程序设计课程就其本质而言并不是很复杂,其核心无非就是变量、函数、过程、数组、控制结构(顺序结构、选择结构、循环结构)、文件和数据库等概念和相关操作。但这些概念虽然一些同学在数学课程中听说过,感觉似曾相识,但此概念非彼概念,二者还是有所不同,要真正理解这些概念就必须多动手、多思考。程序设计是高强度的脑力劳动,不是听会的,也不是看会的,而是练会的。因此在学习过程中要勤于自己独立编写一些小程序,在编写过程中肯定会犯一些错误,在错误的解决过程中可以提升自己的编程能力,在能力提升的同时增强自身对该课程的学习兴趣。对于初学者而言,一方面要自己独立编程,但由于自身编程知识储备不充分,也要借鉴别人优秀的解题思路与方法,探究别人的思维过程,增强自己的思维能力,然后结合自身实际尝试实现或者说模仿着实现。

3.在学习过程中要避免孤军奋战、单打独斗,注重团队协作和互助。

笔者所在学校C程序设计课程的教学遵循先理论讲授后上机实验的步骤。一个教学班的学生人数在30至40人,实验课和理论课都只有一个教师。理论课和实验课之间的时间差会使一部分基础较薄弱的学生在实验课上会碰到各式各样的问题,而基础较好的学生在实验课上会很自如地完成老师布置的实验任务,因为只有一个老师进行辅导,如果那些基础不是很好的学生在学习过程中遇到问题后请教老师,老师此时可能正在辅导另外一个学生,在这种情况下就可以选择向身边基础较好的同学请教,这样既可节省时间又可加深同学之间的交流协作。经过半个学习基础知识的学习,老师会布置一些综合编程题让学生融会贯通并有效应用以前所学知识,笔者认为此时同学之间可以以团队形式进行答题,这样可以达到取长补短的效果。

参考文献:

[1]马丽洁.高职计算机和软件专业语言类课程改革探析――以C程序设计语言为例[J].电子商务,2015(07).

c语言程序篇5

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

中图分类号:G420 文献标识码:A 文章编号:1009-3044(2012)33-7974-03

C语言程序设计是计算机专业的一门专业核心基础课。但是,从以往学生的学习情况及后期应用来看,学生对该门课的掌握比较吃力,应用能力不足。笔者结合自己的教学体会,从教与学的角度进行分析,发现问题在于:一,目前所用教材难点集中、跨度大,容易使学生产生畏难情绪;二,教学理念陈旧,有些教师培养目标不明确,教学方法、教学手段不够灵活,导致教学过程中教与学不能有机融合。针对以上情况,对该门课程的教学改革提出一些新的建议,以供参考。

1 建立以能力培养为目标的教学理念

在传统C语言教学中,采用以语言知识为主线、先理论后实践的教学方法,教学重点在语法知识上,容易使学生深陷复杂的语法知识的“泥淖”而产生畏学情绪,不利于对知识的掌握和实践应用。实践证明,建立以实际应用为背景,以提高兴趣、培养学生逻辑思维能力、创新能力、分析和解决问题能力为主线的教学理念,有助于学生在培养能力的过程中逐步学习语言知识,提高语言应用能力。

1.1 理论教学方面

理论教学方面的改革主要是对课程教学内容进行整合。依据知识的难易程度和学生的学习规律,应用由简到繁、由易到难的进阶式学习方法,把教学内容的难点和重点分散到不同的教学阶段,建立如图1所示的教学结构模块,从而达到优化教学内容结构的目的。

1) 将数据类型、运算符、表达式等繁杂、抽象的语法知识分散到各个教学模块。

2) 分解语句、函数、指针、文件等难点内容。

以函数为例来说,在简单程序设计阶段教师就把函数的定义和调用方法介绍给学生,这样做的目的在于:一方面使模块化设计思想及早扎根于学生编程的思维习惯之中;另一方面把函数这个教学难点进行合理分散,使学生在多次应用和长时间练习之后最终牢固掌握函数的使用方法。

3) 融入软件工程思想与软件测试技术。

以简单程序为例,引导学生体验从分析问题、设计算法、编码到测试的软件开发过程,使学生尽早了解软件工程的基本思想,并对每个测试用例的设计方法进行分析讲解,以便引起学生对测试环节的重视,培养学生具备软件工程的素质。

1.2实践教学

C语言程序设计课程的实验通常分为三大类:验证实验、设计实验和综合实验。实验教学以此三类实验为主线,循序渐进,以达到不同的教学目的。其模块化分层结构如图2 所示。

1) 验证实验。每学完一章知识点后,要求学生上机调试课后习题,深化对本章知识的理解,培养学生调试和测试程序的能力。

2) 应用设计性实验。针对具体问题应用某个知识点设计简单的实现方案。如,在数组、函数、文件部分把前面各章学习的知识进行综合应用,安排各种典型算法和应用的编程训练,使学生在程序调试中不断复习基础知识,同时将基础知识和实际应用结合起来,锻炼学生解决具体问题的能力。对于验证实验和应用性实验,要求各组每个人都要完成并提交源代码。

3) 综合性实验:学生以2~3人为小组组成项目组,组员能力的高低须呈阶梯状,完成一个小型应用程序开发。综合实验以小组为单位,通过相互协作共同完成,每个小组最终提交一份源代码,但每个人必须总结整理独立的设计报告。

2 确立以案例法为主的教学方法

案例教学法是基于建构主义理论的一种教与学的模式,起源于19世纪20年代,由美国哈佛商学院(Harvard Business School)倡导。案例教学法在程序设计课程中的教学设计如图3所示:

在课堂教学中,选取既可体现C语言语法,又具有实用性的问题进行讲解。通过案例引入知识点,针对知识点再进行语法讲解,通过提出问题、算法设计,编码测试各阶段,逐步引导,使学生了解程序开发的基本流程。在教学过程中,注重激发学生的编程兴趣,强调学以致用,使学生在具体的案例中找到学习动力。对同一个问题,可以重复应用已有的实例,例如,求阶乘的例子,在循环结构、函数定义、函数的调用及递归时都可以用,通过将同一个案例贯穿到不同的知识点中去,让学生重点放在理解知识点本身,而不必在理解知识点的同时还要思考如何进行程序设计。

在实践课堂中,以学生为主。通过源代码编辑,编译,链接和执行各步骤的练习,使学生熟悉程序的执行过程;通过程序调试,修改程序中的语法错误和逻辑错误,使学生进一步掌握C语言语法规则;通过例题验证、习题调试,使学生加深对知识点的理解。

3 搭建以课程资源网站为辅助的网络教学平台

课堂教学主要以教师为中心,教师占组织和主导地位。学生跟随教师的思路,难以调动学习的积极性和主动性;另,课堂教学受时间和空间的限制,教师讲授的内容和教学方法不能适应每一个学生。

利用校园网络平台建立课程资源网站,借助网站丰富的教学资料提供与课程资源相关的链接,包括多媒体课件、相关网络课程、学科网站、学习参考文献等进行辅助教学。丰富的教学资源不仅构建了强有力的教学支持环境,而且开拓学生的学习思路。另外,网络教学突破了时间和空间的限制,解决了课程知识点多、知识更新快、学生基础不均衡及学时少等实际问题,而且各种教学形式相互补充,有利于满足不同学生学习习惯的需要。

4 结束语

C语言程序设计主要目的是培养学生的程序设计能力,初步了解软件工程的思想。该文从教学理念、教学内容、教学方法、实验教学等方面提出C语言程序设计课程教学的一些新的感悟,并在实际教学中进行了相应的试验和评估,教学效果良好。

参考文献:

[1] 程一飞,程玉胜.《C语言程序设计》的教学探讨.安庆师范学院学报(自然科学版),2011(17):114-117.

[2] 谭浩强. C程序设计(第3版)[M].北京:清华大学出版社,2008.

[3] 胡枫. 《C语言程序设计》的教学的设计[J].青海师范大学学报:自然科学版,2010(4):48-51.

c语言程序篇6

[关键词]C程序语言 分层教学 任务驱动

[中图分类号] G423.07 [文献标识码] A [文章编号] 2095-3437(2013)22-0081-02

一、课程教学现状分析

C语言程序设计是高校计算机专业的核心基础课程,很多学校都开了C语言公选课,将其作为学生学习程序设计的一个入门。学习C语言需要掌握的抽象概念和语法规则较多,同时又需要通过实践培养编程实用技巧。由于计算机专业必修课程(例如C++,数据结构等)都需要具备一定的C语言基础,所以对C语言的掌握程度直接影响着后续课程的教学效果。[1,2]长期以来C语言程序设计课程的教学改革一直都在许多高校中探索和实践,提出了项目教学法、[3]案例教学法、[4]自主学习模式[5]的教学理念。但在实际的C语言课程教学中,诸多因素导致教学效果不理想,具体有以下几方面:

首先,学生程序设计基础参差不齐。一部分学生以前没有接触过程序,有些学生对学习程序不感兴趣,有些学生沿用看书加背诵学习方法,他们感到枯燥厌烦,跟不上教学进度;还有一部分学生上课时积极主动,对编程产生较大兴趣,不但能够完全掌握老师讲的课程内容,而且能够积极查阅课外程序资料,教师讲授的课堂内容不能够满足这部分学生。传统的教学方式造成教师在教学无法兼顾这两类学生。学期结束后,第一类学生普遍感到程序设计课程晦涩难懂,不会应用,无从下手,因此失去了学习热情。

其次,传统教学模式影响教学效果。在传统的教学中,教师往往以课程的理论知识点为主线组织教学,依照从讲解概念起,接着讲解语法语句,最后举例加以细化。部分教师缺乏对该门课程的整体性把握,在教学上过多注重语法结构的知识,没有把学生放在主体的位置上,师生间的互动很少。甚至有些教材内容的结构安排缺乏合理性,语法部分编写过于繁琐,学生接受的是枯燥无味的理论规则,导致学习没有积极性,难以调动学生学习的主动性。教学观念、教学手段和方法以及考核形式等都比较陈旧,不能适应新形势下的教学需求,学生学习效率非常低,无法将所学知识运用到实际中。

最后,实践环节薄弱。上机实践是学习编程语言的重要组成部分。实际授课中,重视课堂教学而轻视上机实践,理论课上既要讲基本的语法知识又要讲编程方法,占用了过多的课堂时间。实验课上进行基本的验证性实验,学生机械式的运行程序,无法真正学会如何编写和调试程序,使得理论教学和实践教学脱节。通常情况下,C语言程序设计目前的考核方式主要以笔试为主,主要考查语法和基本的逻辑推导能力,无法进行学生动手实践能力的考查,从而造成了大部分学生即使理论知识掌握较好,却不会上机编程。

二、C课程教学方法改革探索

(一)采用分层教学模式

首先,对象分层。新生入学后,系部首先通过问卷的形式对新生的计算机基础技能、学习计算机的兴趣以及课内外学习方式等情况进行了调查,并进行了计算机水平摸底测试。根据学生的实际测试水平,打破以班为集体的传统教学模式,将他们分为不同的层次分别授课。将程序设计兴趣较强、数学逻辑基础较好、有一定编程基础并且测试成绩较好的学生编入A层;将测试成绩较差并且没有编程基础的学生编入C层;其余多数学生编入B层。教师依据各层学生进行因材施教,即针对学习者不同的学习能力、态度等个体差异施行不同的教学模式,实际上是使三层学生各有侧重、共同提高的一种教学方法。

其次,教学分层。分层授课是分层教学成功实施的关键,学生是教学活动中学习的主体,教师需要对所教层次学生的编程水平有准确的认识,才能真正激发其学习激情,培养其学习能力,促进课堂教学质量的提高。A层学生一般理解力较强,学习具有主动性,教师可以引导他们除了掌握教材知识点外,推荐课外参考书,尽快参与软件开发项目或兴趣小组。B层的学生通常情况下能够掌握基本的语法规则及编程方法,但是对编程缺乏总体思路,就需要教师及时将学生学过的知识加以复结,在掌握教学大纲要求的知识点外可通过综合实训练习进行编程水平提升。对C层就要通过精心设计教学内容、耐心的作业辅导、适时的课后交流激发他们的学习兴趣和信心。分层教学从各层学生的实际出发,“因人制宜”,关注各层次学生在学习方法上的差异,给予学生不同级别的指导,刺激学生向高层次目标努力,从而大面积地提高教学质量。此外,在实施过程中也要注意保护学生的自尊心,以淡化各层间的人为界线,避免分层带来的负效应。

最后,分层评价。分层评价是针对各类学生的学习水平,建立一套完善科学的评价体系激发学生学习兴趣、优化学习方法、树立学生的自信心,促使各成其才。对A、B、C 三层的学生不同的目标要求体现在评价体系中。对平时成绩的考核对应不同层次,A层同学分组考核,分工协作完成预设项目,根据小组中的表现进行组员互评和老师评价相结合的方式。B层和C层的同学则通过上机实操进行编程水平的测试。期终试卷可在同一份试卷上进行分层,分别对应于不同层次。试卷分成基础和提高两部分。基础部分主要考核学生是否达到基本教学大纲要求,这部分是三个层次学生共同的必答卷,对于三个层次的学生同分但不同值,成绩作为课程的考核分。例如编程题标注10分,则如果A层学生做对考核分加10,B层和C层学生做对加15。第二部分为提高卷,也是A层学生的必答卷,B、C层学生的选答卷,成绩作为课程的考核分。分层考核的目的是使各层次的学生经过努力都能获得较高的分数,获得成功的体验,激发学生的求知欲。

(二)基于实践导向的任务驱动教学

以实践为导向在教学活动中要求,以专业能力要求为依据,将“教、学、练”一体化的教学模式融入教学课程设计中。根据行业需要的知识、技能确定课程内容的选取与安排,课程设计是采用真实项目贯穿教学全程,项目按照内容分成若干模块,实现将化整为零进行学习。

任务驱动下分组学习讨论是一种非常有效的方式。让学生发挥主动性自由分组,依据编程能力水平给每组指派一名组长,上课时以组为单位,分析、讨论项目任务,具体包括需要收集资料、项目进度以及具体的工作任务。小组长主要负责小组内任务分配、协调组内成员等工作,老师轮流在每个小组旁听学生的讨论并接受学生的咨询。

教师所指定的任务主要包括两类内容:一类是课本课后习题,并对完成任务所必需的知识点进行必要的说明;另一类是具有实用性的项目任务实例,让学生更直观地理解所学知识应该如何与实践相联系。第二类任务需要教师进行设计,尽可能具有综合性、可分割性,适合小组讨论解决及协作完成。

制定合理的考核标准来综合衡量学生的学习状况是激发学生进行协作学习的动力。当学生完成任务后,先在小组成员之间进行任务完成情况评论。最后由老师对每组学生的任务完成情况进行总结讲评,对其中的不足进行点评,对比较好的做法给予鼓励,并据此对每个学生计算平时成绩,将小组整体得分与组内个人得分进行综合。课程采用综合测试考评方式,突破单一的闭卷考试方式,将平时作业、课堂讨论成绩、与期末考试相结合。

三、结束语

C语言是一门实践性很强、热门的高级编程语言。根据目前的教学现状,分析和总结教与学的不足,通过分层模式教学改革和以实践为导向的任务驱动教学探索,不断地提高课程的教学效率,使课程更具科学性,把学生的主动性充分地调动起来,让学生在学习中尝到乐趣。

[ 参 考 文 献 ]

[1] 杨理云.“C 语言程序设计”教学方法探索[J].中国成人教育,2007,(5).

[2] 丁群,文明瑶.项目教学法在C语言教学中的应用[J].电脑知识与技术: 学术交流,2012,8(3).

[3] 陈洪超.项目教学法在“C语言程序设计”课程中的应用[J].重庆电力高等专科学校学报,2012,17(3).

c语言程序篇7

一般进入大学后,学生才会逐渐的接触到计算机C语言,计算机C语言是一门新的计算机语言,其主要是进行计算机编程,这些计算机程序在实际工作中有很大的作用。虽然计算机C语言现已广泛流行,有很大的作用,但是对于学生而言仍然是一门很难的学科,学生很难对C语言进行掌握,不理解C语言,但是学生一旦学会C语言,就会进行各种程序的编写,发现C语言的魅力。在本文中,我们对C语言编写程序的技巧进行学习。

一、计算机C语言内容

想要学习计算机C语言并不是一件很难的事情,C语言编写程序是一件水到渠成的事情,C语言主要课可以分成这几个模块:(1)语言运算符和运行顺序。(2)C语言的基本程序结构,顺序、选择以及循环。(3)数组。(4)函数。(5)指针。(6)结构体和共用体。(7)文件。C语言的运算符和运算顺序是学习计算机C语言的基础,也是计算机C语言的独特之处,计算机C语言的运算非常的灵活,运用也非常的丰富,当一个运算中出现多种运算时,在组合运算表达式中,就会出现优先运算顺序和结合规则。计算机C语言是三种基本程序的结构,这三种程序结构是学习计算机C语言必须掌握的程序结构,所有的程序结构都是按照执行顺序进行的,在执行程序的过程中,会根据输入的任务选择结构,并不断的执行相关的任务指导满足选择结构的条件[1]。数组其实就是一组数据的有序结合,在计算机C语言编写程序中需要对有共同性质的数据进行处理,根据数组维数的不同,将其分为一维数组和多维数组,在计算机C语言编写程序中,对数组的引用,可以为某些编程提供更为方便的环境。函数是计算机C语言的重要组成部分,在计算机C语言中每一个函数都有特定的单一功能,通过函数模块的调用将其特定的功能实现。在计算机C语言编写程序时,引入函数主要是为了将其中出现的重复代码解决以及满足编写程序的结构化和模块化等需求,根据不同的使用方法可以将函数分成不同的种类,从定义上分,可以将函数分成有返回值函数和无返回值函数,从作用上分,可以将函数分成内部函数和外部函数,从使用上分,可以将函数分为用户函数和系统函数。在计算机C语言编写程序的过程中,应用作为广泛的一种数据类型就是指针,指针是计算机C语言的精华部分,指针也是计算机C语言编写程序的一个特征。通过指针变量获取各种数据结构,将数组和字符的使用简化。计算机C语言编写程序中经常使用的一种数据类型是结构体和共用体,主要是对多个不同的数据组成的实体进行描述,其中每一个数据项就是一个实体,将这些数据项结合在一起就形成了一个特定的单元,也就是结构体。结构体和共同体可以将计算机C语言编程中的数据类型和数组类型结合成一个整体。计算机C语言编程中文件是相关数据的有序结合,从用户的角度,可以将文件分为设备文件和普通文件,从储存方式上进行分类,可以将文件分成二进制码文件和ASCII码文件,当然从文件的读写方式进行分类,可以将文件分成非缓冲文件系统和缓冲文件系统[2]。

二、计算机C语言编写程序技巧

计算机C语言最好的学习方法就是练习,也就是说要多上机,只有在计算机上运行出来的程序,才是正确的程序,否则将是不正确的C语言编写程序,学习计算机C语言编写程序的主要技巧有:

1.根据示例程序,注重示例程序。从示例开始学习计算机C语言编程,是学习新知识的开始,通过对示例的练习,逐渐形成自己的思考模式。在进行数据结构编程时,需要对相关的程序进行编写,这时对每一种数据结构都有了一定的了解,这是运用数据结构进行编程的基础,熟练的运用数据结构是对数据结构有了深刻的理解和透彻的领悟。在学习计算机C语言编程之前,通过对示例的模仿,了解编程的基本步骤,帮助进行程序的编写。

2.多练习程序编写。程序编写不能停留在对理论知识的掌握上面,需要通过实践进行锻炼和提升,想要提高计算机C语言编程能力,就需要多进行上机练习。上机可以将学生的动手操作能力提升,在实践中将学习到的理论知识进行运用,通过上机,将自己在理论知识学习中的薄弱之处进行指出,然后进行改进,实现计算机C语言编程的效果,提高实际操作动手能力。

3.在编程时,注重综合知识的运用。计算机C语言编程需要大量的运用综合知识,包括C语言的7项基本内容,同时还要执行不同的程序结构。综合知识的运用,有利于编写出优秀的计算机C语言程序,将理论知识运用到实际的编程中,将编程效果提升。

4.掌握计算机C语言基础知识。编写的计算机C语言程序,虽然可以在计算机上运行,但是,掌握住扎实的理论知识是基础,在计算机C语言编程中应该明白掌握基础知识对于对于上机的重要性,没有基础知识作为上机的前提,上机操作编程工作是没有办法进行的,所以需要掌握住扎实的理论知识[3]。

三、小结

随着信息化脚步的加快,计算机C语言在生活中得到普遍的应用,在工作有着重要的意义,在计算机C语言编写程序中,掌握相应的技巧,是学习计算机C语言编程的基础也是可靠保证,掌握住基础理论知识,和上机技术,在计算机C语言编写程序中有不可替代的作用。

参考文献:

[1]任国英.计算机C语言编辑程序技巧探讨[J].赤峰学院学报(自然科学版),2012;01

[2]秦兴.探究计算机C语言编辑程序技巧[J].信息与电脑(理论版),2012;6

c语言程序篇8

摘要:本文根据高职学生特点,从实际教学经验出发,分析了高职院校C 语言程序设计教学现状,并简单讲述了C 语言主要知识点,并提出适合高职学生学习的方法。

关键词 :C 程序高职院校

《C 语言程序设计》是高职院校计算机及电子信息相关专业的重要专业基础课。该课程主要培养学生模块化程序设计的逻辑思维能力,使学生掌握程序设计的一般方法和技巧,并锻炼学生的思维能力和创新意识。

1 C 语言程序设计教学现状

C 语言是理想的结构化语言,描述能力强。C 语言的教学要求教师具备良好的教学能力和清晰的程序设计思想,也要求学生有一定的逻辑设计能力。一般高职院校的C 语言设置在一年级开设,学生刚刚进入大学,还没有从高中生的身份完全转变过来。虽然在高中阶段学习了计算机应用基础课程,但是他们完全没有程序设计的概念,经过一段时间的学习,觉得这门课很难学、学不会。经过两个学期的C 语言教学,从实际教学经历来看,主要的制约因素有以下四个:第一、学生刚进入大学,刚接触编程语言,对计算机原理理解不深,对编程更是不了解,不具备语言编写能力。第二、高职学生文化基础比较差,尤其是数学基础差,导致学生逻辑思维能力差,而C 语言的学习对这方面能力又有较高的要求,所以对于稍微复杂一点的程序学生就觉得难以理解。第三、英语基础差,很多高职学生对英语望而生畏,而计算机语言基本都是用英语来实现的,C语言亦是。很多学生看到程序中的英语单词就头疼,从心理上就觉得自己学不会C 语言,也就放弃了。第四、很多学生,在上课的时候能听懂了,但是上机的时候头脑一片空白,不知从哪里入手编写程序。部分能够写出程序的,也是按照教材或老师所讲的例子进行编写,一旦题目要求有变化,便不会做了。

2 C 语言教学规范

有一简单C 程序如下:

int main()

{

int a,b,m;

int max(int x,int y);

printf(" 请输入两个数值:\n");

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

m=max(a,b);

printf(" 两个数中较大的为%d\n",m);

return 0;

}

int max(int x,int y)

{

int z;

if(x>y)

z=x;

else

z=y;

return z;

}

该程序的功能是通过键盘输入两个数值,经过程序的运行,将其中较大的数值进行输出。该程序简单,易于理解,但是包含C 语言中很多必须掌握的知识点。简单介绍如下:

2.1 C 语言程序的结构通过上面简单例子可以看出,一个C 语言程序的结构有以下特点:①一个程序由一个或多个源程序文件组成。②函数是C 程序的主要组成部分。程序的全部工作几乎都是由各个函数分别完成的,函数是C 程序的基本单位。在设计良好的程序中,每个函数都用来实现一个或几个特定的功能。③一个函数包含两个部分。函数首部和函数体两个部分构成。基本形式如下:函数类型和函数名(参数类型、参数名称……)。函数体包含声明部分和执行部分。声明部分,定义本函数中所用到的变量。执行部分,指定函数中所进行的操作。④程序总是从main 函数开始执行的。⑤C 程序中对计算机的操作是由函数总的语句完成的。C 程序的书写格式比较自由,一条语句可以分写在多行,也可以将多条语句写在一行。但一般习惯每行只写一条语句。⑥所有的C 语句的最后必须要有一个分号。⑦C 语言本身不提供输入输出语句。输入和输出操作是由库函数scanf 和printf 等函数来完成的。

2.2 掌握C 语言的基本结构大部分的语言都是由顺序结构、选择结构和循环结构三种基本结构构成的,而C语言也不例外。

2.2.1 顺序结构。在顺序结构中,各语句是按自上而下的顺序执行的,执行完上一个语句就自动执行下一个语句,是无条件的,不必做任何判断,是最简单的程序结构。

2.2.2 选择结构。在现实生活中需要进行判断和选择的情况很多。比如,从A 城市出发上高速公路,到一个岔口,有两个方向,一个去B 城市方向,一个去C 城市方向。

驾车者到此需要自己根据自己的目的地进行判断,选择其中一个路径。在日常生活或工作中,类似这样需要判断的情况很多。比如:如果考试不及格,要补考;70 岁以上的老人,乘公交免票等等。

程序中,选择结构是一种重要的程序结构。本文前面的例子中就用到了选择结构,如果x>y,较大值为x,否则为y。该函数中,采用了if 语句中,双分支选择结构。在C语言中有两种选择语句:①if 语句;②switch 语句。

①if 语句形式有三种形式

·if(表达式)语句

·if(表达式)语句1

else 语句2

·if(表达式) 语句1

else if(表达式2)语句2

else if(表达式3) 语句3

else if(表达式m) 语句m

else 语句m+1

②switch 语句一般形式

switch(表达式)

{

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

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

: : :

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

default:语句n+1

}

2.2.3 循环结构。在日常生活中或是在程序所处理的问题中常常遇到需要重复处理的问题。比如:要向计算机输入全班50 个学生的成绩等。在C 语言中,需要多次重复执行一个或多个任务的问题可以用循环来处理。循环结构有while、do…while 和for 语句来实现。

while 语句:

while(表达式)语句

do…while 语句:

do 语句while(表达式);

for 语句:

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

3 怎样学习C 程序设计

根据C 语言程序设计课程特点,结合今年来的从教经验,综合高职学生特点,C 语言程序设计教学应注意以下几个方面:

①要着眼于培养能力。C 语言程序设计是一门操作性很强的课程,在教学过程中应该注意培养学生分析问题、构造算法、编程和调试程序的能力。②要把重点放在解题的思路上。初学者不要在语法细节上死记硬背。一开始学习只要能看懂程序,能够编写简单的程序,然后逐步深入。

语法细节可以在后续的学习及长期的时间中掌握。③掌握基本要求,注意打好基础。在学校学习程序设计,主要学习程序设计的方法,进行程序设计的基本训练,为进一步学习打下良好的基础。④重视上机实践环节。该类课程学的好与坏,不是看你“知不知道”,而是“会不会做”。对程序而言,光靠听课和看书是学不好的,除了学习本课程要掌握的概念,还要动手编写程序,上机调试程序。⑤要学会举一反三。学习程序设计,关键是学习程序设计的思路和方法。

学会一种计算机编程语言,在学习另外一种编程语言时应该不会太困难。各种计算机编程语言,其基本规律是一样的,在学习时一定要学活用活,举一反三,掌握规律,在后期学习时就:

[1]曹莎莎.C 语言教学研究与思考[J].价值工程,2012(01).

[2]雍全明.C 语言教学改革探索与实践[J].新余高专学报,2005(02).

c语言程序篇9

本文结合本校情况,分析了目前高职电子信息类专业学生在C语言程序设计教学上存在的主要问题,提出采用点面结合,分级教学目标,精选程序案例,突出高职认知规律,以提高学生的学习兴趣为基础,强化学生上机练习及指导为突破口,最终实现高职计算机专业C语言程序设计的教学目标。

关键词:

高职院校;C程序设计;分级教学目标

一、引言

现在,我们学校和许多高校一样,选择C语言作为电子信息类专业的高级语言程序设计的入门教学课程,C#语言和Java语言程序设计与开发作为计算机专业后续岗位能力延展课程。C语言程序设计是一门专业基础课,强调语法和基础,而C#语言和Java语言程序设计则着重于岗位应用能力。本人多年从事《C/C++语言程序设计》、《C#语言程序设计》、《数据库编程技术》和《ASP.NET》课程教学,发现我校高职电子信息类专业相当一部分学生语言不过关,给后续课程带来很大麻烦,造成教学被动。为此,很有必要对高职电子信息类专业C语言程序设计教学进行反思,提出相应对策。本文以C程序设计课程为例,分析目前高职电子信息类专业学生C语言教学上存在的主要问题,就如何确定并有效实现教学目标做一个切实的探讨。

二、高职电子信息类专业C语言教学的特点

1C语言的教学特点:具有逻辑性、理论性、创构性和理论性是计算机程序设计课程的四大主要特征。想要掌握计算机语言,需要学生有一定的主动创造力和罗辑思维力。而C语言更是计算机程序设计课程之中的难点,很多首次接触到C语言的同学很难入门。根据这一特性,对高职院校在C语言的教材编写上和教学上带来了很大的困难。计算机语言的学习不仅仅是看教材,听课更重要的是在于应用。学会使用C语言编写程序,最重要的环节是做习题和上机实训。如果学得不扎实,对后续专业课程影响很大。所以一定要强化实训教学。高职院校的学生普遍存在着文化水平较低,认知度不足,综合素质不高等特点。很多学生对学习没有热情,思维理解能力也较差。有的学生上课,仅仅是为了应付家长和学校,自己没有主动学习的欲望导致学习没有纪律。因此,高职院校的学生上课处于一个积极性不足,学习习惯不好,没有学习计划规划,不主动思考这一环境之中。他们往往是被动的接受学校的教育,仅仅是为了完成目标而学习,一版不会主动进行相关课程的深入思考和练习。由于这些不好的学习因素吗,导致相关的学习课程学习起来更加困难,也不知道如何求助如何进行解决。目前,相当大一部分学生对学习计算机课程存在两个误区:一方面是在现在软件领域这个大环境下,C语言基本无用,另一方面是学习这门课程如果今后不从事相关工作也无用武之地。还有相当一部分学生学习中产生畏难情绪,严重挫伤他们学习计算机语言的积极性,甚至影响他们学习本专业的信心。但同时也要看到,有一部分高职生来自于高职院校的学生,他们在学习C语言的过程中实践和动手能力都得到了很大的加强,逻辑思维能力和创新能力也有明显提升,还有一部分有自己兴趣十足的爱好。这应当充分肯定并予以高度重视,并加以正确的引导。在教学中注意扬长避短,充分发挥他们的优势。

三、高职C语言教学的思考与对策

(一)要遵循计算机语言学习的认知与教学规律计算机语言程序设计学习都有自身的认知与教学规律。计算机程序就是用某种计算机语言把计算机的执行过程描述出来。学习计算机语言,就是学习语法规则以及掌握这些语法规则的应用。众所周知,要学好一门语言,关键是不停地进行读写训练,活学活用。多看、多读、多写、多模仿练习是学好任何一门语言的诀窍,那么学习计算机语言也是如此。所以,C语言程序设计教学首先是引导学生多阅读C语言程序,然后是学会调试C语言程序,接着是模仿编写C语言程序,最后才是设计C语言程序。

(二)分级制定教学目标我们的教学对象是这样现状的高职学生,还存在计算机水平差异、思维发展差异。这就要求我们根据高职教育的根本要求和专业人才培养方案,结合本课程的内容特点,在教学大纲中应制定多级教学目标。多角度分层次分阶段从低到高设计的教学目标如下:1、掌握C语言程序设计的基本知识、基本方法和技巧2、具有程序设计初步应用能力3、理解结构化程序设计的基本思想4、培养程序设计逻辑思维方式,提高学生自主探索学习和分析解决实际问题的意识在教学实施过程中,要根据学生所表现出来的差异进行分层,设计不同层次的学生模型,分层次制定教学内容和教学目标。有条件分班教学的,可按不同层次的学生在教学活动中要达到不同的学习目标,分班级安排不同的学习内容。比如:把C语言程序设计课分为两个层次,一个基础层次,一个提高层次。

(三)选择或自编适合高职学生的C语言实训教材高职的培养目标,教学模式、教学内容有其鲜明特色,这就要求高职《C语言程序设计》教材也应当独具特点,不能照搬普通高校教材,更不能借用中职教材。但现有教材很多是介绍语句的格式和功能,不适合高职学生,因此必须调整教材结构和内容来应对现在高职教育。2008年我们曾编写《C++程序设计实训指导书》,可满足6个专业方向的学生使用。本书是在编写组各老师多年从事C++语言程序设计教学的基础上编写的,书中根据多年的教学经验,针对海南高职学生实训中遇到的问题,精心挑选训练题目,进行强化训练,以提高学生分析问题和解决问题的能力。力求将复杂的问题和概念用简洁的语言描述出来,力争让学生当时看得懂、学后用得上。

(四)围绕最大限度提高与保护学生对C语言的学习兴趣,优化教学方法,以求全面教学实效大量的调研证明,学生在如下情况下其学习效果才会是非常有效的:感觉到自己备受别人的关注;对他们现在学习的知识充满兴趣;自己是学习的主导和参与者;在任务完成后得到适当的反馈;看到了成功的机会;对正在学习的东西感兴趣并觉得富有挑战性;感觉到他们正在做有意义的事情。要促进学生的自主发展,就必须最大可能地创设让学生参与到自主学习中来的情境与氛围。因此,教师要因势利导,采取多种教学方法,最大限度提高与保护学生对C语言的学习兴趣,以求取得真正教学实效。1.做到每一堂上机课都能让学生通过自己上机程序练习获得成就感。2.提倡学生朗读程序。比如,语句intx;x=5;,可读成“声明一个整型变量x,然后将整型常量5赋值给整型变量x”。通过朗读程序,能够使一些原本很模糊的概念得到不断地巩固,逐渐地变得清晰。3.养成良好的编程习惯,将枯燥难记的语法融入范例程序的上机调试过程中。在整合课程内容的基础上,改变过去先给出定义和规则的讲授办法,而是从具体问题入手,精选范例,努力把枯燥的“语言”讲得生动、活泼。在程序范例中,将语法知识点同实际编程结合。讲授时避免纠缠于语法细节,应始终明确一点:计算机语言是用来描述需要解决的问题和问题的解决方法的,任何语法规定都是为这个目的服务的。4.点面结合,少讲多练,确保创造自主学习的情境与氛围学习计算机语言主要在于应用,仅仅通过听课和阅读教材是不可能掌握的。学会使用C语言编写程序,最重要的环节是做习题和上机实训。要区分学生层次,精选上机练习题,既要满足少数提高训练,又要满足大多数基础练习,做到点面结合,符合学生实际。5.及时帮助学生化解难点,共克难关应事先分析C语言学习的难点,做到胸中有数。在C中,变量与数据类型概念是第一个难点,它与内存概念紧密相关。这个难点,将影响全局。循环控制语句是第二个难点,它改变程序执行流程,难在如何构造,关键是抓住循环初值、终值和增值三要素。教学中要及时发现学生在学习C时的难点,厘清难点的根源,逐个击破,不留隐患。6.结合专业,学以致用根据教学不同阶段,教师应适时收集一些与其授课学生专业方向结合的程序案例,让学生能够切实体会到C程序设计在解决本专业中的问题中所发挥的作用。7.发挥计算机网络与多媒体的优势,增加教学互动及时开发C课程网站,提供学生在线多媒体学习与答疑平台。在C语言程序设计学习上,把复杂的计算机语言、专业化的技术变成了轻松自如、随心所欲的人机对话。因此,使学生不至于掉入C语言知识的细节里,避免出现既费时、又费力,而学习收效不理想现象,使枯燥无味的内容变得简单,从而有趣,激发了学生浓厚的学习兴趣。学生在课堂内外的学习中,遇到不能解决的问题时,既及时可上Internet网查询,又可与同学老师交流。这样,既增进了师生之间交流的机会,又达到共同提高的目的。

四、结束语

总之,对于高职电子信息类专业学生来说,学好C语言既是专业素质的需要,也是未来岗位能力的要求。对于教师来说,如何因材施教,因人而异,充分激发学生的内在积极性与潜能教学模式也成为迫在眉睫的重任。针对目前高职电子信息类专业学生在C语言程序设计教学上存在的主要问题,我们提出采用点面结合,分级教学目标,精选程序案例,突出高职认知规律,以提高学生的学习兴趣为基础,强化学生上机练习及指导为突破口,最终实现高职C语言程序设计的教学目标。

参考文献:

[1]全国高等院校计算机基础教育研究会高职院校计算机教育经验汇编第二集[M].中国铁道出版社,2008.

c语言程序篇10

关键词:C语言程序设计;案例教学;任务驱动

C语言是通用的计算机程序设计语言。许多职业学校,在高职学生和中职学生中都开设了《C语言程序设计》课程。学习程序设计必须具有语言、算法、数据结构和程序设计的方法等方面的知识,而C语言本身又比较复杂,较难掌握,所以《C语言程序设计》的教学内容理论性较强,学生容易产生厌烦情绪。C语言教学一般以Turbo C为主,Turbo C的调试环境不是可视化的过程,这在客观上造成了学生掌握C语言程序设计知识的难度。在职业学校中,《C语言程序设计》的授课时数一般为76课时左右。通过对我校高职计算机专业学生的观察和调查,学完C语言后能熟练掌握、灵活运用的学生为5%左右,基本掌握的学生为25%左右,大部分学生只能是应付考试,甚至还有5%的学生采取放弃的态度。为了改善C语言的教学状况,使学生能真正掌握这门课程的知识,有必要依据学生的层次及所选的专业对《C语言程序设计》的教学内容、教学方法等方面作一些探索。

依据培养学生的目标,合理调整教学内容

中职层次中等职业教育的目的是培养生产一线应用型人才,着重培养学生的学习能力、就业能力、工作转换能力和创业能力。中职学生的学习基础差。所以,如果在中职学生中开设《C语言程序设计》的课程,则必须考虑中职学生的学习基础,并依据中职学生的培养目标,适当降低理论知识的难度和深度,教学内容力求浅显易懂。以谭浩强主编的《C语言程序设计》一书为例,以76课时为总授课时数,一般要求学生掌握程序设计的三种基本结构、数组、函数等内容即可。对于其中过繁过深的例题、习题可省略,如“用二分法求方程2x3-4x2+3x-6=0在(-10,10)之间的根”之类的题目。对于重点、难点的教学内容必须进行详细讲解,如“选择结构中的闰年的判断”、“循环结构中的素数的判断”等经典例题必须设计易于学生接受的教学方法,使学生消化吸收。强化练习也不能缺少,但也不能搞题海战,要巧设计(题意新颖有趣,贴近实际)、巧安排(当学生跃跃欲试之时布置题目最有效)。总之,教学目的是使学生真正掌握并力求能熟练灵活运用教师所讲授的知识内容。

高职学生高职教育着重培养具有实际工作能力的技术型和应用型人才。高职学生一般比中职学生学习基础都要高一个层次。所以,高职学生对知识的理解力相对也要强一点。因此,除了每堂课的容量要增加外,教师还需要有意识地留一些知识点给学生自学,以培养他们自主学习的能力。其次,教学内容也应有所增删,尽量使教学内容多和实际的程序设计相联系。对于一些经典例题要讲清所采取的解决方法,如“小猴吃桃”问题,必须讲清“递归”方法及“递归”问题中“回推”和“递推”的两个阶段,并且还要讲清如何设计结束“递归”过程的条件。根据实际教学经验,同样以谭浩强主编的《C语言程序设计》一书为例,以76课时为总授课时数,一般高职学生能掌握:程序的三种基本结构、数组、函数、指针、结构体、文件等内容。当然,对于计算机专业的高职学生还必须掌握更深层的知识内容,并且要求学生参加国家二级C语言程序设计等级考试。

以激发学生的学习兴趣

为目的,改革教学方法

传统的《C语言程序设计》课程的教学是以课堂为中心的满堂灌,其中上机一般占30%左右。《C语言程序设计》的授课一般以Turbo C为主,Turbo C的调试环境很不直观,使学生不容易理解。因此,尽管C语言有实用价值,但生涩的教学内容,不易引起学生的学习注意,如果不讲究教学方法,则难以达到课程的预期目标。为了改变这一状况,教师必须利用现有资源重新整合教学内容,改进单一、乏味的教学方法,力求显现在学生面前的知识有趣而生活化,以提高学生的学习兴趣及学以致用的能力。案例教学法、任务驱动式教学法等都是当前比较受推崇的教学方法,代表着先进的教学理念,但并不等于适合任何一门课程的教学,必须加以革新后才能应用到具体的教学过程中去。

采用案例教学法,激发学生的学习兴趣所谓案例是指那些在日常生活中较能典型地反映教学内容的事例。一般的课堂举例并不等同于案例教学。案例教学是指在教学过程中,引导学生对案例进行剖析研究,使学生能由特殊归纳一般,掌握知识内容,从而达到教学目标的教学方法。教师在准备案例的过程中,首先要确定哪些是要学生掌握的知识点,然后再精选能够说明、反映这些知识点的案例。在案例的设计中要不拘一格,巧妙使用可视化的程序设计语言或Flash动画设计软件。不要拘泥于C语言的语句格式,而要注重案例的生动、形象,能否真正激发学生的学习兴趣。只有激发了学生的学习兴趣,学生才会自觉、主动地记忆C语言的语句格式。如在讲授选择结构中的多路选择结构时,利用VB程序设计语言设计一个红绿灯自动变化(红灯:2秒;绿灯:3秒;黄灯:1秒)的案例,使学生掌握多路选择结构,更主要的是使学生了解多路选择结构的用途(如表1所示)。实践表明,在案例教学的过程中,学生兴趣高,教学容量大,知识点的前后联系紧密,学生对通过案例教学的方式传授的知识点印象深,能灵活运用。

应用“任务驱动”教学方式,提高学生分析问题和解决问题的能力在《C语言程序设计》的教学中,当传授完一个知识点或知识结构时,为了使学生能灵活运用,经常会采用再现式教学。如何将再现式教学转变为以解决问题、完成任务为主的探究式教学呢?答案是采用“任务驱动”式教学方法。所谓“任务驱动”,就是学生通过完成教师布置的任务,建构真正属于自己的知识与技能。其中的任务既蕴含了学生应该掌握的知识与技能,也蕴含了学生应该获得的能力训练。学生完成任务的过程,是一个不断提出问题、解决问题的过程。如在复习选择结构时,可以借助Flash动画制作一个模拟“打火机的点火效果”,其中火苗的出现与否即让按钮实现点火的功能,就可以利用Turbo C程序设计中的if条件语句来实现。在教学过程中以问题为导向,并引导学生解决问题(如表2所示)。

在教学过程中还有很多有效的教学方法,如展示型教学、拓展式教学等,教师要结合实际情况灵活运用。

在当今的信息社会中计算机的应用非常广泛,各行各业需要不同层次的计算机专业人才。所以,学校在进行计算机教育中应依据培养目标提出不同的教学要求。对于每一个学习计算机知识特别是C语言的学生,都有一个由浅入深、逐步提高的过程。教师在这个过程中必须激发学生的兴趣,更新教学理念,充分利用、整合各种教学资源,注重教学方法的探索,真正使C语言这门课程成为学生学习其他计算机知识的基石。

参考文献