崔孝鳳
摘要:對(duì)于C語言的初學(xué)者來說,選擇結(jié)構(gòu)的學(xué)習(xí)既是重點(diǎn)又是難點(diǎn),本文從初學(xué)者的角度出發(fā)針對(duì)選擇結(jié)構(gòu)采用滲透式漸進(jìn)案例的形式依次設(shè)計(jì)了3個(gè)案例,通過這3個(gè)案例依次清楚描述了C語言中常用的選擇結(jié)構(gòu)的三種形式,對(duì)于C語言的初學(xué)者能夠起到很好的入門引導(dǎo)作用。
關(guān)鍵詞:C語言;選擇結(jié)構(gòu);滲透式;漸進(jìn);案例教學(xué)
中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)12-0089-02
1 引言
對(duì)于C語言的初學(xué)者來說,選擇結(jié)構(gòu)的學(xué)習(xí)和掌握既是重點(diǎn)又是難點(diǎn),如何用淺顯易懂的程序案例幫助初學(xué)者理解并應(yīng)用好選擇結(jié)構(gòu)是擺在每一位C語言任課教師面前的一項(xiàng)艱巨的任務(wù)。本文從初學(xué)者的角度出發(fā),遵從由易到難的自然學(xué)習(xí)規(guī)律,采用滲透式漸進(jìn)案例的方法設(shè)計(jì)出3個(gè)案例,依次清楚描述了C語言中常用的三種選擇結(jié)構(gòu)形式,對(duì)于C語言的初學(xué)者能夠起到很好的入門引導(dǎo)作用。
2 具體案例
2.1 平行的if選擇結(jié)構(gòu)案例
【例題1】請(qǐng)?jiān)O(shè)計(jì)一個(gè)程序,功能是輸入數(shù)字形式的星期1至星期日(用數(shù)字7表示),要求輸出相應(yīng)的英文表示形式,如果用戶輸入的數(shù)字不是1到7,請(qǐng)輸出“數(shù)據(jù)輸錯(cuò)了,請(qǐng)重新輸入!”的錯(cuò)誤提示信息。
算法分析:這是一個(gè)多分支選擇結(jié)構(gòu)的程序,功能很明確,首先輸入一個(gè)數(shù)字,然后依次判斷并輸出相應(yīng)的英文表示即可。為了使程序簡(jiǎn)單化好理解,此處首先采用最好理解的平行if結(jié)構(gòu)來實(shí)現(xiàn)。平行if結(jié)構(gòu)最好理解,因?yàn)樗c人的正常思維方式是一致的(就是把各種情況都羅列出來,一項(xiàng)一項(xiàng)地逐個(gè)實(shí)現(xiàn)),等初學(xué)者把這一種結(jié)構(gòu)形式理解并掌握了以后,在此基礎(chǔ)上就可以繼續(xù)滲透,進(jìn)行更為復(fù)雜的嵌套結(jié)構(gòu)的學(xué)習(xí)。任課教師首先調(diào)動(dòng)起學(xué)生的興趣,然后逐步加深難度,這是至關(guān)重要的一個(gè)環(huán)節(jié)。
源代碼如下:
#include
int main(void)
{int day; //用變量day表示星期幾
printf("請(qǐng)輸入今天是星期幾(1,2,3...7)?") ;
scanf("%d",&day);
if(day==1) printf("Today is Monday.\n");
if(day==2) printf("Today is Tuesday.\n");
if(day==3) printf("Today is Wednesday.\n");
if(day==4) printf("Today is Thursday.\n");
if(day==5) printf("Today is Friday.\n");
if(day==6) printf("Today is Saturday.\n");
if(day==7) printf("Today is Sunday.\n");
if(day!=1&&day!=2&&day!=3&&day!=4&&day!=5&&day!=6&&day!=7) //數(shù)據(jù)輸錯(cuò)了
printf("數(shù)據(jù)輸錯(cuò)了,請(qǐng)重新輸入?。躰");
return 0;
}
2.2 嵌套的if選擇結(jié)構(gòu)案例
【例題2】題目要求同例題1,不再重述。
算法分析:程序功能與例題1相同,還是輸入一個(gè)數(shù)字,然后輸出相應(yīng)的英文星期幾的表示,根據(jù)由易到難的學(xué)習(xí)規(guī)律,在此采用嵌套的if選擇結(jié)構(gòu)來實(shí)現(xiàn)。嵌套的if選擇結(jié)構(gòu)中內(nèi)嵌的if語句既可以放在if后面的語句中也可以放在else后面的語句中,此處采用后一種。
源代碼如下:
#include
int main(void)
{int day; //用變量day表示星期幾
printf("請(qǐng)輸入今天是星期幾(1,2,3...7)?") ;
scanf("%d",&day);
if(day==1)
printf("Today is Monday.\n");
else if(day==2)//第一層嵌套
printf("Today is Tuesday.\n");
else if(day==3)//第二層嵌套
printf("Today is Wednesday.\n");
else if(day==4)//第三層嵌套
printf("Today is Thursday.\n");
else if(day==5)//第四層嵌套
printf("Today is Friday.\n");
else if(day==6)//第五層嵌套
printf("Today is Saturday.\n");
else if(day==7)//第六層嵌套
printf("Today is Sunday.\n");
else
printf("數(shù)據(jù)輸錯(cuò)了,請(qǐng)重新輸入?。躰");
return 0;
}
2.3 用switch語句來實(shí)現(xiàn)選擇結(jié)構(gòu)案例
【例題3】請(qǐng)?jiān)O(shè)計(jì)一個(gè)程序,功能同例題1。
算法分析:程序功能與例題1和例題2是相同的,此處采用C語言提供的switch結(jié)構(gòu),switch結(jié)構(gòu)常用于多分支的情況,對(duì)于該題目是比較合適的。
源代碼如下:
//用switch語句實(shí)現(xiàn)選擇結(jié)構(gòu)
#include
int main(void)
{int day; //用變量day表示星期幾
printf("請(qǐng)輸入今天是星期幾(1,2,3...7)?") ;
scanf("%d",&day);
switch(day)
{case 1:printf("Today is Monday.\n");break;//請(qǐng)注意break語句
case 2:printf("Today is Tuesday.\n");break;
case 3:printf("Today is Wednesday.\n");break;
case 4:printf("Today is Thursday.\n");break;
case 5:printf("Today is Friday.\n");break;
case 6:printf("Today is Saturday.\n");break;
case 7:printf("Today is Sunday.\n");break;
default:printf("數(shù)據(jù)輸錯(cuò)了,請(qǐng)重新輸入?。躰");break; //此處的break可以去掉
} //switch結(jié)構(gòu)結(jié)束
return 0;
}
請(qǐng)大家注意case 1至case 7后面的break語句是不能去掉的,大家可以思考一下,如果把break語句去掉,程序會(huì)出現(xiàn)怎樣的運(yùn)行結(jié)果,還正確嗎?
2.4 三個(gè)案例的比較
通過以上三個(gè)案例的比較讀者可以很容易地看出,例題1最簡(jiǎn)單,最好理解,因?yàn)槠叫衖f結(jié)構(gòu)也可以稱為并列if結(jié)構(gòu),就是通過使用if語句把程序的每一種情況單獨(dú)以一個(gè)if語句的形式列出來。這種結(jié)構(gòu),程序在運(yùn)行時(shí)需要對(duì)每一個(gè)if語句進(jìn)行執(zhí)行判斷,所以耗費(fèi)時(shí)間會(huì)比較長一些。例題2采用的是嵌套的if結(jié)構(gòu),該題目因?yàn)橐还灿邪朔N情況,所以嵌套層數(shù)比較多(六層),初學(xué)者理解起來會(huì)有一定的難度,不過因?yàn)橐呀?jīng)有例題1作為基礎(chǔ),以這種滲透式漸進(jìn)的方式會(huì)容易理解很多。讀者會(huì)發(fā)現(xiàn),在嵌套結(jié)構(gòu)中表達(dá)數(shù)字輸錯(cuò)的情況比較簡(jiǎn)潔一些。具體授課時(shí)教師可以引導(dǎo)學(xué)生嘗試將嵌套的語句放在if后面的語句中,以達(dá)到舉一反三,靈活掌握if語句嵌套結(jié)構(gòu)的教學(xué)目的。對(duì)于例題3采用switch結(jié)構(gòu)來實(shí)現(xiàn),在前面兩個(gè)例題的基礎(chǔ)上學(xué)生會(huì)感覺采用這種結(jié)構(gòu)比較簡(jiǎn)潔,當(dāng)然需要特別注意break語句的使用,對(duì)于初學(xué)者來說這是一個(gè)難點(diǎn)。
3 結(jié)束語
以上3個(gè)案例采用滲透式漸進(jìn)案例的方式具體展示了C語言中的3種實(shí)現(xiàn)選擇程序結(jié)構(gòu)的具體應(yīng)用,目的是拋磚引玉,引起學(xué)生的學(xué)習(xí)興趣,從而逐步深化下去,取得更好的學(xué)習(xí)效果,這3個(gè)案例對(duì)初學(xué)者有極好的引導(dǎo)作用,在此基礎(chǔ)上初學(xué)者可以對(duì)C語言中選擇結(jié)構(gòu)的學(xué)習(xí)和使用進(jìn)行更加深入的學(xué)習(xí)從而設(shè)計(jì)出需要的各種情形的選擇結(jié)構(gòu)的程序。
參考文獻(xiàn):
[1] 臺(tái)海江,許鑫,鄭光.《C 語言程序設(shè)計(jì)》課程教學(xué)改革探討[J]. 現(xiàn)代計(jì)算機(jī), 2018(11).
[2] 辛凌潔, 賈玉寧, 楊穎. C 語言程序設(shè)計(jì)學(xué)習(xí)興趣和方法[J]. 中國教育技術(shù)裝備, 2017(22).
[3] 董智勇, 周博雅. 通過編程實(shí)例分析探討C語言教學(xué)方法[J]. 遼寧高職學(xué)報(bào), 2018(12).
[4] 郝蕊潔, 李妮. “情境-問題-探究”式教學(xué)法在C 語言教學(xué)中的應(yīng)用[J]. 現(xiàn)代計(jì)算機(jī). 2017(11).
[5] 黃金國. 基于項(xiàng)目化教學(xué)的“C 語言程序設(shè)計(jì)”課程改革研究[J].吉林工程技術(shù)師范學(xué)院學(xué)報(bào),2018-02.
[6] 許金蘭, 徐崗. “興趣驅(qū)動(dòng)+案例教學(xué)模式”在C語言教學(xué)中的應(yīng)用[J]. 中國信息技術(shù)教育, 2018-03-23.
【通聯(lián)編輯:王力】