按键处理c语言源程序

2024-05-03

按键处理c语言源程序(精选6篇)

篇1:按键处理c语言源程序

第九章 编译预处理

课题:

教学目的: 教学重点: 教学难点: 第九章 编译预处理

1、了解预处理的概念及特点

2、掌握有参宏与无参宏的定义及使用,领会文件包含的使用及效果 掌握宏的使用,文件包含 有参宏与无参宏的使用

步骤一 复习引导

ANSI C标准规定可以在C源程序中加入一些“预处理命令”,以改进程序设计环境,提高编程效率。

这些预处理命令是由ANSI C统一规定的,但它不是C语言本身的组成部分,不能直接对它们进行编译。必须在对程序进行通常的编译之前,先对程序中这些特殊的命令进行“预处理”,即根据预处理命令对程序作相应的处理。经过预处理后程序不再包括预处理命令了,最后再由编译程序对预处理后的源程序进行通常的编译处理,得到可供执行的目标代码。

步骤二 讲授新课

C语言与其他高级语言的一个重要区别是可以使用预处理命令和具有预处理的功能。C提供的预处理功能主要有以下三种: 宏定义、文件包含、条件编译。

分别用宏定义命令、文件包含命令、条件编译命令来实现。为了与一般C语句相区别,这些命令以符号“ #” 开头。

§9.1宏定义

宏: 代表一个字符串的标识符。

宏名:被定义为“宏”的标识符。

宏代换(展开):在编译预处理时,对程序中所有出现的 “宏名”,用宏定义中的字符串去代换的过程。

一、不带参数的宏定义

一般形式:

#define

标识符

字符串

#define PI 3.1415926

main()

{ float l, s, r, v;

printf(“input radius:”);

scanf(“%f”, &r);

l = 2.0*PI*r;

s = PI*r*r;

v = 3.0/4*PI*r*r*r;

printf(“%10.4f,%10.4f,%10.4n”, l, s, v);

}

例如:由键盘输入y值,求表达式:

3(y2+3y)+ 4(y2+3y)+ y(y2+3y)#define M(y*y+3*y)main(){ int s, y;

printf(“Input a number :”);scanf(“%d”,&y);

s=3*M+4*M+y*M;

printf(“s=%dn”,s);} 先宏展开:s=3*(y*y+3*y)+4*(y*y+3*y)+ y*(y*y+3*y)再与源程序合并

说明:

⑴宏名一般用大写表示,以便与变量名区分。⑵使用宏名使程序易读,易修改。⑶只作简单的置换,不作正确性检查。⑷宏定义不是C语句,不必在行末加分号。

⑸宏名的作用域一般从自定义命令到本源文件结束。⑹可以用# undef命令终止宏定义的作用域。⑺宏定义允许嵌套,允许层层置换。

⑻宏名在源程序中用双引号括起来,则TC中预处理不对其作宏代换。

例: printf(“L=%f”, L);中双引号内L不替换。

⑼宏定义与定义的变量不同,宏只作字符替换,不分配内存空间。⑽对“输出格式”进行宏定义,可以减少书写麻烦 例如:

#define P printf #define D “%d,%d,%dn”

#define F “%6.2f,%6.2f,%6.2fn” main(){ int a=5,c=8,e=11;

float b=3.8,d=9.7;f=21.08;

P(D,a,c,e);

P(F,b,d,f);

P(F,a+b,c+d,e+f);}

二、带参数的宏定义

格式:#define

宏名(参数表)字符串

例:#define s(a,b)a*b

{……

area =s(3,2);

……}

对带参的宏展开后,为area=3*2;

例: #define M(y)y*y+3*y

{……

k=M(5);

……}

对其展开后,为k=5*5+3*5;

说明:

⑴对带参数的宏展开只是将宏名后括号内的实参

字符串代替#define命令行中的形参。

⑵宏定义时,在宏名与带参数的括号之间不应加

空格,否则将空格以后的字符都作为替代字符

串的一部分。

⑶带参宏定义,形参不分配内存单元,因此不必

作类型定义。(与函数的区别之一)⑷带参宏与函数的区别之二:

例如: main(){ int i=1;

while(i<=5)

printf(“%dt”,SQ(i++));} SQ(int y){ return(y)*(y);} 其结果为:1

