文档库 最新最全的文档下载
当前位置:文档库 › c语言编写单片机技巧

c语言编写单片机技巧

c语言编写单片机技巧
c语言编写单片机技巧

1. C语言和汇编语言在开发单片机时各有哪些优缺点?

答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。C语言是一种结构化的高级语言。其优点是可读性好,移植容易,是普遍使用的一种计算机语言。缺点是占用资源较多,执行效率没有汇编高。对于目前普遍使用的RISC架构的8bit MCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什幺动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在单片机开发中,我们还是建议采用汇编语言比较好。

2.C或汇编语言可以用于单片机,C++能吗?

答:在单片机开发中,主要是汇编和C,没有用C++的。

3.搞单片机开发,一定要会C吗?

答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。对于目前普遍使用的RISC架构的8bit MCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什么动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在资源较少单片机开发中,我们还是建议采用汇编语言比较好。而C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。C语言有功能丰富的库函数、运算速度快、编译效率高、有良好的可移植性,而且可以直接实现对系统硬件的控制。C语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。因此,使

用C语言进行程序设计已成为软件开发的一个主流。用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。

综上所述,用C语言进行单片机程序设计是单片机开发与应用的必然趋势。所以作为一个技术全面并涉足较大规模的软件系统开发的单片机开发人员最好能够掌握基本的C语言编程。

4.当开发一个较复杂而又开发时间短的项目时,用C还是用汇编开发好?

答:对于复杂而开发时间紧的项目时,可以采用C语言,但前提是要求对该MCU系统的C语言和C编译器非常熟悉,特别要注意该C编译系统所能支持的数据类型和算法。虽然C语言是最普遍的一种高级语言,但不同的MCU厂家其C语言编译系统是有所差别的,特别是在一些特殊功能模块的操作上。如果对这些特性不了解,那调试起来就有的烦了,到头来可能还不如用汇编来的快。

5.在教学中要用到8088和196芯片单片机教材,请问那里可以找到关于这方面的书或资料?

答:有关这方面的教材,大学里常用的一本是《IBM-PC汇编语言程序设计》清华大学出版社出版的,在网上以及书店都是可以找到的,另外网上还可以搜索到很多其他的教材如:《微机原理及汇编语言教程》(杨延双张晓冬等编著)和《16/32 位微机原理、汇编语言及接口技术》(作者:钟晓捷陈涛,机械工业出版社出版)等,可以在较大型的科技书店里查找或者直接从网上订购。

6.初学者到底是应该先学C还是汇编?

答:对于单片机的初学者来说,应该从汇编学起。因为汇编语言是最接近机器码的一种语言,可以加深初学者对单片机各个功能模块的了解,从而打好扎实的基础。

7.我是一名武汉大学电子科技大3的学生,学了电子线路、数字逻辑、汇编和接口、C语言,但是总是感觉很迷茫,觉好象什么都不会。怎么办?

答:大学过程是一个理论过程,实践的机会比较少,往往会造成理论与实践相脱节,这是国内大学教育系统的通病,不过对于学生来说切不可好高骛远。一般从大三会开始接触到一些专业课程,电子相关专业会开设相关的单片机应用课程并且会有简单的实验项目,那么要充分把握实验课的机会,多多地实际上机操

作练习。平时可以多看看相关的电子技术杂志网站,看看别人的开发经验,硬件设计方案以及他人的软件设计经验。有可能的话,还可以参加一些电子设计大赛,借此机会2--3个人合作做一个完整系统,会更有帮助。到了大四毕业设计阶段,也可以选择相关的课题作些实际案例增长经验。做什么事情都有个经验的积累过程,循序渐进。

8.请问作为学生,如何学好单片机?

答:学习好单片机,最主要的是实践,在实践中增长经验。在校学生的话,实践机会的确会比较少,但是有机会的话,可以毕业实习选择相关的课题,这样就可以接触到实际的项目。而且如果单片机微机原理是一门主课的话,相信学校会安排比较多的实践上机机会。有能力的话,可以找一些相关兼职工作做做,会更有帮助。而且单片机开发应用需要软硬件结合,所以不能只满足于编程技巧如何完美,平时也要注意硬件知识的积累,多上上电子论坛网站,买一些相关杂志。可能的话,可以到ic37去买一些小零件,自己搭一个小系统让它工作起来。HOTLEK的单片机是RISC结构的8位单片机,它可以广泛应用在家用电器、安全系统、掌上游戏等方面。

9.如何才能才为单片机的高手啊?

答:要成为单片机高手,应该多实践,时常关注单片机的发展趋势;经常上一些相关网站,从那里可以找到许多有用的资料。

10.女性是否适合单片机软件编程这个行业?

答:要根据自己的兴趣,配合自己对软件编程的耐性,男女皆适合这个行业。

11. Holtek的数据手册在哪里下载?

答:如果对Holtek的IC感兴趣的话,相应的数据手册可以到网站上https://www.wendangku.net/doc/b313048057.html,/products/index.htm去选IC资料下载。

12. 8位机还能延续多久!

答:以现在MCU产品主力还是在8位领域,主要应用于汽车应用、消费性电子、电脑及PC周边、电信与通讯、办公室自动化、工业控制等六大市场,其中车用市场多在欧、美地区,而亚太地区则以消费性电子为主,并以量大低单价为产品主流,目前16位MCU与8位产品,还有相当幅度的价差,新的应用领域也仍在开发,业界预计,至少在2005年前8位的MCU仍是MCU产品的主流。

13.学习ARM及嵌入式系统是否比学习其它一般单片机更有使用前景?对于一个初学者应当具备哪些相关知识?

