AVR单片机C语言高级程序设计(共5则范文)

时间:2019-05-12 21:03:40下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《AVR单片机C语言高级程序设计(共)》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《AVR单片机C语言高级程序设计(共)》。

第一篇:AVR单片机C语言高级程序设计(共)

AVR单片机C语言高级程序设计

前言..................................................................................................................................................2 第1章 概述...................................................................................................................................3

1.1提高编制单片机应用程序效率最好的办法是采用C语言编程.....................................4 1.2 C语言具有突出的优点......................................................................................................5 1.3 AVR单片机的C编译器简介............................................................................................6 第二章AVR单片机简介及主要特性...............................................................................................6

2.1 AVR单片机简介及主要特性..........................................................................................6 2.2 学习开发AVR单片机用到的实验工具及器材.............................................................8 第3章 AVR单片机开发软件的安装及初步使用......................................................................14

3.1 ICCAVR6.31A C语言编译器安装...............................................................................14 3.2 AVR Studio集成开发环境安装.....................................................................................18 3.3 PonyProg2000下载软件安装.......................................................................................18 3.4 我们的第一个AVR入门程序.......................................................................................19 第4章 AVR DEMO单片机综合试验板原理介绍及使用..............................................................36

4.1 AVR DEMO单片机综合试验板........................................................................................36 4.2ATMEAG16L单片机的主要特点与内部组成...................................................................38 4.3使用JTAGICE仿真器(JTAG ICE)调试AVR DEMO单片机综合试验板......................39

前言

世界进入21世纪后,由于电子技术及计算机技术的迅猛发展,新型电子产品的更新换代速度越来越快。以单片机为核心构成的智能化产品具有体积小、功能强、应用面广等优点,目前正以前所未见的速度取代着传统电子线路构成的经典系统,蚕食着传统数字电路与模拟电路固有的领地。

从前,汇编语言是单片机工程师进行软件开发的唯一选择,但汇编语言程序的可读性和可移植性较差,采用汇编语言编写单片机应用系统程序的周期长,而且调试和排错也比较困难。许多读者都发现,采用汇编语言设计一个大型复杂程序时,可读性较困难,往往隔一段时间再看,又要花脑力从头再来。并且不同类型的单片机,必须采用不同的汇编语言来编写,这是因为汇编语言完全依赖于单片机硬件。这样,对开发者而言,如果由于项目的变化而经常变更单片机类型,其开发的难度是可想而知的。因为对于学习一种单片机汇编语言开发,总少不了学习、探索、实践、进步这样一个过程,这个过程少则半年,多则1~2年,等你学完后再搞出产品,也许商机已消失。随着社会竞争的日益激烈,开发效率已成为商战致胜的最重要法宝之一。

为了提高编制单片机系统和应用程序的效率,改善程序的可读性和可移植性,最好的办法是采用高级语言编程。目前,C语言逐渐成为国内外开发单片机的主流语言。

C语言是一种通用的编译型结构化计算机程序设计语言,在国际上十分流行,它兼顾了多种高级语言的特点,并具备汇编语言的功能。它支持当前程序设计中广泛采用的由顶向下的结构化程序设计技术。一般的高级语言难以实现汇编语言对于计算机硬件直接进行操作(如对内存地址的操作、移位操作等)的功能,而C语言既具有一般高级语言的特点,又能直接对计算机的硬件进行操作。C语言有功能丰富的库函数、运算速度快、编译效率高,并且采用C语言编写的程序能够很容易地在不同类型的计算机之间进行移植。因此,C语言的应用范围越来越广泛,用C语言进行单片机程序设计是单片机开发与应用的必然趋势。对汇编语言掌握到只要可以读懂程序,在时间要求比较严格的模块中进行程序的优化即可。采用C语言不必对单片机和硬件接口的结构有很深入的了解,编译器可以自动完成变量的存贮单元的分配,编程者就可以专注于应用软件部分的设计,大大加快了软件的开发速度。统计资料表明,不同单片机的C语言编译程序80%的代码是公共的,采用C语言可以很容易地进行单片机的程序移植工作,有利于产品中的单片机重新选型。C语言的编译效率也很高,对于同一个问题,用C语言编写的程序生成代码的效率仅比用汇编语言编写的程序低10%~20%,由于现在片上ROM(或FLASH ROM)空间做到32/64K字节(或更大)的单片机比比皆是,因此代码效率所差的10%~20%已经不是重要问题。至于对开发速度、软件质量、结构严谨、程序坚固等方面进行综合评述的话,则C语言的完美绝非是汇编语言编程所能比拟的。本书以初学者为对象,从零开始,循序渐进地讲解当前最热门的AVR单片机的C语言高级程序设计,在介绍AVR单片机的各单元部分基本特性的同时,使用入门难度浅、程序长度短且又能立竿见影的初级实例,详细介绍了如何使用ATmega16L的片上资源,帮助初学者快速掌握AVR单片机的高效设计。最后3章详细介绍了3个以AVR单片机为核心的实际产品的软硬件设计。

随书所附的光盘中提供了本书的所有软件设计程序文件,读者朋友可参考。本书的编写工作得到了中国电力出版社大力支持,出版社的资深编辑刘炽老师做了大量耐心细致的工作,使得本书得以顺利完成,在此表示衷心感谢。由于作者水平有限,必定还存在不少缺点或漏洞,诚挚欢迎广大读者提出意见并不吝赐教。

第1章 概述

自从笔者出版了《手把手教你学单片机》(北京航空航天大学出版社出版)一书后,由于教学方式新颖独特,入门难度明显降低,结合边学边练的实训模式,很快有一大批读者入了单片机这扇门。据不完全统计,全国各地(包括港澳台地区)跟着《手把手教你学单片机》学习的读者超过30万名,其中不少读者已取得了丰硕的成果。有的读者给笔者来电说研制的“包装线控制器”已稳定运行数月,还有的读者利用单片机做“霓虹灯程序控制器”并投放市场,„„等等。总之,《手把手教你学单片机》使不少读者从传统的电子技术领域步入了微型计算机领域,进入了一个暂新的天地。

《手把手教你学单片机》一书是以汇编语言为主进行讲解实验的。所谓汇编语言就是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。汇编语言的主要优点是占用资源少、程序执行效率高。作为初学者必须基本掌握汇编语言的设计方法,因为汇编语言直接操作计算机的硬件,学习汇编语言对于了解单片机的硬件构造是有帮助的。

从前,汇编语言是单片机工程师进行软件开发的唯一选择,但汇编语言程序的可读性和可移植性较差,采用汇编语言编写单片机应用系统程序的周期长,而且调试和排错也比较困难。许多读者都发现,采用汇编语言设计一个大型复杂程序时,可读性较困难,往往隔一段时间再看,又要花脑力从头再来。更为重要的是,随着社会竞争的日益激烈,开发效率已成为商战致胜的最重要法宝之一。大家知道,不同类型内核的单片机,其指令系统是不一样的,因此用来编写程序的汇编语言也是不一样的,这样就产生了很严重的问题。例如:我们原来是学51系列单片机的,也做过许多产品,创造出一定的经济效益。但是,忽然有一天,有客户要求用AVR单片机开发一款产品,其利益回报也相当不错,但是你怎么办呢?重新开始学AVR的汇编语言?!等到学好学熟起码要半年(有些人等到会熟练开发产品可能要一年以上的时间),客户会等不及,等半年后也许商机已消失。这只是其中的一个难题,因为现在新型的单片机层出不穷,如果你的一些客户经常拿不同的单片机要你开发设计,那你怎么办?要较好地解决这些问题,你只能采用高级语言编程了。目前在单片机中,C语言是首选的高级开发语言。

1.1提高编制单片机应用程序效率最好的办法是采用C语言编程

为了提高编制计算机系统和应用程序的效率,改善程序的可读性和可移植性,最好的办法是采用高级语言编程。目前,C语言逐渐成为国内外开发单片机的主流语言。

C语言是一种通用的编译型结构化计算机程序设计语言,在国际上十分流行,它兼顾了多种高级语言的特点,并具备汇编语言的功能。它支持当前程序设计中广泛采用的由顶向下的结构化程序设计技术。一般的高级语言难以实现汇编语言对于计算机硬件直接进行操作(如对内存地址的操作、移位操作等)的功能,而C语言既具有一般高级语言的特点,又能直接对计算机的硬件进行操作。C语言有功能丰富的库函数、运算速度快、编译效率高,并且采用C语言编写的程序能够很容易地在不同类型的计算机之间进行移植。因此,C语言的应用范围越来越广泛。

用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。因此,用C语言进行单片机程序设计是单片机开发与应用的必然趋势。对汇编语言掌握到只要可以读懂程序,在时间要求比较严格的模块中进行程序的优化即可。采用C语言进行设计也不必对单片机和硬件接口的结构有很深入的了解,编译器可以自动完成变量存贮单元的分配,编程者就可以专注于应用软件部分的设计,大大加快了软件的开发速度。采用C语言可以很容易地进行单片机的程序移植工作,有利于产品中的单片机重新选型。

C语言的模块化程序结构特点,可以使程序模块大家共享,不断丰富。C语言可读性的特点,更容易使大家可以借鉴前人的开发经验,提高自己的软件设计水平。采用C语言,可针对单片机常用的接口芯片编制通用的驱动函数,可针对常用的功能模块、算法等编制相应的函数,这些函数经过归纳整理可形成专家库函数,供广大的工程技术人员和单片机爱好者使用完善,这样可大大提高国内单片机软件设计水平。

过去长时间困扰人们的“高级语言产生代码太长,运行速度太慢不适合单片机使用”的致命缺点已被大幅度地克服。目前,AVR系列单片机的C语言编译代码长度,已超过中等程序员的水平。而且,AVR系列单片机片上SRAM、FLASH空间都很大、运行速度很快,代码效率所差的10%~20%已经不是什么重要问题。关于速度优化的问题,只要有好的仿真器的帮助,用人工优化关键代码就是很简单的事了。至于谈到开发速度、软件质量、结构严谨、程序坚固等方面的话,则C语言的完美绝非是汇编语言编程所能比拟的。

1.2 C语言具有突出的优点

1.语言简洁,使用方便灵活

C语言是现有程序设计语言中规模最小的语言之一,而小的语言体系往往能设计出较好的程序。C语言的关键字很少,ANSI C标准一共只有32个关键字,9种控制语句,压缩了一切不必要的成份。C语言的书写形式比较自由,表达方法简洁,使用一些简单的方法就可以构造出相当复杂的数据类型和程序结构。

2.可移植性好

用过汇编语言的读者都知道,即使是功能完全相同的一种程序,对于不同的单片机,必须采用不同的汇编语言来编写。这是因为汇编语言完全依赖于单片机硬件。而现代社会中新器件的更新换代速度非常快,也许我们每年都要跟新的单片机打交道。如果每接触一种新的单片机就要学习一次新的汇编语言,那么也许我们将一事无成,因为每学一种新的汇编语言,少则几月,多则上年,那么我们还有多少时间真正用于产品开发呢?

C语言是通过编译来得到可执行代码的,统计资料表明,不同机器上的C语言编译程序80%的代码是公共的,C语言的编译程序便于移植,从而使在一种单片机上使用的C语言程序,可以不加修改或稍加修改即可方便地移植到另一种结构类型的单片机上去。这大大增强了我们使用各种单片机进行产品开发的能力。

3.表达能力强

C语言具有丰富的数据结构类型,可以根据需要采用整型、实型、字符型、数组类型、指针类型、结构类型、联合类型、枚举类型等多种数据类型来实现各种复杂数据结构的运算。C语言还具有多种运算符,灵活使用各种运算符可以实现其他高级语言难以实现的运算。

4.表达方式灵活

利用C语言提供的多种运算符,可以组成各种表达式,还可采用多种方法来获得表达式的值,从而使用户在程序设计中具有更大的灵活性。C语言的语法规则不太严格,程序设计的自由度比较大,程序的书写格式自由灵活。程序主要用小写字母来编写,而小写字母是比较容易阅读的,这些充分体现了C语言灵活、方便和实用的特点。

5.可进行结构化程序设计

C语言是以函数作为程序设计的基本单位的,C 1.3 AVR单片机的C编译器简介

目前世界上几乎所有系列的单片机都支持C语言开发,开发AVR单片机的C编译器主要有:IAR Embedded Workbench(简称IAR)、Codevision AVR(简称CAVR)、Imagecraft C Compiler(简称ICC)、GNU C For AVR(简称GCCAVR)等。IAR是瑞典IAR SYSTEMS公司开发的AVR单片机集成开发环境(IDE),包含嵌入式编译器、汇编器、连接定位器、库管理器、项目管理及调试器等。其特点是编译效率高、功能齐全,但价格昂贵。

CAVR 也是一个开发AVR单片机的集成开发环境,其界面友好,很容易上手。它带有一个叫Codewizard的代码生成器,可生成外围器件的相应初始化代码,另外,它还提供了很多常用的器件库代码,如:LCD、UART、SPI、实时时钟、温度传感器等。它的价格适中。

ICC是Imagecraft公司开发的使用标准C语言的AVR单片机集成开发环境,它有一个Application Wizard的代码生成器, 也可生成外围器件的初始化代码。其价格适中。

GCCAVR是一个公开源代码的自由软件,因此使用上时不必考虑价格因素,其缺点是没有集成开发环境(IDE),使用时麻烦一些。

本书中,我们使用ICC集成开发环境进行学习开发,ICC集成开发环境软件能够产生形式简洁、效率较高的程序代码,如果程序较大时在代码质量上可以与汇编语言程序相媲美。

第二章AVR单片机简介及主要特性

2.1 AVR单片机简介及主要特性

AVR单片机是ATMEL公司研发的增强型内置Flash的RISC(Reduced Instruction Set CPU)精简指令集高速8位单片机,设计时吸取了80C51及PIC单片机的优点,具备单时钟周期执行一条指令的能力,运行速度高达1Mips/MHz。AVR单片机可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。

AVR单片机硬件结构采取8位机与16位机的折中策略,即采用局部寄存器存堆(32个寄存器文件)和单体高速输入/输出的方案(即输入捕获寄存器、输出比较匹配寄存器及相应控制逻辑),提高了指令执行速度,克服了瓶颈现象,增强了功能;同时又减少了对外设管理的开销,相对简化了硬件结构,降低了成本。AVR单片机在软/硬件开销、速度、性能和成本诸多方面取得了优化平衡,是一种高性价比的单片机。其主要特性如下:

1.内嵌高质量的Flash程序存储器,可反复擦写,支持ISP和IAP,便于产品的调试、开发、生产、更新。内嵌长寿命的EEPROM可长期保存关键数据,避免断电丢失。片内具有大容量的RAM,有效支持使用高级语言开发系统程序。2.高速度、低功耗,具有SLEEP(省电休眠)功能。每一指令执行速度可达50ns(20MHz),而耗电则在1mA~2.5mA之间(典型功耗,WDT 关闭时为100nA),AVR运用Harvard结构概念(具有预取指令功能),即对程序存储和数据带有不同的存储器和总线当执行某一指令时,下一指令被预先从程序存储器中取出, 这使得指令可以在每一个时钟周期内被执行。AVR单片机可宽电压运行(2.7~5.5V),抗干扰能力强,可降低一般8位机中的软件抗干扰设计工作量和硬件的使用量。

