c语言递归程序

2024-11-06 版权声明 我要投稿

c语言递归程序

c语言递归程序 篇1

二、写一个函数intisprime(intn),当n是质数时,函数返回非零值;当n是合数时,函数返回零值。

三、写一个函数reverse(chars[]),将字符串s[]中的字符存储位置颠倒后重新存于s[]中。试分别用递归和非递归两种形式编写。

四、写一个主函数输入测试数据(自己指定),并调用上述函数,检查函数功能的正确性。要求:把预备知识、步骤、程序框图、调试好的程序及存在的问题写在下面(不够可以附页)。

#include

#include

intdigit(int n,int k);

intisprime(intn);

void reverse(chars[]);//非递归实现

void reverse1(chars[]);//递归实现

int digit(int n,int k)

{

int m1,m2,i;

m1=n;

m2=0;

while(m1!=0)//统计n数字的位数

{

m1=m1/10;

m2=m2+1;

}

if(k<=0||k>m2)return 0;//不能正确截取

m1=n;

for(i=1;i

m1=m1/10;

m2=m1%10;//取第k位

return m2;

}

intisprime(intn)//是素数返回1,是合数返回0

{

int i;

if(n<0)

n=-n;

if(n==1)return 0;

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

if(n%i==0)

break;

if(i>n/2)

return 1;

else

return 0;

}

void reverse(chars[],int len)//非递归,字符串倒置 {

int i;char ch;

for(i=0;i

{

ch=s[i];s[i]=s[len-1-i];s[len-1-i]=ch;

}

}

voidreverse1(chars[],int m,int n)//递归方法实现 {

char ch;

ch=s[m];s[m]=s[n];s[n]=ch;

if(m<=n)

reverse1(s,m+1, n-1);

}

void main()