答:一般在8位单片机与ARM方面的嵌入式系统是有层次上的差别,ARM 适用于系统复杂度较大的高级产品,如PDA、手机等应用。而8位单片机因架构简单,硬件资源相对较少,适用于一般的工业控制、消费性家电等等。对于一个单片机方面的软件编程初学者,应以HOLTEK-p.htm" target="_blank" title="HOLTEK货源和PDF资料">HOLTEK系列或8051等8位单片机来做入门练习。而初学者应当具备软件编程相关知识,单片机一般软件编程是以汇编语言为主,各家有各家的语法,但大都以RISC的MCU架构为主,其中RISC (Reduced Instruction Set Computer) 代表MCU的所有指令。都是利用一些简单的指令组成的,简单的指令代表MCU 的线路可以尽量做到最佳化,而提高执行速率。另外初学者要具备单片机I/O接口的应用知识,这在于周边应用电路及各种元器件的使用,须配合自己所学的电子学及电路学等。

14.符合44PIN的80系列8位单片机的MCU有哪些?

答:符合44PIN的80系列8位单片机有Z8674312FSC、Z86E2112FSC、Z86E2116FSC。

15.请介绍一下MCU的测试方法。

答:MCU从生产出来到封装出货的每个不同的阶段会有不同的测试方法,其中主要会有两种:中测和成测所谓中测即是WAFER的测试,它会包含产品的功能验证及AC、DC的测试。项目相当繁多,以HOLTEK-p.htm" target="_blank" title="HOLTEK货源和PDF资料">HOLTEK产品为例最主要的几项如下: 接续性测试:检测每一根I/OPIN内接的保护用二极管是否功能无误。 功能测试:以产品设计者所提供测试资料(TEST PATTERN)灌入IC,检查其结果是否与当时SIMULATION时状态一样。 STANDBY电流测试:测量IC处于HALT模式时即每一个接点(PAD)在1态0态或Z态保持不变时的漏电流是否符合最低之规格。

耗电测试:整颗IC的静态耗电与动态耗电。

输入电压测试:测量每个输入接脚的输入电压反应特性。

输出电压测试:测量每个输出接脚的输出电压位准。

相关频率特性(AC)测试,也是通过外灌一定频率,从I/O 口来看输出是否与之匹配。

为了保证IC生产的长期且稳定品质,还会做产品的可靠性测试,这些测试包括ESD测试,LATCH UP测试,温度循环测试,高温贮存测试,湿度贮存测试等。成测则是产品封装好后的测试,即PACKAGE测试。即是所有通过中测的产品封装后的测试,方法主要是机台自动测试,但测试项目仍与WAFER

TEST相同。PACKAGE TEST的目的是在确定IC在封装过程中是否有任何损坏。

16.能否利用单片来检测手机电池的充放电时间及充放电时的电压电流变化,并利用一个I/O端口使检测结果在电脑上显示出来?

答:目前市场上的各类智能充电器,大部分都采用MCU进行充电电流和电压的控制。至于要在电脑上显示,好象并不实用,可能只有在一些专门的电池检测仪器中才会用到;对于一般的手机用户来说,谁会在充电时还需要用一台电脑来做显示呢?要实现单片机与电脑的连接,最简单的方式就是采用串口通讯,但需要加一颗RS-232芯片。

17.在ARM编程中又应当如何?

答:就以嵌入式系统观念为例,一般嵌入式处理器可以分为三类:嵌入式微处理器、嵌入式微控制器、嵌入式DSP(Digital Signal Processor)。嵌入式微处理器就是和通用计算机的微处理器对应的CPU。在应用中,一般是将微处理器装配在专门设计的电路板上,在母板上只保留和嵌入式相关的功能即可,这样可以满足嵌入式系统体积小和功耗低的要求。目前的嵌入式处理器主要包括:PowerPC、Motorola 68000、ARM系列等等。嵌入式微控制器又称为单片机,它将CPU、存储器(少量的RAM、ROM或两者都有)和其它接口I/O封装在同一片集成电路里。常见的有HOLTEK-p.htm" target="_blank" title="HOLTEK货源和PDF资料">HOLTEK MCU系列、Microchip MCU系列及8051等。嵌入式DSP 专门用来处理对离散时间信号进行极快的处理计算,提高编译效率和执行速度。在数字滤波、FFT(Fast Fourier Transform)、频谱分析、图像处理的分析等领域,DSP正在大量进入嵌入式市场。

18. MCU在射频控制时,MCU的时钟(晶振)、数据线会辐射基频或基频的倍频,被低噪放LNA放大后进入混频,出现带内的Spur,无法滤除。除了用layout、选择低辐射MCU的方法可以减少一些以外,还有什么别的方法?

答:在设计高频电路用电路板有许多注意事项,尤其是GHz等级的高频电路,更需要注意各电子组件pad与印刷pattern的长度对电路特性所造成的影响。最近几年高频电路与数位电路共享相同电路板,构成所谓的混载电路系统似乎有增加的趋势,类似如此的设计经常会造成数位电路动作时,高频电路却发生动作不稳定等现象,其中原因之一是数位电路产生的噪讯,影响高频电路正常动作所致。为了避免上述问题除了设法分割两电路block之外,设计电路板之前充分检讨设计构想,才是根本应有的手法,基本上设计高频电路用电路板必需掌握下列三大原则: 高质感。不可取巧。 不可仓促抢时间。以下是设计高频电路板的一些建议:

(1)印刷pattern的长度会影响电路特性。尤其是传输速度为GHz高速数位电路的传输线路,通常会使用strip line,同时藉由调整配线长度补正传输延迟时间,其实这也意味着电子组件的设置位置对电路特性具有绝对性的影响。