3.AVR单片机的I/O线全部带可设置的上拉电阻,并行I/O 口输入输出特性与PIC 的HI/LOW输出及三态高阻抗HI-Z 输入类同外,也可设定类同80C51系列内部拉高电阻作输入端的功能,可单独设定为输入/输出、可设定(初始)高阻输入。使得I/O口资源灵活、功能强大、可充分利用。AVR的I/O 口是真正的I/O 口, 能正确反映I/O 口的输入/输出真实情况。

4.AVR单片机片内具备多种独立的时钟分频器,分别供URAT、IIC、SPI使用。其中与8/16位定时器配合的具有多达10 位的预分频器,可通过软件设定分频系数提供多种档次的定时时间。AVR单片机中的定时器/计数器(单)可双向计数形成三角波,再与输出比较匹配寄存器配合,生成占空比可变、频率可变、相位可变方波的脉宽调制输出PWM,令人耳目一新。

5.工业级产品,具有大电流10~20mA 或40mA(单一输出),可直接驱动SSR 或继电器。内置的看门狗定时器(WDT)用于防止程序跑飞,提高产品的抗干扰能力。

6.超功能精简指令。具有32 个通用工作寄存器(相当于80C51单片机中的32个累加器),克服了单一累加器在数据处理时造成的瓶颈现象。

7.AVR单片机内有模拟比较器,I/O 口可作A/D 转换用, 可组成廉价的A/D 转换器。

8.像80C51一样,AVR有多个固定中断向量入口地址,因此可快速响应中断,而不会像PIC一样所有中断都在同一向量地址,需要以程序判别后才可响应。9.AVR单片机有自动上电复位电路、独立的看门狗电路、低电压检测电路BOD,多个复位源(自动上下电复位、外部复位、看门狗复位、BOD复位),可设置的启动后延时运行程序,增强了系统的可靠性。

10.有串行异步通讯UART,不占用定时器和SPI 传输功能,因其速度高,故可以工作在一般标准整数频率,而波特率可达576K。11.有多通道10 位A/D转换器及实时时钟RTC。

AVR单片机技术表现出单片机集多种器件(包括FLASH程序存储器、看门狗、EEPROM、同/异步串行口、TWI、SPI、A/D模数转换器、定时器/计数器等)和多种功能(增强可靠性的复位系统、降低功耗抗干扰的休眠模式、品种多门类全的中断系统、具输入捕获和比较匹配输出等多样化功能的定时器/计数器、具替换功能的I/O端口„„)于一身,充分体现了现代单片机技术向“片上系统SoC”过渡及发展的方向。

2.2 学习开发AVR单片机用到的实验工具及器材

学习一种新的单片机技术,实验与实践是必不可少的,否则只能是纸上谈兵。这里我们使用以下的器材进行AVR单片机的C语言设计。1.ImageCraft公司的ICCAVR6.31A C语言编译器。2.Atmel公司的AVR Studio集成开发环境。3.PonyProg2000下载软件。4.AVR DEMO单片机综合试验板。5.AVR单片机JTAG仿真器。6.并口下载器。

7.5V高稳定专用稳压电源。

8.TOP2004多功能USB编程器(可选购)。9.一台奔腾级及以上的家用电脑(PC机)。下面简介一下这些实验工具及器材。

2.2 学习开发AVR单片机用到的实验工具及器材

学习一种新的单片机技术,实验与实践是必不可少的,否则只能是纸上谈兵。这里我们使用以下的器材进行AVR单片机的C语言设计。1.ImageCraft公司的ICCAVR6.31A C语言编译器。2.Atmel公司的AVR Studio集成开发环境。3.PonyProg2000下载软件。4.AVR DEMO单片机综合试验板。5.AVR单片机JTAG仿真器。6.并口下载器。

7.5V高稳定专用稳压电源。

8.TOP2004多功能USB编程器(可选购)。9.一台奔腾级及以上的家用电脑(PC机)。下面简介一下这些实验工具及器材。2.2.1 ICCAVR6.31A C语言编译器 ICCAVR6.31A 是ImageCraft公司开发的用于AVR单片机的C语言编译器,是一个综合了编辑器和工程管理器的纯32位集成开发环境(IDE)。由于ICCAVR功能强大,使用简单方便,具有良好的技术支持且价格合适,故得到了广泛的应用。图2-1 为ICCAVR的工作界面。

图2-1 ICCAVR的工作界面

2.2.2 AVR Studio集成开发环境

AVR Studio是一个Atmel公司开发的集项目管理、程序汇编、程序调试、程序下载、JTAG仿真等功能于一体的集成开发环境。但AVR Studio不支持C语言编译,因此当我们用C语言开发AVR单片机时,需先用ICCAVR编写C语言并进行编译,然后使用AVR Studio打开编译生成的*.cof文件,进行程序的仿真调试。图2-2 为AVR Studio的工作界面。

图2-2 AVR Studio的工作界面 2.2.3 PonyProg2000下载软件

PonyProg2000软件主要用于AVR单片机及PIC单片机的程序下载,能在Windows95/98/ME/NT/2000/XP等操作系统上使用。对英语不好的读者,还可以使用PonyProg2000的汉化程序。图2-3 为PonyProg2000的工作界面。

图2-3 PonyProg2000的工作界面

2.2.4 AVR DEMO单片机综合试验板

AVR DEMO单片机综合试验板为多功能实验板,对入门实习特别有效,其主要功能有:

1.可做AVR单片机的输入/输出实验。2.可做音响实验。3.可做A/D实验。4.可做PWM(D/A)实验。

5.八位数码管动态扫描输出及驱动。6.八位 LED 输出指示。7.可做IIC及SPI总线实验。8.DS18B20温度控制实验。9.红外遥控实验。10.16*2液晶驱动实验。11.128*64液晶驱动实验。

12.与PC机连接做RS232通信实验。图2-4~2-6为AVR单片机综合试验板外型。

图2-4 AVR DEMO单片机综合试验板外型

图2-5 AVR DEMO单片机综合试验板外型(驱动16*2字符型液晶)

图2-6 AVR DEMO单片机综合试验板外型(驱动128*64图型液晶)2.2.5 AVR单片机JTAG仿真器

为经典的AVR仿真器,支持的芯片为: ATmega128,ATmega128L,ATmega16,ATmega162,ATmega162V,ATmega165,ATmega165V,ATmega169,ATmega169V,ATmega16L,ATmega32,ATmega323,ATmega323L,ATmega32L,ATmega64,ATmega64L。图2-7为AVR单片机JTAG仿真器外型。

图2-7 AVR单片机JTAG仿真器外型

2.2.6 并口下载器 低价、可靠、实用。支持AVR单片机及AT89S51/52单片机。下载程序时必用的工具。图2-8为并口下载器外型。

图2-8 并口下载器外型

2.2.7 TOP2004多功能USB编程器

USB接口。支持AT89、AT87F、AT90、ATINY、ATMEGA、SST89、SM、MSU、GSM97、i87C/LC、P87、W77(78)E/LE、IS89C/LV、PIC12/16/17/

18、EM78P系列单片机。27/28/29/39/49/24C/93C系列存储器。16V8、20V8、22V10.支持74、4000/4500SRAM数字电路测试。支持芯片超过2000种,适合学习、开发、手机维修、电脑BIOS烧写。图2-9为TOP2004多功能USB编程器外型。

图2-9 TOP2004多功能USB编程器外型 第3章 AVR单片机开发软件的安装及初步使用

3.1 ICCAVR6.31A C语言编译器安装

在电脑中放入配套光盘,打开ICCAVR6.31A 安装文件后进入安装界面(图3-1),安装目录可使用默认方式将其安装在C盘的icc文件夹中(图3-2)。

图3-1 打开ICCAVR6.31A 安装文件后进入安装界面

图3-2 安装在C盘的icc文件夹中

安装完成后,需进行注册才能得到无时间限制的完全版软件。注册方式如下: 1.打开ICCAVR6.31A编译器界面,单击菜单栏Help→Regist Software(图3-3),系统会提示关掉计算机的防病毒程序,单击Continue按钮进入注册界面(图3-4)。

图3-3 单击菜单栏Help→Regist Software

图3-4 单击Continue按钮进入注册界面

2.选中并复制EMail Unlock Code栏右侧框内的7组数值。3.打开注册器,粘贴刚才复制的数值(图3-5)。

图3-5 粘贴刚才复制的数值

4.点击得到解锁码(图3-6)。复制该解锁码。

图3-6 点击得到解锁码

5.在ICCAVR6.31A编译器的注册界面的Paste(~V)the unlock code from Imagecraft’s email栏中,粘贴入解锁码(图3-7),单击License按钮后再单击OK完成注册(图3-8)。注册完成后的ICCAVR6.31A启动界面如图3-9所示,主要由菜单栏、工具栏、源文件编辑窗口、工程窗口和编译输出窗口五部分组成。

图3-7 粘贴入解锁码

图3-8 单击License按钮后再单击OK完成注册

图3-9 注册完成后的ICCAVR6.31A启动界面 3.2 AVR Studio集成开发环境安装

打开配套光盘内的AVR Studio安装文件,双击Setup.exe文件,按照提示步骤进行安装。安装结束后,会出现一个关于安装USB驱动的界面,由于我们这里不用到USB驱动的器件,只需点击Cancel关闭即可。安装完成后的AVR Studio启动界面如图3-10所示。

图3-10 AVR Studio启动界面

3.3 PonyProg2000下载软件安装

PonyProg2000软件主要用于AVR单片机及PIC单片机的程序下载,能在Windows95/98/ME/NT/2000/XP等操作系统上使用。双击配套光盘内的PonyProgV206f软件进行安装,安装过程中只需按照提示,单击Next按钮,逐步进行即可。安装完成后,还可以进行汉化,选中汉化程序包中的PonyProg2000文件(注意不要打开),然后复制,随后打开C:/Program Files/ PonyProg2000文件夹,直接点击粘贴。当弹出对话框提示是否需替换时,点确定,原文件即成为中文版。图3-11为PonyProg2000的启动界面。

图11 PonyProg2000的启动界面

AVR单片机开发过程为: 1.设置ICCAVR。2.建立一个工程项目。2.输入C源文件。

3.向工程项目中添加源文件。

4.编译文件,编译通过后生成COFF/HEX文件。

5.在AVR Studio集成开发环境中打开COFF文件,使用JTAG仿真器进行实时在线仿真或进行软件模拟仿真。

7.使用PonyProg2000软件将HEX文件下载到单片机中。8.应用。

3.4 我们的第一个AVR入门程序

接下来我们来做第一个AVR程序,让程序跑起来,控制AVR单片机综合试验板上的8个LED,让它们亮、灭进行闪烁。

3.4.1 设置ICCAVR 通过ICCAVR对源程序编译连接工程之前,需要对编译器属性进行设置,设置好的某些属性可保留起来作为新建工程的默认属性。

打开ICCAVR软件界面,选择Project→Option进入属性设置对话窗。共有Paths、Compiler、Target、Config Salvo四个属性标签页。

1).Paths标签页(图3-12)

在属性中设置编译器的头文件目录(Include Path(s):)和库文件目录(Library Path:)。我们使用系统默认的头文件目录和库文件目录。

图3-12 Paths标签页

由于我们不使用汇编语言进行开发,因此汇编语言包含路径(Asm Include Path(s):)空着不填。

输出文件目录(Output Directory:)空着不填,则输出文件自动存放在工程项目目录中,否则存放在用户填写的路径下。

2).Compiler标签页(图3-13)

Strict ANSI C Checkings:选中表示进行严格的C语法检查。

图3-13 Compiler标签页

Accept Extensions(C++ comments,binary constants):选中表示接受C++风格的程序注释。

Int size enum(for backword compatibility):选中表示可以向下兼容程序。

Optimizations栏可以选择默认设置(Default)或使能代码压缩功能(Enable code compression),对程序的编译进行优化。

Output Format栏选择格式输出。COFF格式的文件用于程序的仿真调试,HEX格式的文件可烧写入单片机。

AVR Studio Version(COFF)栏中选择Studio 4.06 and above。3).Target标签页(图3-14)

在Device Configuration下拉列表中,选择我们所使用的单片机芯片型号,这里我们选择ATMega16。其它采用默认设置。

图3-14 Target标签页

4).Config Salvo标签页(图3-15)

采用系统默认的为不带实时操作系统(Do not use Salvo Configurator)。

图3-15 Config Salvo标签页

完成设置后,单击OK即完成ICCAVR的属性设置。如果我们在开发下一个工程项目时,使用这些已经做好的属性设置,则不必再次进行属性设置了。

3.4.2 建立一个工程项目 在我的文档中新建一个ac3-1的文件夹。

在ICCAVR软件界面中,单击Project,在弹出的下拉菜单选中New选项,屏幕显示为图3-16。在出现的Save New Project As对话框中,选择工程项目存放的路径(存放在刚才新建的ac3-1文件夹中)并输入新建工程项目的名称(这里我们取名ac3-1),单击保存按钮,系统自动初始化成三个空文件夹Files、Headers、Documents,如图3-17所示。

图3-16 新建一个工程项目

图3-17 自动初始化成三个空文件夹Files、Headers、Documents 3.4.3 输入C源文件 单击File菜单,在下拉菜单中选择New,随后在出现的Untitled-0文本文件编辑窗口中输入以下的源程序(如图3-18)。

图3-18 输入源程序

#include void delay(void){ unsigned int i,j;for(i=0;i<1000;i++){ for(j=0;j<500;j++);} } //============================= void main(void){ DDRB=0xff;PORTB=0xff;while(1){ PORTB=0x00;delay();PORTB=0xff;delay();} }

程序输入完成后,选择File,在下拉菜单中选中Save as,保存在ac3-1文件夹中,源文件名为ac3-1.c,保存后可看到源文件名由Untitled-0变为ac3-1.c。

3.4.4 向工程项目中添加源文件

选中工程项目区的File文件夹右击。在出现的下拉窗口中选择Add Files,如图3-19所示。在添加文件窗口中选择ac3-1.c源文件,鼠标单击打开按钮,这时ac3-1.c文件便加入到工程项目中(图3-20)。

图3-19 向工程项目中添加源文件

图3-20 源文件加入到工程项目中

3.4.5 编译文件

选择主菜单栏中的Project,在下拉菜单中选中Make Project,这时编译输出窗口出现源程序的编译信息,如图3-21所示。如果编译出错,会在编译输出窗口中显示出来。用户可以在源程序编辑窗口重新输入、修改源程序文件,并再次编译,直到编译通过并生成用户所需的文件。

图3-21 编译输出窗口出现源程序的编译信息

3.4.6 软件模拟仿真

打开AVR Studio集成开发环境,这时出现一个欢迎进入AVR Studio的界面(图3-22)。

图3-22 出现一个欢迎进入AVR Studio的界面

单击Open按钮,选中ac3-1.cof文件后点击打开,出现生成AVR Studio工程项目文件的界面后点保存(图3-23),然后出现选择仿真平台的界面(图3-24)。这里我们进行软件模拟仿真,Debug Platform栏中选择AVR Simulator,Device栏选择Atmega16芯片(图3-25)。点击Finish后进入仿真界面(图3-26)。

