c语言上机心得(精选13篇)
1.c语言上机心得 篇一
C语言上机实训 试题2 所属语言:C语言 试卷方案:C语言上机实训 试卷总分:100分 共有题型:3种
一、程序填空
共1题(共计30分)第1题(30.0分)
题号:470 /*------------------------【程序填空】
--------------------------
功能:从两个数组中分别提取任意元素x[i],y[j],问|x[i]-y[j]| 的最小值是多少 ?
------------------------*/ #include
/***********SPACE***********/
#define min(x, y)
(【?】)
x int min_distance(int x[], int y[], int m, int n){ int minimum = INT_MAX; int index_x = 0, index_y = 0; while(index_x < m && index_y < n) /***********SPACE***********/ if(【?】)x[index_x] >= y[index_y] { minimum = min(minimum, x[index_x]-y[index_y]); index_y++; } else { minimum = min(minimum, y[index_y]-x[index_x]); /***********SPACE***********/ 【?】index_x++; } return minimum; } #include int x[] = { 1, 3, 7, 11, 18}; int m = sizeof(x)/sizeof(int); int y[] = { 4, 5, 8, 13, 22}; int n = sizeof(y)/sizeof(int); int i, min_distance(int [], int [], int, int); printf(“nCompute Minimum Distance Between Two Sorted Arrays”); printf(“n====”); printf(“nnGiven Array #1 :”); for(i = 0;i < m;i++) printf(“%5d”, x[i]); printf(“nnGiven Array #2 :”); for(i = 0;i < n;i++) printf(“%5d”, y[i]); printf(“nnMinimum Distance = %d”, min_distance(x, y, m, n));} 答案: =======(答案1)======= x =======(答案2)======= x[index_x] >= y[index_y] =========或========= y[index_y]<=x[index_x] =======(答案3)======= index_x++ =========或========= index_x=index_x+1 =========或========= ++index_x 二、程序改错 共1题(共计30分)第1题(30.0分) 题号:26 /*----------------------- 【程序改错】 ------------------------- 功能:实现3行3列矩阵的转置,即行列互换。 -----------------------*/ #include int i,j,t; for(i=0;i for(j=0;j /**********FOUND**********/ scanf(“%d”,&a[i][j]); for(i=0;i { for(j=0;j printf(“%4d”,a[i][j]); printf(“n”); } for(i=0;i /**********FOUND**********/ for(j=0;j { /**********FOUND**********/ a[i][j]=t; a[i][j]=a[j][i]; /**********FOUND**********/ t=a[j][i]; } for(i=0;i { for(j=0;j printf(“%4d”,a[i][j]); printf(“n”); } } main(){ int b[3][3]; fun(b,3);} 答案: =======(答案1)======= scanf(“%d”,&a[i][j]);=========或========= scanf(“%d”,(*(a+i)+j)); =======(答案2)======= for(j=0;jj;j++)=========或========= for(j=0;j<=i;j++)=========或========= for(j=0;i>=j;j++)=========或========= for(j=i+1;j for(j=i;j =======(答案3)======= t=a[i][j]; =======(答案4)======= a[j][i]=t; 三、程序设计 共1题(共计40分)第1题(40.0分) 题号:341 /*-----------------【程序设计】 ------------------- 功能:删除所有值为y的元素。数组元素中的值和y的值由 主函数通过键盘输入。 -----------------*/ #include void fun(int bb[],int *n,int y){ /**********Program**********/ int i,j;for(i=0;i<*n;) { if(bb[i]==y) {for(j=i;j<*n;j++) bb[j]=bb[j+1]; *n=*n-1; } else i++; } /********** End **********/ } main(){ int aa[M],n,y,k; printf(“nPlease enter n:”);scanf(“%d”,&n); printf(“nEnter %d positive number:n”,n); for(k=0;k printf(“The original data is:n”); for(k=0;k printf(“nEnter a number to deletede:”);scanf(“%d”,&y); fun(aa,&n,y); printf(“The data after deleted %d:n”,y); for(k=0;k printf(“n”); wwjt();} void wwjt(){ FILE *IN,*OUT; int n; int i[10]; int o; IN=fopen(“in.dat”,“r”); if(IN==NULL) { printf(“Read FILE Error”); } OUT=fopen(“out.dat”,“w”); if(OUT==NULL) { printf(“Write FILE Error”); } for(n=0;n<10;n++) { fscanf(IN,“%d”,&i[n]); } fun(i,&n,3); for(o=0;o { fprintf(OUT,“%dn”,i[o]); } fclose(IN); fclose(OUT);} 答案:----------------------int i,j;for(i=0;i<*n;) { if(bb[i]==y) {for(j=i;j<*n;j++) bb[j]=bb[j+1]; *n=*n-1; } else i++; }---------------------- 试题1 所属语言:C语言 试卷方案:C语言上机实训 试卷总分:100分 共有题型:3种 一、程序填空 共1题(共计30分)第1题(30.0分) 题号:417 /*------------------------【程序填空】 -------------------------- 功能:利用全局变量计算长方体的体积及三个面的面积。 ------------------------*/ #include int v; /***********SPACE***********/ v=【?】; s1=a*b; /***********SPACE***********/ s2=【?】; s3=a*c; return v;} main(){ int v,l,w,h; printf(“ninput length,width and height: /***********SPACE***********/ scanf(”%d%d%d“,【?】,&w,&h); /***********SPACE***********/ v=【?】; printf(”v=%d s1=%d s2=%d s3=%dn“,v,s1,s2,s3);} 答案: ”); =======(答案1)======= a*b*c =========或========= a * b * c =======(答案2)======= b*c =========或========= b * c =======(答案3)======= &l =======(答案4)======= vs(l,w,h)=========或========= vs(l , w , h) 二、程序改错 共1题(共计30分)第1题(30.0分) 题号:392 /*----------------------- 【程序改错】 ------------------------- 功能:统计出若干个学生的平均成绩,最低分以及得最低分的人数。例如:输入10名学生的成绩分别为92,87,68,56,92,84,67,75,92,66,则输出平均成绩为77.9,最低高分为56,得最 低分的人数为1人。 -----------------------*/ #include float Min=0;int J=0;float fun(float array[],int n){ int i;float sum=0,ave; Min=array[0]; for(i=0;i { if(Min>array [i])Min=array [i]; /**********FOUND**********/ sum=+array [i]; } /**********FOUND**********/ ave=sumn; for(i=0;i /**********FOUND**********/ if(array [i]=Min)J++; return(ave);} main(){ float a[10],ave; int i=0; for(i=0;i<10;i++) scanf(“%f”,&a[i]); ave=fun(a,10); printf(“ave=%fn”,ave); printf(“min=%fn”,Min); printf(“Total:%dn”,J);} 答案: =======(答案1)======= sum+=array[i];=========或========= sum=sum+array [i]; =======(答案2)======= ave=sum/n; =======(答案3)======= if(array [i]==Min)J++; 三、程序设计 共1题(共计40分)第1题(40.0分) 题号:390 /*-----------------【程序设计】 ------------------- 功能:编写函数求1~100中奇数的平方和。 结果为166650.000000。 -----------------*/ #include float sum(int n){ /**********Program**********/ /********** End **********/ } main(){ printf(“sum=%fn”,sum(100)); wwjt();} void wwjt(){ FILE *IN,*OUT; int i; float o; IN=fopen(“in.dat”,“r”); if(IN==NULL) { printf(“Read FILE Error”); } OUT=fopen(“out.dat”,“w”); if(OUT==NULL) { printf(“Write FILE Error”); } for(j=0;j<5;j++) { fscanf(IN,“%d”,&i); o=sum(i); fprintf(OUT,“%fn”,o); } fclose(IN); fclose(OUT);} 答案:----------------------float s=0;int i;for(i=1;i<=n;i=i+2) s=s+i*i;return(s);---------------------- 试题3 所属语言:C语言 试卷方案:C语言上机实训 试卷总分:100分 共有题型:3种 一、程序填空 共1题(共计30分)第1题(30.0分) 题号:410 /*------------------------【程序填空】 -------------------------- 功能:有n个整数,使其前面各数顺序向后移m个位置,最后m个数 变成最前面的m个数 ------------------------*/ #include /***********SPACE***********/ move(【?】)int n,m,array[20];{ int *p,array_end; /***********SPACE***********/ array_end=*(【?】); for(p=array+n-1;p>array;p--) /***********SPACE***********/ *p=*(【?】); *array=array_end; m--; if(m>0)move(array,n,m);} main(){ int number[20],n,m,i; printf(“the total numbers is:”); scanf(“%d”,&n); printf(“back m:”); scanf(“%d”,&m); for(i=0;i scanf(“%d,”,&number[i]); scanf(“%d”,&number[n-1]); /***********SPACE***********/ move(【?】); for(i=0;i printf(“%d,”,number[i]); printf(“%d”,number[n-1]);} 答案: =======(答案1)======= array,n,m =======(答案2)======= array+n-1 =========或========= array + n-1 =======(答案3)======= p-1 =========或========= p-1 =======(答案4)======= number,n,m 二、程序改错 共1题(共计30分)第1题(30.0分) 题号:413 /*----------------------- 【程序改错】 ------------------------- 功能:读取7个数(1-50)的整数值,每读取一个值,程序打印 出该值个数的*。 -----------------------*/ #include int i,a,n=1; /**********FOUND**********/ while(n<7) { do { scanf(“%d”,&a); } /**********FOUND**********/ while(a<1&&a>50); /**********FOUND**********/ for(i=0;i<=a;i++) printf(“*”); printf(“n”); n++;} } 答案: =======(答案1)======= while(n<=7) =========或========= while(n<8) =======(答案2)======= while(a<1||a>50);=========或========= while(a>50||a<1); =======(答案3)======= for(i=1;i<=a;i++) 三、程序设计 共1题(共计40分)第1题(40.0分) 题号:337 /*-----------------【程序设计】 ------------------- 功能:将两个两位数的正整数a、b合并形成一个整数放在 c中。合并的方式是:将a数的十位和个位数依次放 在c数的百位和个位上,b数的十位和个位数依次放 在c数的十位和千位上。 例如:当a=45,b=12。调用该函数后,c=2415。 -----------------*/ #include void fun(int a, int b, long *c) { /**********Program**********/ /********** End **********/ } main() { int a,b;long c; printf(“input a, b:”); scanf(“%d%d”, &a, &b); fun(a, b, &c); printf(“The result is: %ldn”, c); wwjt(); } void wwjt() { FILE *rf, *wf; int i, a,b;long c; rf = fopen(“in.dat”, “r”); wf = fopen(“out.dat”,“w”); for(i = 0;i < 10;i++) { fscanf(rf, “%d,%d”, &a, &b); fun(a, b, &c); fprintf(wf, “a=%d,b=%d,c=%ldn”, a, b, c); } fclose(rf); fclose(wf); } 答案:----------------------*c=a/10*100+a%10+b/10*10+b%10*1000;---------------------- [摘 要]随着信息技术的高速发展,智慧课堂的理念和实践是当今教育界研究的热点。针对高级语言程序设计上机教学的课程特点,充分利用上机实验室的信息设备优势,采用小组合作学习、任务驱动教学、网络学习和多元化考核等教学手段,创建上机教学的智慧课堂,实现学生主动学习、合作学习和快乐学习。 [关键词]智慧课堂 高级语言程序设计 上机教学 [中图分类号] G642 [文献标识码] A [文章编号] 2095-3437(2015)08-0125-02 一、引言 在信息技术高速发展,全面建设智慧城市、智慧校园的大背景下,传统的课堂教学也面临着变与不变的外部挑战。[1]新兴技术的不断冲击,使得课堂教学不再是师生间单一的教与学关系,更多的是师生间平等的对话与互动,传统课堂已无法满足教育需要。将信息技术与教育深度融合,优化教育模式,已经成为一种必然的趋势, 由此智慧课堂这一新的教学模式便应运而生了。智慧课堂是指充分利用信息化技术,以引导学生的高度参与以及主动性的充分发挥,以自主地发现问题、研究问题和解决问题为主要学习形式,是以培养多样化、高素质、创新型人才为目标的教学方式。[2]相对以教师为中心的传统课堂,智慧课堂强调以学生为中心,注重学生的主动学习、合作学习和快乐学习。[3] 作为高校理工科电子、计算机等相关专业的一门重要基础课程,高级语言程序设计的目标是培养学生的程序设计理念、掌握程序设计的基本方法,培养学生熟练使用C语言编程解决实际问题的能力,为后续程序设计课程的学习和应用打下扎实的理论和实践基础。[4]学生是否具有较高的编程能力和良好的编辑习惯是衡量其对该课程掌握程度的一个重要指标,而编程能力的提高和编程习惯的养成离不开上机实践,因此上机实践是高级语言程序设计教学中的一个至关重要的环节。[5] 本文针对高级语言上机教学的课程特点和存在问题,充分利用上机实验室的信息设备优势,将信息技术与教育深度融合,实现上机教学的智慧课堂。 二、教学现状和问题 一般院校的高级语言程序设计理论课和上机课的比例为1∶1,由32学时理论课和32学时上机课组成。上机课目前多采用传统的“教师讲授—教师演示—学生上机练习”的教学模式,主要存在以下问题: (1)学生编程的信心和积极性有待提高。高级语言程序设计的开课时间设在大一的第二个学期,此时绝大部分学生对计算机软硬件知识缺乏全面了解,再加上C语言本身学习起来有难度,使学生不能很快掌握算法的思维特点,编程能力、调试能力普遍较差,增加了C语言上机学习的难度。很多学生在上机的过程中非但没有对编程产生兴趣,反而还产生惧怕心理,进而放弃学习。 (2)学生自主分析问题、解决问题的能力有待提高。目前上机教学模式以教师“教”为中心,学生过多依赖于实验指导书和教师,基本处于被动接受状态。在上机课中常出现“写程序就抄书,出现问题等老师”的现象,分析错误、动手调试本是最能发挥学生能动作用的环节,现在却由教师来承担,往往导致学生离开指导书和教师就写不出程序、调试不了程序的局面,很难培养学生在程序设计上的创新能力和逻辑思维能力。 (3)机房得天独厚的信息技术环境没有得到充分的利用。一般机房都配备有计算机、高速局域网和多媒体教学管理软件,具备开展智慧课堂的条件。以我院机房为例,采用的是海光多媒体软件,海光多媒体软件是一款实现在电子教室、多媒体网络教室或者电脑教室中进行多媒体网络教学的非常好的软件,集电脑教室的同步教学、控制、管理、音视频广播、网络考试等功能于一体,并能同时实现屏幕监视和远程控制等网络管理的目的,其核心功能包括教师演示、学生示范、语音教学、遥控辅导、屏幕录制、屏幕回放、提交作业、电子抢答和文件传输等。但目前该软件主要用于教师演示和收发文件,现有的信息技术设备没有得到充分的利用,信息技术改变教育方式没有得到充分的体现。 三、智慧课堂开展内容 针对以上情况,本文将充分利用机房的信息技术环境优势,将信息技术与教学深度融合,通过分组合作学习、任务驱动教学、网络学习和多元化考核等教学手段,创建高级语言程序设计上机教学的智慧课堂,实现学生主动学习、合作学习和快乐学习。 (一)小组合作学习 针对部分学生不能单独完成编程及缺少兴趣的问题,采用分组学习的教学模式,每次上机课将学生分为4人一组,每组学生通过合作学习共同完成一个实验任务。小组合作学习一方面更能突出学生的主体地位,培养学生主动参与的意识,激发学生的学习兴趣;另一方面学得好的学生可以带动其他学生,在达到学习均衡的同时,也培养了学生的合作能力和团队精神。 分组合作学习的关键是有效地组织学生学习,没有组织的学习会使课堂变得嘈杂、分散,所以合理划分小组是分组合作学习的首要前提。主要考虑两种分组方式,第一种是学生自愿组合,第二种是教师按学生的基础分组。第一种分组方式有利于调动学生合作学习的积极性,激起学生学习的兴趣,但是自由式的小组组合很可能出现分组不均衡的现象,即学习基础好的学生分在一组,学习基础薄弱的学生分在一组;第二种分组方式需要教师在全面了解学生的前提下,根据班级内的情况,有意识地将不同基础、不同类别的学生分到一组,使班级小组间基本上是相似的、均衡的。综合考虑两种分组方式的优缺点,可交替采用两种方式进行分组。 小组划分后需进行合理分工,每一组选择一个组长,组长协助教师组织任务攻关工作,同时监督组员,避免出现“蹭组”现象。组长的选择要考虑学生的成绩、与同学间的关系等因素,可采用自由推选的方式,给每个学生改变角色和锻炼的机会,进而提高其学习兴趣。 (二)任务驱动教学 在上机实验过程中,以完成一个具体的任务为线索,把教学内容隐含在每个任务之中,要求学生在具体的任务驱动下,在讨论和对话的氛围中,进行自主学习和协作学习。这样学生在完成任务的过程中始终处于主体地位,不仅提高了学生的积极性,也培养了学生的探索与创新精神。任务完成后,随机挑选或通过海光多媒体软件的“电子抢答”功能选出若干小组,通过软件的“学生演示”功能进行演示,并引导学生进行总结和改进。 在任务驱动教学中,任务设计的质量直接关系到教学效果。在设计任务时,要以学生为中心,根据学生的实际情况和学生感兴趣的方向来设置任务,同时要注意高级语言知识点的系统性和连贯性,将理论课的知识点融入上机任务中,使学生在完成任务的过程中,既巩固已学过的内容,又探索新知识,实现总体的教学目标。 例如,在练习C语言控制结构中的选择结构时,任务设计为:设计一个程序,输入某年某月某日,要求计算出这一天是该年的第几天。学生拿到任务后,分组讨论程序思路,教师通过管理软件随机选择若干小组听取他们的设计思路,根据回答情况进行引导,学生得到以下正确思路并编程实现: 1.从键盘上读入3个整数,分别作为年、月、日。练习输入函数。 2.要计算出某天是当年的第几天,应该将当年中本月之前所有月份的天数相加,再加上本月的天数。根据所输的月份练习switch选择结构。 3.考虑闰年问题,二月是一个特殊月,如该年是闰年,则二月有29天,否则,便是28天。根据所输的年份练习if选择结构。 4.输出答案。练习输出函数。 这个有趣的任务让学生在讨论中学会了选择结构的使用方法,并了解了switch和if这两种常用的选择结构的区别,且巩固了前面学习的输入输出函数知识点。 (三)网络学习 为学生提供丰富的网络学习资源。利用海光多媒体软件的录制和回放功能,可以在执行“教师演示”播放教师机上的屏幕画面的同时,将播放的图像画面以动画影像的形式录制下来,跟不上教学进度的学生可通过“回放”学习。将录制的视频、课件、参考资料和课外拓展练习资料等上传到课程群,提供丰富的网络学习资源,让学生学习不受时间、地点的限制,实现全方位学习。 (四)多元化考核方式 考核方式对学生有重要的学习方向引导作用,在智慧课堂的教学模式中,采用多元化考核方式,进一步调动学生的学习主动性和积极性。学生的上机成绩由三部分组成:课堂表现考核,由教师根据学生的分组表现、课堂展示和任务完成情况给出成绩,占总成绩的30%;组内考核,每次实验由小组长根据组员的表现打分,最后取平均分,占总成绩的20%;期末上机考试,占总成绩的50%,对学生的总体掌握情况进行测评。 四、结语 本文充分利用了机房得天独厚的信息技术环境,采用小组合作学习、任务驱动教学、网络学习和多元化考核等教学手段,创建了高级语言程序设计上机教学的智慧课堂。实践证明,该教学方法深受学生的欢迎,有效提高了学生的积极性,取得了良好的教学效果。 [ 注 释 ] [1] 黄荣怀,张进宝,胡永斌,等.智慧校园:数字校园发展的必然趋势[J].开放教育研究,2012(4):12-17. [2] 吴晓静,傅岩.智慧课堂教学的基本理念[J].教育探索,2009(9):6. [3] 祝智庭,贺斌.智慧教育:教育信息化的新境界 [J].电化教育研究,2012(12):13. [4] 谭浩强.C程序设计[M].北京:清华大学出版社,2005. [5] 丁海燕,邹疆,邱莎.C语言实验教学体系及改革措施[J].实验技术与管理,2010(11):179-181. 课程名称 _____C语言程序设计____ 实验项目 _实验一 顺序结构程序设计___ 实验仪器 ______ ___________ 系别_____光电学院_______ 专业______电信__________ 班级/学号 学生姓名 ______***_________实验日期 ____2011年10月17日___ 成绩 _______________________指导教师 一、实验目的1、掌握C语言中,基本的输入输出函数的使用方法。 2、掌握printf中转义字符’t’,’n’的用法。 3、掌握赋值语句的用法。 4、掌握算术表达式、赋值表达式的计算。 5、掌握数学函数的使用。 二、实验内容 1、输入圆的半径 r,计算圆的周长和面积。其中 π =3.1416程序代码: …… 执行结果: [输入] …… [输出] …… 2、3、…… 三、实验体会 标 准 实 验 报 告 (实验)课程名称 高级语言程序设计实验 电 子 科 技 大 学 实 验 报 告 实验时间: 10月12日晚 一、实验室名称: 校公共机房 二、实验项目名称:顺序和分支程序设计 三、实验学时:4学时 四、实验原理: 使用VS2010等C语言集成开发环境(IDE),在微型计算机上对程序进行编辑、编译、连接与运行。通过上机练习掌握在C编译器中编辑、编译、连接、和运行C程序的方法和过程。 五、实验目的: 1.熟悉C程序开发环境,熟悉C程序的编辑、编译、连接和运行的过程。2.掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型、指针型变量,以及对它们赋值的方法。 3.掌握C语言的各种运算符,以及这些运算符的混合使用。4.掌握简单顺序程序设计方法。5.学会使用scanf和printf函数。 6.掌握分支结构各种语句的一般功能和执行过程,会使用分支结构编程。 六、实验内容: 上机完成以下编程实验,调试运行程序并完成报告。 1.编写一个C程序,输入三个整数,计算三个整数的和,并将结果输出。2.编写一个C程序,输入一个字符,找到这个字符前后各隔一个字符的字符。例如,输入‘d’,显示:‘b’和‘f’。3.习题2.22(p91) 4.习题2.23(p91)5.习题 3.3(p134) 6.输入一个两位数,输出对应的英文单词。 七、实验器材(设备、元器件): 硬件要求:普通pc机,1G内存,100G硬盘空间即可。 软件要求:Windows 7,包括C编译器的IDE。 八、实验步骤、实验编程与运行结果: 1.程序文件名为ex1_1,源程序清单如下: #include } int a,b,c,d;scanf(“%d %d %d”,&a,&b,&c);d=a+b+c;printf(“%d”,d); 典型测试数据(输入): 25 26 27 应输出(上机前自己分析的结果):78 上机时遇到的问题:wu 实际运行结果:78 2.程序文件名为ex1_2,源程序清单如下: #include void main(){ int x,y,z;scanf(“%c”,&x);y=x+2;z=x-2; } printf(“%c %c”,y,z); 典型测试数据(输入): h 应输出(上机前自己分析的结果): j f 上机时遇到的问题: wu 实际运行结果:j f 3.程序文件名为ex1_3,源程序清单如下: #include } float r,s,c;scanf(“%f”,&r);s=3.14*r*r;c=2*3*r;printf(“s=%fn”,s);printf(“c=%f”,c); 典型测试数据(输入):5 应输出(上机前自己分析的结果):78.5 31.4 上机时遇到的问题: wu 实际运行结果:78.5 31.4 4.程序文件名为ex1_4,源程序清单如下: #include } scanf(“%f”,&c);a=9*c;b=a/5;F=b+32;printf(“%f”,F); 典型测试数据(输入): 35 应输出(上机前自己分析的结果): 95 上机时遇到的问题: wu 解决办法: 实际运行结果:95 5.程序文件名为ex1_5,源程序清单如下: #include } int a,b,c;scanf(“%d %d”,&a,&c);b=a-110;if(c==b){ } else if(c>=b+5){ } else if(c<=b-5){ } printf(“过瘦n”);printf(“过胖n”);printf(“标准n”); 典型测试数据(输入):180 70 应输出(上机前自己分析的结果):标准 上机时遇到的问题: 无 解决办法:多测试几组典型数据; 实际运行结果:标准 6.程序文件名为ex1_6,源程序清单如下: #include } else if(a>=2){ switch(a){ case 2:printf(“twenty”);break;case 3:printf(“thirty”);break;case 4:printf(“fouty”);break;case 5:printf(“fifty”);break;case 6:printf(“sixty”);break;case 7:printf(“seventy”);break;int a,b;scanf(“%1d%1d”,&a,&b);if(a==1) { switch(b){ } case 4:printf(“fourteen”);break;case 2:printf(“twelve”);break;case 5:printf(“fifteen”);break;case 6:printf(“sixteen”);break;case 7:printf(“seventeen”);break;case 8:printf(“eighteen”);break;case 9:printf(“nineteen”);break;default:printf(“n”);case 3:printf(“thirteen”);break;case 1:printf(“eleven”);break; } } case 8:printf(“eighty”);break;case 9:printf(“ninety”);break;default:printf(“n”);} switch(b){ case 1:printf(“one”);break; } case 2:printf(“two”);break;case 3:printf(“threee”);break;case 4:printf(“four”);break;case 5:printf(“five”);break;case 6:printf(“six”);break;case 7:printf(“seven”);break;case 8:printf(“eight”);break;case 9:printf(“nine”);break;default:printf(“n”); 典型测试数据(输入): 55 应输出(上机前自己分析的结果):fiftyfive 上机时遇到的问题: wu 解决办法: 实际运行结果:fiftyfive 九、实验结论:课下应提前做好,不然时间来不及。 十、总结及心得体会:应用生疏 十一、对本实验过程及方法、手段的改进建议:无 报告评分: 青年人网站小编发现很多考生对上机考试存在很大的问题,现在小编将在教学当中对二级C语言上机考试题库总结的经验和大家分享,希望能对我们考生的考试有所帮助,顺利通过考试!以下是对上机考试改错题的做题方法和总结,改错题的错误主要分为以下几类: 1、if或while语句 若错误行是if或者while语句,则要注意以下点: 1)首先判断是否正确书写if或while关键字; 2)然后看有没有用小括号把整个表达式括起来,若没有则加上小括号; 3)若条件表达式中有指针变量而且没有指针运算符时,则加上指针运算符; 4)若if条件表达式中只有一个等于号即数学等号(=),则要改写成两个等于号即逻辑等号(= =); 5)若if条件表达式为其他的比较运算符,则一般是进行逆转或加一个等于号; 2、for语句 若错误行是for语句,则要注意以下几点: 1)首先判断for有没有书写正确; 2)然后看for中的表达式是不是用分号(;)隔开,若不是则改为分号。 记住是分号(;),不是逗号(,)! 3)再者,分析for中的三个表达式,是否符合题意; 第一个表达式表示起始条件,第二个表达式表示终止条件,第三个表达式表示循环变量的变化。 3、return语句 若错误行为return语句,则要注意以下几点: 1)首先看是不是正确书写return关键字; 2)然后看是不是缺少分号,若是则加上分号即可; 3)再者判断return后的变量或表达式是否正确; 这种错误需要根据题意来分析,分析返回变量或表达式的值和类型。 4、赋值语句 若错误行是赋值语句,则要看赋值是否正确,然后看赋值运算符是否写正确。 5、定义语句 若错误行是定义语句,则要注意: 1)首先分析变量类型名是否写对; 2)然后分析给变量赋初值是否正确; 关键词:C语言;C语言学习;C语言技巧 中图分类号:TP312文献标识码:A文章编号:1009-3044(2007)12-21713-03 Shallowly Discusses the C Language Learning Skills CHEN Wu (Electronic Information Institute of Yangtze University, Jingzhou 434023, China) Abstract:C language as a broad international popular computer language, Over the years we have been like to learn but difficult to learn. This article is Based on a brief introduction to the C language, combined with years C language learning experience of the author, analysis of the skill of learning C language and participation computer rank test. Key words:C language; C language studies; the C language skill; C program 1 学习C语言的意义 一提起C语言,大家就有说不出的忧与喜,为什么呢?很多人都认为它难学,但如果学进去了,就会觉得其乐无穷。 在学习C语言之前,我们先了解一下C语言的发展史。C语言是1972年由美国的Dennis Ritchie设计发明的,并首次在UNIX操作系统的DEC PDP-11计算机上使用。它由早期的编程语言BCPL(Basic Combind Programming Language)发展演变而来。在1970年,AT&T贝尔实验室的 Ken Thompson根据BCPL语言设计出较先进的并取名为B的语言,最后导致C语言的问世。随着微型计算机的日益普及,出现了许多C语言版本。由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准,成为现行的C语言标准。 C语言是国际上广泛流行的计算机语言,既可以用来写系统软件,也可以用来写应用软件。许多著名的软件,如DBASEⅢ PLUS、DBASEⅣ 都是由C 语言编写的。学好C语言,可以为以后学习其他语言打下一个良好的基础,比如网络编程语言PHP的绝大部分内容与C语言相同,如果学过C语言,那么再学PHP就会非常轻松。 2 TC2.0的使用方法 TC2.0是TURBO C2.0的简称。Turbo C是美国Borland公司的产品,Borland公司是一家专门从事软件开发、研制的大公司。该公司在1987年首次推出Turbo C 1.0产品,1988年,Borland公司又推出Turbo C1.5版本,增加了图形库和文本窗口函数库等,而Turbo C 2.0则是该公司1989年出版的。TC2.0下载好后,要安装在C盘的根目录下,也就是地址C:TC下。安装好后,打开TC的应用程序,将出现以下界面: 其中顶上一行为Turbo C 2.0主菜单,中间窗口为编辑区,接下来是信息窗口,最底下一行为参考行。这四个窗口构成了Turbo C 2.0的主屏幕,以后的编程、编译、调试以及运行都将在这个主屏幕中进行。其实,上面这么多的菜单栏,只要掌握几个功能就行了。首先,按F10键,进入主菜单,用键盘上的“←”和“→”键可以选择菜单中所需要的菜单项,被选中的项以“反相”形式显示(如菜单中的各项原来是以白底黒字显示,选中后就会改为黒底白字显示)。此时按回车键或者“↓”键,就会出现一个下拉菜单。开始选择File的下拉菜单中的new选项,创建一个新的文件,当把源程序编写好后,按F9键,完成编译和连接,这时屏幕上会显示编译或连接时有无错误的信息框,按任意键,信息框消失,光标停留在出错之处。修改完毕后,再按F9,再次进行编译与连接,直到不再显示出错为止,再按Ctrl+F9组合键,系统就会执行程序,如果需要输入数据,则应从键盘输入数据,按回车键后,再按Alt+F5查看结果。最后选择File下拉菜单下的Save或者Save as保存,Save是保存在默认目录下,Save as是自己选择目录保存。最后按Alt+X关闭窗口。在使用TC时一定要习惯使用键盘,虽说有些版本的TC可以使用鼠标进行操作,但在计算机二级考试中的TC可不能用鼠标。再提一点,就是TC2.0与TC3.0的区别,最明显的是在TC2.0中有很多头文件不用加上去,但用TC3.0编写程序时,在每个程序的开头,都要加上#include(stdio.h),如果要进行算术运算,就要加上#include(math.h),而这些在TC2.0中都不需要加。 3 C语言内容概述 C语言的内容大致可以分为这么几块:(1)C语言的运算符与运算顺序;(2)C语言的三种基本程序结构,顺序,选择,循环;(3)数组;(4)函数;(5)指针;(6)结构体与共用体;(7)文件。本文针对这些内容,每一块简要介绍几句,也许对大家的C语言学习有些许帮助。 3.1 C语言的运算符与运算顺序 学好C语言的运算符和运算顺序,这是学好《C程序设计》的基础,C语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则显得十分重要。在学习中,只要对此合理进行分类,找出它们与我们在数学中所学到运算之间的不同点之后,记住这些運算也就不困难了,有些运算符在理解后就会牢记心中,将来用起来得心应手,而有些可暂时放弃不记,等用时再记不迟。 3.2 C语言的三种基本结构 C语言的三种基本结构是构成程序的最基本的框架,顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算,输出三步曲的程序就是顺序结构,例如计算圆的面积,其程序的语句顺序就是输入圆的半径r,计算s = 3.14159*r*r,输出圆的面积s。不过大多数情况下顺序结构都是作为程序的一部分,与其它结构一起构成一个复杂的程序,例如选择结构中的复合语句、循环结构中的循环体等。在学习选择结构时,要注意它的嵌套使用,也就是一个if语句中又有一个if语句,在if的判断语句中要注意一个问题,就是=与==的区别,比如if(b=1)与if(b==1),在执行完if(b=1)后,b的值为1,而执行完if(b==1)后,b的不变。在循环语句中,要注意break与continue的用法与区别,break语句是使程序从循环体中退出,从而结束循环;而continue语句是结束本次循环,进入下一个循环。 3.3 数组 数组就是一个同类元素的集合,也就是说,一个数组中的元素必须是同类型的,数组主要有一维数组与二维数组,而二维数组的本质就是一维数组,说通俗一点,二维数组就是把一维数组拆成了几行。要注意对二维数组的几种定义与初始化的方法: (1)可以只对部分元素赋初值,未赋初值的元素自动取0值。 例如:int a[3][3]={{1},{2},{3}}; 是对每一行的第一列元素赋值,未赋值的元素取0值。赋值后各元素的值为:1 0 0 2 0 0 3 0 0。int a [3][3]={{0,1},{0,0,2},{3}}; 赋值后的元素值分别为 0 1 0 0 0 2 3 0 0。 (2)如对全部元素赋初值,则第一维的长度可以不给出。 例如:int a[3][3]={1,2,3,4,5,6,7,8,9}; 可以写为:int a[][3]={1,2,3,4,5,6,7,8,9}。 C语言中,只能单个引用数组元素,而不能一次引用整个数组元素,在对数组进行引用与赋值时,要学会使用循环语句。还有一点就是要注意把字符串赋给数组的几种方法。 3.4 函数 函数是C源程序的基本模块。从函数定义的角度看,函数可分为库函数和用户定义函数两种。C语言的函数兼有其它语言中的函数和过程两种功能,从这个角度看,又可把函数分为有返回值函数和无返回值函数两种。从主调函数和被调函数之间数据传送的角度看又可分为无参函数和有参函数两种。函数定义的一般格式: [数据类型] 函数名([形式参数]) {类型说明; 语句;} 函数一般都有返回值,用return语句返回返回值。要学会函数的递归调用与嵌套调用,注意函数的值传递与地址传递。 3.5 指针 有人说,指针是C语言的灵魂,它C语言中广泛使用的一种数据类型,学习指针是学习C语言中最重要的一环,能否正确理解和使用指针是我们是否掌握C语言的一个标志。同时, 指针也是C语言中最为困难的一部分,在学习中除了要正确理解基本概念,还必须要多编程,上机调试。只要做到这些,指针也是不难掌握的。假定P是指针,那么P就是指针变量,它的内容是地址量,*P是指针的目标变量,它的内容是数据,&P是指针变量占用的存储区域地址。把整型变量a 的地址赋予p可以有以下两种方式: (1)指针变量初始化的方法 int a;int *p=&a; (2)赋值语句的方法 int a;int *p;p=&a; 不允许把一个数赋予指针变量,故下面的赋值是错误的:int *p;p=1000; 被赋值的指针变量前不能再加“*”说明符,如写为*p=&a 也是错误的。指针与数组的联系也是十分密切的。有如下例子: int *p,s[10]; P=s; 可以用&s[i],s+i,p+i来表示s[i]的地址。 int *p,s[10][10]; p=s; 可以用&s[i][j]和p+i*10+j来表示s[i][j]的地址。 把字符串的首地址赋予指向字符类型的指针变量。例如:char *pc;pc="c language"; 或用初始化赋值的方法写为:char *pc="C Language"; 这里应说明的是并不是把整个字符串装入指针变量,而是把存放该字符串的字符数组的首地址装入指针变量,要特别注意指针作为函数参数时,可以在调用一个函数时得到多个由被调函数修改的值,还有返回指针的问题,许多库函数都是返回指针值,在调用时一般都要设立相应的指针来接受返回值。 3.6 结构体与共用体 结构和联合是两种构造类型数据,是用户定义新数据类型的重要手段。要学会结构体与共用体类型数据的定义方法和引用方法与用指针和结构体构成链表,链表的建立、输出,这些是以后编写一个大型程序必不可少的。 3.7 文件 C系统把文件当作一个“流”,按字节进行处理。C文件按编码方式分为二进制文件和ASCII文件。C语言中,用文件指针标识文件,当一个文件被 打开时,可取得该文件指针。文件在读写之前必须打开,读写结束必须关闭。文件可按只读、只写、读写、追加四种操作方式打开,同时还必须指定文件的类型是二进制文件还是文本文件。文件可按字节,字符串,数据块为单位读写,文件也可按指定的格式进行读写。文件内部的位置指针可指示当前的读写位置,移动该指针可以对文件实现随机读写。 4 C语言的学习技巧 有人说,C语言的学习就是一个体力活,也就是说,要勤上机。对此,笔者深有感触,可以说学习C语言的过程就是上机的过程。在学习C语言的第一个星期,笔者花了三个小时看书,十五个小时上机。那时,刚接触C语言,不知道从何下手,但笔者悟出了一个道理,就是学习任何一种语言,都要从软件方面着手。到网上查阅资料后,找到了TC2.0,下载安装好后,就照着书本操练起来。当时,笔者对C语言的语法一窍不通,就是照着书一个字母、一个字母的往上敲,边敲边看书上对这个程序的解释,敲完后,就运行程序,但界面上显示在程序中还有几处错误,又照着书一个一个字地对,发现不是这儿少了一个分号,就是那个单词打错了,改过来再次运行就成功了。有时,一个程序调试了半天就是找不到错误所在,就有点泄气了,但是,万事开头难,只要度过了这个难关就好了。就这样,不停的敲程序,不停的改,逐渐有了些感觉。学习就是要有兴趣,有兴趣了就可以学好任何东西。在对C语言地一些基本的语法有所了解后,就尝试着对书上的程序进行一些改动或者自己编写一些小程序,看看改了某个地方后程序会发生什么变化,如果发生了变化,就考虑为什么会发生这些变化,如何消除这些变化,就这样对这些程序进行剖析,对C语言有了更进一步的了解;有时,当脑海中有了某些想法时,就在计算机上进行模拟,当然这些想法有时会成功,有时会失败,每当成功了,就有一种成就感,失败了也不气馁,这样对C语言的兴趣逐渐浓厚起来了,有时一下课笔者就往机房跑,把自己又有的想法与疑惑到电脑上进行试验。学习C语言时,不要怕看长程序,自己多分析几个长的程序后,再去看那些短的程序时,一眼就可以看出程序的目的。 下面再来谈一谈计算机二级考试。全国计算机二级考试每年四月份与九月份各举行一次,由笔试与机试两部分组成,笔试120分钟,机试60分钟,笔试部分又有两部分组成,公共基础知识与C语言程序设计知识,只有选择题与填空题。机试只有三道题,填空,改错与程序设计。笔试只要把历年的考试题做完就可以了,而机试是从一百套题中抽出来的,那一百套题的題库是公开的,考试前把那一百套题做一遍就应该没问题了。在进行机试时,一定要注意这几个问题:做填空题时,一定要把空的下划线去掉,做填空与改错时不要增行删行,因为机试是电脑评卷,电脑在改这两题是是逐行逐行的扫描,一旦发现哪一行与标准答案有不相符的地方就会判为错误,哪怕写对了。做机试题目时,一定要有输出结果,不然就会没分,还有如果题目中这样说:请设计一个程序,将一个数的奇位输出,比如输入7654321,那么就要输出7531。当你把程序修改完或设计好后,一定要输入7654321,而不要输入其它数,电脑评卷时是要看你的结果的,如果结果不是7531,而是其它,可能会判你错。最后做完题一定要保存,最好选择save,而不选save as。 参考文献: [1]谭浩强. C语言程序设计[M]. 第二版.北京:清华大学出版社,2005. [2]全国计算机等级考试全真笔试+上机考题解答与训练[M]. 电子科技大学出版社,2005. [3]全国计算机等级考试二级教程——C语言程序设计[M]. 高等教育出版社,2002. [4]全国计算机等级考试考试大纲.2006. 学习C语言的起步就是学习它的方法规则,如果把它学习得好在学习后面的时候就比较容易理。比如变量,首先要了解变量的定义方式(格式),其意义是什么(定义变量有什么用);其次就是要我要怎么去运用它(我要用什么型式去应用它)。在C语言的命令行中所有的语句都是有它自己的一定格式和形式出现在我们面前,所以在学习某种语句或命令时你首先要了解的就是它的规则是什么、有什么用、怎么实现等。这些都是语法基础,如果把它们都了解很好了,那么编起程序来就很得心应手。比如说if语句和switch语句,这两种条件语句都是用来执行判断功能的,那什么时侯用if什么时侯用switch,如果很好地了解它们的结构和作用的话那么就能灵活运用:若它的条件分支是多个而且条件的值是一个确定的值时就可以选用switch。反之,在大多数情况下就用if。 掌握了语言法规则,不一定就能编出程序来,其实学习编程就是要学习一种思想,一种思维方法,首先要确定一种算法,如从1加到100,判断润年等,我认为这些算法都是一种思维方法。画流程图就是在构建编写程序思路的过程,当画好一个流程图时编程思想也就出来了,程序也差不多了,再结合掌握的语言的方法规则,在计算机里实现就可以了。任何程序只要有思维,有想法,那么实现程序时就不会觉得无从下手。而要学习这种思维方法就是多做题,多读程序,学习别人好的思维方法,多想想一个程序还可不可以有另外一种方法来实现它。这样久而久之,自然会形成一种自己的思维方法。因此我认为不管学什么语言都是这样。 另外,良好的编程习惯也是学好C语言的重要因素。例如编写程序时用缩进的方式、写注释、程序写到一定的阶段时要做一下测试等。这些工作可以帮我们在调试程序时有很大的帮助。程序代码实现后,错误是难免的,所以也要锻炼自己的调试查错能力,而良好的编程习惯可以使我们在调试时减小工作量和提高调试效率,也有助于形成自己的编程风格。 这就是我这一个月以来学习C语言的心得 C语言是一种编译性的语言,由于出现的时间比较早,所以现在有很多不同的编译环境。在这里我不想推荐一种编译环境,只是希望大家能够找到满足自己要求的。首先我们可能会去找中文的编译环境,比如国内的WIN-TC之类,但是从以后的学习中我认为初学者还是应该从英文的环境开始入手会比较好。因为大多数的编译器都是英文的,如果对英文不习惯,为了将来你也要慢慢的去学习适应。当然不是每个人的英文水平都会那么好,那么我们可以借助于计算机,用一些在线的翻译软件,如金山词霸之类的就很好用。让我们在学习一种计算机语言的同时又可以从中掌握一些常用的英语单词,这对于我们以后学习计算机,无论是不是从事软件开发都会有好处的。 不要想以后的计算机语言会是中文的语句,这一点永远都只会是幻想。我们可以想一下,是打一个IF快一些,还是你打“如果”快一些呢? 学习语言要有目的性。没有目的你会发现自己的学习的过程中很枯燥,会渐渐失去对C语言的学习兴趣。所以我们要有一个远大而又容易实现的目的,我要用C语言来做什么?再把这个最终的目的分成部分,让我们慢慢的一点一点的来完成它,这样在学习C语言的过程中,我们就会始终陶醉在一个又一个成功的喜悦里,让我们的学习越来越有兴趣。有一天,我们会发现:原来学习C语言真的是一件很有意思的事儿,而且学好C语言也不是很难么! 学习C语言要有一定的方法。很多人学习C语言都是自学的,这里我向大家推荐一种方法。在学习的过程中,我们会发现一章一章的看下去会很枯燥,那么我们可以先掌握C语言的基本数据类型和控制结构,然后用自己的想法来实现一种功能,不会的地方可以再去书中找。不要把书当成教材,要把它当成一本字典,一个工具。如果大家还是习惯于看书中的章节循序渐近的话,我们也可以改一下,遇到不会的地方,我们可以跳过去,看下面的章节,直到把书看过一遍后我们再回到以前不懂的地方,你就会发现你已经可以看懂了。再有就是不要看一本书,每个人的思想都不相同,虽然都是C语言书籍的作者,但每个人对C语言的理解和表述都不会一样的,如果你正在看的一本书你看不懂,或是不理解,那么我建议你再去买一本另外作者写的。也就是说不一定别人说的好书就适合我们,书一定要多读多看。 学习C语言只看书也是不够的,我们要一边看书,一边上机做练习,或者在你学习了C语言的基础知识以后就可以找一些别人的程序来看,遇到不明白的函数可以再翻一下书,当然,看别人程序的时候手头有一本库函数大全是最好不过的事儿了。如果查书也理解不了,我们可以把他的程序输入到计算机里,情况好的话能够顺利通过编译,如果不能顺利执行,我们也同样可以学习到一些C语言调试方面的知识。 编程,虽然还不是很懂,但总感觉不只是学习知识这么简单,更多给我的感受是它在潜移默化中培养了人的一种能力,用自己的话来讲就是一种”代码能力“。对于同一个问题,让大家去解开答案,可能经过一些纸笔的运算都能得出结果,但是如何把这个问题转化成代码,这就是一种能力,而仅仅是将问题转换成代码,这是较为浅层次的能力,更深层的便是通过优化代码让程序运行时间缩短以及减少可能出现的bug。 如果只是单纯的学习知识,像是背英语语法知识那样去学习一门编程语言、背下代码规则(当然熟识理论知识是必须的),这样可能也可以初步懂得这门语言,但是在深入上却较为困难。我始终觉得学习编程,重点在于培养写代码的能力。就拿写文章来说,对于文字的认识,可能大家都懂,但是给定一个题目,写出来的文章质量就各有差异,有的人文章平淡无奇,而有的人的却是宏篇大论。编程也是如此,懂得了理论知识,就像是认识了文字,但是优秀的作家能将这些文字巧妙地组合在一起形成佳作,优秀的程序员也是如此,能将大家都懂得的理论知识以一种更为巧妙的方法通过代码展示出来并使之可执行。 所以,学习编程我始终认为我们每个人都应该注重写代码能力的培养。而这种培养可能需要无数次重复的练习,在获取这种能力的途中,可能有一部分人会觉得枯燥无味,因为始终看到的只是在黑色框框里输出一些数字以及字符串。刚开始的自己也是如此,但是后来那种解决问题的成就感慢慢克服了这种困难。给自己以有难度但又不超过自己能力范围的题目来练习,这样可能能逐步培养起兴趣。当然,因为每个人程度的不同,要找到适合自己能力范围的题目本身就是一种困难。以己之愚见,作为在校学生,老师的题目首先就是不错的选择,因为根据教学进度,老师都会给出不同的题目,而在此题目中必不乏难题存在,此时google一下,你可能就懂得了怎么去选择有难度又在自己能力范围的题目了。 在这个学期里写过的程序大概有八十多个,包括老师的题目以及网上的oj练习,行数在三千行左右,当然因为是零基础进来的,所以在起步阶段,“水题”的部分占所写的程序总量应该不算少,因为相信扎实的基础可能对以后会大有裨益。虽然说是水题,但是在练习的过程也发现自身存在的很多问题,通过谷歌,一步步解决那种喜悦当然不必言说啦。编译器一直用的是Dev C++和Code:Blocks,中途也尝试过VS(作为新手总想试试鲜嘛),但是对于写C来说确实显得臃肿便放弃了。也试过几个编辑器,个人觉得atom和sublime的体验还是不错的,界面比较清爽,字体颜色较多能对不同部分代码加以区分。 C语言课程的地位 C语言是最重要和最流行的编程语言之一,无论在中国还是在世界各国,“C语言程序设计”始终是高等院校的一门最基本的计算机类基础课程。虽然在过去的十余年中,许多人从C转而使用更强大的C++语言,但C仍然有其自身的优势,而且它还是通往C++的必由之路。 作为面向过程的程序设计语言的代表,C语言是一门非常好的教学语言。通过学习C语言,学生可以掌握自顶向下、逐步细化的结构化编程方式,以及模块化的设计,这一点是至关重要的。可以毫不夸张地说,学不好C语言课程,也就难以学习理解后续的“面向对象程序设计”、“数据结构”等一系列计算机类相关课程的内容。因此,理工科相关专业学生必须掌握使用C语言进行程序设计的基本知识和技能,为进一步学习与应用计算机打下坚实的基础。 教学中的存在问题及探讨 在C语言教学过程中,学生普遍认为C语言概念复杂、语法细节繁琐,解题常常没有思路,一上机写程序就出错,出错了也不知问题所在。结合近几年的教学经验,笔者归纳出当前C语言教学中存在如下几个方面的问题。 课程设置缺乏科学性。C语言课程主要包括顺序、选择、循环结构程序设计,数组、指针、结构体等数据类型,函数的调用,以及文件操作等内容。总的来说,内容相对繁多,细节较为繁琐。且对于初学者来说,数组、指针类型的使用等内容概念复杂(尤其是指针),理解比较困难。笔者认为,合理的课时安排应为64学时。在实际情况中,考虑到C语言课程作为计算机类课程的主要先修课程,往往设置在本科一年级。而同时进行的还有数学、英语等重要的基础课程,也需要占据大量的课时。所以,对于本科一年级学生的教学计划和课时安排往往是非常紧凑的,部分高校对于C语言课程的设置仅为48学时。由于理论学时和上机学时不充足,教学效果自然也就难以得到保障。 如何在学时不足的情况下达到教学目的,这就要求教师改进教学方法,运用现代化的教学手段。注重自身业务素质的提高,切实提高教学效率和教学质量。教师应充分备课并明确教学重点及教学难点,在课堂上主要介绍编程思路和怎样用c语言去实现算法,不要孤立地逐一介绍语法的细节,对于一些非教学重点内容(诸如运算符的优先级等知识点),应引导学生自学完成。因此,有必要对授课计划精心组织,本着强化算法、弱化语言的原则,即把解题思路、方法、步骤当做授课的重点,培养学生分析与解决实际问题的能力。 学生的算法设计能力薄弱。编写一个C程序,首先需要设计算法,然后再考虑适合的数据结构,并用C语言将算法实现。程序的灵魂是算法,而算法的设计是灵活且富有技巧的,需要学生主动思考,这对于初学C语言的学生来说极具挑战。 教学过程中,应改变传统灌输式教学模式,转而采用问题启发式教学,活跃学生思维,引导学生积极思考,而不是被动地接受和理解课本中的算法步骤。应遵循以下四个步骤来解决问题:一是分析问题,明确要做什么;二是给出求解问题的算法流程图;三是根据流程图编写程序代码,四是运行程序,输出最终结果。值得注意的是,流程图对于算法的分析与表示至关重要,教学中必须要求学生看得懂流程图、会画流程图,并且根据流程图能够顺畅地写出程序代码。对于递推、递归、穷举等基本方法,及常用的查找、排序等算法,应让学生有所了解并适当记忆。 学生的上机编程水平亟待提高。学生的上机编程能力普遍不能令人满意,遇到编写程序(尤其是规模稍大一些的程序),往往无从下手。一些学生学习完C语言课程,仍然停留在只会照抄或记忆课本中程序的水平,抑或自己写的寥寥几行代码,根本不考虑编程规范,编译报错看不懂英文提示信息,运行出错也不懂得如何打断点调试程序。这样的情形是非常常见的。 教师在给学生讲解示例程序时,应重点指出关键之处,以及容易出错的地方,要求学生通过自己上机实践来理解程序设计方法。对于常见的编译时错误,可以做一次归纳讲解,但应注意培养学生根据错误提示信息独立分析错误的能力;对于运行时错误,教师应演示并详细讲如何打断点、跳断点、单步执行等常用的调试步骤,必须要求学生掌握程序的调试方法。殊不知,编程水平就是在不断的调试程序、修改错误的过程中潜移默化地不断提高。 此外,笔者由于在从教前具有多年的软件开发从业经验,深知养成良好的编程习惯的重要性。平时应多提醒学生注意变量命名、程序缩进与对齐、添加必要的注释等问题,对于学生今后从事软件开发行业是必须的准备工作。 应该说,提高上机能力也终究还是一个孰能生巧的过程,大量的编程实践是根本。应强调学生多写程序(争取每天编程一小时),并鼓励学生自己写程序,从最简单的程序开始,从而循序渐进,积小胜为大胜。遇到复杂问题应逐步细化,采用模块化设计方法,通过编写函数来解决问题。 看了一段时间的《C和指针》,这样看的效果不是很好,看着书本当时是懂了,有点恍然大悟的感觉,但是发现并不能真正的把理解的内容加入到自己程序当中,不能很好的去运用它,所以对于C语言我认为理论加实践,是学习C语言的最好方法,看书并不能完全理解书中的内容,也较容易遗忘,学习效率比较低,所以现在学习《数据结构》,在看书的同时,会在Microsoft Visual C++ 6.0软件上实践,严蔚敏写的《数据结构》这本书,比较经典但是这本书是伪算法,并不能直接在计算机上运行,对于初学者上机实践比较困难,另外说一下,我认为学习应该是在模仿中理解,在模仿中创新,所以我选择结合高一凡写的书《数据结构算法实现及解析》,这本书严蔚敏写的伪算法全部用程序实现了,给我上机实践提供了很大的帮助,貌似说到数据结构了,呵呵,回到正题,下面继续说说C语言。 指针是C语言的精华,也是C语言的难点,它就像一把双刃剑,锋利无比但运用的不好也会给自己带来危害,后果比较严重,所以重点来说说指针。 很多初学者弄不清指针和数组到底有什么样的关系,为避免混淆不清,下面总结一下指针和数组的特性。指针是保存数据的地址,任何存入指针变量的数据都会被当作地址来处理,指针变量本身的地址由编译器另外存储,存储在哪里,我们并不知道,间接访问数据,首先取得指针变量的内容,把它作为地址,然后从这个地址读或写入数据。指针可以用间接访问操作符(*)访问,也可以用以下标的形式访问,指针一般用于动态数据结构。数组是用来保存数据的,数组名代表的是数组首元素的地址而不是数组的首地址,所以数组p与&p是有区别的,虽然内容相同,但意义却不同,&p才是整个数组的首地址,数组名是整个数组的名字,数组内每个元素并没有名字,不能把数组当一个整体来进行读写操作。当然数组在初始化时也有例外,如int p[]=“12345”是合法的。数组可以以指针的形式访问如*(p+i);也可以以下标的形式访问p[i],但其本质都是p所代表的数组首元素的地址加上i*sizeof(类型)个字节作为数据的真正地址来进行访问的。数组通常用于存储固定数目且数据类型相同的元素。刚开始的时候我有点分不清指针数组和数组指针,现在也总结一下,指针数组,首先它是一个数组,数组的每个元素都是指针,可以理解为“存储指针的数组”的简称,数组指针,首先它是一个指针,它指向一个数组,在32位系统下永远只占4个字节,至于它指向的数组有多少个字节,并不知道,可以理解为“指向数组的指针”。举个例子,int *p1[10]与int(*p2)[10], 要理解这个问题,首先要清楚操作符的优先级,“[]” 的优先级比“*” 的优先级高,所以首先p1与“[10]”结合构成一个数组p1[10],int *为修饰数组的内容,所以数组元素是指向int类型的指针,所以这个是指针数组,“()” 的优先级比“[]” 的优先级高,“*”与p2结合构成一个指针变量,int修饰数组的内容,即数组的每个元素,数组这里并没有名字,是个匿名数组,现在清楚了p2是一个指针,它指向一个包含10个int类型数据的数组,即为数组指针。下面再说说内存管理,内存分为三个部分:静态区、堆、栈。其实堆栈就是栈,而不是堆。静态区是保存自动全局变量和static变量。静态区的内容在整个程序的生命周期内都存在,由编译器在编译的时候分配。堆是由malloc系统函数分配内存的。其生命周期由free和delete决定。栈保存局部变量。栈上的内容只在函数范围内存在,当函数运行结束,这些内容也会自动被销毁。再说说有关内存需要注意的地方,定义了指针变量,在使用之前一定要初始化使它指向一块合法的内存,不管什么时候,我们在使用指针之前一定要确保指针是有效的。使用malloc系列函数分配内存,使用完之后应及时释放内存,以防止内存泄露。 通过这五天的高级语言程序设计学习,我学到了很多东西,同时也更深一层次的体会到C语言知识的奥妙和无穷,激起了我对C语言知识学习的兴趣和激情。 学好C语言,除了一些必须要记忆的关键字、语法和库函数,还要学会使用C语言的有关算术运算符,以及包含这些运算符的表达式,掌握赋值语句的使用方法和各种类型数据(例如熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法,掌握不同类型数值之间赋值的规律等)的输入输出方法,能正确使用各种格式转换符等,并且还需要靠自己的逻辑思维能力。 另外,上机实验是学习程序设计语言必不可少的实践环节,特别是C语言灵活、简洁,更需要通过编程的实践来真正掌握它,然后,通过多次上机练习,就对语法知识慢慢有了感性的认识,时间久了,就会加深对它的理解,在理解的基础上就会自然而然地掌握C语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这就又加深了我们对C语言的认识。 还有就是在编程时我们要细心,编完后记得检查语法及符号遗漏或错误等相关的问题。 C语言课程设计和现代计算机技术的实际应用相结合,是我们在本阶段学完理论课程之后对自己该方面的能力的一次很好的检验,从 开始的算法思路到运行调试以及另人兴奋的可用程序,都是一个很好的学习和锻炼的过程,使我们巩固了原有的理论知识,培养了我们灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力。使我们体会到自身知识和能力能在实际中的应用和发挥。不但可以激发创新意识,还可以开发创造能力、培养沟通能力。这次实习时间虽然仅有五天时间,但确实使我受益非浅。通过实习我丰富了计算机操作经验,更加深了对C语言的了解,熟悉了其环境,更增强了对visual c++的使用技巧。另外,实习中老师对我们进行了细心、耐心的指导,鼓励我们对程序进行合理改进,培养了我们的创新意识和创新能力。原来是我认为可怕的课程设计,就在种种辅助条件下完成了,心里有说不出的高兴。 关键词:C语言;函数说明;返回值 函数的一般形式是:type-specifier function_name(parameter list)parameter declarations{body of the function}类型说明符定义了函数中return语句返回值的类型,该返回值可以是任何有效类型。如果没有类型说明符出现,函数返回一个整型值。参数表是一个用逗号分隔的变量表,当函数被调用时这些变量接收调用参数的值。一个函数可以没有参数,这时函数表是空的。但即使没有参数,括号仍然是必须要有的。参数说明段定义了其中参数的类型。当一个函数没有明确说明类型时,C语言的编译程序自动将整型(int)作为这个函数的缺省类型,缺省类型适用于很大一部分函数。当有必要返回其它类型数据时,需要分两步处理:首先,必须给函数以明确的类型说明符;其次,函数类型的说明必须处于对它的首次调用之前。只有这样,C编译程序才能为返回非整型的值的函数生成正确代码。 一、函数的类型说明可将函数说明为返回任何一种合法的C语言数据类型 类型说明符告诉编译程序它返回什么类型的数据。这个信息对于程序能否正确运行关系极大,因为不同的数据有不同的长度和内部表示。返回非整型数据的函数被使用之前,必须把它的类型向程序的其余部分说明。若不这样做,C语言的编译程序就认为函数是返回整型数据的函数,调用点又在函数类型说明之前,编译程序就会对调用生成错误代码。为了防止上述问题的出现,必须使用一个特别的说明语句,通知编译程序这个函数返回什么值。下例示出了这种方法。 第一个函数的类型说明sum()函数返回浮点类型的数据。这个说明使编译程序能够对sum()的调用产生正确代码。函数类型说明语句的一般形式是:type_specifier function_name(;)即使函数使用形参,也不要将其写入说明句。若未使用类型说明语句,函数返回的数据类型可能与调用者所要求的不一致,其結果是难以预料的。如果两者同处于一个文件中,编译程序可以发现该错误并停止编译。如果不在同一个文件中,编译程序无法发现这种错误。类型检查仅在编译中进行,链接和运行时均不检查。因此,必须十分细心以确保绝不发生上述错误。当被说明为整型的函数返回字符时,这个字符值被转换为整数。因为C语言以不加说明的方式进行字符型与整型之间的数据转换,因而多数情况下,返回字符值的函数并不是说明为返回字符值,而是由函数的这种字符型向整型的缺省类型转换隐含实现的。 二、返回语句 返回语句return有两个重要用途。第一,它使得内含它的那个函数立即退出,也就是使程序返回到调用语句处继续进行。第二,它可以用来回送一个数值。本章将说明这两个用途。 (一)从函数返回函数可以用两种方法停止运行并返回到调用程序 第一种是在执行完函数的最后一个语句之后,从概念上讲,是遇到了函数的结束符“}”(当然这个花括号实际上并不会出现在目标码中,但我们可以这样理解)。例如,下面的函数在屏幕上显示一个字符串。 一旦字串显示完毕,函数就没事可做了,这时它返回到被调用处。在实际情况中,没有多少函数是以这种缺省方式终止运行的。因为有时必须送回一个值,大多数函数用return语句终止运行,有时在函数中设立了多个终止点以简化函数、提高效率。切记,一个函数可以有多个返回语句。如下所示,函数在s1、s2相等时返回1,不相等时返回-1。 (二)返回值所有的函数 除了空值类型外,都返回一个数值。该数值由返回语句确定。无返回语句时,返回值是0。这就意味着,只要函数没有被说明为空值,它就可以用在任何有效的C语言表达式中作为操作数。这样下面的表达式都是合法的C语言表达式。x=power(y);if(max(x,y)>100)printf(“greater;”)for(ch=getchar();isdigit(ch);)...;可是,函数不能作为赋值对象,下列语句是错误的:swap(x,y)=100;C编译程序将认为这个语句是错误的,而且对含有这种错误语句的程序不予编译。所有非空值的函数都会返回一个值。我们编写的程序中大部分函数属于三种类型。第一种类型是简单计算型-函数设计成对变量进行运算,并且返回计算值。计算型函数实际上是一个“纯”函数,例如sqr()和sin()。第二类函数处理信息,并且返回一个值,仅以此表示处理的成功或失败。例如write(),用于向磁盘文件写信息。如果写操作成功了,write()返回写入的字节数,当函数返回-1时,标志写操作失败。最后一类函数没有明确的返回值。实际上这类函数是严格的过程型函数,不产生值。如果读者用的是符合ANSI建议标准的C编译程序,那么所有这一类函数应当被说明为空值类型。奇怪的是,那些并不产生令人感兴趣的结果的函数却无论如何也要返回某些东西。例如printf( )返回被写字符的个数。然而,很难找出一个真正检查这个返回值的程序。因此,虽然除了空值函数以外的所有函数都返回一个值,我们却不必非得去使用这个返回值。有关函数返回值的一个常见问题是:既然这个值是被返回的,我是不是必须把它赋给某个变量?回答是:不必。如果没有用它赋值,那它就被丢弃了。请看下面的程序,它使用了mul( )函数。mul( )函数定义为:int mul(int x, int y){......} float,double都不能保证可以存储一个小数、近似值 1.213e+2 例题:如何判断浮点型变量 X 的值是否是零 if(|x-0.000001|<=0.000001)shi;else no; 为什么循环更新的变量不能定义成浮点型? 心得:试数,数学归纳法,五次在纸上 2.自增[自减] 3.例子:回文数 12112321123 43214.什么时候使用while,什么时候使用for,多尝试!do...while 主要用于人机交互。 do{....} while(表达式);while 与 for 是等价的,可以相互转换; 数组为n个变量连续分配内存空间 所有的变量数据类型必须一样所有变量所占的字节大小必须相等 例子: int [3]; 初始化: 完全初始化 不完全初始化不初始化,所有元素是垃圾值 清零 int [3] = {0};一位数组名不代表数组中所有的元素,代表地址 是否存在多维数组,不存在因为内存是线性一维的,N维数组可以作为每个元素是N-1维数组的一维数组 6.游戏 分感官效果和内核设计两部分.感官效果,涉及图形技术图像技术、音频技术等等多媒体编程.内核设计,要做一个合理的游戏,必须在明确游戏思路和算法的前提下,精确定义玩家可以从事什么行为,不能从事的行为要怎么样标记,异常的操作又要怎么处理。7.函数定义的本质:详细描述之所以能够实现某个特定功能的具体方法 return表达式的含义:终止被调函数,向主函数返回表达式的值。如果表达式为空,则只终止函数不向主调函数返回值 函数返回值的类型也称为函数的类型,如果函数名前面的返回值类型和函数执行体 中的return,表达式中的类型不同的话,最终函数返回的类型一函数名的类型相同。函数分为有参函数和无参函数。库函数,自定义函数。有返回值,无返回值函数 普通函数和主函数,一个程序只能有且只有一个主函数。主函数可以调用普通函数。普通 函数可以相互调用。主函数是程序的入口,也是程序的出口。 {值传递 和地址传递函数} 8.指针 int * p;P是变量名,p变量的数据类型是int * 类型,而int *类型实际就是存放int 类型变量地址的 类型。*p代表的是以p的内容为地址的变量 指针就是地址,地址就是指针,地址就是内存单元的编号(门牌号),指针只是编号。指针变量是存放地址的变量。指针和指针变量是两个不同的概念。但是要注意,通常我们叙述时会把指针变量简称指针。 指针的重要性:表示一些复杂的数据结构,如链表,树,图等模拟现实的显示;快速的传递数据。使函数返回一个以上的值(普通函数返回一个值,return)。直接访问硬件。能够方便的处理字符串。是理解面向对象语言中的基础。。。指针是C语言的灵魂。 指针的分类:基本类型的指针;指针和数组;指针和函数;指针和结构体; 指针的定义: 地址:地址就是内存单元的编号(门牌号),地址是从零开始的非负整数。 范围:CPU(内存的速度快于硬盘)直接处理内存条里的数据。。CPU如何控制内存条,先把内存条的数据读入CPU里,CPU内部进行处理,把结果写回内存条,但内存条数据达到一定程度,会一次性写到硬盘。(控制线,地址线,数据线)。通过地址线能确定CPU对内存条的哪个单元进行控制。范围:【0--4G-1】 指针:指针变量就是存放内存单元编号的变量 指针的本质上就是一个操作受限的非负整数。(不能进行相加等运算,可以进行相减,连续空间的不同单元)。 基本类型的指针: 指针和数组:包括一维、二维数组。 一维数组名是一个指针常量,存放的是一维数组第一个元素的地址。 如果一个函数要处理一个一维数组,则需要接收该数组的哪些信息?界定一个一维数组要几个参数: sizeof 的返回值就是给数据类型所占的字节数 一个指针变量无论他指向的变量占几个字节,该指针变量本身只占四个字节。 动态内存分配的问题: 数组的优点:存取速度快 传统数组的缺点: 数组的长度必须事先指定,不能是变量 例如:int a[5];int len = 7;int a[len];//错误 传统形式定义的数组,该数组的内存程序无法手动编程释放,只能在函数运行完毕后由系统自动释放。数字一旦定义,系统为该数组分配的存储空间就会一直在。。在一个函数运行期间,系统为该函数中所分配的空间会一直存在,直到函数运行完毕后由系统自动释放。 数组的长度不能在函数的运行过程中动态的扩充或缩小。数组的长度 一旦定义,其长 度就不能在改变。 A函数定义的数组在A函数运行期间可以被其他函数调用,当A运行完毕后,A函数中的数组将无法在其他函数使用。(A内的内存空间被释放啦)传统方式定义的数组不能跨函数使用。 为什么需要动态分配内存: 因为能解决传统数组的缺陷。传统数组也叫静态数组。 动态内存分配举例: int *p =(int *)malloc(4);//12行 /*1.要使用malloc函数,必须添加malloc.h这个头文件 2.malloc 函数只有一个形参,并且是整数 3.malloc(4)的4表示请求系统为本程序分配四个字节 4.malloc函数只能返回第一个字节的地址。5.地址,内存单元的编号。12行分配了8个字节,p变量占四个,p指向的内存也占四个字节 */ 6.p本身所占的内存是静态分配的,p所指向的内存是动态分配的。 free(p);//把p指向的内存释放,p本身不能释放,而只有main函数终止由系统释放。静态内存与动态内存的比较:静态内存是由系统自动分配,由系统自动释放,静态是在栈分配的动态内存是由程序员手动分配,手动释放动态内存是在堆分配的。 跨函数使用内存的问题: 枚举:如果一个变量只有几种可能的值。。指将变的值一一列举出来。变量的值只限于列举出来的值的范围内。enum 枚举值称为枚举元素或者枚举常量。值 0,1,2,3.。。 算法: 通俗的定义: 解题的方法和步骤 狭义的定义: 对存储数据的操作 对不同的存储结构,要完成某一个功能所执行的操作不一样 例如:输出数组中所有的元素操作和要输出链表中所有的元素操作不一样...说明了算法依附于存储结构的,不同的存储结构所执行的算法不一样。 广义的定义: 广义的算法也叫泛型。无论数据如何存储的,对该数据的操作都是一样的。我们至少可以通过两种结构来存储数据,一个是数组,一个是链表。 链表: 头结点(其数据类型和首节点的类型是一摸一样的,头结点是首节点前面那个节点,头结点不存放有效数据,设置头结点的目的是方便对链表的操作),头指针(存放头结点地址的指针变量),首节点(存放第一个有效数据的节点),尾节点 头指针->头结点->首节点->.......->尾节点(null) 确定链表需要一个参数:头指针 优点:插入删除元素效率高,不需要一个连续的很大的内存。 NULL本质也是零,而零 不代表数字零,而代表的是内存单元的编号零。\以零为编号的存储单元不可读不可写 字符串是作为字符数组来处理的,字符串中的字符是逐个存放到数组元素中的,字符串的实际长度与数组的实际长度相等。字符串结束标志: ‘’例如:C Program 共有9个字符,但内存占10个字节,字符串作为一维数组存放在内存中。缺点:查找某个位置的元素效率低 1、C中内存分为四个区 栈:用来存放函数的形参和函数内的局部变量。由编译器分配空间,在函数执行完后由编译器自动释放。 堆:用来存放由动态分配函数(如malloc)分配的空间。是由程序员自己手动分配的,并且必须由程序员使用free释放。如果忘记用free释放,会导致所分配的空间一直占着不放,导致内存泄露。 全局局:用来存放全局变量和静态变量。存在于程序的整个运行期间,是由编译器分配和释放的。 文字常量区:例如char *c = “123456”;则”123456”为文字常量,存放于文字常量区。也由编译器控制分配和释放。 【c语言上机心得】推荐阅读: 西北农林科技大学 c语言上机 实习7答案10-27 c语言程序学习心得11-17 结构力学上机心得10-14 语言、与C语言、实现汉诺塔09-30 c语言开发06-24 c语言教案07-17 C语言机房收费06-16 c语言指针变量10-13 C语言笔试题目10-25 C语言学习总结06-282.c语言上机心得 篇二
3.C语言上机实验报告_书写格式 篇三
4.c语言上机心得 篇四
5.c语言上机心得 篇五
6.浅谈C语言的学习技巧 篇六
7.C语言心得体会 篇七
8.c语言心得体会 篇八
9.C语言教学中存在问题 篇九
10.C语言学习心得报告 篇十
11.C语言高级编程心得体会 篇十一
12.C语言函数说明与返回值 篇十二
13.C语言心得与基础知识 篇十三