(2)Ground作大better。铜箔面整体设置ground层,而连接via的better ground 则是高频电路板与高速数位电路板共同的特征,此外高频电路板最忌讳使用幅宽细窄的印刷pattern描绘ground。

(3)信号线作短配线设计。不可任意加大配线长度,尽量缩短配线长度。

(4)减少电路之间的结合。尤其是filter与amplifier输出入之间作电路分割非常重要,它相当于audio电路的cross talk对策。

(5)MCU回路Layout考量:震荡电路仅可能接近IC震荡脚位;震荡电路与VDD & VSS保持足够的距离;震荡频率大于1MHz时不需加osc1 & osc2 电容;电源与地间要最短位置并尽量拉等宽与等距的线,于节点位置加上104/103/102等陶瓷电容。

19. Intel系列的96单片机80c196KB开发系统时,都有那些注意事项?

答:一个即时系统的软体由即时操作系统加上应用程序构成。应用程序与作业系统的接口通过系统调用来实现。用80C196KB-p.htm" target="_blank" title="80C196KB货源和PDF资料">80C196KB作业系统的MCU,只能用内部

RAM作为TCB和所有系统记忆体(含各种控制表)以及各个任务的工作和资料单元。因此一定要注意以下几点:

(1)对各个任务分配各自的堆迭区,该堆迭区既作为任务的工作单元,也作为任务控制块的保护单元。

(2)系统的任务控制块只存放各任务的堆迭指标,而任务的状态均存放于任务椎栈中。在一个任务退出运行时,通过中断把它的状态进栈,然后把它的堆迭指标保存于系统的TCB中;再根据优先取出优先顺序最高的已就绪任务的堆迭指标SP映象值送入SP中;最后执行中断返回指令转去执行新任务。

(3)各任务的资料和工作单元尽量用堆迭实现,这样可以允许各任务使用同一个子程序。使用堆迭实现参数传递并作为工作单元,而不使用绝对地址的RAM,可实现可重入子程序。该子程序既可为各个任务所调用,也可实现递回调用。

20.在demo板上采样电压时,不稳定,采样结果有波动,如何消除?

答:一般来说,仿真器都是工作在一个稳压的环境(通常为5V)。如果用仿真器的A/D时,要注意其A/D参考电压是由仿真器内部给出,还是需要外部提供。A/D转换需要一个连续的时钟周期,所以在仿真时不能用单步调试的方法,否则会造成A/D采样值不准。至于A/D采样不稳定,可以在A/D输入口加一电容,起到滤波作用;在软件处理时采用中值滤波的方法。

用c语言编写一个成绩管理系统

程序说明:有N个学生,每个学生的数据包含学号(不重复)、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统,使之能提供以下功能:(1)主菜单学生成绩管理系统 1、成绩录入 2、成绩查询 3、成绩统计 4、退出(2)各菜单项功能① 成绩录入:输入学生的学号、姓名及三门课的成绩;② 成绩查询:(至少一种查询方式)。 v 按学号查询学生记录。 v 查询不及格学生的记录。③成绩统计: v 计算学生的平均分; v 根据学生的平均分高低,对学生的数据进行排序后输出; v 对学生单科成绩排序,输出学生姓名与该科成绩;④退出系统:退出整个系统(即主菜单)。(3)结构体数组: #define N 30 struct student {int num; /* 定义学号*/ char name[20]; /* 定义姓名*/ float score[3]; /* 定义存贮三门课成绩的数组*/ float average; /* 定义平均成绩*/ };struct student stu[N]; /* 定义结构体数组,存贮多个学生的记录*/ . #include #include #include struct student { int num; char name[20]; float score[4]; float average; } stu[10000]; long t,max; bool unpass[1000]; FILE *fstu=fopen("stud.dat","at+"); int init() { int no,i; float s[4],ave; char nam[20]; while (!feof(fstu)) { fscanf(fstu,"%d",&no); fscanf(fstu,"%s",nam); fscanf(fstu,"%f%f%f%f",&s[1],&s[2],&s[3],&ave);

数据结构与算法C语言版期末复习题

《数据结构与算法》期末复习题 一、选择题。 1.在数据结构中,从逻辑上可以把数据结构分为 C 。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 2.数据结构在计算机内存中的表示是指 A 。 A.数据的存储结构B.数据结构C.数据的逻辑结构D.数据元素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的 A 结构。 A.逻辑B.存储C.逻辑和存储D.物理 4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储 C 。 A.数据的处理方法B.数据元素的类型 C.数据元素之间的关系D.数据的存储方法 5.在决定选取何种存储结构时,一般不考虑 A 。 A.各结点的值如何B.结点个数的多少 C.对数据有哪些运算D.所用的编程语言实现这种结构是否方便。 6.以下说法正确的是 D 。 A.数据项是数据的基本单位 B.数据元素是数据的最小单位 C.数据结构是带结构的数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构 7.算法分析的目的是 C ,算法分析的两个主要方面是 A 。 (1)A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进C.分析算法的易读性和文档性 (2)A.空间复杂度和时间复杂度B.正确性和简明性 C.可读性和文档性D.数据复杂性和程序复杂性 8.下面程序段的时间复杂度是O(n2) 。 s =0; for( I =0; i

用c语言写乘法表

#include int main(void) { int i,j; for (i=1;i<=9;i++) { for(j=1;j<=i;j++) printf("%2dx%d=%2d",j,i,i*j); printf("\n"); } } 结果: 1x1= 1 1x2= 2 2x2= 4 1x3= 3 2x3= 6 3x3= 9 1x4= 4 2x4= 8 3x4=12 4x4=16 1x5= 5 2x5=10 3x5=15 4x5=20 5x5=25 1x6= 6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36 1x7= 7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49 1x8= 8 2x8=16 3x8=24 5x8=40 6x8=48 7x8=56 8x8=64 1x9= 9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81 3.19 #include int main(void) { int a=0; printf("%8s%10s%12s\n","a","b","c"); while(a<=33) { int b=0; while(b<=50) { int c; c=100-a-b; if(3*a+2*b+c/2.0==100) printf("%8d%10d%12d\n",a,b,c); b++; } a++;

} } a b c 2 30 68 5 25 70 8 20 72 11 15 74 14 10 76 17 5 78 20 0 80