图3-23 出现生成AVR Studio工程项目文件的界面后点保存

图3-24 出现选择仿真平台的界面

图3-25 Device栏选择Atmega16芯片

图3-26 点击Finish后进入仿真界面

在主菜单中打开Debug,从Debug的下拉菜单中可看到常用的仿真快捷键,这里我们选择F10(Step Over)进行调试。

选择Debug →AVR Simulator Options,出现图3-27所示的仿真选项,我们将Frequency一项中的仿真频率改为8.00MHz,使其与试验板上的实际工作频率相符。

图3-27 选择Debug →AVR Simulator Options 在左侧Workspace窗口中,存放着ATMeag16的各种寄存器的状态值,我们将I/O ATMEGA16前的加号展开,再将PORTB前的加号展开,将PORTB输出口打开(图3-28)。鼠标在程序的光标箭头上点一下,随后按动F10,可发现PORTB口的各寄存器会发生变化,DDRB全部为黑色(0xFF),说明方向寄存器的设置为输出方式,而随着继续按动F10,PORTB与PINB则一会儿变黑(0xFF),一会儿变白(0x00)。将Workspace窗口中的Processor前的加号展开,最下面有个Stop Watch项,该项就是AVR Studio在选定时钟频率下计算出的运行时间(图3-29)。我们可发现,PORTB输出低电平到高电平的时间间隔约0.439秒,反复循环。仿真调试通过后,关闭AVR Studio开发环境。

图3-28 将PORTB输出口打开

图3-29 AVR Studio在选定时钟频率下计算出的运行时间

3.4.7 将HEX文件下载到单片机中

将并口下载器插电脑的并口,下载线的另一端插AVR DEMO单片机综合试验板的ISP口。

将试验板上标示PB0-PB7的双排针上8个短路块拔下,插到标有LED的双排针上,使PB口与LED接通。试验板通电工作,注意,5V稳压电源接DC5V插座;若使用9V-15V电源时,插9V-15V的插座。插错电源会损坏芯片!

第一次使用PonyProg2000下载程序时,需对PonyProg2000进行设置,选择合适的下载接口方式,并对端口进行校正。PonyProg2000支持串口及并口下载,这里我们采用并口SPI方式下载程序。

双击桌面上的PonyProg2000快捷图标运行软件(图3-30),出现小马头图标后点确认。

程序下载前先进行端口设置及校正。选择设置→接口设置,出现图3-31对话框。如果我们的电脑使用的操作系统是Windows 95/98/ME,单击并行,选择Avr ISP API,并选择LPT1;如果我们的电脑使用的操作系统是Windows NT/2000/XP,则单击并行,选择Avr ISP I/O,并选择LPT1。

图3-30 运行PonyProg2000软件

图3-31 进行端口设置及校正

下来选择设置→校正,对端口进行校正,出现图3-32的窗口。单击Yes开始校正,校正完成后会有提示(图3-33),点OK即可。

图3-32 单击Yes开始校正

图3-33 校正完成

选择器件→AVR micro→Atmega16(图3-34)。

图3-34 选择器件→AVR micro→Atmega16 选择文件→打开程序(FLASH)文件,文件类型选*HEX,装载编程文件(图3-35)。

图3-35 装载编程文件

选择命令→擦除,先擦除器件(图3-36)。

图3-36 选择命令→擦除

选择命令→Security and Configuration Bits„,按图3-37配置熔丝位。单击写入,写入熔丝位配置。

图3-37 写入熔丝位配置

选择命令→写入所有,开始下载烧写文件(图3-38)。

图3-38 选择命令→写入所有

在下载文件时,ISP旁的发光二极管D0会点亮。3.4.8 应用

下载烧写完成时,我们即可看到PB口驱动的8个发光二极管开始闪亮,周期约0.8秒,即点亮0.4秒、熄灭0.4秒,反复进行。

恭喜您,您已经踏入了AVR高速单片机的大门,请您继续行动起来,掌握AVR单片机的高效设计。

第4章 AVR DEMO单片机综合试验板原理介绍及使用

4.1 AVR DEMO单片机综合试验板

AVR DEMO单片机综合试验板为多功能实验板,对入门实习及学成后开发产品特别有帮助,图4-1为AVR DEMO单片机综合试验板电路原理图(作者注:使用Protel99se打开)。

图4-1 AVR DEMO单片机综合试验板电路原理图

U1为单片机ATMEAG16L。JP1、JP2为双排针,便于单片机外扩其它器件。

D1-D8为8个发光二极管,通过LED双排针与PB0-PB7连接,可作开关量输出的指示。

ISP为在线下载程序的接口。JTAG为在线JTAG仿真接口。

LCD128_64为驱动128*64图型液晶的接口,可做128*64液晶驱动实验。LCD16_2为驱动16*2液晶的接口,可做16*2液晶驱动实验。JTAG_R双排针连接R2-R5这4个10K的上拉电阻,这是进行JTAG仿真所需的,一般情况下用短路块将JTAG_R双排针短接。

U2为232通信芯片,通过UART双排针与单片机ATMEAG16L的PD0、PD1连接,方便与PC机连接做RS232通信实验。

SW_DIP4为4位拔码开关,它通过SW_DIP短路块与PD4-PD7连接,可做状态转换的实验。

RV1为多圈电位器,所取得的模拟电压通过排针AD后送单片机的PA7,可做A/D实验。

Q1及蜂鸣器BZ组成音响电路,通过排针BEEP与单片机的PD5连接,可做音响实验。

S1-S4为4个轻触式按键开关,通过KEY双排针与PD4-PD7连接,可做开关量的输入实验。

INT0、INT1为2个轻触式按键开关,通过INT双排针与PD2、PD3连接,可进行AVR单片机的外部中断实验。

LEDMOD1、LEDMOD2为8位数码管显示器,其中字段码经LEDMOD_DATA双排针后由单片机的PA0-PA7送出,位选码经LEDMOD_COM双排针后由单片机的PC0-PC7送出,可做8位数码管动态扫描输出及驱动。

U4为IIC总线实验器件24C01,通过IIC双排针与PC0、PC1连接,可做IIC总线实验。

U5为SPI总线实验器件93C46,通过SPI双排针与PB4-PB7连接,可做SPI总线实验。

U7为测温器件,通过排针18B20与PC7连接,能进行测温及控温实验。U8为38KHz的红外接收器,通过排针IR与PD6连接,可做红外遥控实验。

U6A、U6B及外围器件组成有源滤波电路,通过双排针PWM_IN与单片机的PB3、PD4、PD5、PD7连接,可做PWM(D/A)实验。

J1、J2为外接电源插口,其中J1输入9-15V直流电压,供U6运放使用,同时经U3稳压获得的5V供其它部分使用。若实验中不需从PWM_OUT1、PWM_OUT2端口取得PWM的模拟量,那么直接从J2口输入5V稳压电源即可,而不用J1口。

4.2ATMEAG16L单片机的主要特点与内部组成

ATMEAG16L是AVR单片机家族中的高档产品,其包含的功能较为齐全,非常适合于学习及开发实践。选择ATMEAG16L进行学习的另一个主要原因是该芯片支持JTAG调试,这样大大降低了我们在学习、开发过程中的调试难度及成本。

ATMEAG16L的主要特点为:

●内部Flash程序存储器内部含有16K字节的Flash存储器,支持ISP(在系统编程)和IAP(在应用编程),可被重复擦写10000次。

●内部数据存储器SRAM达1K字节。

●内部EEPROM达512字节,可擦写100000次,可以在系统掉电时保存一些用户信息。

●32个I/O口,分PA、PB、PC、PD共4组,每组8位。每个I/O口可负载20~40mA的电流,芯片的总电流不超过200mA。

●有两个可分频的8位定时器/计数器和一个可分频的16位定时器/计数器,带输入捕获、比较输出功能。有4个通道的PWM,可作DAC转换器。●中断单元有20个中断源,每个中断有独立的中断向量入口地址,所有的中断事件都有各自的使能位,可以根据需要使能或屏蔽。

●Atmega16L支持多种时钟方式,有外部晶振、外部RC振荡、外部时钟和内部RC振荡等。Atmega16L内置上电复位电路、可编程低电压检测(BOD)复位电路和带独立振荡器的看门狗,支持上电复位、外部复位、看门狗复位和低电压检测复位等复位源。

●内置8通道10位精度的逐次逼近式模/数转换器(ADC),支持单端和双端差分信号输入,内含增益可编程运算放大器。●SPI同步接口。●全双工的USART。●

片内模拟比较器。●

二线总线(TWI)等。

图4-2为ATMEAG16L的引脚排列。图4-3为ATMEAG16L的内部组成结构。

图4-2 ATMEAG16L的引脚排列 图4-3 ATMEAG16L的内部组成结构

4.3使用JTAGICE仿真器(JTAG ICE)调试AVR DEMO单片机综合试验板

JTAG ICE与AVR DEMO单片机综合试验板连接的电路图见图4-4,图4-4中虚线的部分是可选连接。

图4-4 JTAG ICE与AVR单片机综合试验板连接的电路

当JTAGICE与用户板和个人电脑均连接上之后,就可以开始调试。下面以第3章中所作的第一个程序ac3-1.c为例,使用JTAG ICE进行实际调试。

前5步的操作与第3章中介绍的完全相同,即: 1.设置ICCAVR。2.建立一个工程项目。3.输入C源文件。4.向工程项目中添加源文件。

5.编译文件,编译通过后生成COFF/HEX文件。仅第6步的操作不同,下面将第6步介绍一下:

需要说明的是,进行JTAG仿真前,应确定单片机的JTAGEN熔丝位已被编程,这可以用下载软件PonyProg2000进行熔丝位检查。

6.使用JTAG仿真器进行实时在线仿真

将JTAG仿真器通过串口线与PC机的串口连接,另一端的10PlN扁平电缆则插入AVR DEMO单片机综合试验板上的JTAG插口。AVR DEMO单片机综合试验板通上5V电压,然后打开AVR Studio集成开发环境,这时出现一个欢迎进入AVR Studio的界面(图4-5)。

图4-5 进入AVR Studio的界面

单击Open按钮,选中ac3-1.cof文件后点击打开,出现生成AVR Studio工程项目文件的界面后点保存,然后出现选择仿真平台的界面(图4-6)。这里我们在Debug Platform栏中选择JTAG ICE,Device栏选择Atmega16芯片(图4-7)。点击Finish后JTAG ICE会与PC机建立通信连接,进入在线仿真界面(图4-8)。

图4-6 出现选择仿真平台的界面

图4-7 Device栏选择Atmega16芯片

图4-8 进入在线仿真界面

在主菜单中打开Debug,从Debug的下拉菜单中可看到常用的仿真快捷键,这里我们选择F10(Step Over)进行调试。

在左侧Workspace窗口中,存放着ATMeag16的各种寄存器的状态值,我们将I/O ATMEGA16前的加号展开,再将PORTB前的加号展开,将PORTB输出口打开。鼠标在程序的光标箭头上点一下,随后按动F10,可发现PORTB口的各寄存器会发生变化,DDRB全部为黑色(0xFF),说明方向寄存器的设置为输出方式,而随着继续按动F10,PORTB与PINB则一会儿变黑(0xFF),一会儿变白(0x00),对应的,实验板上的发光二极管也亮、灭闪烁。当按动F5快捷键(Run)后,程序全速运行,这时实验板上的发光二极管自动闪烁。

第二篇:《高级语言程序设计C》实验教学大纲

《高级语言程序设计C》实验教学大纲

课程编号:1021742 总学时:56学时

适用专业:非计算机理工科各专业 总实验学时:24 实验次数: 12 次 应开实验个数:13 已开实验个数:13 实验开出率:100%

实验一

熟悉C 程序的运行环境

一、学时:2

二、实验类型:演示、验证

三、实验目的和主要内容:

1.了解计算机系统对高级语言的基本操作方法

2.熟悉和了解Turbo C 系统软件的使用和操作

3.能进行简单的C语言程序录入、调试、编译和运行

四、需用仪器、设备:

1.硬件环境

PC-486以上微机

32M以上的内存

VGA显卡

2.软件环境

西文DOS操作系统(可使用UCDOS汉字操作系统)或Windows操作系统

Turbo C(2.0版)

五、实验方法及步骤:

1.熟悉开机操作,使用单机或计算机上网。

2.进入 Turbo C 系统。

3.熟悉Turbo C 系统各菜单命令的使用和操作

4.模仿简单的源程序,编写自己的小程序,并能运行这些程序。

5.录入、调试、编译和运行C语言程序

实验二

数据类型、表达式及输入输出函数实验

一、学时:2

二、实验类型:验证、设计

三、实验目的和主要内容:

1. 熟悉和了解C语言的数据类型

2. 使用C语言的有关算术运算符,以及包含这些运算符的表达式

3.进行简单的C语言输入输出函数的使用,格式控制符的涵意,简单C程序的设计、调 试、编译和运行

四、需用仪器、设备:

1.硬件环境

PC-486以上微机

32M以上的内存

VGA显卡

2.软件环境

西文DOS操作系统(可使用UCDOS汉字操作系统)或Windows操作系统

Turbo C(2.0版)

五、实验方法及步骤:

1.进入 Turbo C 系统。

2.编写简单的有输入输出的C程序,并进行该程序的运行、调试、编译。

3.编写一个输入三条边,计算三角形面积的程序。

4.编写程序,计算a+b×c÷d-d3,其中:a,b为整型变量,c,d为实型变量。

5.编写一个有关数据计算程序,验证运算符及表达式的结果。

6.可从布置的作业中,再任选一编程题,进行上机。

实验三

顺序程序结构程序设计

一、学时:2

二、实验类型:验证、设计

三、实验目的和主要内容:

1.进一步掌握C程序的编辑、编译、连接和运行的过程。2.熟悉顺序结构的程序设计方法。3.熟练使用C的各种表达式。

4.熟练掌握输入、输出函数的使用。

四、需用仪器、设备:

1.硬件环境

PC-486以上微机

32M以上的内存

VGA显卡

2.软件环境

西文DOS操作系统(可使用UCDOS汉字操作系统)或Windows操作系统

Turbo C(2.0版)

五、实验方法及步骤:

1.输入x,y,编写程序求z=x+|y|的值。实验步骤与要求:

(1)程序中用scanf函数输入x和y的值,请分析以下两个语句 scanf(“%f%f”,x,y);scanf(“%f%f”,&x,&y);

哪一个是正确的,分别运行之,分析程序运行结果。

(2)如果scanf函数改为scanf(“%f,%f”,&x,&y);应该怎样输入数据。2.编写输入三角形的三边长a、b、c,求三角形面积area的程序。实验步骤与要求:

(1)输入前要加提示语句。

(2)输出结果前要有必要的文字说明。(3)输入一组数据3,4,5,观察运算结果。

(4)输入另外一组数据3,4,8,观察运算结果,分析这个运算结果是否有效。

实验四

分支控制语句实验

一、学时:2

二、实验类型:验证、设计

三、实验目的和主要内容:

1.熟悉和了解C语言系统分支语句的使用和操作

2.进行C语言分支控制语句的设计、调试、编译和运行

四、需用仪器、设备:

1.硬件环境

PC-486以上微机

32M以上的内存

VGA显卡

2.软件环境

