摘? 要: 計(jì)算機(jī)程序設(shè)計(jì)課程教學(xué)內(nèi)容應(yīng)符合新時(shí)代的需要, 面向行業(yè)培養(yǎng)學(xué)生的創(chuàng)新意識(shí)和創(chuàng)業(yè)能力。 教學(xué)中應(yīng)將職業(yè)及崗位所需的經(jīng)驗(yàn)及技巧融入到問題描述、問題分析、關(guān)鍵知識(shí)點(diǎn)、任務(wù)實(shí)現(xiàn)、程序優(yōu)化、代碼閱讀這六個(gè)環(huán)節(jié)中。文章提出,教師在教學(xué)過程中,應(yīng)重視編程邏輯思維的培養(yǎng),注重內(nèi)容的科學(xué)性與嚴(yán)密性。
關(guān)鍵詞: 程序設(shè)計(jì); 科學(xué)性; 嚴(yán)密性; 教學(xué)方法
中圖分類號(hào):TP312;G642????????? 文獻(xiàn)標(biāo)識(shí)碼:A???? 文章編號(hào):1006-8228(2021)01-89-03
Research on the scientificity and strictness of teaching in programming courses
Fu Ronghui
(College of Computer Science, Neijiang Normal University, Neijiang, Sichuan 641100, China)
Abstract: The teaching content of computer programming courses should meet the needs of the new era, and face the industry to cultivate students' innovative consciousness and entrepreneurial ability. In the teaching process, the experience and skills required by occupation and post should be integrated into the six links, i.e., problem description, problem analysis, key knowledge points, task realization, program optimization and code reading. This paper proposes that, in the teaching process, teachers should pay attention to the training of programming logic thinking and pay attention to the scientificity and strictness of the teaching content.
Key words: programming; scientificity; strictness; teaching method
0 引言
教學(xué)的科學(xué)性體現(xiàn)在它必須要符合自身內(nèi)在的客觀規(guī)律,不能違背規(guī)律進(jìn)行[5]。目前程序設(shè)計(jì)類的教學(xué)方法很多,主要分為三類:第一類是經(jīng)典類,以語言本身為目標(biāo),強(qiáng)調(diào)知識(shí)點(diǎn)的學(xué)習(xí)。第二類是案例類,將知識(shí)點(diǎn)融入到案例中。第三類是程序設(shè)計(jì)思想與方法類,一般描述比較抽象,內(nèi)容較深。項(xiàng)目教學(xué)法與這三類教學(xué)法有所不同,是以一個(gè)完整的企業(yè)項(xiàng)目為載體展開的(例如學(xué)生成績管理系統(tǒng))。項(xiàng)目教學(xué)法在深度和廣度上達(dá)到了本科教育層次要求,在組織方式上,則按照職業(yè)任務(wù)構(gòu)建和展開。和前面的三類相比,項(xiàng)目教學(xué)法有許多值得肯定的地方[1]。不過,在使用過程中發(fā)現(xiàn),項(xiàng)目內(nèi)容設(shè)計(jì)常常缺乏應(yīng)有的科學(xué)性與嚴(yán)密性[2,4]。本文歸納如下,借此與同行商榷。
1 值得研究的表述
例如:一杯清水和一杯鹽水,交換兩個(gè)杯子中的液體。
交換兩個(gè)杯子中的液體,一般需要借助一個(gè)空杯子。解決問題的步驟如下:
⑴ 將清水杯中的水倒入空杯子中;
⑵ 將鹽水杯中的水倒入清水杯子中;
⑶ 將空杯子中的清水倒入鹽水杯中。
分析:這里⑶空杯子的清水,表述不當(dāng),空杯子怎么會(huì)有清水。建議修改為“第三個(gè)杯子”。
2 前后矛盾
2.1 計(jì)算王晨同學(xué)三門課程的平均分
#include
void? main()
{ float average;
unsignedintc_score=82;
unsignedintmath_score=80;
unsignedintenglish_score=76;
average=(c_score+math_score+english_score)/3.0; }
分析:程序沒有輸出,與算法特性中的至少一個(gè)輸出矛盾。
2.2 選擇排序算法
基本思想:升序(或降序)排序過程,第1趟,在待排序記錄r[1]~r[n]中選出最?。ɑ蜃畲螅┑挠涗?,將它與r[1]交換;第2趟,在待排序記錄r[2]~r[n]中選出最?。ɑ蜃畲螅┑挠涗?,將它與r[2]交換;以此類推,第i趟在待排序記錄r[i]~r[n]中選出最小(或最大)的記錄,將它與r[i]交換,使有序序列不斷增長直到全部排序完畢。
初始序列:{49 27 65 97 76 12 38}
第1趟:12與49交換:12 {27 65 97 76 49 38}
第2趟:27不動(dòng) :12? 27 {65 97 76 49 38}
第3趟:65與38交換:12? 27? 38 {97 76 65 49}
第4趟:97與49交換:12? 27? 38? 49 {97 76 65}
第5趟:76與65交換:12? 27? 38? 49? 65 {97 76}
第6趟:97與76交換:12? 27? 38? 49? 65? 76? 97完成。
分析:根據(jù)選擇排序算法思想,應(yīng)修改第3、4、5趟為:
第3趟:65與38交換:12? 27? 38 {97 76 49 65}
第4趟:97與49交換:12? 27? 38? 49 {76 65 97}
第5趟:76與65交換:12? 27? 38? 49? 65 {76 97}
2.3 冒泡排序算法
假設(shè)待排序存放在數(shù)組r[n]中,升序(或降序)排序過程為,第一趟,將第一個(gè)數(shù)據(jù)和第二個(gè)數(shù)據(jù)進(jìn)行比較,若r[1]>r[2](或r[1] for(i=0; i<7; i++) //冒泡排序算法開始 { for(j=i; j<7; j++) { if(stu_score[i]>stu_score[j]) { temp=stu_score[j]; stu_score[j]=stu_score[i]; stu_score[i]=temp; }}} //冒泡排序算法結(jié)束 for(i=0; i<7; i++) //輸出排好序的數(shù)據(jù) printf("%d\n",stu_score[i]); 分析:該程序主要代碼思想為選擇法排序。冒泡排序主要代碼應(yīng)修改為: for(i=1; i<6; i++) //冒泡排序算法開始 { for(j=0; j<6-i; j++) if(stu_score[j]>stu_score[j+1]) { temp=stu_score[j]; stu_score[j]=stu_score[j+1]; stu_score[j+1]=temp; } } 3 程序代碼與功能需求不一致 例如:在學(xué)生成績管理系統(tǒng)中,學(xué)生的信息包括學(xué)號(hào)、姓名、性別、C成績、高數(shù)成績、英語成績、Java成績,將某位男生高于60分的考試成績按照兩個(gè)一組輸出。 輸出的主要代碼如下: if(count % 3==0) { printf("\n"); } 分析:這里的if(count % 3==0) {printf("\n"); },功能是按照三個(gè)一組輸出,與題意兩個(gè)一組輸出明顯不一致。 4 流程圖不完整及表達(dá)有誤 例如:讀下面switch語句的程序段,畫出其程序流程圖,并說明其執(zhí)行過程。 intx,y,z=97; scanf(“%d%d”,&x,&y); switch(x+y) { case 10: case 20:printf(“%c”, z); break; case 25:printf(“%d”,z); break; case 30:printf(“%c”, z+5); } 畫出的程序流程圖如圖1所示。 分析:根據(jù)程序代碼x+y的值為10和20執(zhí)行相同的代碼,并不是值為10時(shí)什么也不做,分支完應(yīng)是一個(gè)出口。圖1switch分支流程案例圖修改后如圖2所示。 5 實(shí)現(xiàn)功能有誤 閱讀下面的程序,寫出輸出結(jié)果。 #include void main() { int i,j; for (i=1; i<=3; i++) { for(j=1; j<=4; j++) { if (i==j) printf(“i*j=% d\n”, i*j); }}} 故最終的輸出結(jié)果為: 1*1=1 2*2=4 3*3=9 分析:要使結(jié)果如上的顯示,則程序中的if語句修改為:if(i==j)printf(“%d*%d=%d\n”,i*j)。 學(xué)生成績管理系統(tǒng)中,經(jīng)常需要查找某個(gè)學(xué)生信息,而最準(zhǔn)確的查找條件就是使用學(xué)號(hào)。也就是說,根據(jù)輸入的學(xué)生學(xué)號(hào),查找該學(xué)生是否在系統(tǒng)中。 查找的學(xué)生學(xué)號(hào)代碼主要如下: if(strcmp(stu_nos[i],sno)) { break; } //如找到查找的學(xué)號(hào),終止循環(huán) else { i++; } //沒有找到,則對比下一個(gè) 分析:字符串比較函數(shù)strcmp,按照ASCII碼順序比較字符串1和字符串2的大小。如果字符串1和字符串2相同則結(jié)果為0;字符串1大于字符串2時(shí)結(jié)果為正數(shù);字符串1小于字符串2時(shí)結(jié)果為負(fù)數(shù)。故if(strcmp(stu_nos[i],sno)) { break; } else { i++; }應(yīng)修改為:if(strcmp(stu_nos[i],sno)==0) { break; } else { i++; }。 6 變量初始化有誤 ⑴ 求50個(gè)學(xué)生的《C程序設(shè)計(jì)》課程考試成績的最高分和最低分。 程序中最高分和最低分的初始化代碼如下: intc_scores[50],max=101,min=-1; //c_scores存分?jǐn)?shù)、max最高分、min最低分 分析:程序中的max=101,min=-1賦值出錯(cuò),根據(jù)題意應(yīng)修改為:max=-1,min=101。 ⑵ 根據(jù)Student結(jié)構(gòu)體類型定義,定義具體學(xué)生“陳奕楊”變量,并初始化該生信息。 【示例】 第一種直接整體賦初值示例如下: struct Student st={1005,"陳奕楊",100,'F'}; 第二種成員變量逐一賦值示例如下: struct Student st2; st2.num=1006; st2.name="許鐸”; st2.score=100; st2.gender='M'; 分析:第一種直接賦初值是可行的,但是第二種逐一賦值中的st2.name="許鐸”是錯(cuò)誤的,字符串賦值不能直接使用等號(hào),可以使用輸入函數(shù)scanf、gets及復(fù)制函數(shù)strcpy等方式。 ⑶ 假定學(xué)生基本情況包含學(xué)號(hào)和三門科目成績,編寫自定義函數(shù)myinit()實(shí)現(xiàn)求某學(xué)生信息的初始化,并將該生信息和平均成績輸出到屏幕上。 代碼如下: #define N 3 structstuInfo {? longnum; char name[10]; float score[N]; } voidmycompute(long intnum,char a[],float *p) {? int i; floatsum,avg; printf(" 學(xué)號(hào):%ld,",num); printf(" 姓名:%s",a); for(i=0;i { printf("%5.1f",*(p+i)); sum=sum+*(p+i); } avg=sum/N; printf(" 平均成績:%5.1f",avg); printf("\n"); } main() { structstuInfo yang={2014106,89.5,95.0,87.5}; mycompute(yang.num,yang.name,yang.score); } 分析:函數(shù)mycompute的代碼中,sum變量的作用是累加求和,故變量應(yīng)該初始化0,即sum=0。根據(jù)結(jié)構(gòu)體的定義及教材的運(yùn)行結(jié)果圖分析,main函數(shù)中對結(jié)構(gòu)體初始化,也缺少對成員name的初始化,應(yīng)修改為:structstuInfo yang={2014106,“陳奕楊”89.5,95.0,87.5}。 7 結(jié)束語 眾所周知,教學(xué)內(nèi)容的選用對學(xué)習(xí)效果有非常重要的影響,是我們開展教學(xué)的重要環(huán)節(jié),在該環(huán)節(jié)萬萬不可忽視科學(xué)性與嚴(yán)密性[3]。本文的探討若有不妥,謹(jǐn)望同行專家及讀者不吝指正。 參考文獻(xiàn)(References): [1] 王廷梅,胡正坤等.C語言程序設(shè)計(jì)[M].科學(xué)出版社,2018. [2] 周學(xué)文.關(guān)于教材習(xí)題的科學(xué)性與嚴(yán)密性—評《Visual Foxpro程序設(shè)計(jì)教程》的習(xí)題[J].內(nèi)江師范學(xué)院學(xué)報(bào),2003.8. [3] 王亞平,王萍.教材例題引入應(yīng)重視其科學(xué)性與嚴(yán)密性[J].錦州醫(yī)學(xué)院學(xué)報(bào),2000.4. [4] 張希海.由一道春季高考題談教學(xué)的嚴(yán)密性——對全反射及臨界角定義的一點(diǎn)看法[J].物理教師,2001.7. [5] 如何把握教育的科學(xué)性[EB/OL].http://www.gaojunpeng.com/jiaoyu/39264.html. 收稿日期:2020-08-14 基金項(xiàng)目:內(nèi)江師范學(xué)院一流本科專業(yè)軟件工程子項(xiàng)目“在程序設(shè)計(jì)課程中融入創(chuàng)新創(chuàng)業(yè)教育的改革研究”(YLZY201911) 作者簡介:傅榮會(huì)(1978-),女,重慶墊江人,碩士,副教授,主要研究方向:計(jì)算機(jī)應(yīng)用及相關(guān)教學(xué)。