C语言学习总结

2024-10-19

C语言学习总结(精选8篇)

C语言学习总结 篇1

(1)两个if并列的时候,if函数是有先后顺序的。

如 iMax = a;

if(b > iMax)

{

iMax = b;

}

if(c > iMax)

{

iMax = c;

}

printf(“三个数的最大值是:%dn”,iMax);

(2)

printf(“请输入机票价格:”);

scanf(“%f”,&fTicketPrice);

(3)%5.2f的意思是以长度为5,小数点后面2位的形式输出。

(4)闰年判断((iYear % 400 == 0)||(iYear % 4 == 0 && iYear % 100!= 0))

C语言学习总结 篇2

数据排序是计算机编程过程中经常会遇到的一个问题,同样C语言中关于排序问题的算法也有多种。本文主要对一些常见的排序算法进行一个归纳总结,方便初学者对这一问题有一个全面的了解。

所谓数据排序,就是将一组无序的数据,按照其中的某个关键字的大小,递增或递减的排列成有序的数据序列。在C语言的学习过程当中,经常会碰到关于整数、浮点数、字符以及字符串的排序问题。一般的排序方法有:冒泡排序、选择排序、插入排序、shel(希尔)排序、快速排序、堆排序等。下面就通过具体的例子,对这些排序方法的基本思想、执行过程、算法代码进行一个总结分析。

2 各种排序算法的分析

2.1 冒泡排序

冒泡排序法是C语言当中最为常见和通用的一种排序方法。

2.1.1 基本思想

在待排序的一组数中,相邻的两个数两两比较后发现它们的顺序与排序要求相反时,就将它们互换(即:如果从小到大排序,则两两比较时,让较大的数往下沉,较小数往上冒)。如此下去,直至最终完成排序。冒泡排序过程中,如果对N个数进行排序的话,需要进行比较的轮数是N-1轮,每轮进行N-1-i次。由于在排序过程中,它的工作看起来像冒泡,所以称作冒泡排序。

2.1.2 算法代码

例:对数组aa[5]={8,5,10,7,3}的元素从小到大进行排序。

该例子用冒泡法实现的代码段如下:

2.1.3 执行过程

第一轮:8,5,10,7,3->5,8,10,7,3->5,8,7,10,3->5,8,7,3,10(交换3次)

第二轮:5,8,7,3,10->5,7,8,3,10->5,7,3,8,10(交换2次)

第三轮:5,7,3,8,10->5,3,7,8,10(交换1次)

第四轮:5,3,7,8,10->3,5,7,8,10(交换1次)

2.1.4 分析

在程序执行过程中,关系到算法性能的主要因素是循环和交换的次数,次数越多,性能越差。

对上面这个例子中包含5个元素的数组采用冒泡法进行排序,总共进行交换的次数是3+2+1+1=7次。冒泡法的特点是原理简单,但其缺点是交换次数多、效率低。

2.2 选择排序

2.2.1 基本思想

在待排序的一组数中,每轮将首数与后数进行两两比较,按大小进行交换,选出待排序数组中最小(或最大)的一个元素,放在已经排好序的数列的最后。如此下去,直至最终完成排序。冒泡排序过程中,如果对N个数进行排序的话,需要进行比较的轮数是N-1次,每轮从i+1开始到N-1为止。

2.2.2 算法代码

同上例:对数组aa[5]={8,5,10,7,3}的元素从小到大进行排序。

2.2.3 执行过程

第一轮:8,5,10,7,3->3,5,10,7,8(交换1次)

第二轮:3,5,10,7,8(交换0次)

第三轮:3,5,10,7,8->3,5,7,10,8(交换1次)

第四轮:3,5,7,10,8->3,5,7,8,10(交换1次)

2.2.4 分析

对上面这个例子中包含5个元素的数组采用冒泡法进行排序,总共进行交换的次数是1+0+1+1=3次。选择法的循环过程与冒泡法一致,它定义了作为记号的变量k赋初值为i,依次把a[k]同后面元素比较,若有元素比a[k]小,则将该元素下标赋值给k,使得变量k当中存放的永远是最小元素的下标。最后再a[k]与a[i]交换,这样就比冒泡法省下许多无用的交换,提高了效率。

2.3 直接插入排序

2.3.1 基本思想

在待排序的一组数中,先比较前两个数,按大小顺序排列好,然后每次从后面的无序数中取出第一个元素,把它插入到前面有序数的合适位置,使有序数组仍然有序,把数组元素插完也就完成了排序。

2.3.2 算法代码

同上例:对数组aa[5]={8,5,10,7,3}的元素从小到大进行排序。

2.3.3 执行过程

第一轮:8,5,10,7,3->5,8,10,7,3(交换1次)

第二轮:5,8,10,7,3(交换0次)

第三轮:5,8,10,7,3->5,7,8,10,3(交换1次)

第四轮:5,7,8,10,3->3,5,7,8,10(交换1次)

2.3.4 分析