西文DOS操作系统(可使用UCDOS汉字操作系统)或Windows操作系统

Turbo C(2.0版)

五、实验方法及步骤:

1.进入 Turbo C 系统。

2.进行分支控制源程序的设计,并进行该程序的运行、调试、编译。

3.编辑一个分支控制程序,求:任意输入数(n>2)是否为素数。

4.编辑一个分支控制程序,求:任意输入3个数,求其最大数。

实验五

循环语句实验

一、学时:2

二、实验类型:验证、设计

三、实验目的和主要内容:

1.熟悉和了解C语言循环语句的使用和操作

2.进行C语言循环语句的设计、调试、编译和运行

四、需用仪器、设备:

1.硬件环境

PC-486以上微机

32M以上的内存

VGA显卡

2.软件环境

西文DOS操作系统(可使用UCDOS汉字操作系统)或Windows操作系统

Turbo C(2.0版)

五、实验方法及步骤:

1.进入 Turbo C 系统。

2.进行循环源程序的设计,并进行该程序的运行、调试、编译。

3.编辑一个循环程序,求:1到100的和及平方和。

4.编辑一个循环程序,求:任意输入10个数,求其最大数。

5.可从布置的作业中,再任选一编程题,进行上机。

实验六

数组实验

一、学时:2

二、实验类型:验证、设计

三、实验目的和主要内容:

1.熟悉和了解C语言数组程序的设计方法

2.学会使用C语言数组进行程序设计

3.进行C语言数组语句的设计、调试、编译和运行

四、需用仪器、设备:

1.硬件环境

PC-486以上微机

32M以上的内存

VGA显卡

2.软件环境

西文DOS操作系统(可使用UCDOS汉字操作系统)或Windows操作系统

Turbo C(2.0版)

五、实验方法及步骤:

1.进入 Turbo C 系统。

2.进行数组的定义和使用方法,即:一维和二维数组的应用。

3.进行数组语句源程序的设计,并进行该程序的运行、调试、编译。

4.编辑数组应用程序:

(1)任意输入20个数在一维数组a中,求20个数的平均值。

(2)定义2个二维数组A[2][3]、B[2][3],分别对这2个数组输入数据,求A+B和A-B的值。

(3)用字符数组存储任意输入10字符,求其最大字符。

(4)编辑一个有5个学生,考 3门功课。求出每一个学生的总分及平均分,统计平均成绩低于 60 分的学生人数。

5.可从布置的作业中,再任选一编程题,进行上机。

实验七

有关数组的程序设计

一、学时:2

二、实验类型:验证、设计

三、实验目的和主要内容:

1.掌握有关数组和字符串的程序设计方法。

四、需用仪器、设备:

1.硬件环境

PC-486以上微机

32M以上的内存

VGA显卡

2.软件环境

西文DOS操作系统(可使用UCDOS汉字操作系统)或Windows操作系统

Turbo C(2.0版)

五、实验方法及步骤: 已知一组数据如下:6,3,42,23,35,71,98,67,56,38。编写程序,把它们按 从小到大的次序排列起来。求2行3列矩阵A 的转置矩阵。

实验八

函数实验

一、学时:2

二、实验类型:验证、设计

三、实验目的和主要内容:

1.熟悉和了解C语言函数程序的设计方法。

2.学会使用C语言函数的定义及调用,并进行程序编制。

3.进行C语言函数语句的设计、调试、编译和运行

四、需用仪器、设备:

1.硬件环境

PC-486以上微机

32M以上的内存

VGA显卡

2.软件环境

西文DOS操作系统(可使用UCDOS汉字操作系统)或Windows操作系统

Turbo C(2.0版)

五、实验方法及步骤:

1.进入 Turbo C 系统。

2.进行函数的定义及调用。

3.进行函数语句源程序的设计,并进行该程序的运行、调试、编译。

(1)任意输入一个数n,用两个子函数实现1+2+3„n以及n!,在主函数中输出该结果。

(2)在主函数中定义二维数组A[3][4]、B[4],用子函数对数组A[3][4]每一行求和,其值放在数组B[4]中,在主函数中输出该值。

(3)用字符数组存储任意输入的10字符,在子函数中把该字符数组的小写字母转换成大写字母。

4.可从布置的作业中,再任选一编程题,进行上机。

实验九

常用指针实验

(一)一、学时:2

二、实验类型:验证、设计

三、实验目的和主要内容:

1.熟悉和了解C语言指针一般设计方法

2.学会使用C语言指针进行程序设计

3.进行简单C语言指针语句的设计、调试、编译和运行

四、需用仪器、设备:

1.硬件环境

PC-486以上微机

32M以上的内存

VGA显卡

2.软件环境

西文DOS操作系统(可使用UCDOS汉字操作系统)或Windows操作系统

Turbo C(2.0版)

五、实验方法及步骤:

1.进入 Turbo C 系统。

2.进行C语言指针语句的定义和使用方法。

3.进行C语言指针语句源程序的设计,并进行该程序的运行、调试、编译。

4.编辑一个找出字串 str1中 str2出现的位置,用指针编程实现。

5.可从布置的作业中,再任选一编程题,进行上机。

实验十

复杂指针实验

(二)一、学时:2

二、实验类型:验证、设计

三、实验目的和主要内容:

1.进一步熟悉和了解C语言指针语句设计方法

2.进行C语言中的指针与函数、指针数组、多级指针语句的设计、调试、编译和运行

四、需用仪器、设备:

1.硬件环境

PC-486以上微机

32M以上的内存

VGA显卡

2.软件环境

西文DOS操作系统(可使用UCDOS汉字操作系统)或Windows操作系统

Turbo C(2.0版)

五、实验方法及步骤:

1.进入 Turbo C 系统。

2.进行C语言指针与函数、指针数组、多级指针语句的定义和使用方法。

3.进行C语言该指针语句源程序的设计,并进行该程序的运行、调试、编译。

4.编辑一个在主程序里输入十个不等长的字串,调用自编的函数把它们按升序排列,用指针编程实现。

5.可从布置的作业中,再任选一题编程题,进行上机。

实验十一

结构类型实验

一、学时:2

二、实验类型:验证、设计

三、实验目的和主要内容:

1.熟悉和了解C语言结构、联合数据的定义及设计方法

2.学会使用C语言结构、联合数据类型进行程序设计

3.进行C语言结构、联合语句的设计、调试、编译和运行

四、需用仪器、设备:

1.硬件环境

PC-486以上微机

32M以上的内存

VGA显卡

2.软件环境

西文DOS操作系统(可使用UCDOS汉字操作系统)或Windows操作系统

Turbo C(2.0版)

五、实验方法及步骤:

1.进入 Turbo C 系统。

2.进行C语言结构、联合数据类型的定义和使用。

3.进行C语言结构、联合数据类型源程序的设计,并进行该程序的运行、调试、编译。

4.编辑一个能处理学生综合信息的程序(包括:学号、姓名、班级、语文成绩、数学成绩、英语成绩等)。

实验十二

有关结构的程序设计

一、学时:2(课后完成或选作)

二、实验类型:验证、设计

三、实验目的和主要内容:

1.掌握结构体类型和结构体变量的定义。2.掌握结构类型变量的定义和使用;

3.掌握链表的概念,初步学会对链表进行操作;

四、需用仪器、设备:

1.硬件环境

PC-486以上微机

32M以上的内存

VGA显卡

2.软件环境

西文DOS操作系统(可使用UCDOS汉字操作系统)或Windows操作系统

Turbo C(2.0版)

五、实验方法及步骤:

1.有五个学生,每个学生的数据包括学号,姓名,三门课的成绩,从键盘输入五个学生的数据,要求打印出每个学生的平均成绩,以及最高分的学生的数据(包括学号,姓名,三门课的成绩,平均分数)。实验步骤与要求:

用一个函数输入五个学生的数据;用一个函数求总平均分;用函数找出最高分学生数据,总平均分和最高分的学生的数据都在主函数中输出。

2.三个人围成一圈,从第一个人开始顺序报号1,2,3。凡报到“3”者退出圈子,找出最后流在圈子中的人原来的序号。

3.建立一个链表,每个结点包括:学号,姓名,性别,年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。

实验十三

文件实验

一、学时:2

二、实验类型:验证、设计

三、实验目的和主要内容:

1.熟悉和了解C语言文件系统的组成及设计方法。

2.学会使用C语言文件系统进行程序设计

3.进行C语言文件语句的设计、调试、编译和运行

四、需用仪器、设备:

1.硬件环境

PC-486以上微机

32M以上的内存

VGA显卡

2.软件环境

西文DOS操作系统(可使用UCDOS汉字操作系统)或Windows操作系统

Turbo C(2.0版)

五、实验方法及步骤:

1.进入 Turbo C 系统。

2.进行C语言文件系统类型的定义和使用。

3.进行C语言文件系统类型源程序的设计,并进行该程序的运行、调试、编译。

4.编辑程序。

(1)用数组存储10个数据,并存储在“date.dat”文件中

(2)对存储在“date.dat”文件中的数据读入到一个数组中,求出总和及最大值,并把它存储在“dsum.dat”文件中

第三篇:高级语言程序设计(C语言)实验教学大纲

信息技术系《高级语言程序设计》实验教学大纲

一、教材名称:<>

二、课程总学时:108学时 [理论: 72 学时;实验与上机:36学时]

三、适用专业和开课学期:软件技术专业,第2学期。

四、实验的目的与任务:

《C程序设计》是一门实践性很强的课程。通过实验使学生加深对课堂讲授的概念、语法、算法、编程技术的理解;熟悉C程序设计的开发环境;掌握程序设计和调试的基本技能。并通过实践激发学生进一步学习的积极性,培养学生的学习兴趣和创新思维。通过8个实验,使学生经过一定数量的上机训练,了解和掌握C程序设计的环境、程序的数据表示、程序的执行流程控制、程序的整体结构等C程序设计的基本概念和应用技术。

五、主要仪器设备及台(套)数

安装Windowsxp,TC2.0等软件的计算机,每生一台。

六、主要实验教材(指导书)及参考用书:

谭浩强主编,《C程序设计题解与上机指导》,清华大学出版社。

七、成绩考核方式及评分标准

实验占课程总课时1/3,每项实验按该实验说明要求规定的评分标准积分,学期末合计的实验成绩占课程总成绩的18%。

八、实验开出率:100%

九、实验项目与要求

实验一:C程序的运行环境和运行一个C程序的方法(2学时)

实验性质:验证性实验

一、实验目的

1.了解所用的计算机系统的基本操作方法,学会独立使用该系统。2.了解在该系统上如何编辑、编译、连接和运行一个C程序。3.通过运行简单的C程序,初步了解C源程序的特点。

二、实验内容

1.调用编辑程序,输入教材第一章例1.1程序,并进行编译和运行。应了解所用的系统是用什么命令进行编译和连接运行的。编译和连接后所得到的目标程序的后缀是什么形式的?

2.输入并运行教材第一章中例1.2。

3.输入并运行教材第一章中例1.3,了解如何在运行时向程序变量输入数据。

实验二 数据类型、运算符和表达式(2学时)

实验性质:验证性实验

一、实验目的

1.掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用格式转换符。

2.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。

3.进一步熟悉C程序的编辑、编译、连接和运行的过程。

二、实验内容

1.输入并运行教材第三章例3.6.即: #include void main(){char c1,c2; c1=97; c2=98;

printf(“%c %cn”,c1,c2); printf(“%d %dn”,c1,c2); } 在此基础上 ①将第二行改为: int c1,c2;再使之运行,分析结果。②再将第三行、第四行改为: c1=300;c2=400;再使之运行,分析其运行结果。

2.输入并运行教材第三章习题3.6,在上机前先用人工分析程序写出应得结果,上机后将二者对照。

3.输入并运行习题3.10。即: #include void main(){int i,j,m,n;i=8;j=10;m=++i;n=j++;printf(“%d,%d,%d,%d”,i,j,m,n);} 分别作以下改动并运行: ①将第4行改为: m=i++;n=++j;②程序改为: #include void main(){int i,j;i=8;j=10;printf(“%d,%d”,i++,j++);} ③在②的基础上,将printf语句改为: printf(“%d,%d”,++i,++j);④再将printf语句改为:

printf(“%d,%d,%d,%d”,i,j, i++,j++);⑤程序改为: main(){int i,j,m=0,n=0;;i=8;j=10;m+=i++;n-=--j;printf(“i=%d,j=%d,m=%d,n=%d”,i,j,m,n);}

实验三 最简单的C程序设计(2学时)

实验性质:验证性实验

一、实验目的

1.掌握C语言中使用最多的一种语句—赋值语句的使用。2.掌握数据的输入输出的方法,能正确使用各种格式转换符。

二、实验内容

1.输入并运行以下程序:

#include

void main(){int a,b; float d,e; char c1,c2; double f,g; long m,n;

unsigned int p,q; a=61;b=62; c1=’a’;c2=’b’; d=3.56;e=-6.87;

f=3157.890121;g=0.123456789; m=50000;n=-60000; p=32768;q=40000;

printf(“a=%d,b=%dn c1=%c,c2=%cnd=%6.2f,e=%6.2fn”,a,b,c1,c2,d,e); printf(“f=%15.6f,g=%15.12fnm=%ld,n=%ldnp=%u,q=%un”,f,g,m,m,p,q); } 在此基础上,做以下改动: ① 将程序第8-13行改为: a=61;b=62; c1=a;c2=b;

f=3157.890121;g=0.123456789; d=f;e=g;

p=a=m=50000;q=b=n=-60000; 运行程序,分析结果。

② 在①的基础上将printf语句改为:

printf(“a=%d,b=%dn c1=%c,c2=%cnd=%15.6f,e=%15.12fn”,a,b,c1,c2,d,e);

printf(“f=%f,g=%fn m=%ld,n=%ldn p=%d,q=%dn”,f,g,m,n,p,q); 运行程序。

2.编写程序,用getchar函数读入两个字符c1、c2,然后分别用putchar函数和printf函数输出这两个字符。

上机运行程序,比较用printf和putchar函数输出字符的特点。

实验四 选择结构程序设计(2学时)

实验性质:设计性实验

一、实验目的

1.了解C语言表示逻辑量的方法(以0代表“假”,以1代表“真”); 2.学会正确使用逻辑运算符和逻辑表达式; 3.熟练掌握if语句和switch语句。

二、实验内容

先编程序,解决以下问题,然后上机调试运行程序。1.有一个函数 xy2x13x11x11x10 x10用scanf函数输入x的值(分别为x<1、1~

10、≥10三种情况),求y值。2.给出一个百分制成绩,要求输出成绩等级‘A’,‘B’,‘C’,‘D’,‘E’。90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为‘E’。

实验五 循环控制(4学时)

实验性质:设计性实验

一、实验目的

1.熟悉用while语句,do-while语句和for语句实现循环的方法。2.掌握在程序设计中用循环的方法实现各种算法(如穷举、迭代、递推等)。

二、实验内容

编程序并上机调试运行。

1.输入两个正整数,求其中最大公约数和最小公倍数。2.用牛顿迭代法求方程2x3-4x2+3x-6=0在1.5附近的根。

实验六 数组(4学时)

实验性质:设计性实验

一、实验目的

