《计算机硬件技术基础》实验答案程序
![《计算机硬件技术基础》实验答案程序](https://img.360docs.net/img1b/137bkaksoz8vkw7c048ne6xhf5ql20bc-b1.webp)
![《计算机硬件技术基础》实验答案程序](https://img.360docs.net/img1b/137bkaksoz8vkw7c048ne6xhf5ql20bc-62.webp)
实验一:简单程序设计实验
(1)编写一个 32 位无符号数除法的程序,要求将存放在 NUM1 中的 32 位无符号数与存放在 NUM2 中的 16 位无符号数相除,结果存放在 NUM3 和NUM4 中。
程序流程图略。参考源程序:
DATA SEGMENT
NUM1 DD 2A8B7654H
NUM2 DW 5ABCH
NUM3 DW ?
NUM4 DW ?
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA, CS:CODE
START: MOV AX, DATA ;数据段寄存器初始化
MOV DS, AX
MOV AX, WORD PTR NUM1
MOV DX, WORD PTR NUM1+2
DIV NUM2
MOV NUM3,
AX MOV
NUM4, DX
MOV AH, 4CH ;正常返回DOS系统
INT
21H
CODE ENDS
END START
(2)编写一个拆字程序。要求将存放在 ARY 单元的 2 位十六进制数 X1X2 拆为 X1 和X2 两部分,并以 0X1 和 0X2 的形式分别存入 ARY+1 和 ARY+2 单元中。
程序流程图略。参考源程序:
DATA SEGMENT
ARY DB 2AH, ?, ?
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET ARY ;取ARY的偏移地址
MOV AL,[SI] ;取16进制数至AL
AND AL,0F0H ;取16进制数的高四位,即X1
SHR AL,4
MOV [SI+1],AL ;存0X1
MOV AL,BL
AND AL,0FH ;取16进制数的低四位,即X2
MOV [SI+2],AL ;存0X2
MOV AH,
4CH
INT 21H
CODE ENDS
END START
实验二:分支程序设计实验
(1)编写一个字符比较程序,比较 3 个无符号字节数 A,B,C 的大小,并根据比较结果对变量 K 赋值:
如果 3 个数不相等,则 K=0;
如果 3 个数中有两个相等,则
K=1;如果 3 个数都相等,则
K=2。
程序流程图略。参考源程序:
DATA SEGMENT ;定义待比较数A、B、C,比较结果K
A DB
20H
B DB
20H
C DB
20H K
DB ?
DATA ENDS
CODE SEGMENT
ASSUME
CS:CODE,DS:DATA START: MOV
AX,DATA
MOV
DS,AX
MOV AL,A
CMP AL,B ;对A、B进行比较,不相等则转到
COMP2
JNE COMP2 ;相等则比较A、
C
CMP
AL,C
JNE K1 ;A、C不相等则
K=1
JMP K2 ;A、C相等则
K=2
COMP2: MOV
BL,B CMP
BL,C
K=1
CMP AL,C JE K1 ;对A 、C 进行比较,相等则
K=1
K0:
MOV K,0 JMP
EXIT K1:
MOV K,1 JMP
EXIT K2: MOV K,2 EXIT: MOV AH,4CH INT 21H CODE
ENDS END START
(2)编写一个能实现下列表达式的程序:(设A ,B ,C 为小于128的正整数)。
A B
A B N A B C A B +≤?=?
-+>? 程序流程图略。参考源程序:
DATA SEGMEN
T
A D
B 22H ;定义 A 、B 、
C 、
N B DB 10H C DB 01H N DB ?
DATA ENDS CODE
SEGMENT ASSUME CS:CODE,
DS:DA TA START: MOV AX,DATA
MOV DS,AX
MOV AL, A CMP AL, B JG CALCUL ;A 小于或等于 B 则 N=A+B
ADD AL,B JMP EXIT
CALCUL: SUB AL,
B AD
C AL,
C
EXIT: MOV N, AL
MOV
AH,4CH INT
21H
CODE ENDS
END START
实验三循环程序设计实验
(1)将字符串STRN(以“$”结尾)中的每一个字符均加上偶校验位,并统计有多少个字符因含有奇数个“1”而加上了校验位。统计结果存于N单元中。
程序流程图略。参考源程序:
DATA SEGMENT
STRN DB 'What$' ;任意定义一个字符串,以“$”结尾
COUNT EQU $-
STRN N DB ?
BUF DB COUNT
DUP(?) DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,
DS:DATA START: MOV AX, DATA
MOV DS, AX
MOV AX, DATA
MOV ES, AX
LEA SI,
STRN LEA
DI, BUF
MOV CX,
COUNT MOV AL,
LP1: MOV BL, [SI] ;逐个取字符进行判断
AND BL, BL ;自己和自己做与运算
JP NEXT
;根据 PF 标志位的变化进行跳转INC AL
OR BL, 80H
NEXT: MOV [DI], BL
INC SI
INC DI
LOOP
LP1
MOV N, AL
MOV AH,
4CH
INT 21H
CODE ENDS
END START
(2)在FIRST 开始的一片连续的数据区中存放着100 个数据,编写一个程序,统计第1
个数据‘0’之前的数据个数。
程序流程图略。参考源程序:
DATA SEGMENT
FIRST DB 10H,24H,34H, 73H,20H,44H,03H,36H,41H ;任取 9 个数做演示
COUNT EQU $-
FIRST NUM DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,
DS:DATA START: MOV AX,DATA
MOV DS,AX
MOV DL, 0 ;计数值初始为 0
MOV CX,COUNT
MOV BX, OFFSET FIRST
LP1: MOV AL, [BX] ;每次取一个数,与 0 比较CMP AL,
00H JNE
NEXT
JMP EXIT ;找到 0 则退出
NEXT: INC DL ;没找到 0 则计数值加 1
INC BX
LOOP
LP1
EXIT: MOV NUM, DL
MOV AH, 4CH
INT 21H
CODE ENDS
END START
实验四:子程序设计实验
将BUF开始的10个单元中两位十六进制数转换成ASCII码,并在屏幕上显示出来。要求码型转换通过子程序HEXASC实现,参数传送采用寄存器传送方式。
程序流程图略。参考源程序:
(1)实现方法一:远过程调用
DATA SEGMENT
BUF DB 10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2H
COUNT EQU $-BUF ;定义任意长度的一段
BUF DATA ENDS
STACK1 SEGMENT STACK
DB 100 DUP(?) ;设置足够深度的栈区
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET
BUF MOV
CX,COUNT
AGAIN: MOV AL,[SI] ;逐个取数
MOV BL,AL
SHR AL,4
AND AL,0FH ;先对高字节部分转换(寄存器 AL 传参)
CALL FAR PTR HEXASC ;调用子程序
MOV DL,AL
MOV AH,02H ;显示高字节部分对应的字符
INT 21H
MOV AL,BL
AND AL,0FH ;再对低字节部分转换(寄存器 AL 传参)
CALL FAR PTR HEXASC ;调用子程序
MOV DL,AL
MOV AH,02H ;显示低字节部分对应的字符
INT 21H
MOV DL,20H
MOV AH,02H ;显示空格
INT 21H
INC SI
LOOP AGAIN
MOV AH,4CH
INT 21H
CODE ENDS
CODEB SEGMENT
ASSUME
CS:CODEB
HEXASC PROC FAR
CMP AL,09H ;判断是不是数字
JA HEXATOF ;是字母则转到 HEXATOF
ADD AL,30H ;是数字则对应到数字的 ASCII 码
JMP ENDHEX
HEXATOF:ADD AL,37H ;是字母则对应到字母的 ASCII 码ENDHEX: RET
HEXASC
ENDP CODEB
ENDS
END START
(2)实现方法二:近过程调用
DATA SEGMENT
BUF DB
10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2H
COUNT EQU $-BUF ;定义任意长度的一段
BUF DATA ENDS
STACK1 SEGMENT STACK
DB 100 DUP(?) ;设置足够深度的栈区
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET
BUF MOV
CX,COUNT
AGAIN: MOV AL,[SI] ;逐个取数
MOV BL,AL
SHR AL,4
AND AL,0FH ;先对高字节部分做转换
CALL HEXASC
MOV DL,AL ;显示高字节部分对应的字符
21H
MOV AL,BL
AND AL,0FH ;再对低字节部分做转换
CALL
HEXASC
MOV DL,AL ;显示低字节部分对应的字符
MOV
AH,02H INT
21H
MOV DL,20H ;显示空格
MOV
AH,02H INT
21H
INC SI ;继续循环或退出
LOOP
AGAIN
MOV
AH,4CH INT
21H
HEXASC PROC
NEAR CMP
AL,09H
JA HEXATOF
ADD AL,30H
JMP
ENDHEX
HEXATOF:ADD
AL,37H ENDHEX:
RET
HEXASC ENDP
CODE ENDS
END
START
实验五:DOS 中断调用实验
(1)如果从键盘上依次输入的是一个数字和一个字母,则输出“RIGHT”标记后结束程序,否则输出标记“ERROR”后转向原出错处重做。试编程实现该功能。
程序流程图略。参考源程序:
DATA SEGMENT
MSG DB
0AH,0DH,'RIGHT',0AH,0DH,'$' WRN
DB 0AH,0DH,'ERROR',0AH,0DH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,
DS:DATA START: MOV AX,DATA
MOV DS,AX
AGAIN: MOV AH,01H ;等待用户输入 1 个字符并显示INT 21H
CMP
AL,39H JA
EMSG CMP
AL,30H
JB EMSG ;判断输入是否是数字,不是则报错
MOV AH,01H ;等待用户输入 1 个字符并显示
INT 21H
CMP
AL,'A' JB
EMSG
CMP AL,'Z' ;判断输入是否是大写字母,不是则继续JB EXIT ;判断是不是小写字母
CMP
AL,'a' JB
EMSG
CMP
AL,'z'
JB EXIT ;不是字母则报错,是字母则转到 EXIT
EMSG: LEA DX,WRN
MOV AH,09H
INT 21H
JMP AGAIN
EXIT: MOV DX,OFFSET MSG
MOV AH,09H ;显示“RIGHT”并退出
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
(2)编写一程序分类统计字符个数:即接收键入的一串字符(字符个数不超过50个,该字符串用回车作为结束),并按数字、字母和其它字符分类计数,然后将结果存入digit、letter 和other 3个存储单元中,并显示结果。
程序流程图略。参考源程序:
DATA SEGMENT
MSG1 DB 0AH, 0DH, 'Number of
digit:',20H,'$' MSG2 DB 0AH, 0DH, 'Number
of letters:', 20H,'$'
MSG3 DB 0AH, 0DH, 'Number of other characters:', 20H, '$' BUF DB 50
DB 0
DB 50 DUP(?) ;设置足够深的栈区
DIGIT DB ?
LETTER DB ?
OTHER DB ?
DATA ENDS
STACK1 SEGMENT
STACK DB 100
DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START: MOV AX,DATA
MOV DS,AX
MOV AH,0AH ;等待用户输入字符串并显示
MOV DX,OFFSET
BUF INT 21H
MOV SI, OFFSET
BUF MOV CL,[SI+1]
MOV
CH,00H
MOV AL,00H
MOV AH,00H
MOV BH,00H
AGAIN: MOV BL,[SI+2]
CMP BL,30H
JB OTH ;ASCII 码小于 30H 则归类为“其它”
CMP BL,3AH
JB DIG ;ASCII 码大于等于 30H 小于 3AH 则归类为“数字”
CMP BL,41H
JB OTH ;ASCII 码大于等于3AH 小于41H 则归类为“其
它” CMP BL,5BH
JB LET ;ASCII 码大于等于 41H 小于 5BH 则归类为“字母”
CMP BL,61H
JB OTH ;ASCII 码大于等于5BH 小于61H 则归类为“其
OTH: INC AL ;“其它”计数器加1。
JMP ENDLP INC AH ;“数字”计数器加1
DIG: JMP ENDLP INC BH;“字母”计数器加 1
LET:
ENDLP: INC SI
LOOP AGAIN ;继续循环
MOV DIGIT, AH ;统计各类个数
MOV LETTER, BH
MOV OTHER, AL
MOV DX, OFFSET MSG1 : 显示“数字”有多少个MOV AH,09H INT 21H
MOV AL, DIGIT CALL DISP
MOV AH,00H
MOV
DH,0AH DIV
DH
MOV CH,AH
ADD AL, 30H
MOV DL, AL
MOV AH,
02H INT 21H
ADD CH,30H
MOV DL, CH
MOV AH,
02H INT 21H
RET
DISP
END
P
CODE ENDS
END
START
实验六:扩展定时器/计数器接口实验
(1)计数器0工作于方式3,编写初始化程序,观察其输出OUT0信号的波形。修改计数初值,观察OUT0信号的变化情况。硬件连接方法:8254计数器0的CLK0端接规则的脉冲输入(频率自选),OUT0接示波器的正极;示波器负极接地。
程序流程图略。参考源程序:
DATA SEGMENT
DB 100
DUP(?) DATA
ENDS
CODE SEGMENT
ASSUME CS:CODE,
DS:DATA START: MOV AX,DATA
MOV DS,AX
MOV DX,20FH ;写入计数器0的控制字
MOV
AL,00010110B
OUT DX,AL
MOV DX,20CH ;写入计数器0的计数初值
MOV
AL,05H OUT
DX,AL
MOV
AH,4CH INT
21H
CODE ENDS
END START
(2)将计数器1和计数器0级联起来,二者均工作于方式3,编写初始化程序,观察OUT1 和OUT0信号的波形,说明二者的关系。修改计数初值,观察OUT0和OUT1输出波形的变化情况。硬件连接方法:8254计数器1的CLK1端接规则的脉冲输入(频率自选),OUT1接8254计数器0的CLK0,计数器0的输出OUT0接示波器正极;示波器负极接地。
程序流程图略。参考源程序:
DATA SEGMENT
DB 100
DUP(?)
DATA ENDS
CODE
CS:CODE,DS:DATA START: MOV
AX,DATA
MOV DS,AX
MOV DX,20FH
MOV AL,00010110B ;写入计数器0的控制字
OUT DX,AL
MOV DX,20CH ;写入计数器0的计数初值
MOV
AL,05H OUT
DX,AL
MOV DX,20FH
MOV AL,01010110B ;写入计数器1的控制字
OUT DX,AL
MOV DX,20DH ;写入计数器1的计数初值
MOV
AL,02H OUT
DX,AL
START: MOV AX,DATA
MOV DS,AX
MOV DX,20FH
MOV AL,00010110B ;写入计数器0的控制字
OUT DX,AL
MOV DX,20CH ;写入计数器0的计数初值
MOV
AL,05H OUT
DX,AL
MOV DX,20FH
MOV AL,01010110B ;写入计数器1的控制字
OUT DX,AL
MOV DX,20DH ;写入计数器1的计数初值
MOV
AL,02H OUT
DX,AL
MOV
AH,4CH INT
21H
CODE ENDS
END START
实验七:并行输入/输出接口8255A 简单编程实验(1)利用 8255A 的 B 口输出控制两组发光二级管 L1,L3,L5,L7 和 L2,L4,L6,L8 亮灭交替变化。
分析:
按照题目要求,当8255A 的 B 口输出为01010101B(55H)时,发光二极管L1,L3,L5,L7 会被点亮,当 8255A 的 B 口输出为 10101010B (0AAH)时,发光二极管L2,L4,L6,L8 会被点亮。因此,通过延时改变 8255A 的 B 口输出,即可实现两组发光二极管的亮灭交替变化。由于 LED 随时出于准备好的状态,因此 8255A 的 B 口可工作于方式0 输出,其它端口未使用,无需考虑。因此,8255A 的方式控制字为:10000000B(80H)。
硬件连接方法:
8255A 的 B 口 PB0~PB7 分别连接
L1~L8。
程序流程图略。参考源程序:
.486
DATA SEGMENT
PORTA DW 208H ;8255A端口A地址
PORTB DW 209H ;8255A端口B地址
PORTC DW 20AH ;8255A端口C地址
PORT_CTR DW 20BH ;8255A控制端口地
址
DATA ENDS
STACK1 SEGMENT
STACK DB 100
DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK1
START: MOV
AX,DATA MOV
DS,AX
MOV DX, PORT_CTR
MOV AL, 10000000B ;8255A初始化
;控制字
OUT DX, AL ;8255A端口B清零,LED初始化(全灭) MOV DX, PORTB
MOV AL, 00H
OUT DX, AL
MOV BL, 01010101B
MOV AL, BL
OUT DX, AL
CALL DELAY
LP0:
NOT AL
MOV BL, AL
MOV AH, 01H ;调用BIOS的16H功能判断键盘是否有输入
INT 16H
JNZ
EXIT
JMP LP0
EXIT: MOV AH,
4CH INT 21H
DELAY PROC NEAR ;延时子程序(可通过修改NOP指令数量改变延时时间) MOV ECX, 0FFFFFFFH
LP2: NOP
LOOPD LP2
RET
DELAY ENDP
CODE
END
S
END START
(2)利用8255A 的A 口读入8 个开关K1~K8 的状态,当只有K1 合上时,L1~L8 显示
00000001B;当只有 K1 和 K2 合上时,L1~L8 显示 00000010B;当只有 K1,K2 和 K3 合上时,L1~L8 显示00000011B;当只有K1,K2,K3 和K4 合上时,L1~L8 显示00000100B;… 直到所有开关合上时,L1~L8 显示 00001000B,并结束程序的运行。发光二极管的状态通过 8255A 的 B 口进行控制。
分析:
按照题目要求,可以通过查询的方式读取 8255A 的B 口状态,并根据查询的结果给 A 口送出相应数据,A 口工作在方式 0 的输入状态,B 口工作在方式 0 输出状态,C 口不需要考虑,所以 8255A 的方式控制字为:10010000B)
硬件连接方法:
(1)8255A 的 A 口 PA0~PA7 对应连接 K1~K8;
(2)8255A 的 B 口 PB0~PB7 对应连接
L1~L8;源代码:
DATA
SEGMEN
T
LIST DB 01H, 03H, 07H, 0FH, 1FH, 3FH, 7FH,
0FFH DATA ENDS
C语言程序设计实验报告参考答案
长沙理工大学C语言实验报告参考答案 实验一熟悉C语言程序开发环境及数据描述四、程序清单 1.编写程序实现在屏幕上显示以下结果: Thedressislong Theshoesarebig Thetrousersareblack 答案: #include
printf("商品名称价格\n"); printf("TCL电视机¥7600\n"); printf("美的空调¥2000\n"); printf("SunRose键盘¥50.5\n"); } 2.编写程序:a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。 答案: #include
printf("a/c的商=%d\n",y); x=a%b; y=a%c; printf("a/b的余数=%d\n",x); printf("a/c的余数=%d\n",y); } 4.设变量a的值为0,b的值为-10,编写程序:当a>b时,将b赋给c;当a<=b时,将a赋给c。(提示:用条件运算符) 答案: #include
C++程序设计实践教程思考题答案
实验1 C++基础 6.编写程序,输入某大写字母的ASCII码值,输出该字母的对应小写字母。 #include
{ float a,b,c; 潣瑵?请输入直角三角形的两条边长:; cin>>a>>b; c=sqrt(a*a+b*b); 潣瑵?直角三角形的斜边=< 3.输入一个学生的成绩,如高于60分,则输出“pass”;否则,输出“failed”。 #include 2.程序填空 (1)以下程序的功能是计算1~50之间能被7整除的整数之和。 #include #include 《C程序设计上机指导》答案 实验一参考答案 四.1、Hello, world ! Welcome to the C language world! Everyone has been waiting for. 2、a+b=579 579 五.1、b=2; 2、int a; 3、area 六.x=5,y=8, 改为x=5,y=8; 七.写程序 1、编写程序输出用6颗星构成的等边三角形。 main() { printf(" * \n"); printf(" * * \n"); printf("* * *\n"); } 2、编写程序求25和5两个整数的和与差。 main() { int a,b,c,d; a=10; b=20; c=35; d=(a+b+c)/3; printf("%d\n",d); } 实验二参考答案: 一.1、A , 65 B, 66 2、x=1,y=1,z=5 3、a=%d,b=%d 二.1、char a;int b; 2、a,a,a 3、a=865 a,h,m 4、u=2*sqrt(a)+b-10; “%f\n” 三.1、第1行ch1=’a’; 改为char ch1=’a’; 第2行ch2=98; 改为char ch2=98; 2、第7行w=x%y; 改为w=x/y; 3、int u=v=89; 改为int u,v; u=v=89; 4、第3行改为scanf(“%d,%d”,&x,&y); //格式字符串有错。 第5行改为printf("The average is %d:"a); //格式字符串有错。四.写程序 1、编程求111 234 ++ 的和(精确到小数点后两位)。 main( ) { float i; i=1.0/2+1.0/3+1.0/4; 实验教材实验一 1:单项选择题: A A C C C D C B B C 2:填空题: (1).bas (2).vbp,.frm (3)视图工具箱 (4)对象 (5)属性对象事件方法 (6)Windows (7)事件行为 (8)窗体模块 实验二 1:单项选择题: A D C C A B A B D C B B C B C B A B D C 2:基本运算题: (1)27 (2)3.33333333333333 (3)3 (4)0 (5)-3 (6)2 (7)ab33 (8)类型不匹配 (9)3 (10)AB3 实验三 1:单项选择题: B C B D C 2:填空题: (1)300 (2)321456 (3)Shanghai (4)6 7 6 (5)True (6)2+3=5 (7)”area=” 12.56 (8)VISUAL 实验四 1:单项选择题: C A A C A 2:填空题: (1)7 (2)3 5 (3)输入的数小于0 (4)3 (5)False (6)2010 is not leap year. 试验五 1:单项选择题: A C C A B A C C C B 2:填空题: (1)9 (2)①n ②1 (3)①Len(a) ②n\2 ③Mid(a,(n-i+1),1) ④Mid(a,(n-i+1),1) (4)①n Mod 3=1 And n Mod 5=1 And n Mod 7=1 ②While CountN<5 (5)Mid(c1,1,i) 实验六 1:单项选择题: D B D C D A C A D D 2:填空题: (1)30 (2)3 (3)①a(2) ②a(3) ③a(1) (4)①1 ②2 ③a(i)=a(6-i) (5)①i+j ②0 ③a(i,j) (6)①Print ②k ③a(k,j)=a(j,k) ④a(k,j); 实验七 1:单项选择题: A B B A C B 2:填空题: (1)15 (2)①Preserve a(n+1) ②a(i+1)=a(i) ③Exit For ④a(i+1)=m⑤0 to n+1 (或LBound(a) to UBound(a)) (3)d,c,b,a 实验八 1:单项选择题: C A D B D C A C B 2:填空题: (1)a=9 b=4 (2) 36 25 16 9 4 1 (3)①a ②UBound(b) ③ 24c02读写程序大全 2C总线的应用(24C02子程序) // 对24C02的读、写 // extern void DelayMs(unsigned int); // extern void Read24c02(unsigned char *RamAddress,unsigned char Ro mAddress,unsigned char bytes); // extern void Write24c02(unsigned char *RamAddress,unsigned char Ro mAddress,unsigned char bytes); /***************************************************************************/ #define WriteDeviceAddress 0xa0 #define ReadDviceAddress 0xa1 #include C语言程序设计实验报告(数组) 1实验目的 (1)熟练掌握一维数组,二维数组的定义,初始化和输入、输出方法; (2)熟练掌握字符数组和字符串函数的使用; (3)掌握与数组有关的常用算法(查找、排序等)。 2实验内容 编写函数catStr(char str1[],char str2[])用于进行两个字符串的连接,编写函数lenStr(char str[])用于统计一个字符串的长度,并在主函数中调用。 要求: 1、不允许用strcat()和strlen()字符处理库函数; 2、在主函数以直接初始化的方式输入两个字符串str1和str2.调用函数 strlen()计算并返回两个字符串的长度; 3、调用函数catstr()连接两个字符串(将str2连接在str1后面); 4、调用函数lenstr()计算并返回连接后字符串的长度; 5、在主函数中输入两个原始的字符串及几个字符串的长度,以及处理后字 符串及其长度。 3算法描述流程图 4源程序 #include for (i=0;m[i]!='\0';i++); printf("%d",i); } void main() {char s1[50]="forever",s2[50]="more"; printf("s1=%s,s2=%s",s1,s2); printf("\ns1的长度:"); lenStr(s1); printf("\ns2的长度:"); lenStr(s2); catStr(s1,s2); printf("\n连接后的字符:"); printf("%s\n",s1); printf("连接后字符的长度:"); lenStr(s1); printf("\n"); } 5测试数据 s1=forever, s2=more 6运行结果 7出现问题及解决方法 在输入程序时,少写了半边引号,调试时发现存在错误,找到了错误并加以改正。无论什么事,细心都是必不可少的,认真是解决问题的关键。 8实验心得 通过本次实验,对于函数的定义和声明,数组以及循环语句有了进一步的认识,掌握了字符数组和字符串函数的使用,以及与数组有关的常用算法。此次实验不是调用strlen()和strcat()函数,而是通过自己设计程序来进行字符串的连接以及计量字符串的长度,由此我学会了如何去理清自己的思路来设计程序。 实验一:简单程序设计实验 (1)编写一个 32 位无符号数除法的程序,要求将存放在 NUM1 中的 32 位无符号数与存放 在 NUM2 中的 16 位无符号数相除,结果存放在 NUM3 和 NUM4 中。 程序流程图略。 参考源程序: DATA SEGMENT NUM1 DD 2A8B7654H NUM2 DW 5ABCH NUM3 DW ? NUM4 DW ? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA ;数据段寄存器初始化 MOV DS,AX MOV AX, WORD PTR NUM1 MOV DX, WORD PTR NUM1+2 DIV NUM2 MOV NUM3,AX MOV NUM4,DX MOV AH,4CH ;正常返回DOS 系统 INT 21H CODE ENDS END START (2)编写一个拆字程序。要求将存放在 ARY 单元的 2 位十六进制数 X 1X 2 拆为 X 1 和 X 2 两 部分,并以 0X 1 和 0X 2 的形式分别存入 ARY+1 和 ARY+2 单元中。 程序流程图略。 参考源程序: DATA SEGMENT ARY DB 2AH,?,? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET ARY ;取ARY 的偏移地址 MOV AL,[SI] ;取16进制数至AL MOV BL,AL AND AL,0F0H ;取16进制数的高四位,即X1 SHR AL,4 MOV [SI+1],AL ;存0X1 MOV AL,BL AND AL,0FH ;取16进制数的低四位,即X2 MOV [SI+2],AL ;存0X2 MOV AH,4CH INT 21H CODE ENDS END START 1、完成实验A(P.259)中的第1、 2、 3、5题。 2、参照第2章例2.6,建立一个类似记事本的应用程序,提供:(1) 剪切、复制和粘贴的编辑操作;(2) 字体大小的格式设置;此外,再对记事本的应用程序的功能进行一点扩允。 1.完成在实验B 顺序结构程序。(P.262)中的第1、2 、4 、5.、6题 2.完成实验C 选择结构(P.266)中的第1、2、4、5题 3.用上面实验B的第二题和实验C的第二题完成下面的实验报告。 1、完成实验D循环结构(P.268)中的第1、3、4、6题,其中第1题利用单循环结构显示如图D.1(P.268)所示的界面,而后将图形改为倒三角形。 2、选做实验E数组(P.271)中的第1、2、3题中的任意二题 3、以实验D中的第4题和实验E中的做完的某一题完成下面的实验报告。 A.1 Private Sub Command1_Click() Label3 = Text1 End Sub A.2 Private Sub Form_Load() Timer1.Interval = 0 End Sub Private Sub Command1_Click() '自动 Timer1.Interval = 200 End Sub Private Sub Command2_Click() '手动 Timer1.Interval = 0 Call MyMove End Sub Private Sub Timer1_Timer() Call MyMove End Sub Sub MyMove() Label1.Move Label1.Left - 50 If Label1.Left < 0 Then Label1.Left = Form1.Width End Sub A.3 Private Sub Form_Click() Text1 = Val(Text1) + 1 End Sub Private Sub Form_Load() Text1 = 0 End Sub A.5 AT24C02串行E2PROM的读写 I2C总线是一种用于IC器件之间连接的二线制总线。它通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件:不管是单片机、存储器、LCD驱动器还是键盘接口。 1.I2C总线的基本结构采用I2C总线标准的单片机或IC器件,其内部不仅有I2C接口电路,而且将内部各单元电路按功能划分为若干相对独立的模块,通过软件寻址实现片选,减少了器件片选线的连接。CPU不仅能通过指令将某个功能单元电路挂靠或摘离总线,还可对该单元的工作状况进行检测,从而实现对硬件系统的既简单又灵活的扩展与控制。I2C总线接口电路结构如图1所示。 2.双向传输的接口特性传统的单片机串行接口的发送和接收一般都各用一条线,如MCS51系列的TXD和RXD,而I2C总线则根据器件的功能通过软件程序使其可工作于发送或接收方式。当某个器件向总线上发送信息时,它就是发送器(也叫主器件),而当其从总线上接收信息时,又成为接收器(也叫从器件)。主器件用于启动总线上传送数据并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。I2C总线的控制完全由挂接在总线上的主器件送出的地址和数据决定。在总线上,既没有中心机,也没有优先机。 总线上主和从(即发送和接收)的关系不是一成不变的,而是取决于此时数据传送的方向。SDA和SCL均为双向I/O线,通过上拉电阻接正电源。当总线空闲时,两根线都是高电平。连接总线的器件的输出级必须是集电极或漏极开路,以具有线“与”功能。I2C总线的数据传送速率在标准工作方式下为100kbit/s,在快速方式下,最高传送速率可达400kbit/s。 3.I2C总线上的时钟信号在I2C总线上传送信息时的时钟同步信号是由挂接在SCL时钟线上的所有器件的逻辑“与”完成的。SCL线上由高电平到低电平的跳变将影响到这些器件,一旦某个器件的时钟信号下跳为低电平,将使SCL线一直保持低电平,使SCL线上的所有器件开始低电平期。此时,低电平周期短的器件的时钟由低至高的跳变并不能影响SCL线的状态,于是这些器件将进入高电平等待的状态。 当所有器件的时钟信号都上跳为高电平时,低电平期结束,SCL线被释放返回高电平,即所有的器件都同时开始它们的高电平期。其后,第一个结束高电平期的器件又将SCL线拉成低电平。这样就在SCL线上产生一个同步时钟。可见,时钟低电平时间由时钟低电平期最长的器件确定,而时钟高电平时间由时钟高电平期最短的器件确定。 4.数据的传送在数据传送过程中,必须确认数据传送的开始和结束。在I2C总线技术规范中,开始和结束信号(也称启动和停止信号)的定义如图2所示。当时钟线SCL为高电平时,数据线SDA由高电平跳变为低电平定义为“开始”信号;当SCL线为高电平时,SDA线发生低电平到高电平的跳变为“结束”信号。开始和结束信号都是由主器件产生。在开始信号以后,总线即被认为处于忙状态;在结束信号以后的一段时间内,总线被认为是空闲的。 《实验指导》课后练习题参考答案实验1: 1.主函数 2-4:DDC 5.stdio.h 6-9:CCCC 实验2: 1.double 2-4:ABB 5.2 6-12:CDDDADC 13.! 14.8 15-17:ACC 18.G 19-20:CA 21.5 4 22.x=6c 23-25:DCA 26.0x 27.2.000000 28-29:AB 30.a=3 31.D 32.3.15 33.B 34.double 实验3: 1-3:CCD 4.B 5.2,0 6-8:CAC 9. (1)pass, (2)中 及格 不及格 10-12:ADD 13.2 14.B 15.10 16.6 17.x>=1 && x<=sqrt(10) 实验4: 1.B 2.1 3.A 4.3/5,5/8 5.30 实验5: 1.D 2.(1)9 (2)1 3-5:CDB 6.(1)10 (2)7 7.C 8.(1)x=16 (2)y=8 9.return 实验6: 1-5:CCADA 6.10,20 7.13 11 12 8.7 9.2 10.B 11.(1)3 (2) 1 12-13:CB 14.-31 15.221 16.main函数 17.22 18.(1)return (2)void 实验7: 1.C 2.auto 3.9 4.(1) 4 (2) 0 5.10 6.(1)5 (2) 7 (3) 8 7.C 8.110 9-12:DDBC 13.(1) 1 (2) 3 15.6 720 16.auto 17.48 18.(1)1 (2)2 19.D 20.D 21.5,25 22.6 实验8: 1-2. DD 3. 16 4. (1)0 2 3 (2)2 3 5 (3)7 11 13 5. (1)i<9 (2)j<9-i (3)a[j]=a[j+1] (4)a[j+1]=temp 实验9: 1. D 2. (1)-1 (2)2 3. (1)1 (2)a[i-1][j-1]+a[i-1][j] (3)j<=i 4. (1)1 3 4 5 6 7 (2)3 4 5 6 (3)End of main()! 实验10: 1. 0或NULL 2-5. CACA 6. (1)10 (2)15 (3)19 7. (1)i 实验指导 1、 n=input('请输入一个三位数:'); a=fix(n/100); b=fix((n-a*100)/10); c=n-a*100-b*10; d=c*100+b*10+a 2(1) n=input('请输入成绩'); switch n case num2cell(90:100) p='A'; case num2cell(80:89) p='B'; case num2cell(70:79) p='C'; case num2cell(60:69) p='D'; otherwise p='E'; end price=p (2)n=input('请输入成绩'); if n>=90&n<=100 p='A'; elseif n>=80&n<=89 p='B'; elseif n>=70&n<=79 p='C'; elseif n>=60&n<=69 p='D'; else p='E'; end price=p (3)try n; catch price='erroe' end 3 n=[1,5,56,4,3,476,45,6,3,76,45,6,4,3,6,4,23,76,908,6]; a=n(1); for m=2:20 if n(m)>a a=n(m); elseif n(m)=0 disp(A([n],:)); elseif n<0 disp(lasterr); else disp(A([6],:)); disp(lasterr); end 7(1) f=[]; for n=1:40 ATMEGA16读写iic(24c02) C语言程序测试通过 #include while(1) {/* I2C_Write('n',0x00); I2C_Write('c',0x01); I2C_Write('e',0x02); I2C_Write('p',0x03); I2C_Write('u',0x04); */ i=I2C_Read(0x00); //LCD_write_char(0,0,i); USART_TXD(i); i=I2C_Read(0x01); //LCD_write_data(i); USART_TXD(i); i=I2C_Read(0x02); //LCD_write_data(i); USART_TXD(i); i=I2C_Read(0x03); //LCD_write_data(i); USART_TXD(i); i=I2C_Read(0x04); //LCD_write_data(i); USART_TXD(i); } } /*上面上主函数部分*/ #include 实验一熟悉C程序运行环境 班级学号姓名成绩 一、实验目的 1. 熟悉C语言Visual C++调试环境。 2. 掌握C程序的编辑、调试及运行。 二、实验内容 项目1. 调试并运行下面程序,并写出运行结果: #include <> int main() { printf(“Good morning!\n”); printf(“Hello,world!\n”); return 0; } 运行结果(注意,按照屏幕输出格式写): 项目2. 调试并运行下面程序,并写出运行结果: #include <> int main() { int a , b , sum; /*定义变量*/ a=23; b=56; /*为变量赋值*/ sum=a+b; /*计算两个变量的和*/ printf(“sum is %d\n”,sum); /*输出计算结果*/ return 0; } 运行结果: 项目3. 调试并运行下面程序,并写出运行结果: #include <> int max(int,int); int main() { int a , b , c; /*定义变量*/ a=23; b=56; /*为变量赋值*/ c=max(a,b); /*调用max函数,将得到的值赋给c*/ printf(“max is %d\n”,c); /*输出c的值*/ return 0; } int max(int x,int y) /*定义max函数,函数值为整型*/ { int z; /*定义变量*/ if(x>y) z=x; else z=y; return(z); /*将z的值返回*/ } 运行结果: 三、提高部分 1.试想,如果求10个数中的最大者,则程序该如何编写。 程序代码 运行结果: 广东金融学院实验报告 课程名称:C++程序设计 实验编号 实验7数组与指针练习系别参考答案及实验名称 姓名学号班级 实验地点新电403实验日期2011-11-24实验时数4 指导教师曲政同组其他成员无成绩 一、实验目的及要求 1.学习C/C++数组和指针的概念和使用方法。 2.练习C++/CLI托管数组的创建方法和元素访问方法。 二、实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等) 硬件设备:联网的个人计算机 操作系统:Windows XP 编译系统:Visual Studio2005 三、实验内容及步骤(包含简要的实验步骤流程) 1.内容和步骤 ⑴仔细阅读本课件的知识点和例题,努力理解其中的文字阐述和源代码,必要时可将源代码拷入Visual Studio2005生成的C++/CLR框架编译和运行,将运行结果与源代码对照,加深对C/C++数组和指针的理解。 ⑵在理解本课件内容的基础上,编写C/C++程序实现下列文字描述: a.声明一个int型变量x,并赋初值3; b.打印x的值; c.打印x的地址; d.声明一个指向int的指针p,并让其指向变量x; e.打印p所指变量的值 f.打印p的值; g.声明一个有10个元素的一维本地整型数组A,并为其赋初值0~9; h.在一个循环中打印A的所有元素的值; i.打印A的值; j.打印A的第一个元素的地址; k.声明一个指向int的指针q,并让其指向A的第一个元素; l.在一个循环中通过q后跟下标,打印出A的所有元素的值; m.在一个循环中通过q加上循环变量和取值运算,打印出A的所有元素的值; n.在一个循环中通过q的增量和取值运算,打印出A的所有元素的值; o.在一个循环中通过q的负增量,反序打印出A的所有元素的值; p.声明一个int型指针r,在堆中创建一个int型变量,为该变量赋初值3,并将该变量的地址赋给该指针,打印出该变量的值,然后删除该变量。 q.声明一个本地类Point(可以用包含2个int型变量和一个有参数构造函数的结构体表示)的指针s,在堆中创建一个Point类的对象,调用构造函数为该对象的两个数据成员赋初值3和4,并将该对象的地址赋给该指针,打印两个数据成员的值,然后删除该对象。 r.声明一个int型指针t,在堆中创建一个3个元素的int类型数组并将该数组的首地址赋给该指针,为三个数组元素分别赋值3、4、5,在一个循环中打印出所有元素的值,然后删除该数组。 s.声明一个本地类Point类的指针u,在堆中创建一个3个元素的Point类的对象数组(需在Point 中添加无参数构造函数)并将数组的首地址赋给该指针,为三个数组元素分别赋值(1,2)、(3,4)、(5,6),在一个循环中打印该数组所有元素分量的值,然后删除该数组。 t.用基本语法声明并创建一个10个元素的一维托管整型数组B,并在一个循环中为元素赋值0~9; u.在另一个循环中打印B所有元素的值。 v.用初值表方式声明并创建一个10个元素的一维托管整型数组C,并为其元素赋初值10~19; w.在一个循环中打印C所有元素的值。 x.用数组C为数组B赋值。 y.在一个循环中打印B和C所有元素的值。 2.提示和要求 ⑴首先将上面的文字描述拷入Visual Studio2005生成的C++/CLR框架,在每条文字描述之前加“//”将其变为注释,并在其下留一个空行准备编写对应的程序。 ⑵对应于逐条文字描述,在其下编写程序(可能是一个或一组语句),每编写一条文字描述对应的程序,就编译(运行)一次,以保证语法和算法的正确性。 ⑶当全部文字描述所对应的程序编写完成,并编译、运行正确,将文字描述和源代码拷入实验报告。 ⑷对C/C++的数组和指针做简要总结。 4.2练习题 一、选择题 1.D 2.B 3.A 4.B和D 5.C 6.A 7.B 二、填空题 1.//或/* */ 2.主或main 3.函数首部和函数体4.编译和连接 5.分号 5.2练习题 一、选择题 1.A 2.D 3.B 4.B 5.C 6.C 7.D 8.A 9.B 10.B 11.D 12.B 13.A或B 14.C 15.B 17.D 18.D 19.C 20.D 21.B 22.A 23.D 24.C 25.C 26.B 27.C 28.D 29.A 30.B 二、填空题 1.102,10 2.#define 宏名字符串 3.1 4.n=1 5.-4 6.a=1,b= ,c=2 7.c=A 8.n1=%d\nn2=%d 9.a+b>c&&a+c>b&&b+c>a 10.ch>=’a’&&ch<=’z’|| ch>=’A’&&ch<=’Z’11.7 12.0 13.8,4 6.2练习题 一、选择题 1.A 2.C 3.D 4.C 5.A 6.B 8.D 9.B 10.C 11.A 12.A 13.C 14.B 15.正确答案为: 二、填空题 1.10 2.y=1 x%i==0 3.屏幕中间输出一个由星号组成的菱形4.1 5.13 6.(cx=getchar())!=-1 front=cx; 7.m%n 8.4 9.*p px=&x py=&y 三、读程序,写结果 1.-1 2.3,1,-1, 3.a=16,y=60 4.x=12,y=4 5.59 7.2练习题 一、选择题 1.B 2.C 3.C 4.A 5.D 6.C 7.D /************************************************** 24C02.C 功能描述: PC端发送3个数据n0,n1,n2. n0=0,写,将n1写入n2地址中 n0=1,读,读出n1地址中的数据,n2不起作用,但必须有 收到一个字节后,将其地址值显示在数码管第1、2位上,数值显示在第5、6位上 读出一个字节后,将其地址值显示在数码管第1、2位上,读出的值显示在第5、6位上;**************************************************/ #define uchar unsigned char #define uint unsigned int #define Slaw0x0a; //写命令字 #define Slar 0xa1; //读命令字 #include "reg52.h" #include "intrins.h" sbit Scl=P2^1; //串行时钟 sbit Sda=P2^0; //串行数据 bit Rec; //接收到数据的标志 uchar RecBuf[3]; //接收缓冲区 #define Hidden 0x10; //消隐字符在字形码表中的位置 sbit we=P2^7; sbit du=P2^6; uchar code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; uchar code disptab[]={0x3f,0x6,0x5b,0x4f,0x66, 0x6d,0x7d,0x27,0x7f,0x6f,0x77,0x7c,0x39,0x5e, 0x79,0x71,0x0}; uchar DispBuf[6]; uchar code TH0V al=(65535-3000)/256; uchar code TL0V al=(65535-3000)%256; uchar code th1=0xfd; uchar code tl1=0xfd; //以下是中断程序,用于显示 void timer0() interrupt 1 { static uchar count; uchar tmp; P0|=0x3f; we=1; tmp=dispbit[count]; P0&=tmp; we=0; du=1; 文档从网络中收集,已重新整理排版.word版本可编辑.欢迎下载支持. 《C语言程序设计》 实验报告 2013~2014学年第二学期 班级 姓名 学号 指导教师 实验一 实验项目名称:C程序的运行环境和运行C程序的方法 所使用的工具软件及环境:Visual C++ 6.0 一、实验目的: 1.了解在Visual C++ 6.0环境下如何编辑、编译、连接和运行一个C程序; 2.通过运行简单的C程序,初步了解C源程序的特点。 二、预习内容: 教材《C语言程序设计教程》第1章。 三、实验内容: 1. 在Visual C++ 6.0环境下输入并运行下面的程序: #include 2. (1) 改正后的源程序: #include C语言程序设计实验与习题答案
c程序设计实验参考答案
vb程序设计实验教程习题答案
24c02读写程序大全
C语言程序设计实验报告(数组)
《计算机硬件技术基础》实验答案程序
VB程序设计教程(第3版)课后实验答案最新版2
AT24C02串行E2PROM的读写
C语言程序设计实验指导(课后习题)参考答案
MATLAB程序设计教程课后答案
ATMEGA16读写iic(TWI)(24c02) C语言程序
C语言程序设计实验实验指导书及答案
C++程序设计实验七_参考答案
c语言程序设计实践教程答案完整版
at24c02应用程序
C语言程序设计实验报告(实验1-12)