{

int n=123456,k=4,len;

char str[80]=“abcdefghij”,str1[80],str2[80];

if(digit(n,k)==0)

printf(“%d输入错误n”,k);

else

printf(“%d的右边第%d位是:%dn”,n,k,digit(n,k));

if(isprime(k)==0)

printf(“%d是合数n”,k);

else

printf(“%d是素数n”,k);

len=strlen(str);

printf(“原字符串n”);

strcpy(str1,str);

puts(str1);

reverse(str1,len);

printf(“倒置以后的字符串n”);

puts(str1);

c语言递归程序 篇2

递归作为一种算法在程序设计语言中广泛应用。它是调用一个函数的过程中又出现直接或者间接地调用该函数本身。递归是计算机科学的一个重要概念, 递归的方法是程序设计中有效的方法, 采用递归编写程序能使程序变得简洁和清晰。

递推算法是一种用若干步可重复的简运算 (规律) 来描述复杂问题的方法。递推是序列计算机中的一种常用算法。递推法的特点是从一个已知的事实出发, 按照一定规律推出下一个事实, 再从这个新的已知事实出发, 再向下推出一个新的事实。

2 问题提出

一场球赛开始前, 售票工作正在紧张进行中, 每张球票为50元, 现有m+n个人排队等待购票, 其中有m个人手持50元的钞票, 另外n个人手持100元的钞票。假设开始售票时售票处没有零钱, 求出这m+n个人排队购票, 使售票处不至出现找不开钱的局面的不同排队种数 (这里正整数m、n从键盘输入) 。

这个问题用一般的解决方法非常麻烦, 下面用递归和递推方法解决。

3 购票问题分析

这是一道组合计数问题。令f (m, n) 表示有m个人手持50元的钞票, n个人手持100元的钞票时共有的方案总数。

(1) n=0。

n=0意味着排队购票的所有人手中拿的都是50元的钞票, 那么这m个人的排队总数为1, 即f (m, 0) =1。

(2) m

当m

(3) 其它情况。

m+n个人排队购票, 第m+n个人站在第m+n-1个人的后面, 则第m+n个人的排队方式可由两种情况获得:①第m+n个人手持100元的钞票, 则在他之前的m+n-1个人中有m个人手持50元的钞票, 有n-1个人手持100元的钞票, 此种情况共有f (m, n-1) ;②第m+n个人手持50元的钞票, 则在他之前的m+n-1个人中有m-1个人手持50元的钞票, 有n个人手持100元的钞票, 此种情况共有f (m-1, n) 。

由加法原理得到f (m, n) 的递推关系:

f (m, n) =f (m, n-1) +f (m-1, n)

初始条件:

当m

当n=0时, f (m, n) =1

4 购票排队递归程序实现

5购票排队递推程序实现

6结语

递归和递推算法解决问题结构清晰、可读性强, 而且容易用数学归纳法来证明算法的正确性, 为设计算法、调试程序带来很大方便。且递推程序的运行速度要快于递归程序。

参考文献

[1]卢开澄, 卢华明.组合数学[M].第4版.北京:清华大学出版社, 2006.

《C语言程序设计》教学探究 篇3

关键词:教学方法案例教学启发教学教学效果

0 引言

《C语言程序设计》作为计算机专业的基础课,已经成为一门必修的语言课程,在整个语言课程体系中占有非常重要的地位。在C语言教学过程中,从客观上讲,教师的教法和学生的学法的差异,对教学效果都会产生很大的影响。针对教师的教法和学生学习语言类课程的学法,结合近几年来的教学经验和教学体会,把一些经验和方法总结出来,希望能对C语言课程的教学和学习有所帮助。

1 分析教学中存在的问题

《C语言程序设计》是一个逻辑性很强的课程。有些问题是将数学知识转化用c语言来实现,这就要求学生首先要能够理解和掌握数学知识,才能将其转化用c语言来实现。在调试程序时,提示的信息都是用英语给定,那么也就要求学生掌握最基本的英语单词,有些甚至是计算机专业英语,能将英语句子翻译为汉语,才能够对程序加以修改。学生在心里认为c语言难学,没有积极学习的主动性,导致上课时没兴趣,不能专心听讲,布置的作业无从下手,在实践课中,看到要编写的程序题目,理不出头绪。

2 涉及新的知识要有导入

在教学的過程中,要将新的知识点,要有很自然的导入语,引导学生思考问题和解决问题的方法。例如:scanf(“%d”,&a);只能从键盘接受 一个整型数,现在要输入40名学生的成绩,如何通过一个scanf函数来实现,难道是要定义40个变量,那如果要接受100个数呢?更多的呢?为了解决诸如此类的问题我们采用数组来实现。这样也就引导学生思路跟着教师,给他们提出问题,在给出解决问题的办法。

3 举一反三

给定一个例子时,将涉及到的所有内容都要讲到。各种形式,可能出现的错误都要指定。例如:现在要求n!我们可以给定一下几种形式:

(1)main()(2)main()

{ int i=1,n;{inti=1,n;

doubles=1; doubles=1;

scanf("%d",&n); scanf("%d",&n);

while(i<=n) do{ s*=i;

{s*=i;i++;

i++;} }while(i<=n);

printf("%lf",s); printf("%lf",s):

} }

(3)main()(4)main()

{inti,n ; {int i,n;

double s=1;doubles=1;

scanf("%d",&n); scanf("%d",&n);

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

s*=i;while(i>=1)

printf("%lf",s); {s*=i;

} i--;}

printf("%lf",s);}

(5)main() (6)main()

{intI,n; { inti=0,n;

doubles=1; doubles=1;

scanf("%d",&n); scanf("%d",&n);

i=n; while(i<=n)

for(i=n;i>0,i--) {i++;

s*=I;s*=i;}

printf("%lf",s);}printf("%lf",s);}

一个例子可以给出多种方法来实现,在这只给出6中形式,从这6种中,就可以看到初值不同,语句的书写顺序不同。通过一个例子,让学生能理解各种形式,遇到诸如此类问题时,就可以迎刃而解。

4 与实践教学相结合

程序设计课程具有很强的实践性,对于计算机语言课程的教授不应仅仅是传授知识,应该以培训能力为主。C语言的内容繁多,在有限的课时内不可能也不必要面面俱到,所以必须突出重点,突出实用性,关键在于教会学生正确运用C语言编写程序。应始终坚持以应用为中心,以算法为基础,以培养学生的实践能力为核心,突出技术实用性和再学习能力的培养。

参考文献:

[1]朱健,庞倩超.C语言程序设计案例教程.全国高职高专教育精品规划教材:北京:交通大学出版社.

[2]郭芹.对高职高专计算机专业程序设计教学的思考.中国科技信息.2008(1).

[3]谭浩强.C语言程序设计教程.北京:高等教育出版社.

c语言初级小程序 篇4

#include

#include

int main()

{

int i,a;

for(i=101;i<200;i++)

{for(a=2;a<=sqrt(i);a++)

if(i%a==0)

break;

if(i%a!=0)

printf(”%dn“,i);

}

return 0;

}

2.输入乘法口诀:

#include

int main()

{

int i,j;

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

{

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

printf(”%d*%d=%d “,j,i,j*i);

printf(”n“);

}

return 0;

}

3.判断1000-2000之间的闰年:

#include

int main()

{

int i;

for(i=1000;i<=2000;i++)

if((i%4==0&&i%100!=0)||i%400==0)

printf(”%dn“,i);

return 0;

求闰年C语言程序 篇5

地球绕太阳转一周的实际时间是365天5时48分46秒。

如果一年只有365天,那么每年就多出5个小时。

4年多出的23小时15分4秒,差不多就等于1天。于是决定每四年增加1天。但是,它比一天24小时又少了约45分钟,如果每100年有25个闰年的话,就少了18时43分20秒,这就差不多等于1天了,这显然不合适。

可以算出,每年多出5小时48分46秒,100年就多出581小时16分40秒。

而25个闰年需要25*24=600小时。

581小时16分40秒只够24个闰年(24*24=576小时),于是决定每100年只安排24个闰年(世纪年不作闰年)。

但是这样每100年又多出了5小时16分40秒(581小时16分40秒-576小时),于是又决定每400年增加一个闰年。这样就比较接近实际情况了。

根据以上的,决定闰年按照以下的计算规则:

闰年应能被4整除(如2004年是闰年,而2001年不是闰年),但不是所有被4整除的年份都是闰年。在能被100整除的年份中,又同时能被400整除的年份才是闰年(如2000年是闰年),能被100整除而不能被400整除的年份(如1800、1900、2100)不是闰年。

这是国际公认的规则。只说“能被4整除的年份就是闰年”是不准确的(复制直接使用)*/

#include

int main()

{

int a;

printf(“请输入年份n”);

scanf(“%d”,&a);

if(a%100==0&&a%400==0)//如果判断是百年,则判断年份能否被400整除printf(“%d年是闰年n”,a);

else if(a%100!=0&&a%4==0)//如果判断不是百年,则判断年份能否被4整除printf(“%d年是闰年n”,a);

else

printf(“%d年不是闰年n”,a);

system(“pause”);

return 0;

C语言数字钟程序 篇6

void main

{

int t,i,j,n;

for(t=0;t<10;t++)

{

clock(t);

sound(590);

for(n=0;n<4;n++)

{

delay(100000000);

}

nosound();

for(n=0;n<6;n++)

{

delay(100000000);

}

for(j=8;j<=18;j++)

{

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

{

gotoxy(i,j);

putchar(0);

}

}

}

}

void clock(int t)

{

int i,j;

textcolor(11);

if(t==0)

{

for(i=0;i<11;i++)

{

gotoxy(60,8+i);

cprintf(”%c“,14);

}

for(i=0;i<11;i++)

{

gotoxy(51,8+i);

cprintf(”%c“,14);

}

for(j=0;j<11;j+=10)

{

for(i=0;i<8;i++)

{

gotoxy(59-i,8+j);

cprintf(”%c“,14);

}

}

}

if(t==1)

{

for(i=0;i<11;i++)

{

gotoxy(60,8+i);

cprintf(”%c“,14);

}

}

if(t==2)

{

for(j=0;j<2;j++)

{

for(i=0;i<6;i++)

{

gotoxy(60-j*8,8+i+j*5);

cprintf(”%c“,14);

}

}

for(j=0;j<11;j+=5)

{

for(i=0;i<9;i++)

{

gotoxy(60-i,8+j);

cprintf(”%c“,14);

}

}

}

if(t==3)

{

for(i=0;i<11;i++)

{

gotoxy(60,8+i);

cprintf(”%c“,14);

}

for(j=0;j<11;j+=5)

{

for(i=0;i<8;i++)

{

gotoxy(59-i,8+j);

cprintf(”%c“,14);

}

}

}

if(t==4)

{

for(i=0;i<11;i++)

{

gotoxy(60,8+i);

cprintf(”%c“,14);

}

for(i=0;i<6;i++)

{

gotoxy(52,8+i);

cprintf(”%c“,14);

}

for(i=0;i<8;i++)

{

gotoxy(59-i,13);

cprintf(”%c“,14);

}

}

if(t==5)

{

for(j=0;j<2;j++)

{

for(i=0;i<6;i++)

{

gotoxy(52+j*8,8+i+j*5);

cprintf(”%c“,14);

}

}

for(j=0;j<11;j+=5)

{

for(i=0;i<9;i++)

{

gotoxy(60-i,8+j);

cprintf(”%c“,14);

}

}

}

if(t==6)

{

for(j=0;j<2;j++)

{

for(i=0;i<6;i++)

{

gotoxy(52+j*8,8+i+j*5);

cprintf(”%c“,14);

}

}

for(i=0;i<6;i++)

{

gotoxy(52,13+i);

cprintf(”%c“,14);

}

for(j=0;j<11;j+=5)

{

for(i=0;i<9;i++)

{

gotoxy(60-i,8+j);

cprintf(”%c“,14);

}

}

}

if(t==7)

{

for(i=0;i<11;i++)

{

gotoxy(60,8+i);

cprintf(”%c“,14);

}

for(i=0;i<8;i++)

{

gotoxy(59-i,8);

cprintf(”%c“,14);

}

}

if(t==8)

{

for(i=0;i<11;i++)

{

gotoxy(60,8+i);

cprintf(”%c“,14);

}

for(i=0;i<11;i++)

{

gotoxy(52,8+i);

cprintf(”%c“,14);

}

for(j=0;j<11;j+=5)

{

for(i=0;i<8;i++)

{

gotoxy(59-i,8+j);

cprintf(”%c“,14);

}

}

}

if(t==9)

{

for(i=0;i<11;i++)

{

gotoxy(60,8+i);

cprintf(”%c“,14);

}

for(i=0;i<6;i++)

{

gotoxy(52,8+i);

cprintf(”%c“,14);

}

for(j=0;j<2;j++)

{

for(i=0;i<8;i++)

{

gotoxy(59-i,8+j*5);

C语言中递归函数的教学方法探讨 篇7

C语言是一种语法简洁紧凑、运算符丰富、可移植性强、目标程序执行效率高的强数据类型语言, 近年来在国内得到迅速的推广应用。作为我校信息类本科教学的入门语言, C语言是汇编语言、计算机原理、单片机程序设计等其他后继课程的基础, 对整个教学过程具有重要的作用。

所有的C语言程序都由函数组成。在函数的调用中, 直接或间接地调用自身的函数称为递归函数, 相应的算法称为递归算法。在计算机算法设计与分析中, 递归算法是一类较重要的算法, 递归的使用往往使函数的定义和算法的描述简洁且易于理解。

2.递归的基本原理

对于任何可以用计算机求解的问题, 其求解难度与计算时间都与问题的规模有关。若一个规模较大的且难以直接解决的问题能够分解为k个规模较小的子问题, 并且这些子问题互相独立且与原问题相同, 那么可以通过对这些子问题进行分别求解, 然后将各个子问题的解合并, 得到原问题的解。相应的基本程序结构如下所示:

其中P代表原始问题, P1、P2…Pk是比原始问题的规模|P|更小的子问题, Merge函数将子问题的解y1、y2…yk进行合并。

假设原始问题规模为n, 子问题P1、P2…Pk的规模为n/m, 分解阈值n0=1, 且AdHoc函数求解规模为1的问题耗费1个单位时间。再设合并函数Merge的时间复杂度为f (n) , 易知上述算法的时间复杂度满足:

此时递归算法具有多项式的计算复杂度, 其阶数由子问题的划分数目k和子问题的规模n/m共同决定。

3.教学实例分析

函数的递归是C语言教学中的一个难点, 本节根据上面给出的递归程序结构, 通过一组从简单到复杂的实例, 逐步引导学生掌握递归程序编写的技巧。

实例1 (阶乘问题) :计算整数n的阶乘。

分析:该问题可使用下述递归结构进行求解:

(1) 当n=1时, 可以直接计算n! =1;

(2) 当n>1时, n!可以通过对1个小规模的子问题 (n-1) !的求解得到, 也即n! = (n-1) ! *n。

根据以上分析, 可以写出相应的程序如下:

实例2 (Hanoi塔问题) :设a、b、c是三个塔座。开始时, 在a座处自上而下、从小到大地叠放n个圆盘, 编号分别为1、2、…n, 如图1所示。现要求将a座处的所有圆盘按同样的次序堆叠到b座上, 并且要求: (1) 每次只能移动1个圆盘; (2) 任何时候都不允许将大盘压在小盘的上方。




分析:该问题可使用下述递归结构进行求解:

(1) 当n=1时, 直接将盘从a座移动到b座;

(2) 当n>1时, 将圆盘按下列方法移动 (见图2) :

1将a座上的n-1个盘移动到c座;

2将a座的第n个盘移动到b座;

3将c座上的n-1个盘移动到b座。

不难发现, 第1步和第2步是两个规模为n-1的Hanoi塔问题。

根据以上分析, 可以写出如下的程序:

实例3 (排序问题) :对n个元素的整型数组array进行排序。

分析:该问题可使用下述递归结构进行求解:

(1) 当n=1时, 直接输出排序结果;

(2) 当n>1时, 按下列方法进行排序 (见图3) :

1将array分成大小基本相同的两部分;

2对两个子数组分别进行排序;

3将两个排序后的子数组进行合并。

根据以上分析, 可以写出如下的程序:

其中参数left和right分别代表当前数组的第1个元素和最后一个元素的下标。

对于该排序算法, 子问题的数目k=2, 规模n/m = n/2。因为函数Merge的合并操作可以在线性时间内完成, 所以由 (3) 式可以得到相应的时间复杂度为

与普通的冒泡排序法O (n2) 的时间复杂度相比 , 该递归算法在计算效率方面具有较大的提升。

4.结语

在C语言教学中, 函数的递归一直是教学的重点和难点。本文首先从理论上给出递归的程序结构, 然后以该结构为指导, 通过一组程序实例, 引导学生掌握递归程序的编写技巧, 理解应用分治法解决复杂问题的思想。实践证明, 本方法在课堂教学中取得较好的效果。

摘要:函数递归基于分治法思想, 将复杂的大规模问题转化为小规模问题进行求解, 在算法设计中具有重要的理论意义和实用价值, 是C语言教学的难点。通过一组从简单到复杂的程序实例, 引导学生由浅入深地掌握递归程序的编写技巧, 在教学中取得较好的效果。

关键词:C语言,递归函数,分治法思想,教学方法

参考文献

[1]张建军, 史银龙, 刘胜厚.C语言程序设计[M].北京:海洋出版社, 2010:53-63.

[2]谭浩强.C语言程序设计[M].北京:清华大学出版社, 1999:35-38.

[3]范劲松, 黄友初.案例教学法在C语言教学中的系统应用[J].郧阳医学院学报, 2005, 24 (3) :191-192.

C语言程序设计教学方法探讨 篇8

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

1.前言

C语言是目前最流行的、功能强大的、面向对象的编程语言,在教学过程中发现,学生经常会出现听得懂、编不出程序的现象,影响学生的在专业方面的需求。笔者结合多年教学经验,认为在教学过程中要将学生分为三个不同的阶段,具体为引导入门、基础充实和实践提高三个阶段,分阶段采用不同的教学方法与手段,提高教学效果。

2.引导入门阶段

学生刚开始学习《C语言程序设计》,感觉内容抽象,学习枯燥,失去学习兴趣,因而没有学习动力。入门阶段关键在于激发学生学习C语言程序设计的兴趣,引导学生入门。有些老师恨不得学生一下子掌握自己所有的知识,不知老师的知识是多年积累下来的,学生很难一下子接受,更不用说掌握了。教师对所教内容需精心选择,以简单有趣为主,关键是能够激发学生学习兴趣。可通过多媒体课件,用一些趣味性的程序或者小游戏来调动学生的积极性,提高他们学习编程的兴趣。学生具有差异性,为了让所有学生都能产生浓厚的学习兴趣,适宜采用分层教学法。入门阶段也需注重理论联系实际,但不必要求学生编程,可考虑让学生编辑或修改程序,可以通过给出源代码的、简单的并有详细输入、输出结果的程序,让学生进行编辑并调试,利用输出结果让学生收获成功的喜悦,以轻松愉快的心态学习程序设计。在此基础上,以循序渐进的方式,逐步引导,进行一些简单的修改,让程序得到不同的结果,并解释原因,然后提出新的问题,让学生思考如何修改程序以解决新的问题,培养学生的创造性。

3.基础充实阶段

兴趣是最好的老师,学生经过入门阶段的学习产生了兴趣,就可以进入基础充实阶段了。这一阶段主要是打基础,主要是一些基本概念的讲解和语法的学习,为提高教学质量,也要求老师能够根据不同的概念灵活采用教法,常用的教学方法有类比法、对比法、归纳法和实例教学等方法。

3.1教学方法

相对抽象的概念教学时可选用类比法,例如《数据及其类型》章节中类型的概念,可以采用类比法来进行教学,把C语言中所涉及的数据类型和生活中重量单位做类比,加深概念的认识;可以采用对比法传授《顺序、分支、循环》三种程序设计,通过对比,分清三种程序设计的异同,从根本上掌握三种程序设计。按顺序执行是顺序结构程序设计的特点;分支结构程序设计的特点是需要根据条件而执行不同的操作;而循环结构程序设计中存在重复执行的某种操作。在基础阶段,选取的例题要具有代表性,针对不同的知识点选择典型例题,重点是要学生通过典型例题的掌握,理解程序思想,教师可采用归纳教学法,帮助学生归纳出某一类型程序的程序设计。《指针》是C语言的精华,主要采用实例教学法,参照生活中具体的事例将理论实例化,指针就是地址,学会如何描述地址也就掌握了指针的主要应用(以一维数组和指针为例来进行说明)。一维数组中各元素的地址利用指针法描述,讲解时可以类比第一层教学楼的教室,例如a[O]所在的地址为东1 101,则a[1]所在的地址为东1102,可以假想P为一个人,处于东1101的位置,移动到东1 102即往下走了一个教室,即下一个元素的地址值为P+I。再运用类比的教学方法讲解二维数组和指针,应用类比法可以推广到更加一般的情形。

3.2教学手段

3.2.1科学安排内容,灵活运用多媒体课件

不必所有的内容都讲到,更不必所有内容详细讲,要科学安排内容,可以安排学生在老师的指点下自学简单的内容;如函数、指针等重点内容需要借助多媒体课件详细讲解,最好能够应用一些具有代表性的实例,让学生在理解的基础上掌握概念与思想。

3.2.2成立兴趣小组,培养学生的合作能力。

对一些学习能力较好的同学,以四到五人为单位,按照自愿的原则组织起来成立兴趣小组,通过小组内同学之间互相帮助,培养学生的团队合作精神;通过小组之间相互竞争,锻炼学生的竞争意识。还可以指导兴趣小组参与实际项目的开发,或者组织兴趣小組成员参加一些软件开发竞赛,进一步提高学生的实际动手能力。

3.2.3构建网络平台,加强学生学习的能力。

如今计算机网络已经走进校园,构建网络教学资源平台,构建一个学生可以在任何时候、反复进行互动学习的平台,提供一个师生互动的教学环境。分章节将知识重点、难点放在网站上,让学生通过网络自行解决实践课上那些出现的错误。学生利用网络把每次实践课上程序编写和调试中所犯的错误进行交流、总结,加强学生学习的能力。

4.实践提高阶段

实践提高阶段,采用最适合计算机软件应用课的教学方法项目教学法。通过实施一个完整的项目工作而进行的教学活动,采取小组讨论、协作学习的方式,学生学习的过程就是一个探究的过程。在C语言程序设计课程中应用这种方法的目的在于培养学生综合运用所学知识解决实际问题的能力。它将以往以传授知识为主的传统教学理念,转变为以解决问题、完成任务为主的多维互动式的教学理念;将再现式教学转变为探究式学习,使学生处于积极的学习状态,每一位学生都能根据自己对当前问题的理解,运用共有的知识和自己特有的经验提出方案、解决问题。改变过去单纯讲理论的现状,运用项目引导的方法,学生在分组解决项目的过程中学会语法的使用,逐步过渡到独立的编写简单小程序,通过项目训练多模块程序的编写,最终实现开发一定规模的大型程序。

5.结束语

第一章 C语言程序设计 篇9

考试形式:试卷(全国统一 4月第二个星期六9月倒数第二个星期六)

笔试: 满分100分60分及格 时间:90分钟内容: 70分 C语言知识30分 公共基础

选择题:60分 前10个 2分/个 后40个 1分/个

填空题:40分 20空2分/空

上机考试:分批考试满分100分时间:90分钟

填空:3空10分/空

改错:2错误 15分/错

编程:1题40分

结构化程序设计:一个程序语句总是由顺序选择循环三种结构组成模块化程序设计:将一个大的任务分解成若干个小任务,再将小任务划分为更小的任务,直到每一个小任务都只完成一个独立的功能,每一个任务叫做一个模块,一个程序由多个模块。C语言中将模块叫做函数,所以一个C语言程序是由多个函数组成,各个函数之间是相互平等、独立的。

简单的C语言程序:

一个程序中有并且只能有一个主函数main

程序总是从主函数开始执行, 从主函数结束

函数由语句组成;语句:都用分号结束,分号是语句的标志

说明部分必须在前面,执行部分必须在后面

/*注释内容*/说明解释不是程序的一部分可有可无

注释不能嵌套:注释中不能再有注释

以#开头的叫做编译预处理命令,编译预处理命令单独占据一行

#define宏定义

定义一个字符代替某一个内容

#define N 100

在程序中将所有单独的标识符号N用100替代

C语言源程序 编译目标程序链接可执行程序

程序员C语言必背 篇10

Build-infunction内置函数

UserDefinedFunction自定义函数 prototype原型 void空值

Calledfunction被调函数 Callingfunction调用函数 return返回 scope作用域 auto自动变量

Register寄存器变量 extern外部变量

Formalparameter形式参数 Actualparameter实际参数 queue队列

Puts()把字符串数组输出到显示器 strlen()计算字符串的长度 strcpy()复制字符串 strcmp()字符串比较 strcat()字符串连接 struct定义结构 stack栈

Structuredprogramming结构化程序member成员

Assignmentoperator赋值运算符 Recursivefunction递归函数 Random随机数 power幂

Parameter参数

Parameterizedfunction参数化函数 Localvariable局部变量 Globalvariable全局变量 static静态变量

Callbyreference传值调用 Callbyvalue引用调用 String字符串

Stringliteral字符串常量 sequence序列

c语言递归程序 篇11

关键词:教学模式;任务驱动;c语言程序设计;教学实践

0引言

《C语言程序设计》作为计算机程序设计的基础,是理工类本科学生的一门必修课,尤其是C语言对计算机硬件具有很好的编程能力,使其在工科教学中的生命力越来越强。我们学院在C语言的教学上基本上还是采取传统的教学模式:按照C语言教材自身的内容上课、上机,采取笔试形式考试。这样的教学模式使得学生过分注重C的语法、语句等规则,而忽视了对编程思路的培养,学生独立分析问题和解决问题的能力没有很大的提高,给学生参加全国等级考试以至后续课程的学习留下了隐患。下面就作者在C语言教学过程中的经验谈谈想法。

1传统教学模式

传统教学模式是以教师作为课堂的中心,以广大学生为讲授对象,以课本作为讲授的主线。虽然现在教学环境大都采用多媒体大屏幕,操作方便,易于控制教学内容和节奏,能在规定课时内呈现较多信息量;但是学生往往处于被动学习状态,教学内容难以适应学生的个体差异,所有学生被迫按照老师的讲授速度进行学习,不利于培养思维能力与创造能力。

上机实践课上通常老师会事先布置几道编程题,但是学生上机目标不是很明确,问的问题多数是属于同一类问题。老师不停地在机房各处一一解答,既浪费时间,也没取到很好的效果。学生在机房没有紧迫感,甚至有些学生觉得无事可做,就会打游戏等。这种上机方式不利于培养学生的动手能力和自我解决问题的能力。

学生学不好C语言主要是因为C语言教学的重点不是放在如何解决问题上,而是把大部分的时间放在讲解语法规则和语句格式上,其后果就是学生一拿到任务后首先琢磨如何定义变量,用什么语句,而不是对问题进行合理的分析,考虑最佳算法,这样当然觉得很难而且也设计不出好的程序。学生参加全国等级考试的通过率很低也就不足为怪了。

2“任务驱动式”教学模式

采用“任务驱动式”的教学方法,知识及技能的传授以完成典型“任务”为主,有利于提高学生利用计算机进行自主学习与解决问题的能力。

2.1教学内容的改革

我们把通过全国计算机二级考试作为学习c语言的目标,针对等级考试大纲来确定教学计划以及教学内容。为此,我们从第一堂课起就强调并要求学生通过全国二级考试,既让学生明确短期学习目标,又放眼长远的努力方向,以激发学生进行自主学习的主动性。我们将教学内容分离为几个相对独立的模块,即结构模块、数组模块、指针模块、函数模块和文件模块。模块的内容要循序渐进,把握好由易到难,由简单到复杂的教学过程,否则容易使学生一开始就产生一种畏惧情绪,失去学习兴趣。然后,力求概念准确,分散难点。各模块的教学目标要十分明确,教学量适中,让学生很容易把握住教学要点,理解和掌握教学内容。

2.2设计好实验任务

实验任务的设计包括任务的提出与分解、最终达到的目标、解决问题的方法等。目的性要强,任务要明确,这样才能很好地缓解计算机基础课程实验教学中学生无事可做,玩游戏、上网聊天等现象。要培养学生限时编程的良好习惯,要求学生在规定的时间内编写和调试好给定的程序。通过这些基本功的训练,学生在具备了扎实的计算机程序设计能力后,就较容易通过全国计算机二级考试。

在程序设计语言教学中,算法是程序设计的灵魂,学生编写不出程序的首要原因是设计不出—个合适的算法。因此,在教学中应对常用的算法结合典型实例进行详细地讲解,强调算法的步骤,让学生对算法有比较深刻地了解,并鼓励学生从不同角度去思考问题,对于同一个问题的解决用多种方法来实现。这样有助于拓展学生的思维,增加学生对学习C语言的兴趣。

例如:计算n!

我们可以采用递归法:

2.3学习成绩评价方式的改革

采用“笔试+上机考试”的评价方法可以提前让学生体验全国等级考试的过程。同时,两种形式考试都通过才算这门课程通过,也能促使学生在学习c语言的基本知识之外加强编程实践,让学生学到c语言的语法规则的同时也掌握了程序设计的方法。

3结束语

C语言程序设计教学初探 篇12

1 激发学生学习兴趣

1.1 明确学习C语言的重要性

在当今市场经济中,大学生学习一门新课程的目的很明确:“我学了以后有什么用?”教师在课前不妨花点时间讲解一下学习C语言的重要性。

(1)市场上对软件工程师或者既懂专业又懂计算机的复合人才的需求缺口很大,而C语言作为一种通用的程序设计语言。学好它,必然为未来的就业添加了一个重要的法码。

(2)C语言是其它面向对象语言以及网络编程的基础。面向对象编程语言如VB、VC++等虽然摆脱了面向过程语言的许多细节,使设计程序轻松很多,但用户对其对象化的事件仍需编写代码来驱动实现。这些代码里面仍包含结构化程序设计的顺序、选择、循环三种基本结构。因此C语言的编程思想是面向对象语言程序设计的理论基础。另外,随着Web网页技术的不断普及和发展,人们制作漂亮的、个性化的Web网页并不是件难事,但深层次的网络技术开发仍必须掌握一定的编程工具,如CGI程序、ASP脚本语言、JAVA SCR IPT等等。实际上,这些流行的网络编程语言很多混合了C语言的语法,这类语言在数据、运算符、函数的调用、程序语句的书写、循环的控制上都极为相似。

(3)C语言编程有助于训练和培养学生的计算机思维,C语言的学习不仅是一门纯粹的技术或技能,而且是一种思维训练的工具,有助于锻炼人们的思维,就像数学对人的思维起作用一样,使人的思维更精确、更细致。

1.2 由浅入深教学

相对于《应用基础》等计算机基础课程中比较直观的基本操作和基础概念,《C程序设计》则注重由设计算法到书写程序并进行调试的整个过程,因而显得抽象、复杂,这也是大多数学生抱怨程序设计太难、太深奥、不好学的主要原因。因此建议,在第一次的上课时间就讲解C语言的上机方法,然后给出几个简单的并有输出结果的程序源代码,接下来就可以定为实验课,让每个学生编辑并调试。当他们“编”的程序成功地输出结果的时候,学生对程序设计的兴趣自然就产生了。在此基础上,再进行一些简单的修改,让程序得到不同的结果,并解释原因,然后提出新的问题,让学生思考如何修改程序以解决新的问题。

例:编写程序,计算t的值。t=1+1/2+1/3+1/4+1/5

显然,结果是不精确的,因为在1/2、1/3、1/4、1/5在C中结果都是0。为了得到更加精确的计算结果,必须用浮点数代替上面的整型数。

修改后的程序:

学生对知识的运用是从简单入手,逐层深入,前后连贯。选择合适案例与作业对于提高学生学习的自觉性,活跃课堂氛围起到了积极的促进作用。

1.3 展示C语言程序设计的魅力

1.3.1 可以在课堂的案例中加入小游戏及图形设计内容

在讲解每一新的知识体系前,运用即将学到的知识设计一个吸引学生的小游戏或动画。课前首先展示动画,力求使学生课前产生“我必须学会制作这个游戏或动画”的欲望。比如,在讲解循环结构之前,可以课堂上给学生展示了一些有规则的图形(如平行四边形,菱形等图案),学生会觉得很有趣,上机的积极性明显提高。

1.3.2 可选择一些经典的数学问题作为课堂案例

比如,利用Fibonacci数列解决的求兔子总数的古典数学问题,用它作实例,既教了算法,又教了同学们如何利用C语言编程解决实际问题。这些学以致用的实例能大大激发学生对科学知识的热爱与学习C语言的热情。

2 充分发挥多媒体的优势

C语言程序设计的多媒体课件具有以下优点:

(1)能够把抽象的过程以真实的、直观的方式展现出来,把动态的图象和学生的抽象思维活动密切地结合起来,教师可以重点突出的讲解程序算法,让学生们在观看或者参与动画的过程中加深理解。

(2)利用几何图形、色彩变化及闪烁等效果,再现程序执行过程的动态及变化过程,例如C语言课程中的杨辉三角形问题,还有许多排序和比较的程序,能够通过动画把完整的过程演示出来,让学生在情境中学习。

(3)灵活地控制课件的演示过程。教师演示课件时的速度、次数以及前后顺序等都可以根据教学需要灵活地控制和改变,使得教师易于把握教学的进度。如C语言课程中冒泡排序可以根据学生的理解和接受速度反复演示。

教师可以利用多媒体教学发挥一般CAI课件的普遍优势,使教材内容形象化,充分反映程序设计的动态执行过程,提高课堂教学的效率等,但是C语言使用多媒体教学的意义远不止这些。作为一门计算机课程,使用多媒体教学能直接把Turbo C编译、调试、运行环境真实地展示给学生。上C语言课的教师都会有这样的体会:虽然在课堂上把重点内容、易犯错误的知识点讲解得很透彻,但学生实际操作时,同样的错误还是照犯不误,也不知如何解决。比如,在使用scanf函数时,变量名前总忘加取地址运算符“&”,语句结束时遗漏分号等。教师上课时,不妨有意设计存在这样错误的小程序,并放在Turbo C环境下运行,先让学生思考,再提问回答,这样得到的知识和感受远比老师在课堂上通过教材而传授的知识和感受来得直观和深刻得多。并且在学生刚开始上机编程时,要让学生掌握常见错误的提示。比如:“statement missing”(语句中丢失了分号),“function call missing)”(调用函数时丢失了右圆括号),“possible use of‘a’before definition”(a变量在使用前未定义)等。教师上课时用到的实例,也应有意出现这样的错误,在Turbo C中编译,把错误提示展示给学生,过不了多久,学生对这些常见错误也能得心应手的处理了,从而避免学生单独上机时,在一大堆错误提示前茫然不知所措。

3 加强实践环节巩固学生的理论学习水平

3.1 注重学生的实践环节

学习是学生通过自主活动对知识意义的建构过程,不能简单地由教师直接传授给学生,C语言本身是一门实践性很强的课程,学生只有自己动手、动脑,才能真正掌握并运用知识。讲课方式如果一味是老师讲、学生听,学生是被动的知识接受者的话,学生对变量、语法、程序结构等的理解则是抽象的、机械的、片面的和孤立的。教师在课堂上应采取多种方式让学生实践,加强理解课堂中讲授的知识。首先,教师在讲授过程中可穿插一些提问,或者在讲解一个新知识点后,让学生当堂编制小程序,然后在Trubo C环境中编译,学生根据错误提示改正,老师这时的角色是引导、提示,直到程序完全运行正确为止。另外,课堂上学生编制的程序放在Turbo C中检验时,编译、调试应尽量多让学生自己完成,这有利于学生动手能力的提高。同时,老师对学生取得的进步,哪怕是很小的一点进步,都要及时表扬,鼓励他们大胆的把自己设计的程序拿到实践中去检验,勇于尝试、勇于改错。学生经常受到激励、鼓舞肯定会产生愉悦性的心理体验,从而有助于激发学习兴趣。学生当堂实践,不仅能巩固新知识、活跃课堂气氛,也让学生对C语言的学习时时有一根绷紧的弦,不敢对C语言放松。

3.2 要求养成良好的程序书写习惯

为了便于程序的阅读、理解和维护,学生在一开始就要求养成良好的程序书写习惯。

(1)虽然C程序中,一行可以写多条语句,一条语句可以分写在多行,但为清晰起见,一般一条语句单独占一行。

(2)用{}括起来的部分,通常表示了程序的某一层次结构。{}一般与该结构语句的第一个字母对齐,并单独占一行。

(3)低一层次的语句或说明可比高层次的语句或说明缩进若干格后书写,以便使层次更加清晰,增加程序的可读性。

(4)标识符与关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,可以加一个空格来增加清晰度。

3.3 注重编程算法的积累

在程序设计语言教学中,学生不会编写程序的首要原因是设计不出一个合适的算法。因此,在教学中,为了提高学生的程序设计能力,应注意对算法的积累,举例应以典型例题为主,强调算法的步骤。如穷举法有:求出2-100之间的所有素数,迭代法有:计算n的阶乘等,又如排序、查找、插入、删除等相应的算法。整个教学过程中把解题思路、方法和步骤(即“算法”)当作授课的重点,从而让学生明白如何分析并解决实际问题,逐渐培养学生进行程序设计的正确思维模式。

解决一个问题可采用多种方法、途径,让学生比较各种途径的优势和劣势,并适合于什么情况,引导学生发散性思维和养成周密地考虑问题的习惯。如编程求出Fibonacci数列的前40个数,可用迭代法,使用循环语句和基本数据类型进行处理,也可用数组和循环语句处理。

3.4 引导学生利用网络资源

互联网上有许多比较好的C语言程序设计网站,是学习者很好的学习与交流平台。积极地参与其中的活动,既可以获取学习资源,还可以培养团队精神,如http://www.csdn.net(中国程序员大本营),http://msdn.microsoft.com(微软MSDN)等,学生可以通过这些网络资源,获取更多的学习资源。

摘要:提高C语言课程的教学质量,应让学生明确学习目的,激发学习兴趣,充分利用多媒体教学,强调实践操作,注重积累典型算法。

关键词:学习兴趣,多媒体,实践操作能力

参考文献

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

[2]谭浩强,徐士良.程序设计与开发技术[M].北京:清华大学出版社,2002.

[3]徐士良.计算机软件技术基础[M].北京:清华大学出版社,2002.

[3]曾立梅.关于C语言教学方法的探讨[J].计算机教育,2004,(6):67-68.

C语言程序设计专业简历 篇13

C语言程序设计专业简历,应届毕业大学生在求职中个人简历是十分重要一部分希望求职者相关了解程序设计基础求职简历模板。在求职中要怎样写一份出色简历?请阅读以下c语言程序设计开发求职信范文参考!

目前所在: 佛山 年 龄: 22

户口所在: 梅州 国 籍: 中国

婚姻状况: 未婚 民 族: 汉族

诚信徽章: 未申请 身 高: 176 cm

人才测评: 未测评 体 重: 170 kg

人才类型:应届毕业生

应聘职位: 计算机软件

工作年限: 0 职 称: 无职称

求职类型: 实习可到职日期: 随时

月薪要求: --3500 希望工作地区: 佛山,广州,深圳

工作经历

中元电子有限企业公司 起止年月:-02 ~ 2012-03

公司性质: 民营企业 所属行业:通信/电信/网络设备

担任职位: 实习生

工作描述: 该公司以生产电线为主,本人曾于此公司体验流水线工作,且参加了在此期间由公司技术部门与品质部门所开展的各为期一星期的培训讲课

毕业院校: 佛山科技学院

最高学历: 本科 获得学位: 毕业日期: -01

专 业 一: 电子信息工程 专 业 二:

起始年月 终止年月 学校(机构) 所学专业 获得证书 证书编号

语言能力:本文信息来源于大学生个人简历网,请注明!

外语: 英语 较差 粤语水平: 一般

其它外语能力:

国语水平: 良好

工作能力及其他专长

主修课程:C语言程序设计,数据结构,模拟电路,数字电路,通信原理。信号与系统,

数字信号处理,高频电路,51单片机基础

自修科目:C++, Windows程序设计(API),MFC编程,离散数学,计算机组成原理.

微机原理及接口 技术 汇编语言,操作系统精髓与设计原理

计算机能力: 有一定的汇编编程经验和较为熟练的C语言编程基础能力,编程经验与分析能力、及Windows界面编程的经验基础,能熟练运用VC6.0的`语言开发环境。

个人自传

严谨务实,以诚待人,做事踏实,稳重,专注,具有较强的责任心,自主好学,性情温和,易与人相处,吃苦耐劳,有较强学习能力, 善于听取他人建议,敢于面对挑战,具有良好的适应性和做事情认真负责。

C语言程序设计入门经典例题 篇14

个人感觉这个程序最不好的地方是,不管回答正确还是回答错误,程都会立即结束,所以我用了do„while实现一个回答错误之后获得再次回答机会的循环,则程序修改如下: #include void main(){ int a,b,c;printf(“请输入一个加数:n”);scanf(“%d”,&a);printf(“请输入一个被加数:n”);scanf(“%d”,&b);do { printf(“请回答:a+b=”);scanf(“%d”,&c);if(a+b!=c)printf(“请再想一想n”);} while(a+b==c)printf(“回答正确!”);}

2、判闰年程序:判断某一年是否闰年? 要求:程序首先提示用户从键盘输入4位数年份,程序能显示“XXXX年是闰年”或“XXXX年不闰年”的输出信息。

算法:year 是闰年,即year能被4整除但不能被100整除,或 year 能被 400 整除。其对应的C逻辑表达式为:(year % 4 = = 0 && year % 100!= 0)||(year % 400 = = 0)或:(!(year % 4)&& year % 100)||!(year % 400)程序中可设置1个变量leap来代表是否闰年的信息,闰年:leap=1;不闰年:leap=0。#include void main()int year;printf(“请输入4位数年份:”);scanf(“%d”,&year);if(year%4==0&&year%100!=0||year%400==0)//闰年就是能被4整除但不能被100整除及能被400整除的 printf(“%d是闰年”,year); else printf(“%d不是闰年”,year);}

3、三角形九九表程序:要求选择C实现循环的4种方法(if+go, for语句,while语句,do…while语句)中的一种,比如,最好选择for语句来实现如下形式的“九九表”输出。

#include void main()int a,b,c;for(a=1;a<=9;a++)//纵列表数每循环完一次换行 {for(b=1;b<=9;b++)if(b<=a)printf(“ %d”,a*b);printf(“n”);}}

4、平面等腰三角形: 要求利用C的for循环实现如下平面图形输出。

如图,等腰三角形有6层,则 #include viod main()int a,b,c;//a,b,c分别是层数变量,变量,*变量 for(a=1;a<=6;a++){for(b=6-a;b>=1;b--)printf(“ ”);for(c=1;c<=2*a-1;c++)printf(“*”);printf(“n”);}}

5、平面倒立等腰三角形: 要求利用C的for循环实现如下平面图形输出。

#include viod main()int a,b,c;//a,b,c分别是层数变量,变量,*变量 for(a=6;a>=1;a--){for(b=6-a;b>=1;b++)printf(“ ”);for(c=11;c<=2*a-1;c--)printf(“*”)printf(“n”);}}

6、判素数:要求由用户从键盘输入任一正整数m, 程序输出m是否素数的信息。#include viod main()int m,n;printf(“请输入任一正整数m:”);scanf(“%d”,&m);If(m==0||m==1);printf(“%d不是素数”,m);//0和1既不是素数也不是合数 for(n=2;n

7、计算:1!+2!+3!+...+9!

#include void main(){ int i;long p=1;double s=0.0;for(i=1;i<=9;i++){p*=i;S+=p;} printf(“1!+2!+3!+„+9!=%fn”,s);}

8、计算:1!+3!+5!+...+15!

#include void main()int i;long p=1;double s=0.0;for(i=1;i<=15;i++){p*=i;if(i%2!=0)s+=p;} printf(“1!+3!+5!+„15!=%tn”,s);}

9、计算:2!+4!+6!+...+16!

#include void main()int i;long p=1;double s=0.0;for(i=1;i<=16;i++){p*=i;if(i%2==0)s=s+p;} printf(“2!+4!+6!+„16!=%tn”,s);}

10、利用“比较交换法”对由用户从键盘输入的任意10个整数升序排序。要求:利用C的数组和循环,程序能分别输出排序前后的数组。#include void main(){ int i,s,a[10],t;//数组下标变量i printf(“请输入10个整数:n”);for(i=0;i<=9;i++)scanf(“%d”,&a[i]);//将10个整数分别存入该数组的下标0到9这10个位置中去 for(i=0;i<9;i++){for(s=i+1;s<=9;s++)//a[s]为a[i]的后一位 if(a[i]>a[s]){t=a[i];a[i]=a[s];a[s]=t;}//将数组中的数两两逐个比较换位,实现升序 printf(“排序后的数组为:n”);for(i=0;i<=9;i++)printf(“%d ”,a[i]);}

11、统计:由用户从键盘输入任意10个数,统计其中最大数,最小数及平均值。

#include void main(){ int i,s,a[10],t,sum;double n;printf(“输入任意10个整数:n”);for(i=0;i<=9;i++)scanf(“%d ”,&a[i]);for(i=0;i<=9;i++)printf(“%d ”,a[i]);for(i=0;i<=9;i++){for(s=i+1;s<9;s++)if(a[i]>a[s]){t=a[i];a[i]=a[s];a[s]=t;}//实现10数升序排列 for(i=0,1<=9,i++)sum+=a[i];n=sum/10;printf(“10个数的最大是:%dn 10个数的最小是:%dn 10个数的平均是:%tn”,a[9],a[0],n);}

上一篇:某教学楼施工组织设计下一篇:钟点工合同书