如:

#define SQ(y)((y)*(y))main(){ int i =1;

while(i<=5)

printf(“%dt”,SQ(i++));} 运行结果: 2 12 30

例:利用宏定义求两个数中的大数。

#define MAX(a,b)(a>b)?a:b main(){int x, y, max;

scanf(“%d%d”, &x, &y);

max =MAX(x, y);

printf(“max=%dn”, max);} 带参的宏定义和函数不同:

1、函数调用时,先求实参表达式值,后代入。而带参的宏只是进行简单的字符替换。

2、函数调用是在程序运行时处理的,分配临时的内存单元。而宏展开则是在编译时进行的,不分配内存单元,不进行值的传递,也无“返回值”。

3、对函数中的实参和形参都要定义类型,类型应一致。而宏不存在类型问题,宏名和参数无类型,只是一个符号代表,展开时代入指定的字符即可。

4、调用函数只可得到一个返回值,而用宏可以设法得到几个结果。

5、使用宏次数多时,宏展开后使源程序增长,而函数调用不使源程序变长。

6、宏替换不占运行时间,只占编译时间。

而函数调用则占用运行时间(分配单元、保留现场、值传递、返回)一般用宏代表简短的表达式比较合适。

也可利用宏定义实现程序的简化。例9.5:

#define PR printf #define NL “n” #define D “%d” #define D1 D NL #define D2 D D NL #define D3 D D D NL #define D4 D D D D NL #define S “%s” main(){ int a,b,c,d;

char string[]=“CHINA”;

a=1;b=2;c=3;d=4;

PR(D1,a);

PR(D2,a,b);

PR(D3,a,b,c);

PR(D4,a,b,c,d);

PR(S, string);}

§9.2 “文件包含”处理

“文件包含”处理是指将指定的被包含文件的全部内容插到该控制行的位置处,使其成为源文件的一部分参与编译。因此,被包含的文件应该是源文件。通常置于源程序文件的首部,故也称为“头文件”。

C编译系统提供的头文件扩展名为“.h”,但设计者可根据实际情况,自行确定包含文件的后缀、名字及其位置。

一般形式,#include “文件名”

#include <文件名>

文件format.h

#define PR printf #define NL “n” #define D “%d” #define D1 D NL #define D2 D D NL #define D3 D D D NL #define D4 D D D D NL #define S “%s” 文件file1.c #include “format.h” main(){ int a,b,c,d;

char string[]=“CHINA”;

a=1;b=2;c=3;d=4;

PR(D1,a);

PR(D2,a,b);

PR(D3,a,b,c);

PR(D4,a,b,c,d);

PR(S, string);} 注:被包含的文件应是源文件,而不应是目标文件。

头文件除了可以包含函数原型和宏定义外,也可以包括结构体类型定义和全局变量定义等。说明:

1、一个include命令只能指定一个被包含文件,如果要包含n个文件,要用n个include命令。

2、如果文件1包含文件2,而文件2中要用到文件3的内容,则可在文件1中用两个include命令分别包含文件2和文件3,而且文件3应出现在文件2之前,即在“file1.c”中定义:

#include “file3.h”

#include “file2.h”

3、在一个被包含文件中又可以包含另一个被包含文件,即文件包含是可以嵌套的。

4、被包含文件(file2.h)与其所在的文件(file1.c),在预编译后已成为同一个文件。

5、在#include 命令中,文件名可以用双引号或尖括号括起来。

如: #include

#include “file2.h” 二者的区别:

用尖括号时称为标准方式,系统到存放C库头文件所在的目录中寻找要包含的文件。

用双引号时,系统先在用户当前目录中寻找要包含的文件,若找不到,再按标准方式查找。#include “c:tcincludemyfile.h”

/*正确*/ #include

/*正确*/ #include

/*错误*/

用尖括号:带路径:按指定路径去寻找被包含文件,但此时被包含文件不能以“.h”结尾,否则错误。

不带路径:仅从指定标准目录下找。

用引号: 带路径:按指定路径去寻找被包含文件,不再从当前目录和指定目录下找。

不带路径:先在当前目录下找,找不到再在系统指定的标准目录下找。

步骤三 课堂小结