1.掌握一维数组和二维数组的定义、赋值和输入输出的方法; 2.掌握字符数组和字符串函数的使用。3.掌握与数组有关的算法(特别是排序算法)。

二、实验内容

编程序并上机调试运行。

1.用选择法对10个整数排序。10个整数用scanf函数输入。2.将两个字符串连接起来,不要用strcat函数。实验七 函数(4学时)

实验性质:设计性实验

一、实验目的

1.掌握定义函数的方法;

2.掌握函数实参与形参的对应关系,以及“值传递”的方式; 3.掌握函数的嵌套调用和递归调用的方法;

4.掌握全局变量和局部变量,动态变量和静态变量的概念和使用方法。

二、实验内容

编程序并上机调试运行。

1.写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的信息。2.求两个整数的最大公约数和最小公倍数,用一个函数求最大公约数。用另一函数根据求出的最大公约数求最小公倍数。

(1)用全局变量的方法。将两个整数的最大公约数、最小公倍数都设为全局变量。

(2)不用全局变量,两个整数在主函数中输入,并传送给函数1,求出的最大公约数返回主函数,然后再与两个整数一起作为实参传递给函数2,以求出最小公倍数,返回到主函数输出最大公约数和最小公倍数。

实验八 预处理命令(2学时)

实验性质:设计性实验

一、实验目的

1.掌握宏定义的方法; 2.掌握文件包含处理方法; 3.掌握条件编译的方法。

二、实验内容

编程序并上机调试运行。

1.定义一个带参数的宏,使两个参数的值互换。在主函数中输入两个数作为使用宏的实参,输出已交换后的两个值。

说明:在程序主函数使用宏时只能用两个实参,如SWAP(a,b),不能用三个参数。2.用条件编译方法实现以下功能:

输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变成其下字母(如‘a’变成‘b’,„,‘z’变成‘a’。其它字符不变)。用#define命令来控制是否要译成密码。例如: #define CHANGE 1 则输出密码。若 #define CHANGE 0 则不译成密码,按原码输出。用条件编译方法来处理。

实验九 指针(4学时)

实验性质:设计性实验

一、实验目的

1.掌握指针的概念,会定义和使用指针变量; 2.学会使用数组的指针和指向数组的指针变量; 3.学会使用字符串的指针和指向字符串的指针变量; 4.学会使用指向函数的指针变量;

二、实验内容

编程序并上机调试运行程序(都要求用指针处理)。1.输入三个整数,按由小到大的顺序输出。

2.将一个3*3的矩阵转置,用一函数实现之。在主函数中用scanf函数输入以下矩阵元素:

1 7133915511 19将数组名作为函数实参。函数调用后在主函数中输出已转置的矩阵。3.用一个函数实现两个字符串的比较,即自己写一个strcmp函数: strcmp(s1,s2)如果s1=s2,则函数返回值为0;如果s1≠s2,返回它们二者第一个不同字符的ASCII码差值(如“BOY”与“BAD”,第二个字母不同,“O”与“A”之差为79-65=14);如果s1>s2,则输出正值;如s1

两个字符串s1,s2由main函数输入,strcmp函数的返回值也在main函数输出。

实验十 结构体和共用体(4学时)

实验性质:设计性实验

一、实验目的

1.掌握结构体类型变量的定义和使用; 2.掌握结构体类型数组的概念和应用; 3.掌握共用体的概念与使用。

二、实验内容

编程序,然后上机调试运行。

1.有5个学生,每个学生的数据包括学号、姓名、三门课的成绩,从键盘输入5个学生数据,要求打印出三门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、三门课的成绩、平均分数)。

要求用一个input函数输入5个学生数据;用一个average函数求总平均分;用max函数找出最高分学生数据;总平均分和最高分的学生的数据都在主函数中输出。

2.输入和运行以下程序:

#include

union data {int i[2]; float a; long b; char c[4]; };

void main(){union data u;

scanf(“%d,%d”,&u.i[0],&u.i[1]); printf(“i[0]=%d,i[1]=%dna=%fnb=%ldnc[0]=%c,c[1]=%c,c[2]=%c,c[3]=%cn”,u.i[0],u.i[1],u.a,u.b,u.c[0],u.c[1],u.c[2],u.c[3]);} 输入两个整数10000、20000给u.i[0]和u.i[1]。分析运行结果。

然后将scanf语句改为: scanf(“%ld”,&u.b);

输入60000给b。分析运行结果。

实验十一 位运算(1学时)

实验性质:设计性实验

一、实验目的

1.掌握位运算的概念和方法,学会使用位运算符; 2.学会通过位运算实现对某些位的操作。

二、实验内容

编写程序,上机调试并运行。

1.设计一个函数,使给出一个数的原码,能得到该数的补码,用八进制形式输入和输出。

实验十二 文件(1学时)

实验性质:设计性实验

一、实验目的

1.掌握文件以及缓冲文件系统、文件指针的概念; 2.学会使用文件打开、关闭、读、写等文件操作函数。3.学会用缓冲文件系统对文件进行简单的操作。

二、实验内容

1.从键盘输入一个字符,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存。输入的字符以“!”结束。实验十三 学生成绩管理(4学时)

实验性质:综合性设计性实验

一、实验目的

1.综合运用C程序设计知识,解决实际问题。

二、实验内容

1.有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号、姓名、三门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“stud”中。

2.将上题“stud”文件中的学生数据,按平均分进行排序处理,将已排序的学生数据存入一个新文件“stu-sort”中。

3.将上题已排序的学生成绩文件进行插入处理。插入一个学生的三门课成绩。程序先计算新插入学生的平均成绩,然后将它按成绩高低顺序插入,插入后建立一个新文件。

学生的原有数据为:

91101 Wang 89,98,67.5 91103 Li 60,80,90 91106 Fun 75.5,91.5,99 91110 Ling 100,50,62.5 91113 Yuan 58,68,71 要插入的学生数据为:

91108 Xin 90,95,60

制 订:程世辉 教研室:软件教研室 执笔人:程世辉 审定人:

二00七年八月

第四篇:C高级语言程序设计实验内容

实验一 C语言的运行环境和基础知识

一、实验目的

1.掌握c程序设计编程环境visual c++,掌握运行一个c程序设计的基本步骤,包括编辑、编译、连接和运行。

2.熟练掌握Visual C++ 6.0环境运行的C程序上机步骤 3.数据类型、常量和变量的使用 4.表达式及运算符的应用 5.C程序的调试。

二、实验内容和源程序清单、测试数据、结果。

1、最简单的C程序。(要求文件名:1_1.c)#include int main(){

printf(“Hello world!n”);return 0;}

2、一个具有致命错误的程序,请修改。(要求文件名:1_2.c)#include int main(){ int i scanf(“%d”,i);

printf(“i=%dn”,i);

return 0;}

3、一个具有警告语法错的程序。(要求文件名:1_3.c)#include int main(){ int i=9,j,s;

s=i+j;printf(“s=%dn”,s);return 0;}

4、写出一个程序测试整型、字符型数据表示,并输出以验证是否正确。(要求文件名:1_4.c)#include int main(){

int x=010,y=10,z=0x10;

/* 整型数据表示 */ char c1='M',c2='x4d',c3='115',c4=77,c;

/* 字符型数据表示 */

/* 整型数据的输出 */ printf(“x=%o,y=%d,z=%xn”,x,y,z);

/* 数据以原进制输出,注意是否有前导0或0x */ printf(“x=%d,y=%d,z=%dn”,x,y,z);

/* 数据以10进制输出,换算到10进制,结果对吗? */ /* 字符型数据的输出 */ printf(“c1=%c,c2=%x,c3=%o,c4=%dn”,c1,c2,c3,c4);

/* 数据以原进制输出,注意是否有前导0或0x ?*/ printf(“c1=%c,c2=%c,c3=%c,c4=%cn”,c1,c2,c3,c4);

/* 结果都是什么字符?,也就是说字符可以自由的表示成几种形式? */ printf(“c1=%d,c2=%d,c3=%d,c4=%dn”,c1,c2,c3,c4);

/* 看看这些字符的10进制ASCII码,哦,ASCII码一样,同一种字符 */

/* 字符型数据参与算术运算 */ c=c1+32;

/* 字符怎么参加了数学运算,哦,是字符对应的ASCII码-整数 /* 参与数学运算;结果还是一个整数-另外一个字符的ASCII码 */ printf(“c=%c,c=%dn”,c,c);

/* 看看这个字符是什么?哇,'M'+32='m'了,看看ASCII码表,原来如此!*/ return 0;} 参考结果: x=10,y=10,z=10 x=8,y=10,z=16 c1=M,c2=4d,c3=115,c4=77 c1=M,c2=M,c3=M,c4=M c1=77,c2=77,c3=77,c4=77 c=m,c=109

三、实验报告要求

将题目:2和4的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。2

实验二

顺序结构程序设计

一、实验目的:

1.掌握顺序结构程序设计 2.掌握赋值语句的用法

3.熟练地进行数据输入和输出

二、实验内容和源程序清单、测试数据、结果。

1、已知:a=2,b=3,x=3.9,y=2.3(a,b整型,x,y浮点),计算算术表达式(float)(a+b)/2+(int)x%(int)y的值。试编程上机验证。(要求文件名:2_1.c)提示编程要点:

(1)先判断结果值类型,可设置一个此类型的变量用于记录表达式结果,本例用r存放结果;(2)程序先给几个变量赋初值,然后将表达式赋值给变量r;(3)最后打印变量r的值就是表达式的值。参考程序:

#include int main(){

int a=2,b=3;float x=3.9,y=2.3;

float r;

r=(float)(a+b)/2+(int)x%(int)y;

printf(“%fn”,r);return 0;} 参考结果: 3.500000 思考:为什么是这个结果?

2、分析下面程序结果,并上机验证。(要求文件名:2_2.c)#include int main(){

int i,j,m,n;

i=8;

j=10;

m=++i;

n=j++;

printf(“i=%d, j=%d, m=%d, n=%dn”,i,j,m,n);

return 0;} 参考结果:

i=9, j=11, m=9, n=10

3、用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=’A’,c2=’a’。从键盘如何输入?(要求文件名:2_3.c)#include int main(){ int a,b;float x,y;char c1,c2;scanf(“a=%d b=%d”,&a,&b);scanf(“%f %e”,&x,&y);scanf(“%c%c”,&c1,&c2);printf(“a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%cn”,a,b,x,y,c1,c2);return 0;}

4、编程序,用getchar函数读入两个字符给c1、c2,然后分别用 putchar函数和 printf函数输出这两个字符。(要求文件名:2_4.c)参考程序:

#include int main(){ char c1,c2;c1=getchar();c2=getchar();putchar(c1);putchar(c2);printf(“n%c,%c”,c1,c2);return 0;}

三、实验报告要求

将题目:1和3的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。

实验三

选择结构程序设计

一、实验目的

1.2.3.4.了解C语句表示逻辑量的方法(以0代表“假”以1代表“真”);

学会正确使用逻辑运算符和逻辑表达式;

熟练掌握if语句和switch语句;

熟练掌握switch语句中break语句的作用。

二、实验内容和源程序清单、测试数据、结果。

(1)掌握各种格式转换符的正确使用方法,输出结果。(要求文件名:3_1.c)#include int main(){ int a=5,b=7;float x=67.8564,y=-789.124;char c='A';long n=1234567;unsigned u=65535;printf(“%d%dn”,a,b);printf(“%3d%3dn”,a,b);printf(“%f,%fn”,x,y);printf(“%-10f,%-10fn”,x,y);printf(“%8.2f,%8.2f,%.4f,%.4f,%3f,%3fn”,x,y,x,y,x,y);printf(“%e,%10.2en”,x,y);printf(“%c,%d,%o,%xn”,c,c,c,c);printf(“%ld,%lo,%xn”,n,n,n);printf(“%u,%o,%x,%dn”,u,u,u,u);printf(“%s,%5.3sn”,“COMPUTER”,“COMPUTER”);return 0;}

(2)1.从键盘任意输入一个年号,判断它是否是闰年。若是闰年,输出“Yes”,否则输出“No”。已知符合下列条件之一者是闰年:(1)能被4整除,但不能被100整除;(2)能被400整除。(要求文件名:3_2.c)参考程序:

#include int main(){

int year, flag;printf(“Enter year:”);scanf(“%d”, &year);if(year%4==0&&year%100!=0 || year%400==0)

{

flag = 1;

} else

{

flag = 0;

} if(flag)

{

printf(“Yesn”);

} else

{

printf(“Non”);} return 0;}(3)编程序,并给出程序的运行结果,注意思考case中break的用法以及为什么是这样的结果?(要求文件名:3_3.c)参考程序:

#include int main(){

int x=2,y=1,a=1,b=2;switch(x){ case 2:

switch(y)

{

case 1:a++;

case 2:b++;break;

}

case 3:a++;b++;break;} printf(“%d %dn”,a,b);return 0;}(4)编程序:输入4个整数,要求按由小到大的顺序输出。(要求文件名:3_4.c)参考程序:

#include int main(){

int t,a,b,c,d;scanf(“%d,%d,%d,%d”,&a,&b,&c,&d);printf(“a=%d,b=%d,c=%d,d=%dn”,a,b,c,d);if(a>b){t=a;a=b;b=t;} if(a>c){t=a;a=c;c=t;} if(a>d){t=a;a=d;d=t;} if(b>c){t=b;b=c;c=t;} if(b>d){t=b;b=d;d=t;} if(c>d){t=c;c=d;d=t;} printf(“%d,%d,%d,%dn”,a,b,c,d);return 0;}

三、实验报告要求

将题目:2和3的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。

实验四 循环结构程序设计

一、实验目的

1.2.3.4.5.熟练使用while、for语句实现循环程序设计

理解循环条件和循环体,以及while、for语句的相同及不同之处 掌握嵌套循环程序设计

熟练掌握下拉菜单Debug的程序调试方法 掌握break和continue的用法

二、实验内容和源程序清单、测试数据、结果。

(1)输入两个正整数m和n,求它们的最大公约数和最小公倍数。(要求文件名:4_1.c)参考程序:

#include int main(){ int x,y,i,m,max;scanf(“%d,%d”,&x,&y);if(x>y)

m=x;else

m=y;for(i=1;i<=m;i++){

if((x%i==0)&&(y%i==0))

max=i;} printf(“%dn”,max);printf(“%dn”,x*y/max);return 0;}(2)从键盘输入一个 int 类型的正整数,输出它的所有因子。如输入6,输出1,2,3;输入20,输出1,2,4,5,10。(要求文件名:4_2.c)参考程序:

#include int main(){ int x,i;scanf(“%d”,&x);for(i=1;i

printf(“%dn”,i);} return 0;}(3)输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。(要求文件名:4_3.c)参考程序:

#include #include int main(){ char c;int letter=0,digit=0,space=0,other=0;printf(“please input string:”);while((c=getchar())!='n'){

if(c>='a'&&c<='z'||c>='A'&&c<='Z')

letter++;

else if(c>='0'&&c<='9')

digit++;

else if(c==' ')

space++;

else other++;} printf(“%d,%d,%d,%dn”,letter,digit,space,other);return 0;}(4)编程计算111111的值。(要求文件名:4_4.c)23499100参考程序:

#include int main(){