对上面这个例子中包含5个元素的数组采用冒泡法进行排序,总共进行交换的次数是1+0+1+1=3次。直接插入排序的特点是算法简单、容易实现。它是采用逐步增加有序元素想法,直至所有元素排列完成。如果待排序数组元素不是特别多的时候,该算法的效率快是较佳的排序方法。但对于大数组,这种算法比较慢就不大适用了。

2.4 shell排序

2.4.1 基本思想

希尔算法的本质是缩小增量排序,是对直接插入排序算法的改进。先取一个小于N的整数p作为第一个增量,将待排序的一组数按增量p分割成多个组,对每个组分别进行一趟直接插入排序。然后缩小增量p的值(一般取其一半)再排序,直到p=1时完成排序。

2.4.2 算法代码

同上例:对数组aa[5]={8,5,10,7,3}的元素从小到大进行排序。

2.4.3 执行过程

第一轮:8,5,10,7,3->8,5,3,7,10(交换1次)

第二轮:8,5,3,7,10->3,5,8,7,10(交换1次)

第三轮:3,5,8,7,10->3,5,7,8,10(交换1次)

2.4.4 分析

对上面这个例子中包含5个元素的数组采用冒泡法进行排序,总共进行交换的次数是1+1+1=3次。Shell排序的优点是不管待排序数组长度多长,在分组增量p的切割下每个子组的规模都不会太大,然后用直接插入排序效率较高。后来增量p的逐渐递减,分组数逐渐减少,而各组的记录数目逐渐增多,但由于排过序,整个数组的有序性越来越清晰,所以排序的效率依然较高。所以,希尔排序在效率上比直接插人排序有很大的改进。

2.4.5 快速排序

2.4.5. 1 基本思想

在待排序的一组数中,先选择其中一个元素作为分隔点(一般选取数组中间的那个元素),然后把比该元素小的数据放在左边,大的放在右边。再按此方法对两边的数据分别再快速排序(也就是递归调用),直到整个数组有序为止。

2.4.5. 2 算法代码

同上例:对数组aa[5]={8,5,10,7,3}的元素从小到大进行排序。

2.4.5. 3 执行过程

第一轮:8,5,10,7,3->8,5,3,7,10(交换1次)

第二轮:8,5,3,7,10->3,5,8,7,10(交换1次)

第三轮:3,5,8,7,10->3,5,7,8,10(交换1次)

2.4.5. 4 分析

对上面这个例子中包含5个元素的数组采用冒泡法进行排序,总共进行交换的次数是1+1+1=3次。快速排序是对冒泡排序的一种本质改进,其优点是运算速度快,数据移动少。缺点是算法稍复杂。快速排序法中关键是对三个参数的设定,即待排序数组元素的起始下标、最后一个元素下标以及分隔元素下标的确定。

3 总结

除了上述分析的五种常见的排序方法外,还有堆排序、归并排序等。在选择排序算法的时候,要根据待排元素数目N的大小以及元素本身的初始状态来做最佳的抉择。如果N数较小,则可采取直接插入排序或选择排序;若数组本身初始状态局部或整体有序时,则可采取冒泡排序或插入排序;若N数较大,则可采取快速排序、堆排序或归并排序。

参考文献

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

[2]谭浩强,张基温,唐永炎.C程序设计教程[M].北京:高等教育出版社,1992.

C语言学习总结 篇3

关键词:C语言;编程技巧;应用

中图分类号:G642 文献标识码:B 文章编号:1002-7661(2014)24-002-01

C语言属于一种程序设计类语言,其使用在数据处理方面有突出作用,在很多的学习工作领域都有大规模的应用,像是软件开发、科研建设等都离不开C语言的利用。C语言编程,就是用C语言进行相应计算机代码的编写,C语言的学习,需要掌握一定的技巧,不然没有头绪的学习是得不到良好学习效果的,掌握了C语言的学习技巧,才能够更好的促进C语言的学习[1]。

一、C语言与C语言的优势

当下世界上使用范围最广,流行度最高的计算机编程语言便是C语言,要想良好的学习和使用C语言,必须加深对C语言的了解。C语言发源于上个世纪60年代,成熟在70年代,最近半个世纪的使用过程中,C语言表现了如下几种优势:第一,C语言简洁紧凑,使用方式灵活方便,且语法运用宽松不受限制,书写方式自由随意,结合了高级编程语言的结构性与实用性的特点,组成了一种全新式的有强大使用功能的编程语言;第二,C语言有广泛的应用层面,且可植性强,C语言在各种系统中都能够被兼容使用;第三,C语言的运算符丰富多样,各种数据结构类型的使用,除了C语言可以将各种复杂的数据运算完成外,还具有强大的图形功能;第四,结构式的语言特点分割了代码和数据,其中的程序表现层次条理清楚,后期的使用和维护工作便利,使用C语言可以访问物理地址[2]。从中可知,C语言具有强大的功能,因此在信息技术的领域中,C语言所占据的地位是非常高的。

二、C语言学习难度大的原因

