找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3964|回复: 2
打印 上一主题 下一主题
收起左侧

求教unsigned char code buf[20],写一段C程序指出数组中的最大值

[复制链接]
跳转到指定楼层
楼主
ID:105996 发表于 2016-5-28 10:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
unsigned char code buf[20],写一段C程序指出数组中的最大值,如buf[5]中,最大的是5.
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶顶 踩踩
回复

使用道具 举报

沙发
ID:111634 发表于 2016-5-28 14:12 | 只看该作者
本程序摘自张志良编著著《单片机实验实训100例——基于Keil C和Proteus》 ISBN 978-7-5124-1603-1北航出版社。



从串口随机输入16个数据,然后再从串口分二行分别输出其排序前后的数据。


#include <reg51.h>                       //包含访问sfr库函数reg51.h


#include <stdio.h>                       //包含I/O库函数stdio.h


#define  uchar unsigned char             //用uchar表示unsigned char


void  main ( ) {                         //主函数


uchar data  i,j,k,m;                     //定义字符型变量i、j、k(最大值序号)、m(暂存器)


uchar data  a[16];                      //定义整型数组a[16]


TMOD=0x20;                         //串口初始化:定时器1工作方式2;


TH1=TL1=0xE6;                      //置1200波特率(fosc=12MHz)


SCON=0x52;                         //串口方式1,允许接收,清发送中断


TCON=0x40;                         //设置中断控制,启动T1


for(i=0; i<16; i++)                     //for循环


scanf("%bu",a+i);                    //串口输入数组a数据(无符号字符型十进制整数)


for(i=0; i<16; i++) {                   //for循环


if (i%8==0)  printf("\n");              //若i是8的整倍数,换行(输出时,8个一行)


printf ("a[%bu]=%bu,",i,a);}          //输出数组a原始数据元素


for(i=0; i<15; i++) {                   //for循环,选择法排序


k=i;                               //最大值序号k赋值,设最大值为首个元素


for(j=i; j<16; j++)                   //for循环,依次与后续数组元素比较,选出最大值


if (a[k]<a[j]) k=j;                 //比较,若a[k] <a[j],最大值序号变更


m=a[k];a[k]=a;a=m;}              //交换位置


printf ("\n");                          //换行


for(i=0; i<16; i++) {                   //for循环


if (i%8==0)  printf("\n");             //若i是8的整倍数,换行(输出时,8个一行)


printf ("a[%bu]=%bu,",i,a);}          //输出从大到小排序后数组a的数据元素


while(1);}                            //原地踏步,无限循环


回复

使用道具 举报

板凳
ID:111634 发表于 2016-5-28 14:16 | 只看该作者
⒉ Keil调试



① 按实例1所述步骤,编译链接并进入调试状态。


② 鼠标左键单击调试工具条中图标(   ),打开变量观测窗口,Locals标签页中显示局部变量i、j、k、m和a,其中a为数组,编译器安排其首地址为0x24。


③ 鼠标左键单击调试工具条中图标(   ),打开存储器窗口。在Memory#1窗口的Address编辑框内键入“d:0x24”,以便观测内RAM 24H为首地址的数组a中的数据。


④ 鼠标左键单击全速运行图标(   ),暂停图标(   )变为红色。


⑤ 鼠标左键单击调试工具条中图标(   ),打开串行输入/输出信息窗口Serial #1。窗口内光标闪烁(表示被激活),依次键入数组a的原始数据:


a[16]={11,99,66,22,111,55,0,222,44, 155,77,255,133,100,88,33}


注意每键入一个数据,均要回车一次。回车后,Memory#1窗口内0x24及其后续单元依次显示键入的数组a元素。最后一个数据键入完毕,回车后,Serial #1窗口立即显示数组a原始数据和排序后的数据。前二行是排序前的原始数据,后二行是排序后的数据:


a[0]=11,a[1]=99,a[2]=66,a[3]=22,a[4]=111,a[5]=55,a[6]=0,a[7]=222,


a[8]=44,a[9]=155,a[10]=77,a[11]=255,a[12]=133,a[13]=100,a[14]=88,a[15]=33,


a[0]=255,a[1]=222,a[2]=155,a[3]=133,a[4]=111,a[5]=100,a[6]=99,a[7]=88,


a[8]=77,a[9]=66,a[10]=55,a[11]=44,a[12]=33,a[13]=22,a[14]=11,a[15]=0,


⑥ 与此同时,Memory#1窗口以0x24为首地址的16个单元内,也改为排序后的数组a数据。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表