int sign = 1;double sum = 1;double deno = 2;double term = 1;while(deno<=100){

sign =(-1)*sign;

term = sign*(1/deno);

sum = sum+term;

deno++;} printf(“%lfn”,sum);return 0;}

三、实验报告要求

将题目:3和4的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。

实验五

数组

一、实验目的

1.掌握一维、二维数组的定义、引用、应用 2.掌握字符数组的定义、引用、应用 3.掌握字符串处理函数

二、实验内容和源程序清单、测试数据、结果。

(1)给出下面程序的结果,思考为什么?(要求文件名:5_1.c)#include int main(){

char a[]=“Chinaren”,b[]=“Tiananmen”;char *p1,*p2;

int k=0;p1=a;

p2=b;for(k=0;k<10;k++)

if(*(p1+k)==*(p2+k))

printf(“%c”,*(p1+k));printf(“n”);return 0;}(2)有一个3×4的矩阵,要求输出其中值最大的元素的值,以及它的行号和列号。(要求文件名:5_2.c)参考程序: #define M 3 #define N 4

#include int main(){ int max,i,j,r,c;

int a[M][N]={{123,94,-10,218},{3,9,10,-83},{45,16,44,-99}};

max=a[0][0];

for(i=0;i

for(j=0;j

if(a[i][j]>max)

{

max= a[i][j];

r=i;

c=j;

}

printf(“max=%d , row =%d , colum=%d n”,max , r, c);

return 0;}(3)编程序用于读入10个字符串,然后找出最大的字符串并打印。(要求文件名:5_3.c)参考程序:

#include #include main(){

char str[10][80],maxstring[80];

int i;printf(“Enter ten strings:n”);for(i=0;i<10;i++)

{

scanf(“%s”, str[i]);} strcpy(maxstring, str[0]);

for(i=1;i<10;i++)

{

if(strcmp(str[i],maxstring)>0)

{

strcpy(maxstring,str[i]);

} } printf(“The max string is:%sn”,maxstring);}(4)给出下面程序的运行结果,思考为什么?(要求文件名:5_4.c)#include int main(){

int a[4][4]={{1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-31,32,-33,0}};int i,j,s=0;for(i=0;i<4;i++){

for(j=0;j<4;j++)

{

if(a[i][j]<0)continue;

if(a[i][j]==0)break;

s+=a[i][j];

} } printf(“%dn”,s);return 0;}(5)测试二维数组的各个地址值,结果是什么,思考原因。(要求文件名:5_5.c)#include #define M 3 #define N 4 int main(){

int a[M][N];printf(“%xn”,a);printf(“%xn”,a[0]);for(int i=0;i

printf(“%x,”,&a[i][j]);

return 0;}

三、实验报告要求

将题目:2和3的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。

实验六

函数

一、实验目的

1.掌握C语言函数的定义方法、函数的声明及函数的调用方法。

2.了解主调函数和被调函数之间的参数传递方式。

二、实验内容和源程序清单、测试数据、结果。

(1)给出下面程序的结果,思考为什么?(要求文件名:6_1.c)#include void swap(int x,int y){ int t;t=x;x=y;y=t;printf(“%d %d ”,x,y);} int main(){ int a=5,b=7;swap(a,b);printf(“%d %dn ”,a,b);return 0;}(2)写一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息。(要求文件名:6_2.c)参考程序:

#include int prime(int number);int main(){ int number;printf(“please input a num:n”);scanf(“%d”,&number);if(prime(number))

printf(“%d is prime!”,number);else

printf(“%d is not!”,number);return 0;} int prime(int number)/*此函数用于判别素数*/ { int flag=1,n;for(n=2;n

if(number%n==0)

flag=0;return(flag);}(3)求两个整数的最大公约数和最小公倍数。写一个函数求最大公约数。(要求文件名:6_3.c)参考程序:

#include int max_ys(int x,int y);int main(){ int x,y,i,max;scanf(“%d,%d”,&x,&y);max=max_ys(x,y);printf(“%dn”,max);printf(“%dn”,x*y/max);return 0;} int max_ys(int x,int y){ int i,m,max;if(x>y)m=x;else m=y;for(i=1;i<=m;i++){ if((x%i==0)&&(y%i==0))

max=i;} return(max);}(4)写一函数,输入一个十六进制数,输出相应的十进制数。(要求文件名:6_4.c)参考程序:

#include #include #include long change(char shu[]){ long i,k,sum=0;k=strlen(shu)-1;for(i=k;i>=0;i--)

if(shu[i]>=48&&shu[i]<=57)

sum=sum+(shu[i]-48)*pow(16,k-i);

else if(shu[i]>=65&&shu[i]<=70)

sum=sum+(shu[i]-55)*pow(16,k-i);

else if(shu[i]>=97&&shu[i]<=102)

sum=sum+(shu[i]-87)*pow(16,k-i);

else

{

printf(“error!n”);

break;

} return sum;} int main(){ char str[100];long s;gets(str);s=change(str);if(!s)

printf(“The number is not oxn”);else

printf(“change:%ldn”,s);return 0;}

三、实验报告要求

将题目:3和4的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。

实验七

指针

一、实验目的

1.掌握指针变量的定义与引用。

2.熟练使用函数指针、数组指针、字符串指针编写应用程序。

二、实验内容和源程序清单、测试数据、结果。

(1)输入三个整数,按由小到大的顺序输出,然后将程序改为:输入三个字符串,按由小到大顺序输出。参考程序:(输入三个整数,按由小到大的顺序输出)(要求文件名:7_0.c)#include void swap(int *p1,int *p2);int main(){ int n1,n2,n3,*p1,*p2,*p3;scanf(“%d,%d,%d”,&n1,&n2,&n3);p1=&n1;p2=&n2;p3=&n3;if(n1>n2)swap(p1,p2);if(n1>n3)swap(p1,p3);if(n2>n3)swap(p2,p3);printf(“the order is:%d,%d,%dn”,n1,n2,n3);return 0;} void swap(int *p1,int *p2){ int temp;temp=*p1;*p1=*p2;*p2=temp;} 参考程序:(输入三个字符串,按由小到大顺序输出)(要求文件名:7_1.c)#include #include void swap(char *p1,char *p2);int main(){ char s1[20],s2[20],s3[20];char *ps1=s1,*ps2=s2,*ps3=s3;scanf(“%s”,ps1);scanf(“%s”,ps2);scanf(“%s”,ps3);if(strcmp(ps1,ps2)>0)swap(ps1,ps2);if(strcmp(ps1,ps3)>0)swap(ps1,ps3);if(strcmp(ps2,ps3)>0)swap(ps2,ps3);printf(“the order is:%s,%s,%sn”,ps1,ps2,ps3);return 0;} void swap(char *p1,char *p2){ char temp[20];strcpy(temp,p1);strcpy(p1,p2);strcpy(p2,temp);}(2)用指向指针的指针的方法对x个整数排序并输出。要求将排序单独写成一个函数。x和各整数在主函数中输入,最后在主函数中输出。(要求文件名:7_2.c)参考程序:

#include void maopao(int *p,int x);int main(){

int x,a[100],*p,i;p=a;scanf(“%d”,&x);for(i=0;i

scanf(“%d”,p++);p=a;printf(“n”);maopao(p,x);printf(“the sorted numbers:n”);p=a;for(i=0;i

printf(“%dt”,*p);

return 0;} void maopao(int *p,int x){ int i,j,temp;for(i=0;i

for(j=0;j

if(*(p+j)>*(p+j+1))

{

temp=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=temp;

} }(3)利用函数和指针将给定字母字符串的第一个字母变成大写字母,其它字母变成小写字母。在main函数中接收字符串的输入,改变后的字符串的输出也在main函数中实现。(要求文件名:7_3.c)参考程序:

#include #include void change(char *s);int main(){ char s[100];char *ps=s;scanf(“%s”,ps);change(ps);printf(“%s”,ps);return 0;} void change(char *s){ int x,i;x=strlen(s);if(*s>='a'&&*s<='z')

*s-=32;s++;

} for(i=0;i='A'&&*s<='Z')

*s+=32;

三、实验报告要求

将题目2和3的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。

实验八

结构体和共用体

一、实验目的

1.掌握结构体类型和结构体变量的定义。

2.掌握结构类型变量的定义和使用。

3.掌握链表的概念,初步学会对链表进行操作。

二、实验内容和源程序清单、测试数据、结果。

(1)给出下面程序的运行结果,思考为什么?(要求文件名:8_1.c)#include struct STU {

char num[10];

float score[3];};

int main(){

struct STU s[3]={{“1122301”,90,95,85}, {“1122302”,80,90,75}, {“1122303”,98,92,85}}, *p=s;

int i;

float sum = 0;

for(i=0;i<3;i++){

sum = sum + p->score[i];

} printf(“%6.2fn”,sum);

return 0;}(2)有10个学生,每个学生的数据包括学号,姓名,三门课的成绩,从键盘输入十个学生的数据,要求打印出每个学生的平均成绩,以及最高分的学生的数据(包括学号,姓名,三门课的成绩,平均分数)。(要求文件名:8_2.c)#include #define N 10 struct student {

char num[6];

char name[8];

float score[3];

float avr;} stu[N];

int main(){ int i,j,maxi;

float sum,max,average;

for(i=0;i

{ printf(“input scores of student %d:n”,i+1);

printf(“NO.:”);

scanf(“%s”,stu[i].num);

printf(“name:”);

scanf(“%s”,stu[i].name);

for(j=0;j<3;j++)

{ printf(“score %d:”,j+1);

scanf(“%f”,&stu[i].score[j]);

}

}

average=0;

max=0;

maxi=0;

for(i=0;i

{ sum=0;

for(j=0;j<3;j++)

sum+=stu[i].score[j];

stu[i].avr=sum/3.0;

average+=stu[i].avr;

if(sum>max)

{ max=sum;

maxi=i;

}

}

average/=N;

printf(“

NO.name

score1

score2

score3

averagen”);

for(i=0;i

for(j=0;j<3;j++)

printf(“%9.2f”,stu[i].score[j]);

printf(“

%8.2fn”,stu[i].avr);

}

printf(“average=%5.2fn”,average);

printf(“The highest score is : student %s,%sn”,stu[maxi].num,stu[maxi].name);printf(“his scores are:%6.2f,%6.2f,%6.2f,average:%5.2f.n”,stu[maxi].score[0],stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr);return 0;}(3)建立一个链表,每个结点包括:学号,姓名,性别,年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。(要求文件名:8_3.c)

#include #include #define LEN sizeof(struct student)struct student {

char num[6];char name[8];char sex[2];int age;struct student *next;} stu[10];

int main(){

struct student *p,*pt,*head;int i,length,iage,flag=1;int find=0;

//找到待删除元素 find=1,否则find=0 while(flag==1){

printf(“input length of list(<10):”);

scanf(“%d”,&length);

if(length<10)

flag=0;}

//建立链表

for(i=0;i

p=(struct student *)malloc(LEN);

if(i==0)

head=pt=p;

else

pt->next=p;

pt=p;

printf(“NO.:”);

scanf(“%s”,p->num);

printf(“name:”);

scanf(“%s”,p->name);

printf(“sex:”);

scanf(“%s”,p->sex);

printf(“age:”);

scanf(“%d”,&p->age);

}

p->next=NULL;

p=head;printf(“n NO.name

sex agen”);

//显示

while(p!=NULL){

printf(“%4s%8s%6s%6dn”,p->num,p->name,p->sex,p->age);

p=p->next;}

// 删除

printf(“input age:”);

//输入待删年龄

scanf(“%d”,&iage);pt=head;p=pt;

if(pt->age==iage)

//链头是待删元素

{

p=pt->next;

head=pt=p;

find=1;

}

else

//链头不是待删元素

pt=pt->next;

while(pt!=NULL){

if(pt->age==iage)

{

p->next=pt->next;

find=1;

}

else

// 中间结点不是待删元素

p=pt;

pt=pt->next;

}

if(!find)

printf(“ not found %d.”,iage);

p=head;

printf(“n NO.name

sex agen”);//显示结果

while(p!=NULL){

printf(“%4s%8s”,p->num,p->name);

printf(“%6s%6dn”,p->sex,p->age);

p=p->next;

}

return 0;}

三、实验报告要求

将题目3的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。

实验九

文件操作

一、实验目的

1.掌握文件和文件指针的概念以及文件的定义方法。

2.了解文件打开和关闭的概念和方法。

3.掌握有关文件的函数。

二、实验内容和源程序清单、测试数据、结果。

(1)对data.dat文件写入100条记录。(要求文件名:8_1.c)

#include int main(){ FILE *fp;

int i;

float x;

fp=fopen(“c:data.dat”,“w”);

for(i=1;i<=100;i++)

{

scanf(“%f”,&x);

fprintf(fp,“%fn”,x);

}

fclose(fp);

return 0;}

(2)设有一文件cj.dat存放了50个人的成绩(英语、计算机、数学),存放格式为:每人一行,成绩间由逗号分隔。计算三门课平均成绩,统计个人平均成绩大于或等于90分的学生人数。(要求文件名:8_2.c)

#include int main(){ FILE *fp;

int num=0;

float x , y , z , s1 , s2 , s3;

fp=fopen(“c:cj.dat”,“r”);

while(!feof(fp))

{

fscanf(fp,“%f,%f,%f”,&x,&y,&z);

s1=s1+x;

s2=s2+y;

s3=s3+z;

if((x+y+z)/3>=90)

num=num+1;

}

printf(“分数高于90的人数为:%dn”,num);

fclose(fp);

return 0;}

(3)统计上题cj.dat文件中每个学生的总成绩,并将原有数据和计算出的总分数存放在磁盘文件“stud”中。(要求文件名:8_3.c)

#include “stdio.h” int main(){

FILE *fp1,*fp2;

float x,y,z;

fp1=fopen(“c:cj.dat”,“r”);

fp2=fopen(“c:stud”,“w”);

} while(!feof(fp1)){

fscanf(fp1,“%f,%f,%f”,&x,&y,&z);

printf(“%f,%f,%f,%fn”,x,y,z,x+y+z);

fprintf(fp2,“%f,%f,%f,%fn”,x,y,z,x+y+z);}

fclose(fp1);fclose(fp2);return 0;

三、实验报告要求

将题目1、2和3的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。

第五篇:C语言程序设计

1.Problem A: Hello world!Description Xiao_ming有两个哥哥,大哥叫Da_min,二哥叫Er_min。三兄弟放学回家,父母分别跟他们打招呼。

Input 无

Output 请输出: Hello Da_min, Hello Er_min, Hello Xiao_ming!

Sample Input Sample Output Hello Da_min, Hello Er_min, Hello Xiao_ming!

HINT 请注意换行符

Append Code #include int main(){

printf(“Hello Da_min,n”);

printf(“Hello Er_min,n”);

printf(“Hello Xiao_ming!n”);} 2.Problem B: 求圆的面积和周长 Description 从键盘输入圆的半径,求圆的面积和周长,圆周率取3.14。

Input 输入一个浮点型数据,有效数字不会超过十进制的6位。

Output 输出为两行。

第一行为圆的面积,第二行为圆的周长,格式见sample。

Sample Input 3

Sample Output Area: 28.260000 Perimeter: 18.840000

HINT 了解浮点类型的输入、输出和算术运算符