因为C语言所具备的各种强大功能,因此人们对其的关注程度也越来越高,想要学会并且全面掌握C语言技术的人也越来越多。可是大部分在刚刚接触C语言的时候,觉得C语言过于枯燥乏味,学习了一段时间后都没有掌握到多少知识,也没有一个清楚全面的认识对于C语言,觉得十分的茫然。出现这种情况的原因还是因为C语言是一种高级语言,这种语言和面向对象的语言之间存在较大的差别,在C语言的学习过程中,学习者难以从中看到形象的画面,只能够在编程程序成功后,经过调试才可以看到效果。在编程的过程中,只要出现一点粗心错误,就会让整个编程无法成功调试,出现一些错误的现象,除此之外,C语言的使用过程中,包含了大量的算法与数据组成结构,这些没有任何的技巧,就是要死记硬背,所以很多学习者在遇到这些枯燥晦涩的问题时,就会丧失学习兴趣,降低学习效率和学习质量。

三、C语言编程技巧的应用

1、用空间换时间

例如对字符串进行赋值,方法有以下几种:

(1)基础方法:

#define LEN 32

Char string I[LEN];

memset(string 1,0,LEN);

ctrcpy(string 1,“this is a example”) ;

(2)方法2:

const char string2[LEN]=“this is a example”;

char*cp;

cp=string2;

从这个案例中可以发现,方法(1)与方法(2)在电脑上的执行效率是不一样的,第一种方法必须使用两个字符函数才可以完成,而第二种方法直接使用指针就可以完成了。但是第二种方法相比第一种方法灵活性欠缺,如果这个字符串有不断变化的要求,那么第一种方法就有很大的使用优势了,第二种方法要占用较大的内存,但是效率比第一种更高[3]。

2、位运算掌握

在利用位运算的时候,能够让代码变得更加的简洁,提升运算效率,让问题得到顺利解决。在所有的计算机程序之中,最小的数据单位就是位,无特殊情况的话,所有的数据运算和操作都可以使用“位运算”方式完成,从这里就就可以看出,在编程语言之中,“位”有多么重要了。“位”使用在C语言的运算过程中,可以提升工作效率,顺利的将更多难度大的问题解决。

3、C语言特有函数掌握

很多时候进行编程,都需要使用C语言的特有函数,函数不是一种数据,而是一种功能,每一个函数都能够执行一定的功能建设,而相对应的函数名称中也将函数的功能反映了出来。开展函数定义的时候,要求操作者包含名字、参数名、类型和函数返回类型的数据,编译过程中,数据库系统是之前被定义好了的,使用过程中只要通过#include这项指令,把各种相关的头文件包含在本文件当中就可以了。

但是不管在C语言编程过程中使用怎样的技巧,还是需要做到具体问题具体分析,以上各种技巧使用起来因人而异,整体是能够提升编程效率,在学习过程中使用会获得一定的成效,而降低学习的枯燥感,拓宽C语言的使用范围。

C语言的学习过程中,每一位学习者都应该对C语言的特性有充分的了解,学习并且掌握每一种编程技巧,学习好了C语言的编程技巧,可以帮助学生提升C语言的学习兴趣,让学生的学习目的性更强,提升学生的C语言学习效率与学习质量。

参考文献:

[1] 余 勍.王 捷.浅谈C语言编程技巧在C语言学习中的应用[J].信息通信,2013,07:108.

[2] 赵 黎.范君君.C语言编程技巧在C语言学习中的应用研究[J]. 信息与电脑(理论版),2014,09:252.

C语言总结 篇4

--------13软件工程一班郭笑笑

------------老师:

经过一学期的对c语言这门课程学习,我对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到很棘手,因为私下练习的时间太短了。

上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。

学习c程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间,为此,结合课堂讲授的内容和进度,老师为我们安排了多次上机实验。课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,还可以有以下几方面的好处:

1.加深对课堂讲授内容的理解。

2.熟悉程序开发环境、学习计算机系统的操作方法。

3.学习上机调试程序等等。我对程序调试还没有完全掌握,不能很快找出程序的错误。

因为课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,死记硬背也不容易记住。还有一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,不能很好地利用学到的知识编写c语言程序,解决实际问题。总的来说在这半年的时间里,我学到了许多,但是也有很多内容是不会的。我觉得我在这一学期中掌握的内容有(收获):

1.printf(“%*sn”,M,“字符串”+N)的用法说明 2.scanf函数的用法和说明

3.自增自减:n++、n--、++n、--n 4.进制的转换:二进制、八进制、十进制、十六进制

5.变量在内在中的存放与转换.6.3.字符-----‘’的作用:与一些字母组成转义字符,与数字组成代表八进制数.另外说明一下r,其作用是将当前位置移到本行开头,后面再输入字符时,原有的字符将会被覆盖。

7.5.逗号运算符.8..局部变量.全局变量 9..预编译处理命令

10.#define:宏定义只是在编译前对代码作简单的字符串替换,不会考虑任何错误.宏定义不是语句,后面不要加“;”.似懂非懂(不能很好地应用): 1.退出过程.(1)continue :用于结束某次循环继续下一循环.(2)break: 用于结束循环或结束switch语句.(3)return: 用于结束某函数.(4)exit: 用于结束某一程 2.void的说明.Void代表空类型,在定义指针变量或函数时可以定义为void型,定义指针变量后可以在用的时候通过强制类型转换使其指向任何类型的数据.定义函数时,只是说明不能有返回值.如果函数中出现return就会报错.3.指针:(1).指针的加减法:指针的加减法不是作简单的加减,而是以指针变量所占的字节数为单位进行加减.(2).数组名是指针常量,不能改变其值,比如数组a[ ],如果进行a++;就会报错