本课主要讲解了宏定义、“文件包含”处理。对带参数的宏的使用,及与函数的使用的区别。搞清经常使用的头文件。

步骤四 布置作业 上机作业:(第九章课后练习)9.4 书面作业:(第九章课后练习)9.7、9.8

篇2:按键处理c语言源程序

把指定的文件插入到预处理命令行所在的位置并取代该命令行,即把指定的文件和当前的源程序文件连接成一个源文件。#include<文件名>

在文件包含目录中去查找指定的文件,并将该文件添加到源文件中。一个被包含的文件中可以含有文件包含命令来包含另一个文件。#include“文件名”

命令中文件名的位置是当前源文件的位置,若在当前目录中未找到该文件,则再到“包含目录”中去查找。

用一个标识符表示一个字符串,称为宏,被定义为宏的标识符称为宏名。在编译预处理时对程序中所有出现的宏名用宏定义中的字符串去代换,这就是宏替换。它是由系统编译程序时自动完成的。

无参宏定义

#define 标识符 字符串 如

#define PI 3.14 使用宏时要注意:

(1)宏定义是用宏名来表示一个字符串,在宏展开时用字符串取代宏名。

2)宏定义不是变量定义或语句,在行末不能加分号,如果加上分号则分号也成为字符串的一部分。

(3)宏定义可以出现在程序的任何地方,其作用域是宏定义命令所在位置开始到源程序结束。如果要终止其作用域可使用#undef命令。

(4)宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名。在宏展开时将逐层替换。

(5)#define PI 3.1415926 #define AREA PI*y*y 有参宏定义

#define 宏名(形参表)字符串

对带参数的宏,在调用中不仅要进行宏展开,而且还要用实参去替换形参。带参宏调用的语法格式如下: 宏名(实参表); #define M(x)x+1 K=M(3);K=3+1 定义有参宏时要注意以下几点:

(1)有参宏定义中,宏名和形参表之间不能有空格出现。

(2)在函数中,调用时要把实参的值赋给形参,进行“值传递”。而在带参宏调用中,只是符号替换,不存在值传递问题。

(3)宏定义中的形参只能是标识符,而宏调用中的实参可以是表达式。

字符串内的形参通常用括号括起来以避免出错。

在使用宏时不仅要将形式参数用括号括起来,还应将其整体用括号括起来。#define S(y)((y)*(y))条件编译

条件编译可以按不同的条件去编译不同的程序段。1#ifdef #ifdef 标识符 程序段1 #else 程序段2 #endif 功能:如果标识符已被#define定义过,则对程序段1进行编译,否则对程序段2进行编译。格式中的#else部分可以没有,即: #ifdef 标识符

程序段 #endif

2、#ifndef 语法格式如下: #ifndef 标识符 程序段1

#else 程序段2 #endif 功能与ifdef形式的功能正好相反。

3、#if 常量表达式 #if 常量表达式 程序段1 #else 程序段2 #endif 功能:如果常量表达式的值为真(非0),则对程序段1进行编译,否则对程序段2进行编译,因此可以使程序在不同条件下,完成不同的功能。

篇3:基于C语言的独立按键查询方法

如图1: (这是用于对温度监控范围进行调整的功能按键) 四个按键通过上拉电阻连接到单片机 (AT89C52) 的P2端口的P2.0, P2.1P2.2, P2.3四个引脚上。由硬件原理图可以看出, 当按键按下时, 相应的端口向单片机输入低电平, 单片机通过查询函数对各个I/O口电平的查询, 返回相应的值, 再响应相应的函数命令, 达到调整的目的。

2 软件原理

2.1 查询方法

由于只存在只有一个按键按下的情况, 因此函数只能满足查询某个按键是否按下的要求。

a.读取按键子程序在定时中端程序控制下每隔12ms巡检按键, 并返回相应的按键值, 以提供给主程序响应。

b.利用一个unsigned char data型变量同时作为四个按键的标志位, 对四个按键同时扫描;

c.设定两相应的标志位, 分别防止抖动和重复相应。

2.2 读取按键函数具体函数如下:

uc readkey () //读取按键函数