Append Code 法一

#include int main(){ double r,p,s;scanf(“%lf”,&r);p=2*3.14*r;s=3.14*r*r;printf(“Area: %lfn”,s);printf(“Perimeter: %lfn”,p);} 法二

#include #define pi 3.14 int main(){

double r;

scanf(“%d”,&r);

printf(“Area: %lfn”,pi*r*r);

printf(“Perimeter: %lfn”,2*pi*r);

}

3.Problem C:平均值 Description 求3个数的平均值。

Input 输入只有一行,为3个较小的整数。

Output 输出为这3个整数的平均值,保留3位小数。

Sample Input 1 2 3 Sample Output 2.000

HINT 注意除法运算对整型数据和浮点型数据是不一样的。

Append Code #include int main(){ int a,b,c;scanf(“%d%d%d”,&a,&b,&c);printf(“%.3lf”,(a+b+c)/3.0);}

4.Problem D: 求字符的值 Description 从键盘输入3个字符(不含双字节字符),分别输出每个字符的十进制值(ASCII码)、八进制值和十六进制值。

Input 输入为3个字符。

Output 输出为3行。

每一行为每个字符(对应输入顺序)的十进制、八进制和十六进制值,用空格分隔开。每个输出的值占3个字符,不足3个字符前面补0。

Sample Input 0 A

Sample Output 048 060 030 032 040 020 065 101 041

HINT 了解字符值的存储和整型的关系。

Append Code #include int main(){ char a,b,c;scanf(“%c%c%c”,&a,&b,&c);printf(“%.3d %.3o %.3xn”,a,a,a);printf(“%.3d %.3o %.3xn”,b,b,b);printf(“%.3d %.3o %.3xn”,c,c,c);}

5.Problem A: 最简单的程序 Description 输出一行“Hello world!”。

Input 无

Output Hello world!

Sample Input Sample Output Hello world!

HINT Append Code #include int main(){

printf(“Hello world!”);}

6.Problem B: 算术基本运算 Description 计算两整数x和y(0

Input 输入只有一行,格式见sample。

Output 输出为多行,按顺序每行输出x,y的和、差、积、商、余数、x的平方和y的三次方,格式见sample

Sample Input x = 11, y = 3

Sample Output x + y : 14 xy : %dn“,x-y);

printf(”x * y : %dn“,x*y);

printf(”x / y quotient: %d, remainder: %dn“,x/y,x%y);

printf(”x ^ 2 : %dn“,x*x);

printf(”y ^ 3 : %dn“,y*y*y);} 7.Problem C: 自增自减运算 Description C语言中有自增运算++、自减运算--,并且可以前置和后置。

编写一个程序:对输入的一个整数a,输出a++、a--、++a、--a的值。

Input 一个整数a,a是很小的整数。

Output 输出为5行,第一行为a的值,后面依次为--a、a--、a++、++a的值。

5行输出纵向a要对齐,“:”对齐,“:”前后各一个空格,后面的数值不用对齐。每行行尾都有回车。

Sample Input 0

Sample Output a : 0--a :-1 a--: 0 a++ : 0 ++a : 1

HINT Append Code #include int main(){ int a,x;scanf(”%dn“,&x);a=x;printf(” a

: %dn“,a);printf(”--a

: %dn“,--a);a=x;printf(” a--: %dn“,a--);a=x;printf(” a++ : %dn“,a++);a=x;printf(”++a

: %dn“,++a);}

8.Problem F: 绝对值 Description 求整型数据和浮点型数据的绝对值。

Input 输入两个数,第一个是整数,第二个是浮点数。

Output 输出为两行,第一行为整数的绝对值,第二行为浮点数的绝对值,注意浮点数的绝对值不输出无意义的0。

Sample Input-1 1

Sample Output 1 1

HINT 求绝对值可以用标准库函数来完成,也可以自己判断。注意浮点数的输出格式。求绝对值的函数在哪个头文件?貌似很多人会搞错,包括很多编书的人!

Append Code #include //#include int main(){

int n;

float m;

scanf(”%d%f“,&n,&m);

//n=abs(n);

//m=fabs(m);

if(n<0)

{

n=-n;

}

if(m<0)

{

m=-m;

}

printf(”%dn“,n);

printf(”%g“,m);

return 0;}

9.Problem A: 奇数还是偶数? Description 输入一个整数,判读它是奇数还是偶数。

Input 输入只有一行,为一个100以内的正整数。

Output 输出为一行。

若输入为偶数则输出“even”,奇数输出“odd”。Sample Input 30

Sample Output even

HINT 用整数运算可以解决,练习“?:”表达式。

Append Code #include int main(){

int n;

scanf(”%d“,&n);

if(n>=0&&n<=100){

if(n%2==0)printf(”evenn“);

else printf(”oddn“);

}

return 0;}

10.Problem B: 简单的打折计算 Description 商店规定:消费满n元,可以打八八折。设某件商品标价m元,输入购买的件数x,计算出需要支付的金额(单位:元),精确到分。

Input 输入只有一行,三个整数m、n和x,且0

Sample Input 95 300 4

Sample Output 334.40

HINT 了解浮点型的输出控制,注意整型和浮点型混合运算过程中的数据类型转换。

Append Code #include int main(){

int m,x,n,a;

float b;

scanf(”%d%d%d“,&m,&n,&x);

0

x

m

a=m*x;

if(a>n)

b=0.88*a;

else

b=a;

printf(”%.2fn“,b);

}

11.Problem C: 判断闰年 Description 输入一个正整数的年份,判断是否为闰年。

Input 输入只有一行,为一个10000以内的正整数。

Output 输出为一行。

若输入为闰年偶数则输出“Yes”,否则输出“No”。

Sample Input 2010

Sample Output No

HINT 了解逻辑运算符和关系运算符。

Append Code #include int main(){

int x;

scanf(”%d“,&x);

if(x>0&&x<10000)

{

if(x%4==0&&x%100!=0)

printf(”Yesn“);

else if(x%400==0)

printf(”Yesn“);

else

printf(”Non“);

}

else

printf(”error“);}

12.Problem D: 水仙花数 Description 如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。如:13+53+33=153。

Input 一个整数x,100<=x<=999。

Output x是水仙花数,则输出“YES”,否则为“NO”。

Sample Input 153

Sample Output YES

HINT Append Code #include int main(){

int a,b,c,x;

scanf(”%d“,&x);

a=x/100;

b=x/10%10;

c=x%10;

if(x==a*a*a+b*b*b+c*c*c)

printf(”Yes“);

else

printf(”No“);}

13.Problem E: 三个数比较大小 Description 从键盘上输入0~100之间的三个数,按从小到大的顺序输出。

Input 输入只有一行,为三个整数。

Output 按从小到大输出这三个数。

Sample Input 15 10 20

Sample Output 10 15 20

HINT 用if语句判断各种情况可以解决这个问题。

Append Code #include int main(){

int a,b,c;

scanf(”%d%d%d“,&a,&b,&c);

if(a>=b)

{

if(b>=c)

printf(”%d %d %dn“,c,b,a);

else if(c>=a)

printf(”%d %d %dn“,b,a,c);

else

printf(”%d %d %dn“,b,c,a);

}

else

{

if(a>=c)

printf(”%d %d %dn“,c,a,b);

else if(b>=c)

printf(”%d %d %dn“,a,c,b);

else

printf(”%d %d %dn“,a,b,c);

} }

14.Problem F: 奇怪的求和之一 Description 给定3个正整数a、b和c,按照如下规则求和: 如果这个数字是偶数,则累加到和中;

如果这个数字是奇数,则将大于该数的最小偶数累加到和中。

Input 三个正整数,均在100以内。

Output 一个和。

Sample Input 2 3 5

Sample Output 12

HINT 如果不会使用分支语句,可使用条件运算符判断到底将哪个数累积到和中。

Append Code #include int main(){

int a,b,c;

scanf(”%d%d%d“,&a,&b,&c);

if(a%2!=0)a++;

if(b%2!=0)b++;

if(c%2!=0)c++;

printf(”%dn“,a+b+c);

}

15.Problem G: 你过线了吗? Description 经过四年的学习,你决定报考我国著名的“285”高校之一的北青大学,经过认真的复习,残酷的考试,终于知晓了自己的考试成绩,也知道了北青大学的录取分数线,请你编程判断,自己过线了吗? Input 输入有2行,第一行有4个正整数,分别表示三门课程的分数线以及总分分数线。第二行有3个非负整数,分别表示你考的三门课程的成绩。

Output 如果你的三门课程成绩都不低于相应课程的分数线,且你的考试总分也不低于北青大学的总分分数线要求,则输出“congratulations”,否则输出“sorry”。

Sample Input 70 80 70 240 80 80 82

Sample Output congratulations

HINT 如果你不会使用分支语句,同样可以使用条件运算符实现该程序。

Append Code #include int main(){

int a,b,c,d,e,f,g,h;

scanf(”%d %d %d %dn%d %d %d“,&a,&b,&c,&d,&e,&f,&g);

h=e+f+g;

if(e>=a&&f>=b&&g>=c&&h>=d)

printf(”congratulations“);

else

printf(”sorry“);} 16.Problem I: A+B Problem(II): Input/Output

Practice Description 计算a+b,0<=a,b<1000。

Input 输入的第一行是一个整数N,后面有N对整数a和b,每对a和b占一行,a,b用空格分开。

Output 每行输出一个a+b的和,顺序与输入对应。

Sample Input 2 1 2 10 20

Sample Output 3 30

HINT N给出了测试样例数,用for循环处理方便。

Append Code #include int main(){

int n,a,b,i;Scanf(“%d”,&n);For(i=0;i

17.Problem H: A+B Problem Description 计算a+b,0<=a,b<1000。

Input 输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。

Output 每行输出一个a+b的值,顺序与输入对应。

Sample Input 1 2 10 20

Sample Output 3 30

HINT OJ系统上测试输入结束符为EOF(End Of File),其值为-1。用scanf()把文件所有内容读完后,会读到EOF,所以可以用来判断输入是否完成,测试时可以用Ctrl+Z产生EOF。本题解法参看FAQ。Append Code #include int main(){

int a,b;

while(scanf(”%d%d“,&a,&b)!=EOF){

printf(”%dn“,a+b);

}

return 0;}

18.Problem A: 判断是否是元音字母 Description 输入一个英文字母,判断是否是元音字母。元音字母是:a,e,i,o u,A,E,I,O,U

Input 输入一个英文字母

Output 是元音字母,输出“yes”,否则输出“no”,行尾没有回车。

Sample Input A

Sample Output yes

HINT Append Code #include void main(){

char ch;

scanf(”%c“,&ch);

if(ch>='A'&&ch<='Z')

ch=ch+32;

if(ch=='a')

printf(”yes“);

else if(ch=='e')

printf(”yes“);

else if(ch=='i')

printf(”yes“);

else if(ch=='o')

printf(”yes“);

else if(ch=='u')

printf(”yes“);

else

printf(”no“);

}

19.Problem B: 按顺序输出三个数 Description 对于输入的3个整数,按照从小到大的顺序输出。

Input 输入3个int类型内的整数,两两之间用一个空格隔开。

Output 按照从小到大的顺序输出上述三个数,两两之间用一个空格隔开。

Sample Input 2 1 3 Sample Output 1 2 3

HINT Append Code #include void main(){

int a,b,c,temp;

scanf(”%d%d%d“,&a,&b,&c);

if(a

{

temp=a;

a=b;

b=temp;

}

if(a

{

temp=a;

a=c;

c=temp;

}

if(b

{

temp=b;

b=c;

c=temp;

}

printf(”%d %d %dn“,c,b,a);}

20.Problem E: Description 判断输入整数的奇偶性。

判断奇偶数 Input 输入为一个整数。

Output 输出只有一行,代表判断结果。如果输入的整数n是一个偶数,输出: n is an even number.否则输出:

n is an odd number.见样例。

Sample Input 12

Sample Output 12 is an even number.HINT Append Code #include int main(){

int a;

scanf(”%d“,&a);

if(a%2==0)

printf(”%d is an even number.“,a);

else

printf(”%d is an odd number.“,a);}

21.Problem A: 判断两个整数的大小关系 Description 输入2个整数a和b,如果a>b,则输出1,否则输出0。

Input 两个整数a和b,均不超过int类型的表示范围。

Output 表示a>b的结果:如果a>b,则输出1,否则输出0。

Sample Input 3 4

Sample Output 0

HINT

Append Code #include int main(){ int a,b;scanf(”%d %d“,&a,&b);if(a>b)

printf(”1“);

else

printf(”0“);return 0;} 22.Problem D: 成绩的等级 Description 把百分制的考试成绩转换成五级制的成绩: 90~100:Excellent 80~89:Good 70~79:Average 60~69:Pass 0~59:Failing

不在0~100之间的输入是非法数据,输出“Error”。

Input 输入多行,每行一个整数。

Output 输入所对应的成绩等级。

Sample Input-1 81 92 35 68 72 100

Sample Output Error Good Excellent Failing Pass Average Excellent HINT 用switch语句解决这个问题比较方便。

Append Code #include int main(){

int score;

while(scanf(”%d“,&score)!=EOF)

{

if(score<0||score>100)

printf(”Errorn“);

else

{

switch(score/10)

{

case 0:

case 1:

case 2:

case 3:

case 4:

case 5:printf(”Failingn“);break;

case 6:printf(”Passn“);break;

case 7:printf(”Averagen“);break;

case 8:printf(”Goodn“);break;

case 9:

case 10:printf(”Excellentn“);break;

}

}

}

return 0;}

23.Problem E: 输出是m的倍数或n的倍数、但不是

m和n的公倍数的数 Description 输出1~k之间是m的倍数或n的倍数、但不是m和n的公倍数的数,其中1<=m,n

Input 输入三个整数,依次为k、m、n。

Output 从小到大输出符合题意的所有整数,两数之间用一个空格分开。

Sample Input 15 2 3

Sample Output 2 3 4 8 9 10 14 15

HINT 难点在于输出格式的控制:空格在数的中间,学会用循环时边界情况的特殊处理。

Append Code #include int main(){ int k,m,n,a,i=1;scanf(”%d %d %d“,&k,&m,&n);if(m

a=m;else

a=n;printf(”%d“,a);for(i=a+1;i<=k;i++){

}

if((i%m==0&&i%n!=0)||(i%n==0&&i%m!=0))

printf(” %d“,i);} return 0;

24.Problem B: 两整数相加减 Description 计算a+b和a-b。

Input 输入为一对整数a和b。a,b用空格分开。

Output 输出a+b和a-b的计算结果,各占一行。

Sample Input 1 2

Sample Output 3-1

HINT Append Code #include int main(){ int a,b;scanf(”%d %d“,&a,&b);

printf(”%dn“,a+b);

printf(”%dn“,a-b);} 25 Problem C: 它满足条件吗? Description 需要判断给定的一个整数是否同时满足如下三个条件: 1.它是一个完全平方数。2.它是一个偶数。3.它是一个正数。

注:若一个数能表示成某个自然数的平方的形式,则称这个数为完全平方数。例如:

0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,484,529 Input 一个int范围内的整数。

Output 如果输入的数字满足条件,则输出yes,否则输出no。

Sample Input 100

Sample Output yes