(3).虽然指针变量中存放的地址是整型数据,但不能将整型数据直接赋值给指针变量,应该这样(假如p为int *型),p=(int *)1000;但禁用些法,因为你不知道1000这个单元有没有被其它单元占用,后果不可预料,同样也不能将一个指针变量的值直接赋给整形变量,也要进行强制类型转换.(4)定义指针后,在使用之前一定要先给它赋初值,切记

(5).二维数组中指针问题(int a[3] [4]),数组名a是一个指向行的指针(指向数组),而在其前面加一个 * ,*a就是指向列的指针(指向无素).a与*都是指向a[0][0];但a+1(行指针)指向a[1][0];而*a+1(列指针,和*(a+0)+1一样)却指向a[0][1];同样在a+1前加一个*就又变成列指针了,*(a+1)+2就指向a[1][2].(6),复杂类型的说明:从变量名处起,根据运算符优先级结合,一步一步分析,下面以一个比较复杂的类型(int *(*p(int))[ ])为例: 第一步,p先与()结合,说明是一个函数,第二步,()内有一个int,说明函数有一个形参为int型,第三步与*结合,说明返回的是一个指针变量,第四步与[ ]结合,说明该指针变量指向数组,第五步再与*结合,说明数组中的元素为指针型,第六步说明数组中的指针元素的类型为int型,完毕,所以这是一个返回一个由整型指针变量组成的数组的指针变量的函数。4.结构体的应用。完全不会的:

C语言期末总结 篇5

例10.4 指向结构体数组的指针的应用

#include struct student { int num;char name[20];char sex;int age;};struct student stu[3]={{10101,″Li Lin″,′M′,18},{10102,″Zhang Fun″,′M′,19},{10104,″WangMing″,′F′,20}};void main(){ struct student *p;

printf(″No.Name

sex

agen″);

for(p=stu;p<stu+3;p++)

printf(″%5d %-20s %2c %4dn″,p->num,p->name,p->sex,p->age);

} 运行结果:

No.Name

sex

age

10101

LiLin

1010Zhang Fun M

10104

WangMing F

例10.5 有一个结构体变量stu,内含学生学号、姓名和3门课程的成绩。要求在main函数中赋予值,在另一函数print中将它们输出。今用结构体变量作函数参数。#include #include #define FORMAT ″%dn%sn%fn%fn%fn″ struct student { int num;

char name[20];

float score[3];};

#include #include #define FORMAT ″%dn%sn%fn%fn%fn″ struct student { int num;

char name[20];

float score[3];};

void main(){ void print(struct student);

struct student stu;

stu.num=12345;

strcpy(stu.name,″LiLin″);

stu.score[0]=67.5;

stu.score[1]=89;

stu.score[2]=78.6;

print(stu);} void print(struct student stu){ printf(FORMAT,stu.num,stu.name,stu.score[0],stu.score[1],stu.score[2]);

printf(″n″);} 运行结果: 12345 Li Li 67.500000 89.000000 78.599998 例10.6 将上题改用指向结构体变量的指针作参数。#include struct student { int num;

char name[20];

float score[3];}stu={12345, ″LiLi″,67.5,89,78.6};void main(){ void print(struct student *);

print(&stu);}

void print(struct student *p){ printf(FORMAT,p->num,p->name,p->score[0],p->score[1],p->score[2]);

printf(″\n″); } 运行结果: 12345 Li Li 67.500000 89.000000 78.599998  有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课程总成绩、平均分数)。 10.1:# include

struct student 

{ char num[6];

char name[8];

int score[3];

float avr;

}stu[10];

 main()

{ int i,j,max=0,maxi=0,sum=0;

float average=0;

for(i=0;i<10;i++)

{ scanf(“%s%s”,stu[i].num,stu[i].name);

for(j=0;j<3;j++)

scanf(“%d”,&stu[i].score[j]);

}

 for(i=0;i<10;i++)

{ sum=0;

for(j=0;j<3;j++)

sum+=stu[i].score[j];

stu[i].avr=sum/3.0;

average+=stu[i].avr;

if(sum>max){ max=sum;maxi=i;} 

} 

average/=10;

printf(“average=%6.2fn”,average);

printf(“The highest is:%s,%s,%d,%f”,stu[maxi].num,stu[maxi].name,max,stu[maxi].avr); }

指针

例9.4 输入a、b、c3个整数,按大小顺序输出。#include void main()