非常全的C语言常用算法

一、基本算法 1.交换(两量交换借助第三者) 例1、任意读入两个整数,将二者的值交换后输出。 main() {int a,b,t; scanf("%d%d",&a,&b); printf("%d,%d\n",a,b); t=a; a=b; b=t; printf("%d,%d\n",a,b);} 【解析】程序中加粗部分为算法的核心,如同交换两个杯子里的饮料,必须借助第三个空杯子。 假设输入的值分别为3、7,则第一行输出为3,7;第二行输出为7,3。 其中t为中间变量,起到“空杯子”的作用。 注意:三句赋值语句赋值号左右的各量之间的关系! 【应用】 例2、任意读入三个整数,然后按从小到大的顺序输出。 main() {int a,b,c,t; scanf("%d%d%d",&a,&b,&c); /*以下两个if语句使得a中存放的数最小*/ if(a>b){ t=a; a=b; b=t; } if(a>c){ t=a; a=c; c=t; } /*以下if语句使得b中存放的数次小*/ if(b>c) { t=b; b=c; c=t; } printf("%d,%d,%d\n",a,b,c);} 2.累加 累加算法的要领是形如“s=s+A”的累加式,此式必须出现在循环中才能被反复执行,从而实现累加功能。“A”通常是有规律变化的表达式,s在进入循环前必须获得合适的初值,通常为0。例1、求1+2+3+……+100的和。 main() {int i,s; s=0; i=1; while(i<=100) {s=s+i; /*累加式*/ i=i+1; /*特殊的累加式*/ } printf("1+2+3+...+100=%d\n",s);} 【解析】程序中加粗部分为累加式的典型形式,赋值号左右都出现的变量称为累加器,其中“i = i + 1”为特殊的累加式,每次累加的值为1,这样的累加器又称为计数器。

如何用C语言编写小游戏

如何用C语言编写小游戏

纯真童趣的《泡泡堂》,还有武林情仇,笑傲江湖的《剑侠情缘on line》.它是e时代常谈的话题,是交互式娱乐的主力军,是一种 高层次的综合艺术,更是一个民族的文化,世界观的全新传播方式 .作为游戏玩家的我们,是不是想设计一个属于自己的游戏呢? 爱玩是人的天性,而C语言是我们计算机专业都要学习的一门基础 学科.一般来说,是比较枯燥的.那么,我们能不能通过编一些小 游戏来提高它的趣味性呢?这样学习程序设计,就不会是一件艰苦 ,枯燥的事,它变得象电脑游戏一样充满

好奇,富有乐趣.这正是 我发贴的目的. 1, 总是从Hello,world开始 学习编程的第一个程序,一般就是打印一个亲切的词语——"Hell o,world!".让我们来看看这个最简单的C程序: #incolude /*把输入输出函数的头文件包含进来*/ int main() { printf("Hello, world!");/*在屏幕上输出字符串"Hell

o,world!"*/ return 0;/*退出main函数,并返回0*/ } 下面我们发现几个值得改进的地方,1,程序的运行结果一闪而过 .2,每执行这个程序一次都能看见上次运行留下的字符.3,我们 还希望屏幕输出一个笑脸来欢迎我们. (大家不要小看了这个笑脸 曾经有人发贴专门问呢)让我们来改进一下这个程序吧! 1,在return语句的前面加一句:getch ();,表示按任意键结

束.2,在printf语句前用clrscr函数清屏,要使用这个函数和get ch函数,需要在程序开头再包含头文件conio.h.3,ASCII码也有 许多非常好玩的字符,比如ASCII码值为2的就是一个笑脸,我们可 以用printf("%c", 2)来输出一个笑脸. 现在我们把Hello,world程序改成一个更好看的Hello,world了.下 面让我们开始做游戏吧! 2, 心动的开始,一个运动中的笑脸 大家小时侯喜欢看动画片吗?哈哈,我猜你们都喜欢吧!下面就让

C语言经典算法100例(1---30)

2008-02-18 18:48 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 2.程序源代码: main() { int i,j,k; 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三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } } ============================================================== 【程序2】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2.程序源代码: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000)

计算机应用专业c语言编程基础科试卷及答案

