16 (4)
错误!使用“开始”选项卡将 标题 1,部分标题 1 应用于要在此处显示的文字。
#include
extern serial_initial(); main() {
int a,b;
unsigned int x,y; serial_initial();
a=b=0xaa55;x=y=0xaa55;
printf(\ a=a<<1;b=b>>1; x=x<<1;y=y>>1;
printf(\printf(\ printf(\
printf(\
while(1); }
执行结果:
a=aa55 b=aa55 x=aa55 y=aa55 a=54aa b=d52a x=54aa y=552a That is all.
11. break和continue语句的区别是什么?
答:break语句可以跳出switch结构,使程序继续执行switch结构后面的一个语句。break语句还可以从循环体中跳出循环,提前结束循环而接着执行循环结构下面的语句。
continue语句用在循环结构中,用于结束本次循环,跳过循环体中continue下面尚未执行的语句,直接进行下一次是否执行循环的判定。
continue语句和break语句的区别在于:continue语句只是结束本次循环而不是终止整个循环;break语句则是结束循环,不再进行条件判断。
12. 用分支结构编程实现:输入“1”显示“A”,输入“2”显示“B”,输入“3”显示“C”,输入“4”显示“D”,输入“5”结束。
参考程序:
#include
unsigned char x; SCON=0x52; TMOD=0x20;
//串口初始化
错误!使用“开始”选项卡将 标题 1,部分标题 1 应用于要在此处显示的文字。
TH1=0XF3; TR1=1; while(1) {
printf(\ //输出提示信息 scanf(\ switch(x) {
case '1':printf(\case '2':printf(\case '3':printf(\case '4':printf(\case '5':printf(\default: printf(\}
if (x=='5') break; }
while(1); }
13. 输入3个无符号的字符数据,要求按由大到小的顺序输出。 参考程序:
#include
unsigned char x,y,z,m; SCON=0x52; TMOD=0x20; TH1=0XF3; TR1=1;
printf(\ scanf(\printf(\
if (x printf(\while(1); } 14. 用3种循环结构编写程序实现输出1到10的平方之和。 参考程序: (1)while循环 #include //输出 17 //串口初始化 //输出提示信息 //包含特殊功能寄存器库 //包含I/O函数库 //主函数 18 错误!使用“开始”选项卡将 标题 1,部分标题 1 应用于要在此处显示的文字。 int i,s=0; //定义整型变量 i=1; SCON=0x52; //串口初始化 TMOD=0x20; TH1=0XF3; TR1=1; while (i<=10) //累加1到10的平方之和在s中 { s=s+i*i; i++; } printf(\到10的平方之和=%d\\n\while(1); } (2)do while循环 #include int i,s=0; //定义整型变量 i=1; SCON=0x52; //串口初始化 TMOD=0x20; TH1=0XF3; TR1=1; do //累加1到10的平方之和在s中 { s=s+i*i; i++; } while (i<=10); printf(\到10的平方之和=%d\\n\while(1); } (3)for循环 #include int i,s=0; //定义整型变量 SCON=0x52; //串口初始化 TMOD=0x20; TH1=0XF3; TR1=1; for (i=1;i<=10;i++) s=s+i*i; //累加1到10的平方之和在s中 printf(\到10的平方之和=%d\\n\while(1); } 错误!使用“开始”选项卡将 标题 1,部分标题 1 应用于要在此处显示的文字。 15. 对一个由5个元素组成的无符号字符数组按由小到大的顺序进行排序。 参考程序: #include unsigned char f[5],m,i,j; SCON=0x52; //串口初始化 TMOD=0x20; TH1=0XF3; TR1=1; printf(\输入任意5个字符:\ scanf(\printf(\ for (i=0;i<5;i++) for (j=0;j<5-i;j++) if (f[j]>f[j+1]) {m=f[j];f[j]=f[j+1];f[j+1]=m;} printf(\由小到大的顺序为:%c,%c,%c,%c,%c \printf(\while(1); } 16. 用指针实现,输入3个无符号字符数据,按由大到小的顺序输出。 参考程序: #include unsigned char x,y,z; unsigned char *p,*p1,*p2,*p3; SCON=0x52; //串口初始化 TMOD=0x20; TH1=0XF3; TR1=1; printf(\scanf(\printf(\ p1=&x;p2=&y; p3=&z; if (*p1<*p2) {p=p1;p1=p2;p2=p;} if (*p2<*p3) {p=p2;p2=p3;p3=p;} if (*p1<*p2) {p=p1;p1=p2;p2=p;} printf(\while(1); } 19 20 错误!使用“开始”选项卡将 标题 1,部分标题 1 应用于要在此处显示的文字。 17. 有3个学生,每个学生都包括学号、姓名和成绩,要求找出成绩最高的学生的姓名和成绩。 参考程序: #include unsigned char number[10]; unsigned char name[10]; unsigned int grade; }p1[3]; main() { unsigned char i,j=0; SCON=0x52; //串口初始化 TMOD=0x20; TH1=0XF3; TR1=1; printf(\for (i=0;i<3;i++) { printf(\scanf(\printf(\scanf(\printf(\scanf(\} for (i=1;i<3;i++) { if (p1[i].grade>p1[j].grade) j=i; } printf(\成绩最高的学生是:%s,成绩是:%d\printf(\} while(1); } 第五章 1.单片机C语言与汇编语言混合编程有哪几种方式?通常采用什么方式? 答:单片机C语言和汇编语言混合编程分为汇编中调用C51函数和C51程序中引用汇编,通常使用的是在C51程序中引用汇编。在C51程序中使用汇编语言有两种情况:一种是汇编程序部分和C51程序部分为不同的模块,或不同的文件,通常由C51程序调用汇编程序模块的变量和函数(也可称为子程序或过程);另一种是嵌入式汇编,即在C51程序中嵌入一段汇编语言程序。 2.简述C51程序调用汇编程序时如何实现参数传递。