{void exchange(int *q1,int *q2,int *q3);int a,b,c,*p1,*p2,*p3;

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

p1=&a;p2=&b;p3=&c;

exchange(p1,p2,p3);

printf(″%d,%d,%d\n″,a,b,c);

void exchange(int *q1,int *q2,int *q3){ void swap(int *pt1,int *pt2);

if(*q1<*q2)swap(q1,q2);

if(*q1<*q3)swap(q1,q3);

if(*q2<*q3)swap(q2,q3);

void swap(int *pt1,int *pt2)

{int temp;

temp=*pt1;

*pt1=*pt2;

*pt2=temp;

score 3

运行情况如下:

9,0,10↙ 10,9,0

例9.10:有一个班,3个学生,各学4门课,计算总平均分数以及第n个学生的成绩。这个题目是很简单的。只是为了说明用指向数组的指针作函数参数而举的例子。用函数average求总平均成绩,用函数search找出并输出第i个学生的成绩。#include void main()

{ void average(float *p,int n);

void search(float(*p)[4],int n);

float score[3][4]={{65,67,70,60},average(*score,12); /*求12个分数的平均分*/

search(score,2);

/*求序号为2的学生的成绩*/ }

void average(float *p,int n){ float*p_end;

float sum=0,aver;

p_end=p+n-1;

for(;p<=p_end;p++)

sum=sum+(*p);

aver=sum/n;

printf(″average=%5.2f\n″,aver); }

void search(float(*p)[4],int n)

/ * p是指向具有4个元素的一维数组的指针 */ {int i;

printf(″the score of No.%d are:n″,n);

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

printf(″%5.2f″,*(*(p+n)+i));}

程序运行结果如下: average=82.25

The score of No.2 are:

90.00 99.00 100.00 98.00

例9.11: 在上题基础上,查找有一门以上课程不及格的学生,打印出他们的全部课程的成绩。

#include void main()

{void search(float(*p)[4],int n);

float score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};

{80,87,90,81},{90,99,100,98}};

search(score,3);

void search(float(*p)[4],int n){int i,j,flag;

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

{flag=0;

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

if(*(*(p+j)+i)<60)flag=1;

if(flag==1)

{ printf(“No.%d fails,his scores are: \n”,j+1);

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

printf(″%5.1f″,*(*(p+j)+i));

printf(″\n″);

程序运行结果如下:

No.1 fails, his scores are:

65.0

57.0

70.0

60.0 No.2 fails, his scores are:

58.0 87.0 90.0 81.0 例9.17:求a和b中的最大者。#include void main()

{int max(int,int);int a,b,c;

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

c=max(a,b);printf(″a=%d,b=%d,max=%dn″,a,b,c);

int max(int x,int y){ int z;

if(x>y)z=x;

else

z=y;

return(z);

例9.18:有若干个学生的成绩(每个学生有4门课程),要求在用户输入学生序号以后,能输出该学生的全部成绩。用指针函数来实现。

#include void main()

{float score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};

float *search(float(*pointer)[4],int n);

float*p;

int i,m;

printf(″enter the number of student:″);

scanf(″%d″,&m);

printf(″The scores of No.%d are:n″,m); p=search(score,m);

for(i=0;i<4;i++)printf(″%5.2ft″,*(p+i));

float *search(float(*pointer)[4],int n){ float *pt;

pt=*(pointer+n);

return(pt);

运行情况如下:

enter the number of student:1↙ The scores of No.1 are:

56.00

89.00

67.00

88.00 例9.19: 对上例中的学生,找出其中有不及格课程的学生及其学生号。#include void main()

{ float score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};

float search(float(*pointer)[4]);

float*p;

int i,j;

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

{p=search(score+i);

if(p==*(score+i))

{ printf(″No.%d scores:″,i);

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

printf(″%5.2f″,*(p+j));

printf(″n″);}

float *search(float(*pointer)[4]){ int i;

float *pt;

pt=*(pointer+1);

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

if(*(*pointer+i)<60)pt=*pointer;

return(pt);

} 运行情况如下:

No.1 scores:56.00 89.00 67.00 88.00

No.2 scores:34.00 78.00 90.00 66.00 

例9.20:将若干字符串按字母顺序(由小到大)输出。#include #include void main()

{void sort(char *name[ ],int n);

void print(char *name[ ],int n);

char *name[ ]={“Follow me”,“BASIC”,“Great Wall″,”FORTRAN“,”Computer design“};int n=5;

sort(name,n);

print(name,n);

void sort(char *name[ ],int n){char *temp;

int i,j,k;

for(i=0;i<n-1;i++){k=i;

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

if(strcmp(name[k],name[j])>0)k=j;

if(k!=i)

{ temp=name[i];

name[i]=name[k];

name[k]=temp;}

void print(char *name[ ],int n){ int i;

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

printf(″%sn″,name[i]);

} 运行结果为: BASIC Computer design FORTRAN Follow me Great Wall 作业:(提交上机报告)输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:①输入10个数;②进行处理;③输出10个数。# include main()

{ void input(int number[10]);

void max_min_value(int array[10]);

void output(int array[10]);

int number[10];input(number);max_min_value(number);output(number);

} void input(int number[10])

{ int i;

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

scanf(“%d”,&number[i]);} void max_min_value(int array[10])

{ int *max,*min,*p,*array_end;

array_end=array+10;

max=min=array;

for(p=array+1;p

if(*p>*max)max=p;

else if(*p<*min)min=p;

*p=array[0];array[0]=*min;*min=*p;

*p=array[9];array[9]=*max;*max=*p;

} void output(int array[10])

{ int *p;

for(p=array;p<=array+9;p++)

printf(“%4d”,*p); }

数组和函数的组合

例8.12 有一个一维数组,内放10个学生成绩,写一个函数,求出平均分、最高分和最低分。#include float Max=0,Min=0;

/*全局变量*/ void main()

{float average(float array[ ],int n);

float ave,score[10];

int i;

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

scanf(″%f″,&score[i]);

ave= average(score,10);

printf(″max=%6.2f\nmin=%6.2f\n

average=%6.2f\n″,Max,Min,ave);

}

float average(float array[ ],int n)

/*定义函数,形参为数组*/ { int i;

float aver,sum=array[0];

Max=Min=array[0];

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

{if(array[i]>Max)Max=array[i];

else if(array[i]

sum=sum+array[i];

aver=sum/n;

return(aver);

例8.18 有一个含若干字符的字符串,今输入一个字符,要求程序将字符串中该字符删去。用外部函数实现。file1.c(文件1)#include void main()

{ extern void enter_string(char str[]);

extern void detele_string(char str[],char ch);

extern void print_string(char str[]);

char c;

char str[80];enter_string(str);

scanf(”%c“,&c);

detele_string(str,c);

print_string(str);

} file2.c(文件2)#include void enter_string(char str[80]){

gets(str);}

file3.c(文件3)

void delete_string(char str[],char ch){ int i,j;

for(i=j=0;str[i]!=';i++)

if(str[i]!=ch)

str[j++]=str[i];

str[i]=';} file4.c(文件4)#include void print_string(char str[]){

printf(”%sn",str);}

运行情况如下:

abcdefgc↙

(输入str)

c↙ 

(输入要删去的字符)abdefg

(输出已删去指定字符的字符串)

8.1:判断m是否是素数。(用函数实现)#include main()

{ int f(int m);

int m,n;

scanf(“%d”,&m);

n=f(m);

if(n)printf(“%d is a prime numbern”,m);

else printf(“%d is not a prime numbern”,m);

}

int f(int m)

{ int i,k,p;

k=sqrt(m);

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

if(m%i==0)break;

if(i>=k+1)p=1;

else p=0;

return p;

}

8.2:用起泡法对10个数排序。(用函数实现)

#include main()

{ void sort(int array[],int n);

int a[10],i;

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

scanf(“%d”,&a[i]);

sort(a,10);

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

printf(“%4d”,a[i]);} void sort(int array[],int n)

{ int i,j,t;

for(i=0;i

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

if(a[j]>a[j+1])

{ t=a[j];a[j]=a[j+1];a[j+1]=t;}

}

8.3:用选择法对10个数排序。(用函数实现)#include main()

{ void sort(int array[],int n);

int a[10],i;

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

scanf(“%d”,&a[i]);

sort(a,10);

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

printf(“%4d”,a[i]);} void sort(int array[],int n)

{ int i,j,k,t;

for(i=0;i

{ k=i;

for(j=i+1;j

if(array[j]

t=array[k];array[k]=array[i];array[i]=t;

}

C语言课程设计总结 篇6

经过本学期C语言课程设计实践学习,使我对c语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它。

通过实践,我也发现我的好多不足之处,第一是自己在输入法上还不行,经常输错字母并且对键盘也不熟练,通过学习也有所改进;还有对c语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对c语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。在本次课程设计中我负责的是和另一位同学合作书写火车购票系统的对输入的信息进行按照一定输入信息进行排序,首先我利用冒泡法书写程序对输入的信息排序,而在该过程中我书写的程序出现了问题,没有错误却运行不起来,后来发现又是一个老问题,忘记链接时把文件名改为英文从而链接出错。后来我和合作的同学一块书写的程序进行整合与修改,使程序简洁而符合要求!

C语言学习总结 篇7

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

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

1 ARM处理器

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

1.1 寄存器使用规则

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

1.2 堆栈的使用规则

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

1.3 参数传递规则

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

2 C语言

2.1 汇编语言调用C语言

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

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

2.2 C语言调用汇编语言

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

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

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

3 混合编程

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

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

4 结语

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

参考文献

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

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

C语言学习总结 篇8

关键词:问题式学习,合作学习,C语言,教学

Abstract: in view of the traditional C language teaching process, students' lack of interest in learning, content boring problems difficult to understand, lack of hands-on programming ability, this article put forward the problem-based learning mode cooperative learning C language teaching methods. The teaching methods and teachers as the leading factor, the students as the main body of the double main teaching model, will all student groups, difficult transition for each group of students put forward reasonable multiple problems, applying the concept of cooperative learning to improve each student's learning initiative and team coordination ability, finally, have incentive effect appraisal method to effectively promote the students' active learning the language C language program design.

Keywords: problem-based learning, cooperative learning, C language, teaching

一、传统教学模式存在的问题

目前传统的C语言程序设计教学主要存在以下三个问题:

1.枯燥的语法学习让学生缺乏兴趣

在大多数教材设计中,C语言的教学先讲授基本的数据类型、运算符与表达式这类语法知识,然后讲述顺序、选择、循环这三种基本的结构。这些内容枯燥繁琐,有大量需要记忆的细节,容易让学生失去学习兴趣和动力。而且这些语法的讲解即便是结合了具体实例、错误示范,也是局部细节的讲解,容易让学生陷入这些细节中,只见树木不见森林,渐渐失去了学习C语言的积极性。

2.学生难以适应对编程逻辑

C语言课程大多开设在工科院校的第一学年,学生第一次学习编程语言,需要很长的时间去适应编程逻辑,对于数学和C语言语法类似的地方也容易混淆。而上机时对编译出错和警告信息的理解判断、单步/断点调试方式的应用都需要大量的练习才能掌握,所以很多学生表示,学习了很长时间C语言,依旧弄不太懂这门语言的范式和规律。

3.教师考核的内容偏重语法,学生缺乏算法思维

由于C语言的学习需要先掌握常量、变量、数据类型、顺序、选择、循环语句,才能写出程序,所以教师在教学时,将大量的精力用在语法讲解上。同样,考试时教师也偏重于这些语法的考核,很多题目是为了考语法而考语法,而实际应用时极少用到那些极端的语法表达,反而是要表达得易于理解,避免混淆。在这样的教学与考核体系下,即便学生硬着头皮记下了大量的语法,也依旧缺乏算法思维,只能读程序,不会自己编程序。

针对以上问题,C语言的教学亟需改变传统的模式,用问题式学习模式激发学生的学习兴趣,引导学生课下自觉在编译平台上练习,培养编程逻辑。同时要改变单一的以教师为中心的教学模式,构建合作学习式的以教师为主导、学生为主体的双主型教学模式。

二、合作学习式的双主型教学模式

合作学习就是将所有学生分成几个“组内异构,组间同质”的小组,小组与小组之间的能力接近,而组内各成员素质良莠不齐,学生在学习活动中相互帮助,对老师提出的学习任务各尽其能完成,使小组利益最大化的一种教学理念。

合作学习的理念源于学习的本质应该是一种同客观世界对话、同他人对话、同自我对话的三位一体的活动,理想的教学应该是每个学生能安心学习,愉快地同教材对话,感受并分享同学间的见解,体验交流的喜悦。

通过合作学习,学生愿意为集体的利益和个人的利益而一起努力,在完成共同任务的过程中实现自己的理想,能改善竞争意识给学生带来的精神压力。由于合作学习是课堂学习和自学之间的缓冲,在教学组织方面具有衔接性,十分符合我国高校教学以班级授课形式为主的教学传统,教学组织形式上改革阻力较小,容易实施。

在高等院校的 C 语言教学中开展合作学习对提高学生编程能力和解决实际问题的能力有十分重要的意義。为避免合作学习走向某个学生“独当一面”或者合作流于形式两个极端,老师在组织 C 语言合作学习时,需要对整个 C 语言教学过程进行系统的设计。目前的教学设计模式分为三种:以教为主的教学系统设计、以学为主的教学系统设计、综合两者之长的以教师为主导、以学生为主体的“双主型”教学系统设计。

以教为主的教学系统设计将行为主义学习理论和认知学习理论为作为基础,在教学过程中,教师处于中心地位,强调教师的主导作用。这种教学方式是我国目前主要的教学形式,原因主要有以下几种:1.大部分学校的授课都是大班教学,教师讲学生听的模式,比较适合这种规模的课堂活动;2.这种传统的教学系统设计已经由众多专家、学者以及一线教师通过几十年的深入研究、实践与发展,形成了一套比较严谨、完整的理论体系供教学工作者操作使用,而其它方式在我国实现的范围小,年限短。

以学为主的教学系统设计强度以学生为中心,教师由知识的讲授者变为学生主动构建学习的引导者,教师是根据学生的需求定制课堂的教学目标和内容,教学设计主要围绕“自主学习策略”和“学习环境”两方面进行,学生的参与为教学活动的起止点。这种教学模式由于强调学生是认知过程的主体,是知识的主动建构者,因而有利于学生的主动探索、主动发现、有利于创造型人材的培养,这是其突出的优点。但是,这种教学模式由于强调学生的“学”,往往忽视教师主导作用的发挥,忽视师生之间的情感交流和情感因素在学习过程中的重要作用;另外,由于忽视教师主导作用,当学生自主学习的自由度过大时,还容易偏离教学目标的要求,这又是其不足之处。

C语言合作学习式的“主导-主体”双主型教学模式,结合以教为主和以学为主两种教学系统设计模式的优点和灵活性,以奥苏贝尔的“学与教”理论和建构主义的“学与教”理论为基础,互相弥补不足,既重视培养学生的创新思维、创新能力以及学生情感因素对学习效果的影响,又较好地体现了教师的主体作用。

三、问题式学习模式下的合作学习

传统的教学模式是教师单向讲授知识点,学生听课,在课后复习时进一步理解。这种学习方式很难将新的知识与学生用已有的知识联系起来,而人在接受新的知识时,一定要将新的信息与头脑中已知的信息结合起来,用自己的方式重构知识体系,这种新知识才能被理解消化。因此在C语言的教学中,需要由问题引发学生的思考,再引入新知识,将其内化为学生自己的知识,开启学生的自主学习之路。

问题式学习(Problem-based Learning,PBL)是一种基于构建主义的教学方式,它以问题为核心、以学生为中心,让学生在问题的引导下思考、相互协作、交流并构建知识,让学生掌握灵活的知识基础、发展更高层次的思维既能、培养学生解决问题和自主学习的能力。

C语言的教学在实施问题式学习模式时需要在课前合理设计问题,注重问题的层次性、激励性和系统性;在课中扮演好教师的角色,创造问题情境,促进课堂的动态生成;在课后要注意深入反思和总结,反思教师自己的教学并引导学生反思自己的学习。

实际的问题式学习模式下的C语言合作学习可采用以下流程:

1.教师分析学生的特征,确立学习目标。

学生的特征包括起点能力,学习风格等,C语言课程学习者多为工科院校大一的新生,已掌握的知识体系只有高中水平,基本没有基本的编程思想,对理论性的学习有一定兴趣,但更愿意动手实践。这些学生的学习风格又分为两大类:场独立性和场依存性。前者有自己的看法,不容易受外界和他人评价干扰;后者比较容易适应环境,但受到批评时容易学习积极性下降。在以上学生特征和学习风格的考虑,教师在确立学习目标时需要设计不同层次的问题,以适应不同类型的学生。

2.教师根据学习目标设置具体的学习情境,并选择与当前学习密切相关的真实事件或问题作为学习的中心内容。

教师在设计课堂内容时分为三个部分:链接旧知识、探究新知识、新知识小结。先对学生知识体系中已有的相关内容复习,为新课做铺垫,然后围绕新知识学习以不同层次的问题展开,设置一条问题探究线索,让学生对新内容有一个整体的把握。在课题学习的最后一部分对新知识做总结和反思。

3.学生根据教师提供的问题自主学习,解决问题。

学生先课前预习,在教师给出旧知链接,多个新问题引导的前提下,分组展开讨论,分组一般以5~6人为宜,讨论的内容包括学生预习后的展示,对疑难问题的解答,知识体系的链接更新等内容。

4.师生交流,对问题补充、修正、加深理解。

在学生讨论的过程中,教师可以观察每组动向,留意学生讨论的重心和存在的疑点,在学生讨论结束后,对有争议的问题做点拨和提示,但不是直接给出正确答案,而是引导学生自己得出正确答案,对开放性问题则引导学生在课后进一步查资料求证、思考,整个过程中教师只扮演协助者而不是主导者。

5.教师评价学生表现,学生填写反思表。

在课堂的最后一部分,学生和教师一起总结新知识,评价各个学生的表现,对整个课堂环节的设置、时间安排提出修改建议。教师自己也要随时记录课堂教学信息,发现问题,反思自己的教学行为。

四、考核方式

设计合理的考核方式对促进学生的学习效果具有十分重要的意义。学生成绩分为两部分:平时成绩与期末考试成绩。由于采用合作式学习方式,平时成绩的重心放在学生身上,需要评价学生在合作学习中的努力程度和被认可程度,所以每次课堂上的平时成绩由组内成员协商的组内成绩和组间评价给出的小组成绩组成,个人成绩=a1*组内成绩+a2*小组成绩,其中a1,a2为权重系数,由老师确定。平时成绩的评定需要给出量化指标如下:1)合作态度,成员需要积极参与讨论和解决任务的全过程,并且善于交流,能团结伙伴。2)合作学习方式,成员愿意倾听别人的意见并给出合理反馈,愿意将自己的成果与成员共享。3)解决问题能力,能积极有效地收集相关材料并完成自己所负责的任务。通过以上考核方式能较好地促进学生在问题引导下合作学习。

参考文献

[1]张华,张淼. 基于问题求解的C语言开篇教学研究[J]. 计算机教育,2014,No.20501:13-17.

[2]王晓光. C语言教学的教学模式改革策略解析[J]. 电脑知识与技术,2013,v.929:6583-6584+6586.

[3]辛秀. 高职院校C语言合作学习的教学实践与反思[D].辽宁师范大学,2012.

[4]汪红兵,姚琳,武航星,张敏. C语言程序设计课程中的计算思维探析[J]. 中国大学教学,2014,No.28909:59-62.

[5]张蕾. 基于项目化教学的“C语言程序设计”课程改革[J]. 计算机教育,2013,No.18202:17-20.

[6]钟美. 培养应用型人才为目标的C语言教学改革[J]. 计算机教育,2013,No.19616:55-58.

[7]邱曉红,李渤,樊中奎,邱晓平. 融合认知结构和CDIO教育理念的C语言教学[J]. 计算机教育,2013,No.19616:107-111.

作者简介:曾春艳,女,1986.2 湖北武汉,博士,湖北工业大学,信号处理

上一篇:2024实习工作证明下一篇:新投资入股协议书