职业学校计算机应用专业C语言编程基础科试卷及答案 一、填空(共35分) 1、Unix系统诞生于年,是由实验室的K T和DMR用汇编语言开发成功的。 2、在C语言中,标识符主要为,,及的名字使用。 3、C语言中中的基本数据类型包括、和 三种。 4、数组是有序是的并且有的数据的集合。 5、C语言中,二维数组元素在内存中的存储顺序 是。 6、C语言函数的实参、形参二者类型,一般个数。 7、在C语言中,变量的存储类别有四种,它们是,,和。 8、根据函数能否被其他源文件调用,函数分为函数和函数两类。 9、文件是存储在外部存储设备上的。 10、定义文件指针变量的格式为。 11、feof( )函数是检测函数,当文件位置指针处于时,它返回一个值。 12、用逻辑运算符将或连接起来就是逻辑表达式。 13、结构化程序设计方法,采用的设计原则和的来构造程序。 14、程序结构一般采用、和结构。 15、第三代高级语言是,注重的是, 之间的关系是从属性的层层调用关系。 二、单项选择题(共15分) 1、C语言程序由组成。A. 子程序 B. 主程序和子程序 C. 函数 D. 过程 2、源程序要正确地运行,必须要有什么函数? A. printf函数 B. 自定义的函数 C. main函数 D. 不需要函数 3、若a为整型变量,且有以下语句 a=-017L; printf("%d\n",a); 则下面___说法是正确的? A. 赋值不合法 B. 输出值为-17 C. 输出为不确定值 D. 输出值为-15 4、下面表达式的值为4. A. 11/3 B. 11.0/3 C. (float)11/3 D. (int)(11.0/3+0.5) 5、在C语言的if语句中,用作判断的表达式为___。 A. 关系表达式 B. 逻辑表达式 C. 算术表达式 D. 任意表达式 6、下面哪一项是不正确的字符串赋值或赋初值的方式。 A. char *str; str="string"; B. char str[7]={'s','t','r','i','n','g'}; C. char str1[10];str1="string"; D. char str1[]="string",str2[]="12345678"; 7、若有以下说明和语句,则输出结果是哪一项? (strlen(s)为求字符串s的长度的函数) char s[12]="a book!"; printf("%d",strlen(s)); A. 12 B. 8 C. 7 D. 11 8、C语言可执行程序从什么地方开始执行? A. 程序中第一条可执行语句 B. 程序中第一个函数 C. 程序中的main函数 D. 包含文件中的第一个函数 9、有一个函数原型如下所示: abc(float x,float y); 则该函数的返回类型为___。 A. void B. double C. int D. float 10、在C语言程序中,下面哪一个是正确的? A. 函数的定义可以嵌套,但函数的调用不可以嵌套 B. 函数的定义不可以嵌套,但函数的调用可以嵌套 C. 函数的定义可以嵌套,函数的调用也可以嵌套 D. 函数的定义和函数的调用都不可以嵌套 11、对于类型相同的指针变量,不能进行哪种运算? A. + B. - C. = D. == 12、若有以下说明和语句,且0<=i<10, 则下面是 对数组元素的错误引用? int a[]={1,2,3,4,5,6,7,8,9,0}, *p, i; p=a; A. *(a+i) B. a[p-a] C. p+i D. *(&a[i]) 13、如果想把一些新的数据添加到文件xh.txt中,则 应该以下面方式打开文件? A. fp=fopen(xh.txt,"a"); B.fp=fopen("xh.txt",a); C. fp=fopen("xh.txt","a"); D.fp=fopen("xh.txt",'a'); 14、下面哪条语句是从文件中读取一个字符? A. ch=getc(); B. fputc(ch,fp); C. fscanf("%c",&ch); D. scanf("%c",&ch); 15、C语言中的文件类型如何划分? A. 索引文件和文本文件两种 B. ASCII文件和二进制文件两种 C. 只有文本文件一种 D. 只有二进制文件一种 三、多选题(共20分) 1、下面是定义局部变量储存类别的保留字。

C语言常用算法集合

1.定积分近似计算: /*梯形法*/ double integral(double a,double b,long n) { long i;double s,h,x; h=(b-a)/n; s=h*(f(a)+f(b))/2; x=a; for(i=1;i

} 3.素数的判断: /*方法一*/ for (t=1,i=2;i0;n/=10) k=10*k+n%10; return k; } /*求回文数*/ int f(long n) { long k,m=n; for(k=0;n>0;n/=10) k=10*k+n%10; if(m==k) return 1; return 0; } /*求整数位数*/ int f(long n) { int count; for(count=0;n>0;n/=10) count++; return count; }

用C语言编写程序建立一个pipe

1、用C语言编写程序,建立一个pipe, 同时父进程生成一个子进程,子进程向pipe写入一 个字符串”Hello.”,父进程从pipe中读取该字符串。5' #include #include #include #include #include #include int main() { char buf[20]; int piledes[2]; pid_t pid; int ret; if(ret = pipe(piledes) == -1) { perror("error on pipe:"); exit(-1); } else { pid = fork(); if(pid < 0) { perror("error on fork:"); exit(-1); } else if(pid == 0) { close(piledes[0]); printf("to fu:"); fgets(buf,sizeof(buf)-1,stdin); if((ret = write(piledes[1],buf,strlen(buf))) < 0) { perror("error on writing:"); exit(-1); } close(piledes[1]);

} else { close(piledes[1]); if((ret = read(piledes[0],buf,sizeof(buf)-1)) < 0) { perror("error on reading:"); exit(-1); } buf[ret] = '\0'; printf("from zi:%s\n",buf); close(piledes[0]); } } return 0; } 2、编写一个 C语言程序lswc,使之功能能和ls | wc 等价。(也就是利用,fork,exec,以及ls,wc,以及重定向,或者是管道的系统调用) 13’ #include #include #include #include #include #include #include #include #include #include #include #include #include #include int main(int argc,char *argv[]) { int pildes[2]; int ret; char *argument[3]; pid_t pid;

最新C语言常用算法集合汇总

C语言常用算法集合

1.定积分近似计算: /*梯形法*/ double integral(double a,double b,long n) { long i;double s,h,x; h=(b-a)/n; s=h*(f(a)+f(b))/2; x=a; for(i=1;i

if(n==1||n==2) *s=1; else{ fib(n-1,&f1); fib(n-2,&f2); *s=f1+f2; } } 3.素数的判断: /*方法一*/ for (t=1,i=2;i0;n/=10) k=10*k+n%10; return k; } /*求回文数*/

