摘 要:作者多年从事计算机应用技术研究和教学,在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语句,实现了数制变换,其算法较抽象难懂,讲解应该多和学生互动。可以一边讲解一边修订程序,在师生互动中完成程序。
在学生完全理解的基础上,可以引导学生设计由十六进制转二进制的程序。
注意讲解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语句的使用、闰年的判断,算法分析需要认真讲解。这个程序处理好了很有趣,还增长了知识,处理不好就枯燥无味,所以老师在讲这个程序时要格外注意和学生互动。
在讲解算法的基础上,注意让学生养成思考和创新的好习惯,鼓励学生在编程过程中的大胆创新。
作者简介
杨英翔,副教授。