摘 要:作者多年從事計算機應用技術研究和教學,在C語言程序設計的教學過程中,作者一直在探索激發學生學習興趣、降低課程難度、提高學習成績的有效途徑,并提出自己的一些做法供同行們參考。
關鍵詞:C語言;教法;計算機
1 求100以內的所有素數
#include
#include
int main(void)
{
system(“color 3f”);
system(“title 100以內的所有素數");
system(“mode con cols=90 lines=30”);
int i=2,j=2,k=0;
for(i=2;i<=100;i++)
{
for(j=2;j
{
if(i%j==0)
break;
}
if(i==j)
{
printf(“\t%d\t”,i);
k++;
if(k%4==0)
printf(“\n”);
}
}
printf(“\n\n “);
}
程序說明:
這個程序使用for語句,找出100以內的所有素數,教師可以通過這個程序給學生講解for語句和if語句的綜合使用。
教師講解這個程序的時候應該多講解它的算法分析,培養學生的算法設計能力。
教師在使用這個程序時應該多關注算法設計,多給學生講解算法設計,培養學生算法設計能力。
2 用1、2、3、4,能組成多少個互不相同且無重復數字的三位數?都是多少?
#include
#include
int main(void)
{
system(“color 3f”);
system(“title 用1--4組成的互不相同且無重復數字的三位數");
system(“mode con cols=90 lines=30”);
int i,j,k,m=0,n=0;
printf(“\n”);
for(i=1;i<5;i++) //以下為三重循環
for(j=1;j<5;j++)
for(k=1;k<5;k++)
{
if (i!=k&&i!=j&&j!=k) //確保i、
j、k三位互不相同
{
m++;
printf(“\t%d,%d,%d\t”,i,j,k);
n++;
if(n%4==0)
printf(“\n”);
}
}
printf(“\n 以上一共 %d 個。\n ",m);
}
程序說明:
這個程序使用三層嵌套for語句,找出1、2、3、4組成的所有不同的并且沒有重復的三位數,教師可以通過這個程序給學生講解for語句和if語句的綜合使用。
教師講解這個程序的時候應該多講解它的算法分析,并且引導學生設計不同的算法,培養學生的算法設計能力。
教師應該多講解它的算法分析,并且引導學生設計不同的算法,培養學生的算法設計能力。
3 計時器
#include
#include
void main()
{
int i;
for(i=1;i<=5;i++)
{
Sleep(1000);
printf(“ %d\n”,i);
}
ShellExecute(NULL, “open”, “wmplayer”, “F:\\C語言\\001.wav", NULL,SW_SHOW);
MessageBox(NULL,(“下課了!"),("系統提示"),MB_OK);
}
程序說明:
這個程序通過循環和休眠的有序結合,實現計時器功能,計時結束彈出提示窗口,播放音效,教師可以一邊講解一邊修訂程序,在師生互動中完成程序。
教師講解這個程序的時候應該多講解它的算法分析,并且引導學生設計不同的算法,培養學生的算法設計能力。
教師應該多講解它的算法分析,并且引導學生設計不同的算法,培養學生的算法設計能力。
4 數制變換
#include
#include
#include
void main()
{
system(“title 數制變換");
system(“color 3e”);
int i,j;
char c[255];
printf(“\n\n\n 請輸入一個十進制數:\n ");
scanf(“%d”,&i);
printf(“\n\n 您輸入的是:%d ",i);
printf(“\n\n 該數的八進制是:%o ",i);
printf(“\n\n 該數的十六進制是:%x ",i);
sprintf(c,”%o”,i);
printf(“\n\n 該數的二進制是: ");
for(j=0;c[j]!=\0;j++)
{
switch(c[j])
{
case ‘0:printf(“000”);break;
case ‘1:printf(“001”);break;
case ‘2:printf(“010”);break;
case ‘3:printf(“011”);break;
case ‘4:printf(“100”);break;
case ‘5:printf(“101”);break;
case ‘6:printf(“110”);break;
case ‘7:printf(“111”);break;
}
}
printf(“\n\n “);
}
程序說明:
這個程序使用了switch語句和sprintf語句,實現了數制變換,其算法較抽象難懂,講解應該多和學生互動??梢砸贿呏v解一邊修訂程序,在師生互動中完成程序。
在學生完全理解的基礎上,可以引導學生設計由十六進制轉二進制的程序。
注意講解sprintf、switch等語句的用法。
5 輸入年、月、日,判斷這一天是這一年中的第幾天?
#include
#include
void main()
{
system(“color 3e”);
system(“title 輸入年、月、日,查看是一年中的第幾天");
int day,month,year,sum,leap;
printf(“\nplease input year,month,day\n”);
scanf(“%d,%d,%d”,&year,&month,&day);
switch(month)/*先計算某月以前月份的總天數*/
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf(“data error”);break;
}
sum=sum+day; /*再加上某天的天數*/
if(year%400==0||(year%4==0&&year%100!=0))/*判斷是不是閏年*/
leap=1;
else
leap=0;
if(leap==1&&month>2)/*如果是閏年且月份大于2,總天數應該加一天*/
sum++;
printf(“It is the %dth day.\n”,sum);
}
程序說明:
以3月5日為例,應該先把前兩個月的加起來,然后再加上5天即本年的第幾天,特殊情況,閏年且輸入月份大于3時需考慮多加一天。這個程序里包括switch語句的使用、閏年的判斷,算法分析需要認真講解。這個程序處理好了很有趣,還增長了知識,處理不好就枯燥無味,所以老師在講這個程序時要格外注意和學生互動。
在講解算法的基礎上,注意讓學生養成思考和創新的好習慣,鼓勵學生在編程過程中的大膽創新。
作者簡介
楊英翔,副教授。