c语言经典算法100例

60.题目:古典问题:有一对兔子,从出生后第3个月 起每个月都生一对兔子,小兔 子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总 数 为多少? _________________________________________________________________ _ 程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... _________________________________________________________________ __ 程序源代码: main() { long f1,f2; int i; f1=f2=1; for(i=1;i<=20;i++) { printf("%12ld %12ld",f1,f2); if(i%2==0) printf("\n");/*控制输出,每行四个*/

f1=f1+f2;/*前两个月加起来赋值给第三个月*/ f2=f1+f2;/*前两个月加起来赋值给第三个月*/ } } 上题还可用一维数组处理,you try! 61.题目:判断101-200之间有多少个素数,并输出所有素数。 _________________________________________________________________ _ 1 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被 整 除,则表明此数不是素数,反之是素数。 _________________________________________________________________ __ 程序源代码: #include "math.h" main() { int m,i,k,h=0,leap=1;

用C语言编写简单的接口程序

用C语言编写简单的接口程序 北京理工大学(100081) 张俊 在通信中,为了保证运行安全可靠,标准的串行口必须具有许多握手信号和状态信息。这是因为通信的各个计算机CPU速度不一样(这会导致?错帧敚?以及发送机发送数据速度比接收机接收速度快(这会导致?过冲敚?为解决这个问题,我们采用一个简单的握手信号,即发送机每次仅发送半个字节(低4位)的数据,而另外半个字节(高4位)则用来传送信息。我们可以对信息位(高4位)进行如下简单的编码: 0H:发送的是新的半个字节数据 1H:重新发送上次传送错误的数据 2H:文件名结束 3H:文件结束 这样,每当发送机发送一个字节以后,就等待接受机发回送信号,这回送信号就是发送机发送过来的那个字节。发送机接收到回送信号后,把它与刚发送的字节相比较,如果相同,就发送新的半个字节,否则就重新发送。新数据与旧数据通过信息位来区分。下面就是我用C语言编写控制串行口的程序。以一个发送文件的程序为例,介绍一下用C语言实现对接口的控制。 源程序为: #include “dos.h" #include “stdlib.h" #include “stdio.h" #define PORT 0 void SendFile(char fname); / *发送文件*/ void Send(int s); / *发送一个字节*/ void SendFileName(char fname); / *发送文件名*/ void ReceiveFile(); / *接收文件*/ void GetFileName(char f); / *接收文件名*/ void InitPort(int port,unsigned char para); / *初始化端口*/ void SendPort(int port,char c); / *端口发送*/ int ReadPort(int port); / *读端口字节*/ int CheckState(int port); / *检查端口状态*/ int Receive(int port,int G); / *接收一个字节*/

用c语言编写简单程序

实验二用C语言编写简单程序 实验目的 (1)认识C程序基本语法中的变量、常量、语句、控制结构和函数等概念 (2)理解结构化程序设计的三种基本结构;知道程序设计的过程,并运用到程序设计中 (3)理解C语言函数的作用,并运用主函数、输入/输出函数解决简单问题。 实验范例 1. 画一个矩形 要绘制一个如图2-1所示的矩形,可以使用printf语句输出5行星号。 图2-1 一个简单的矩形 【源程序sample02_01.cpp】 #include int main(void) { printf("********************\n"); printf("********************\n"); printf("********************\n"); printf("********************\n"); printf("********************\n"); return 0;} 程序中相同的printf语句重复出现了5次。试想,如果要输出20行甚至更多行的矩形,不断重复地书写printf语句是很不方便的。程序语言对重复操作提供了循环结构加以描述,引入一个计数的循环结构,程序可改写为: 【源程序sample02_02.cpp】 #include int main(void) { int i; for(i=1;i<=5;i++) printf("********************\n");

return 0;} for语句描述了一个计数的过程,计数器i从1开始计数(i=1),如果i小于等于5,执行printf语句输出一行,然后计数器i增1(i++)。这样计数器i从1数到5,printf语句执行5次,输出5行星号。算法可以描述为: 循环i从1到5,每次增1: 输出一行星号 for语句的基本格式为: for(e1;e2;e3) 循环语句 计数器i是一个记录整数的变量,变量对应一个内存的存储空间,可以存放程序中需要的数据。在C程序中使用变量,要先向系统申请内存空间,表示数据存放的数据是区分不同的数据类型的,在申请时要说明变量的数据类型,申请变量的语句称为变量定义,基本格式为: <数据类型> 变量名序列; 可以一次定义一个变量,也可以同时定义多个相同数据类型的变量。语句int i;定义了一个整型变量i作为循环结构的计数控制变量。 i=1;是变量的赋值语句,将整数1赋给变量i。赋值语句的功能是将右边的值赋值给左边的变量,赋值语句的基本格式为: <变量>=表达式; 整数1在程序中称为常量,常量是各种数据类型数据的字面形式。例如9.27是double 类型数据常量。 i<=5和i++是两个表达式,i<=5是关系表达式,执行关系运算<=;i++是算术表达式,执行++运算,变量i自增1。 for语句的一对圆括号内三个表达式e1、e2和e3分别表示计数变量的初值、终值条件和变化,执行顺序为:先执行e1获取计数变量初值1,执行e2,判断计数变量是否符合循环条件i<=5,条件符合则执行循环体语句,接着执行e3改变计数变量的值,然后又回到e2,构成一个循环,循环条件不符合则循环结束。本例中i从1开始执行printf语句,执行一次,i增1,执行5次printf语句后,i的值增1达到6,不符合循环控制条件,循环结束,输出5行星号。 2. 画一个任意大小的矩形 编写一个程序通常是要解决一类问题,而不是特定问题,如何突破矩形的固定样式,绘制任意大小的矩形呢?矩形的样式是由行数和每行的字符个数确定的,这两个值的变化,会改变矩形的形状,如图2-2所示。

使用C语言编写简单小游戏

纯真童趣的《泡泡堂》,还有武林情仇,笑傲江湖的《剑侠情缘on line》.它是e 时代常谈的话题,是交互式娱乐的主力军,是一种高层次的综合艺术,更是一个民族的文化,世界观的全新传播方式 .作为游戏玩家的我们,是不是想设计一个属于自己的游戏呢? 爱玩是人的天性,而C语言是我们计算机专业都要学习的一门基础学科.一般来说,是比较枯燥的.那么,我们能不能通过编一些小游戏来提高它的趣味性呢?这样学习程序设计,就不会是一件艰苦 ,枯燥的事,它变得象电脑游戏一样充满好奇,富有乐趣. 1,总是从Hello,world开始学习编程的第一个程序,一般就是打印一个亲切的词语——"Hell o,world!".让我们来看看这个最简单的C程序: #incolude /*把输入输出函数的头文件包含进来*/ int main() { printf("Hello, world!");/*在屏幕上输出字符串"Hello,world!"*/ return 0;/*退出main函数,并返回0*/ } 下面我们发现几个值得改进的地方,1,程序的运行结果一闪而过 .2,每执行这个程序一次都能看见上次运行留下的字符.3,我们还希望屏幕输出一个笑脸来欢迎我们. 让我们来改进一下这个程序吧! 1,在return语句的前面加一句:getch ();,表示按任意键结束.2,在printf语句前用clrscr函数清屏,要使用这个函数和getch函数,需要在程序开头再包含头文件conio.h.3,ASCII码也有许多非常好玩的字符,比如ASCII码值为2的就是一个笑脸,我们可以用printf("%c", 2)来输出一个笑脸. 现在我们把Hello,world程序改成一个更好看的Hello,world了.下面让我们开始做游戏吧! 2,心动的开始,一个运动中的笑脸大家小时侯喜欢看动画片吗?哈哈,我猜你们都喜欢吧!下面就让我们来做一个小动画吧.在屏幕上显示一个运动的小笑脸,而且当它到达屏幕的边缘时会自动弹回来.先在程序定义一个在屏幕中运动的点的结构: struct move_point { int x, y;/*该点的位置,包括x坐标和y坐标*/ int xv, yv;/*该点在x轴,y轴的速度*/ }; 运动的原理是,先擦去物体先前的轨迹,让物体按其速度移动一段距离,再画出该物体.让我们看到以下代码: gotoxy(man.x, man.y);/*把光标移到指定的坐标*/ printf(" ");/*输出一个空格,把先前的字符擦去*/ 然后我们让物体按其速度运动: man.x += man.xv;/*水平方向按x轴的速度运动*/ man.y += man.yv;/*垂直方向按y轴的速度运动*/ 运动后还要判断物体是否出界,如果出了界,就令物体反弹,即让它下一刻的速度等于现在的速度的相反数.最后打印出这个笑脸: gotoxy(man.x, man.y); printf("%c\b", 2); /*输出ASCII码值为2的"笑脸"字符*/ 怎么样?是不是很有趣呢?不过这个笑脸一直是自己运动,能不能让我们来控制它运动呢?答案是肯定的,让我们继续往下学吧! 3,交互的实现——让我们来控制笑脸运动 这个程序的主要功能是接受按键,如果接收的是方向键,就让笑脸顺着方向移动,如果接收的是ESC键就退出程序,其他按键则忽略处理.接受按键我们用以下两条语句: while (bioskey(1) == 0);/*等待按键*/ key = bioskey(0);/*把接收的按键的键盘码赋给变量key*/ 然后用switch语句来判断按键以及执行相关操作,如下: switch (key) /*对变量key的值进行判断*/ { case UP: /*如果按的是向上键*/ … break; /*让物体向上运动,并退出switch*/

C语言常用排序算法

/* ===================================================================== ======== 相关知识介绍(所有定义只为帮助读者理解相关概念,并非严格定义): 1、稳定排序和非稳定排序 简单地说就是所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序,我们就 说这种排序方法是稳定的。反之,就是非稳定的。 比如:一组数排序前是a1,a2,a3,a4,a5,其中a2=a4,经过某种排序后为 a1,a2,a4,a3,a5, 则我们说这种排序是稳定的,因为a2排序前在a4的前面,排序后它还是在a4的前面。假如变成a1,a4, a2,a3,a5就不是稳定的了。 2、内排序和外排序 在排序过程中,所有需要排序的数都在内存,并在内存中调整它们的存储顺序,称为内排序; 在排序过程中,只有部分数被调入内存,并借助内存调整数在外存中的存放顺序排序方法称为外排序。 3、算法的时间复杂度和空间复杂度 所谓算法的时间复杂度,是指执行算法所需要的计算工作量。 一个算法的空间复杂度,一般是指执行这个算法所需要的内存空间。 ===================================================================== =========== */ /* ================================================ 功能:选择排序 输入:数组名称(也就是数组首地址)、数组中元素个数 ================================================ */ /* ==================================================== 算法思想简单描述:

用c语言编写的计算器源代码

作品:科学计算器 作者:欧宗龙 编写环境:vc++6.0 语言:c #include "stdafx.h" #include #include #include #include "resource.h" #include "MainDlg.h" #include #include #define PI 3.141593 BOOL A_Op=FALSE; BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); } return FALSE; } BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) {

return TRUE; } void TrimNumber(char a[])//判断并删除小数点后无用的零 { for(unsigned i=0;i=i;j--) { if(a[j]=='0') { a[j]='\0'; } else if(a[j]=='.') { a[j]='\0'; } else break; } } } } double Operate(char Operator,double n1,double n2) //判断符号,进行相应的运算{ if(Operator=='0') { } if(Operator=='+') { n2+=n1; } if(Operator=='-') { n2=n1-n2; } if(Operator=='*') { n2*=n1; } if(Operator=='/')

最新C语言常用算法归纳

C语言常用算法归纳 应当掌握的一般算法 一、基本算法: 交换、累加、累乘 二、非数值计算常用经典算法: 穷举、排序(冒泡,选择)、查找(顺序即线性) 三、数值计算常用经典算法: 级数计算(直接、简接即递推)、一元非线性方程求根(牛顿迭代法、二分法)、定积分计算(矩形法、梯形法) 四、其他: 迭代、进制转换、矩阵转置、字符处理(统计、数字串、字母大小写转换、加密等)、整数各数位上数字的获取、辗转相除法求最大公约数(最小公倍数)、求最值、判断素数(各种变形)、数组元素的插入(删除)、二维数组的其他典型问题(方阵的特点、杨辉三角形) 详细讲解 一、基本算法 1.交换(两量交换借助第三者) 例1、任意读入两个整数,将二者的值交换后输出。 main() { int a,b,t; scanf("%d%d",&a,&b); printf("%d,%d\n",a,b); t=a; a=b; b=t; printf("%d,%d\n",a,b); }

【解析】程序中加粗部分为算法的核心,如同交换两个杯子里的饮料,必须借助第三个空杯子。 假设输入的值分别为3、7,则第一行输出为3,7;第二行输出为7,3。 其中t为中间变量,起到“空杯子”的作用。 注意:三句赋值语句赋值号左右的各量之间的关系! 【应用】 例2、任意读入三个整数,然后按从小到大的顺序输出。 main() { int a,b,c,t; scanf("%d%d%d",&a,&b,&c); /*以下两个if语句使得a中存放的数最小*/ if(a>b){ t=a; a=b; b=t; } if(a>c){ t=a; a=c; c=t; } /*以下if语句使得b中存放的数次小*/ if(b>c) { t=b; b=c; c=t; } printf("%d,%d,%d\n",a,b,c); } 2.累加 累加算法的要领是形如“s=s+A”的累加式,此式必须出现在循环中才能被反复执行,从而实现累加功能。“A”通常是有规律变化的表达式,s在进入循环前必须获得合适的初值,通常为0。 例1、求1+2+3+……+100的和。 main() { int i,s; s=0; i=1; while(i<=100) { s=s+i; /*累加式*/ i=i+1; /*特殊的累加式*/ } printf("1+2+3+...+100=%d\n",s); } 【解析】程序中加粗部分为累加式的典型形式,赋值号左右都出现的变量称为累加器,其中“i = i + 1”为特殊的累加式,每次累加的值为1,这样的累加器又称为计数器。 3.累乘

