APP下载

C语言趣味课堂练习之三

2017-01-21杨英翔

卷宗 2016年10期
关键词:C语言教法计算机

摘 要:作者多年从事计算机应用技术研究和教学,在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语句的使用、闰年的判断,算法分析需要认真讲解。这个程序处理好了很有趣,还增长了知识,处理不好就枯燥无味,所以老师在讲这个程序时要格外注意和学生互动。

在讲解算法的基础上,注意让学生养成思考和创新的好习惯,鼓励学生在编程过程中的大胆创新。

作者简介

杨英翔,副教授。

猜你喜欢

C语言教法计算机
计算机操作系统
基于Visual Studio Code的C语言程序设计实践教学探索
基于计算机自然语言处理的机器翻译技术应用与简介
基于C语言的计算机软件编程
信息系统审计中计算机审计的应用
高职高专院校C语言程序设计教学改革探索
“教法融合”:得道方能行远
论子函数在C语言数据格式输出中的应用
Fresnel衍射的计算机模拟演示
语文教学要创新教法