HINT 注意逻辑表达式判断三个条件的顺序。如果你不会使用分支语句,同样可以使用条件运算符实现该程序。

库函数sqrt()可以用于求一个数的平方根。

Append Code #include #include int main(){ int a;scanf(”%d“,&a);

if(a==sqrt(a)*sqrt(a)&&a%2==0&&a>0)

printf(”yes“);

else

printf(”no“);}

26.Problem F: 多路分支 Description 编写一个完整的程序,运行时向用户提问”你考试考了多少分?(0-100)“接受输入后判断其等级并显示出来等级: 优:90<=分数<=100 良:80<=分数<90 中:60<=分数<80 差:0<=分数<60

Input 输入任意一个整数分数值,显示等级;再输入任意一个整数分数值,显示等级;....直到测试数据较充分,可输入-1止。

Output 对任意输入的分数值,输出对应的等级,直到输入的数为-1时才退出运行.Sample Input 102 100 90 80 70 60 50 0-80-1

Sample Output grad must between 0 and 100 优

grad must between 0 and 100 grad must between 0 and 100

HINT Append Code #include int main(){

int x;

while(scanf(”%d“,&x)!=EOF)

{

if(x<0||x>100)

printf(”grad must between 0 and 100n“);

else if(x>=90)

printf(”优n“);

else if(x>=80)

printf(”良n“);

else if(x>=60)

printf(”中n“);

else if(x>=0)

printf(”差n“);

}

return 0;} Problem D: 有多少人? Description 学校举行运动会,如果全体学生按照3人一队列队,则多了1个人;如果按照4人一队列队,则多了2个人;如果按照5人一队排队,则多了3个人。请问这个学校有多少学生?

Input 一个int类型的正整数N,是学生人数的上界,即:该校学生数不超过N。

Output 所有可能的学生数,每个数占一行。

Sample Input 200

Sample Output 58 118 178

HINT Append Code #include #include int main(){

int n,i;

scanf(”%d“,&n);

for(i==1;i<=n;i++){ if(i%3==1&&i%4==2&&i%5==3)

printf(”%dn“,i);}

return 0;} Problem C: 正负数各有几个? Description 输入若干个整数,求其中正数、负数的个数。

Input 输入分为2行:第一行是一个数字N>0,表示下面有N个整数。第2行是N个整数,都是int类型的。

Output 输出所输入的N个整数的正数个数和负数个数,并用空格分开2个输出。Sample Input 10 2 3 4 5-1-2-3-4-5

Sample Output 5 5

HINT 貌似还有一种叫做0的数。

Append Code #include int main(){

int n,a,i,num1=0,num2=0;

scanf(”%d“,&n);for(i=0;i

{

scanf(”%d“,&a);

if(a>0)

num1++;

else if(a<0)

num2++;

}

printf(”%d %dn“,num1,num2);

return 0;} Problem A: A+B Problem(III): Input/Output

Practice Description 计算a+b,0<=a,b<1000。

Input 输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。当测试样为0 0时表示输入结束,0 0不参与运算。

Output 每行输出一个a+b的值,顺序与输入对应。

Sample Input 1 2 10 20 0 0

Sample Output 3 30

HINT 练习break的使用。

Append Code #include int main(){ int a,b;while(scanf(”%d %d“,&a,&b)!=EOF)

{

if(a!=0||b!=0)

}

printf(”%dn“,a+b);

else

break;

return 0;} 30 Problem B: A+B Problem(IV): Input/Output

Practice Description 计算a+b,0<=a,b<1000。

Input 输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。

Output 每行输出一个a+b的值,顺序与输入对应。每个格式样例之间用一个空行分隔开。

Sample Input 1 2 10 20 15 35

Sample Output 3 30 50

HINT 由于输出的和比空行多一个,所以全部计算放在一个循环里是不行的,必须要特殊处理开头或者结尾。

Append Code #include int main(){ int a,b,n=0;while(scanf(”%d %d“,&a,&b)!=EOF){

n++;

if(n==1)

printf(”%dn“,a+b);

else

printf(”n%dn“,a+b);

}

return 0;}

Problem C: n个数的最大值和最小值 Description 找出n个数中最大的数和最小的数,并将它们的值输出出来。

Input 输入为n+1个整数,都在int类型范围内。这些数可能用若干空格或者换行符分隔开。输入的第1个数为n,表示后续有n个数输入。从输入的第2个数开始,求出直到第n+1个数中最大的数和最小的数。

Output 输出为两行,格式见sample。

Sample Input 3 0 1-1

Sample Output The maximum number is 1.The minimum number is-1.HINT 分隔符是空格还是回车都是空白符,对scanf(”%d“)来说没有区别;先读入n,然后用for循环就很容易控制读入n个数的过程。

Append Code #include int main(){

int n,i,max,min;

scanf(”%d“,&n);

int a[n];

for(i=0;i

scanf(”%d“,&a[i]);

max=a[0];

min=a[0];

for(i=0;i

{

if(max

max=a[i];

if(min>a[i])

min=a[i];

}

printf(”The maximum number is %d.n“,max);

printf(”The minimum number is %d.“,min);

return 0;} 32.Problem D: 求100以内的素数 Description 素数是只能被1和自身整除的正整数,根据数学定义1不是素数。素数也叫质数。

Input 输入为两个整数m和n,满足0<=m<=n<=100。

Output 从大到小输出m~n之间的所有素数,一个素数一行。如果m~n之间没有素数,则不输出任何数。

输出的所有数在两行“=====”之间。

Sample Input 2 12

Sample Output ===== 11 7 5 3 2 =====

HINT 利用素数的数学规律可以很容易的解出此题,题目给出的数据范围是关键。

Append Code #include #include int main(){ int m,n,i,j,k,t;scanf(”%d %d“,&m,&n);printf(”=====n“);for(i=n;i>=m;i--){

t=0;

for(j=2;j<=sqrt(i);j++)

if(i%j==0)

t=1;

if(t==0&&i>1)

printf(”%dn“,i);} printf(”=====“);return 0;} 33.Problem E: 是否构成三角形? Description 给出三个整数,代表三条边的长度,判断这三条边的长度是否能构成一个三角形?

Input 第一行是n(1<=n<=100),表示有n组测试数据

接下来有n行,每一行包含三个整数,表示三个边长(1<=边长<=100)

Output 如果三条边能构成三角形,输出YES,否则输出NO

Sample Input 3 1 2 3 2 8 7 20 20 1

Sample Output NO YES YES

HINT Append Code #include int main(){ int a,b,c,n,i;scanf(”%d“,&n);for(i=0;i

{scanf(”%d%d%d“,&a,&b,&c);

if(a+b>c&&a+c>b&&b+c>a)

printf(”YESn“);else printf(”NOn“);}

return 0;} 34.Problem C: 简单的整数排序 Description 对给出的若干整数按从小到大排序。

Input 输入的第一个数为n(n<=1000),后接n个整数。

Output 按从小到大的顺序输出这些整数,每两个整数之间用一个空格分隔开,最后一个整数后面没有空格。

Sample Input 10 3 9 1 5 2 8 5 6 7 3

Sample Output 1 2 3 3 5 5 6 7 8 9

HINT 排序前必须把所有的整数都存储下来。因为只有最多1000个数,1秒的时间足够任何排序算法运行处结果来。

Append Code #include int main(){

int c,i,n,j;

int a[1000];

scanf(”%d“,&n);

for(i=0;i

scanf(”%d“,&a[i]);

for(i=1;i<=n-1;i++)

{

for(j=0;j

{

if(a[j]>a[j+1])

{

c=a[j];

a[j]=a[j+1];

a[j+1]=c;

}

}

}

printf(”%d“,a[0]);

for(i=1;i

printf(” %d“,a[i]);

return 0;}

35.Problem A: Description

购物的路程 Saya和Kudo一起去购物。假定她们逛的街是一条直线,而商铺是这条直线上的一些点。她们将车停在该直线最左端的店铺处,然后从左向右开始逛每一个店铺,然后从最右边的店铺再返回到停车处。你的任务是计算她们走了多少路。

Input 输入有多组。每一组的第一行是N(0

Output 对每组输入,输出她们走的路长。

Sample Input 4 13 89 37 6 7 30 41 14 39 42 0

Sample Output 152 70

HINT Append Code #include int main(){

int n,i,max,min,a[100001];

while(scanf(”%d“,&n)&&n!=0)

{

scanf(”%d“,&a[0]);

min=max=a[0];

for(i=1;i

{

scanf(”%d“,&a[i]);

if(a[i]>max)

max=a[i];

if(a[i]

min=a[i];

}

printf(”%dn“,(max-min)*2);

}

return 0;} 36.Problem B: 求累加和 Description 编程求min~max的累加和(含min和max),其中max>=min>0。部分程序已经给出,请填充其中的空白语句,并提交填充后的完整程序。

Input 输入为多行。第一行是一个整数N>0,表示后面有N个测试用例。后面有N行,每行包含2个整数,分别是min和max。

Output 输出为N行,每个测试用例的计算结果占据一行。每行的格式为: case i:sum=s.其中i表示测试用例的编号(从1开始),s是该测试用例对应的累加和(设不超过int的表示范围)。

Sample Input 3 1 10 1 100 1 1

Sample Output case 1:sum=55.case 2:sum=5050.case 3:sum=1.HINT Append Code #include int main(){

int n,i,j,max,min,sum;

scanf(”%d“,&n);

for(i=0;i

{ sum=0;

scanf(”%d%d“,&min,&max);

if(max==min)

printf(”case %d:sum=%d.n“,i+1,min);

else

{

for(j=min;j<=max;j++)

sum=sum+j;

printf(”case %d:sum=%d.n“,i+1,sum);

}

} return 0;} 37.Problem G: 顺序输出字母 Description 按字母顺序输出两个字母st和ed之间的所有字母,但不包括st和ed。不输出逆序。

Input 两个字母st和ed,都是大写字母,用一个空格分开。

Output 在一行内按顺序输出st和ed之间的所有字母,但不包括st和ed。例如:

输入为A和E,则输出为BCD;

输入为A和B,则什么字母也不输出,只有一个空行; 输入为E和A,也是什么字母也不输出,只有一个空行。最后要输出一行(行尾不回车): ***END***

Sample Input A C

Sample Output B

***END***

HINT Append Code #include int main(){

char st,ed,a;

int i;

scanf(”%c%c%c“,&st,&a,&ed);

{

for(i=st+1;i

printf(”%c“,i);

printf(”n***END***“);

}

return 0;} 38.Problem F: 单字母变换 Description Tom和Jack是密码学爱好者,他们在聊天时经常使用一些暗语。他们使用的一种最简单的暗语是:将要说的每句话里面的英文字母变成这个字母之后的某个字母。现在要求你写一个程序,将一个字母变成它之后的某个字母。

Input 输入有2个:一个大写字母c和一个正整数d(0

Output 输出字母c之后的第d个字母。大小写与c一致。如果c之后的某个字母已经超出'Z',则再从字母'A'开始计数。

如:c='A',d=3,则输出应为:D。若:c='Y',d=3,则输出应为:B。

Sample Input A 3

Sample Output D

HINT Append Code #include int main(){

char c;

int d;

scanf(”%c%d“,&c,&d);

if(c+d<='Z')

printf(”%c“,c+d);

else

printf(”%c“,c+d-26);

return 0;}

39.Problem B: 登录密码验证 Description 编写一个程序,模拟用户登录系统的密码验证过程。系统提供给用户的密码长度最长为20个字符,若密码输入错误可以再次输入。但为了保证用户密码安全,若连续输入密码错误超过5次就会锁定账号一段时间。

Input 输入为若干个串,至EOF结束。输入的第一个串是用户的正确密码,后面的串为模拟用户登录时的输入的密码。

Output 每次输入错误的密码,输出一个“Wrong!”,若输入的密码为正确的,输出一个“Welcome!”,并结束密码测试。若前5次输入的密码都是错误的,则后面的输入中不管是否有正确的密码都输出“Out of limited!”。

Sample Input abcdefg

123456 kkkkkkkk abcdefg

Sample Output Wrong!Wrong!Welcome!

HINT 输入可以用scanf(”%s“)处理,密码比较用字符串的比较可以完成。

Append Code #include #include int main(){

char a[20],b[20];

int i,j=1;

scanf(”%s“,a);

while(scanf(”%s“,b)!=EOF)

{

if(j<=5)

{

if((strcmp(a,b)==0))

{

printf(”Welcome!n“);

break;

}

else

printf(”Wrong!n“);

j++;

}

else printf(”Out of limited!n");

} } 40.Problem C: 兔子的繁殖问题 Description 假设一对兔子每月能生一对小兔(一雌一雄),每对小兔出生后的下一个月是没有繁殖能力的,至出生后的第三个月开始又可以每月生一队小兔,问从一对刚出生的小兔开始,经过若干个月后一共有多少兔子(假设在此过程中兔子没有死亡)?

这个问题是意大利数学家菲波那契(Fibonacci)在他1202年出版的《算盘全书》中提出来的,从第一对刚出生的小兔开始每月的兔子数被乘坐菲波那契序列。

Input 输入的第一个数为n,接下来有n个数字。每个数字为一个月份m(m<=45)。

Output 输出为n行,每行为第m个月后的兔子总数。

下载AVR单片机C语言高级程序设计(共5则范文)word格式文档
下载AVR单片机C语言高级程序设计(共5则范文).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    C 语言程序设计

    《C 语言程序设计》主要在计算机软件、计算机网络、计算机应用、通信技术、智能电子、电子信息工程、多媒体以及核工程与核技术等专业中开设,是电子信息类、机械类等工科专业......

    高级语言程序设计实验报告 C语言实验报告(5篇范例)

    C语言程序设计实验报告 实验二 循环结构程序设计 班级 2012196 学号 201219628 姓名 李明月 一、实验目的 掌握用while语句,do-while语句和for语句实现循环的方法; 掌握......

    C语言高级程序设计讲座1(转)

    C语言高级程序设计讲座1 C语言程序设计 2009-07-27 08:44 阅读153 评论0 字号: 大大中中小小 第一讲C语言图形方式下的编程 前言 一年前我刚刚接触网站制作,正值我学C语言,便......

    单片机C语言学习

    单片机C语言之一___________________________________________________________________ _____________________ 预处理 一》宏定义: 1、不带参数: #define 标识符 常量表达......

    单片机c语言学习心得转载

    单片机c语言学习心得(一)相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚,更不用说他的英文全称和......

    单片机C语言学习心得

    8、指针的使用 8.1 在定义的时候,*ap中的‘*’是指针类型说明符;在进行指针预算时,x = *ap 中的‘*’是指针运算符。 8.2 如果在已定义好的指针变量,并引用,即 int *ap, int a; a......

    单片机C语言知识点大全

    【C语言】 【数据类型】 【转义字符】 【语句】 【#define】 #define 新名 原名 【typedef】 typedef 原类型名 新类型名; 【sbit】 sbit P1_0=P1^0; 在reg52.h或reg51.h的......

    单片机C语言学习心得

    8、指针的使用 8.1 在定义的时候,*ap中的‘*’是指针类型说明符; 在进行指针预算时,x = *ap 中的‘*’是指针运算符。 8.2 如果在已定义好的指针变量,并引用,即 int *ap, int a;......