C语言编写的《俄罗斯方块》详解

C语言编写的《俄罗斯方块》详解.txt铁饭碗的真实含义不是在一个地方吃一辈子饭,而是一辈子到哪儿都有饭吃。就算是一坨屎,也有遇见屎壳郎的那天。所以你大可不必为今天的自己有太多担忧。335280641 Tc2.0 编写俄罗斯方块游戏 很多编程爱好者都编写过俄罗斯方块的游戏程序。很久以前,我用Tc2.0也做过一个;最近有好些朋友看见我以前的俄罗斯方块的程序后, 问我是怎么做的。我一直想把这个程序的整个过程写一份详细的东西,与各位编程爱好者分享,一直没空。正好现在放假了, 而且离回家还有几天。于是我就把这个程序重新写了一遍,尽量使程序的结构比较清晰好懂一些。同时写了下面的这份东西。 俄罗斯方块游戏的程序中用到了一些方法。为了比较容易理解这些方法,我在讲述的同时写了些专门针对这些方法的示例程序。 这些示例程序力求短小,目的是用最小的代码能够清楚的示例所用的方法。这些示例程序都经过tc2.0测试。 最后还附了完整的俄罗斯方块游戏的源代码,和最终的可执行程序。如果你看了这份东东,有什么意见和想法,请发电子邮件告诉我。 我将会继续更新这分东东,最新的版本可以在我的个人主页上下载。 下面的问题是有关俄罗斯方块程序的,其中有些是朋友问我的,有些是我认为可能会被问到的。我尽量按问题从易到难排列这些问题。 关于俄罗斯方块程序的一些问题: ****************************************************** Tc2.0中怎么样设置图形显示? Tc2.0中常用图形函数的用法? 怎样获取鍵盘输入? 怎样控制方块的移动? 怎样控制时间间隔(用于游戏中控制形状的下落)? 游戏中的各种形状及整个游戏空间怎么用数据表示? 游戏中怎么判断左右及向下移动的可能性? 游戏中怎么判断某一形状旋转的可能性? 按向下方向键时加速某一形状下落速度的处理? 怎么判断某一形状已经到底? 怎么判断某一已经被填满? 怎么消去已经被填满的一行? 怎么消去某一形状落到底后能够消去的所有的行?(如长条最多可以消去四行) 怎样修改游戏板的状态? 怎样统计分数? 怎样处理升级后的加速问题? 怎样判断游戏结束? 关于计分板设计的问题。 关于“下一个”形状取法的问题。

相关文档
相关文档 最新文档