{

uc key_down;

//为防抖动而设定的标志位

uc key_continue;

//为防持续按键而设定的标志位

//将key左移四位是为了消除P2端口高位的影响

//此程序中按键按下时端口为低电平所以要将“key”取反之后再左移

uc read_key_sfr= (~key) <<4;

if (read_key_sfr==0x10||read_key_sfr==

0x20||read_key_sfr==0x40||read_key_sfr==0x80

//有单独的按键按下

{

//检查按键是否已经响应, 以防止重复相应

{

if (key_down&read_key_sfr)

//检查前次检查时该按键是否被按下, 这是为了防止抖动

{

key_down&=~read_key_sfr;

//防抖动标志位清零

key_continue|=read_key_sfr;

//放持续按键标志位置位

return (read_key_sfr)

//返回按键值

}

else

{

key_down|=read_key_sfr;

//相应标志位置位

return (0) ;//返回0, 表示没有按键被按下

}

}

else

return (0) ;

//返回0, 表示没有按键被按下

}

else

//没有按键按下或有多个按键同时按下———不响应

{

key_down=0;

key_continue=0;

//所有标志位清零

return (0) ;

//返回0, 表示没有按键被按下

}

}

2.3 读取按键子程序流程图, 如图2

结束语:这种查询按键的方法可以将四个按键利用同一段程序一次性完成扫描大大减少了程序代码的长度。同时也大大提高了单片极工作效率, 另外这种设计方法也不需要常规独立按键设计中对单片机中bdata变量的需求, 可以节省单片机更多有限的资源。

参考文献

[1]马忠梅等.单片机的C语言应用程序设计[M].第3版.北京:北京航空航天大学出版社, 2003.

[2]赵亮, 侯国锐.单片机C语言编程与实例[M].北京:人民邮电出版社, 2003.

[3]梅开乡.数字逻辑电路[M].北京:电子工业出版社, 2003.

篇4:浅探《C语言程序设计》教学

关键词:C语言;项目化教学;教学方法

中图分类号:TP312.1-4 文献标识码:A 文章编号:1674-7712 (2014) 18-0000-01

《C语言程序设计》作为计算机专业的基础课,在整个课程体系中占有重要地位。在C语言教学过程中,教师的教学方法和学生的理解接受能力的差异,对教学效果都会产生直接的影响。总结多年来的教学经验和教学体会,结合学生在学习程序设计类课程的思维规律和模式,把一些经验和方法总结出来,希望能对C语言教学有所帮助。

一、现行教学和学习中存在的问题

现行教学中理论课与实践课相对分离,不能相互促进。理论课中往往只注重对教材知识的分析和灌输,而在实践课程中,老师很难监控到每个学生,了解他们是否都在认真编写、调试程序。这就造成理论课没有起到为实践课打基础的作用,实践课也没有起到巩固、应用理论课的作用。《C语言程序设计》是一个逻辑性很强的课程。学生在面对具体的程序设计时遇到的问题与教材中的内容相距甚远,这使大多数同学感到无从下手。这其中的原因可以分成两类:一方面目前高校使用的大多数教材中,结构都基本相同。在每一章介绍完了概念之后,提供一些例题解释相关概念的使用方法,并在章节结束后针对本章中出现的内容提供一些练习题。考试也主要是测试学生对于教材内容的掌握程度,而与实际应用相距较大。这种考试实际上主要是测试学生对书本中的基本知识的掌握程度,而忽略了对学生解决实际问题的能力的培养。另一方面为了应付考试,学生更多注意的是教材中的典型例题与老师指定的重点内容,对于程序的系统概念没有真正理解,特别是没有程序整体设计的概念。这样做的结果就是学生在学习时一切围绕老师讲课的内容,特别是老师讲授的例题。学生在学习的过程中,没有注意如何综合运用相关内容来解决具体问题,导致学生在学完程序设计课程进入应用阶段时,面对具体的专业设计要求无从下手。

二、提高教学效果的方法和途径

(一)明确课程目标。本课程的目标主要是提高学生解决实际问题的能力,适应社会需求。对C语言程序设计课程的教学而言,强调实践性是在教学中特别重要的问题。老师的教学不应仅仅是传授知识,应该以培养学生的实际应用能力为主。C语言的内容繁多,在有限的课时内不可能也不必要面面俱到,所以必须突出重点,突出实用性,关键在于教会学生正确运用C语言编写程序,一些细节、具体规则和进一步的知识可以让学生在今后的应用中来不断学习和掌握。教师应始终坚持以应用为中心,以算法为基础,以培养学生的实践能力为核心,突出技术实用性和再学习能力的培养。

(二)进行教学改革。1.教学内容改革。高职学校学生的培养就是要直接面对社会需求,招之即能用。因此,程序设计课程要以社会对编程能力的需求和技术发展为依据,调整教学大纲和教学内容,以适应技术岗位能力要求,设计课程体系。在课程设置与建设中,要充分体现教学内容在训练和提高学生实践能力方面的要求,强化学生的实际开发和应用能力。总结本人多年的教学经验,结合其他老师成功的教学方法,采用项目化教学方法可以达到很好的效果。这个项目应具有以下几个特点:(1)实用性。本项目就是一个具体的实际需求,是解决现实性中一个实际问题而设计,这样也能提高学生的兴趣和热情;(2)完整性。本项目的程序设计是系统的、完整的,要能全面运用整个课程学习的知识,案例的设计贯穿整个课程的学习,随着课程的学习不断完善。

2.改变教学思想和方法。培养学生对C语言的兴趣及正确的思维模式。《C语言程序设计》注重由设计算法到书写程序并进行调试的整个过程,显得抽象、复杂,这也是大多数学生抱怨程序设计太难、太深奥、不好学的主要原因。在教学过程中,先介绍项目的整个程序设计框架,目的是使学生先对程序有个初步的印象,再结合教材,简单介绍该例子中用到的语句,让学生对该语言的学习有一个大概的了解,避免学生对学习语言望而生畏。整个教学过程中应该把“解题思路、方法和步骤”当作授课的重点,从而让学生明白如何分析、解决实际问题,逐渐培养学生进行程序设计的正确思维模式。计算机语言程序设计中算法是其灵魂,是教学重点,也是教学难点,而语言只是表示形式。没有正确的算法,计算机将解决不了任何问题。对于C语言所涉及到的算法,应进行部分精讲多练。通过案例分析,重点讲解程序设计的思想和方法,辅以語言知识的介绍,将课程内容分为若干个主题,以项目程序设计为贯穿各主题的主线。每个主题的教学过程由“要点讲解”、“练习/上机实践”和“疑难解答”三个阶段组成,然后提出项目中的问题,以学生独立完成为主,教师只提供必要的辅导,培养学生探索问题和解决问题的能力,更有利于创新能力的培养。整个课程教学围绕一个工程项目进行,通过逐步拓展的实训项目和设计,将每一阶段的学习进行小结性的贯穿与能力提高。将C的知识点都溶化到项目的程序编写中。

3.改革课程考核方式。(1)平时上机训练时给学生留一些编程习题,每次根据学生编写情况进行测评并占据期末总成绩30%;(2)期末前,要求学生完成本课程项目的整体设计,考核学生综合解决问题的能力,占据期末总成绩30%;(3)期末进行理论考试,占期末总成绩的40%。

(三)展示学生作品,激发学生的学习欲望。计算机软件课程具有多样性、复杂性和求异性特点,我们要针对每个学生任务完成的情况,让同学们展示自己的学生成果,及时肯定学生的成绩,这样会有利于激发学生的学习热情,保持学生的学习兴趣,对学生的后续学习将产生强大的动力和自信心。

(四)培养学生的自学能力和创造性。学生学习计算机语言的最终目的是编写满足实际需求的程序,所以在教学中教授的不仅仅是具体语言的语法知识,更重要的是通过这门语言学习,培养学生遇到实际问题自己分析问题、解决问题的能力。我们可以通过给学生布置作业的形式让同学们自学,老师既要要求学生独立思考、自主学习,又要鼓励学生间进行协作学习。教师可以分配一些比较复杂的问题,由几个学生组成一个小组合作解决,这样同学们可以互相探讨学习方法,协作解决一些遇到的问题。通过解决问题,锻炼学生综合应用知识的能力、培养其创造性和合作精神。

参考文献:

篇5:按键处理c语言源程序

螺旋桨直流发电机模拟装置控制器中的按键处理程序

本文采用LPC2114内部定时器延时,应用C++语言中面向对象的`程序设计方法解决延时不占CPU机时和多个按键处理软件重用性的问题,使按键处理程序更为简捷和高效.该方法已应用于螺旋桨的直流发电机模拟装置的控制器中.实验证实控制器能够快速、准确地响应用户按键输入,极少出现因按键抖动造成系统错误响应的现象,取得较好的实用效果.

作 者:李汉 LI Han 作者单位:广州航海高等专科学校,轮机系,广东,广州,510725刊 名:广州航海高等专科学校学报英文刊名:JOURNAL OF GUANGZHOU MARITIME COLLEGE年,卷(期):18(1)分类号:U664.3关键词:按键 抖动 定时器 类

篇6:按键处理c语言源程序

课题:

教学目的: 教学重点: 教学难点: 第一章 C语言概述

1、了解C语言出现的背景

2、掌握C语言程序的构成、书写格式和上机步骤 C语言程序的构成 上机操作

步骤一 引入新课

从计算机应用基础中学过的计算机语言及语言处理系统引出C语言。步骤二 讲授新课

一、C语言出现的背景

1.ALGOL60 :1960年面向问题、结构化,可读性、可移植性好,不能对硬件操作; 2.CPL:63年接近硬件,规模较大、难以应用;

3.SIMULA:1966~1967 SIMULA 66是ALGOL 60的扩充;SIMULA 67引进了“对象”和“类”等概念而成为第一个面向对象的语言;

4.BCPL :67年由CPL改制,结构化、直接处理硬件;

5.B语言:1970年贝尔实验室的Ken Thompson以BCPL语言为基础设计的,开发了第一个UNIX操作系统;

6.C语言:1972-73年间,保持了BCPL和B语言的精炼与接近硬件的优点,克服了它们过于简单、数据无类型的缺点,重写了UNIX操作系统的90%;

7.标准 C:以1978年发表的UNIX第七版中的C编译程序为基础,Brain W.Kernighan&Dennis M.Ritchie合著的《The C Programming Language》问世; 8.ANSI C:1983年美国国家标准化协会(ANSI)制定的标准

9.C++:1986年 与C兼容,保持了C的所有优点并进行了增强:增强了面向对象的机制,成为典型的面向对象和面向过程的混合语言,适用于大型系统软件和应用软件的开发;

10.87 ANSI C:1987年制定的新标准;

11.ISO C:1990年ISO接受87 ANSI C为ISO C的标准,该标准是目前C编译器的标准。

二、C语言的特点

1.语言简洁、紧凑,使用方便、灵活; 2.运算符丰富

3.数据类型多(整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类等)4.具有结构化的控制语句 5.语法不太严格,自由度大

6.既是高级语言,又具有低级语言的功能 7.生成目标代码质量高,程序执行效率 8.可移植性好

三、C语言程序的构成

1.C语言是由函数构成的,至少有一个main()函数;

2.每个函数由函数首部和函数体组成;函数体由说明语句、执行语句组成; 3.每个C程序从main()函数开始执行,并在main()中结束; 4.每个语句和数据定义的最后必须加分号;

5.C程序无输入、输出语句

输入功能由scanf()函数完成;输出功能由printf()函数完成; 6.可加注释/*……*/

借助程序实例加以说明,并提倡良好的程序设计书写风格: 1)每个语句占一行;

2)同一层次的语句从同一位置处开始书写;

3)同一层次中嵌套的结构,应从不同位置开始书写;

4)编译控制行、外部数据定义、函数定义之间空一行书写; 5)对于函数体的大括号的书写约定 6)学会使用注释。

四、上机步骤

1.进入环境c:tctc 或进入ms-dos,>cd,>cd tc,>tc 2.编辑源程序 3.保存源程序 4.编译源程序F9 5.执行程序Ctrl-F9,查看结果Alt-F5 6.退出C环境Alt-X

步骤三 课堂小结

1、C语言的构成要素,main函数在程序中的作用

2、上机操作的过程

步骤四 布置作业 上机练习:

1、进入C编辑环境,按良好的程序设计风格输入例题,按步骤编译、运行、查看结果

上一篇:凄美孤寂伤感唯美古风签名下一篇:照搬西方法制是一种 懒人的思维方式