代码如下:
int main()
{
float r,h,s
scanf("%f",&r);
scanf("%f",&h)
s=2*3.1415926*r*r+2*3.1415926*r*h
printf("表面积是%f\n",s)
return 0
}
扩展资料
在C语言中,有两个函数可以在控制台(显示器)上输出字符串,它们分别是:
puts():输出字符串并自动换行,该函数只能输出字符串。
printf():通过格式控制符%s输出字符串,不能自动换行。除了字符串,printf() 还能输出其他类型的数据。
注意,输出字符串时只需要给出名字,不能带后边的[ ]。
1、输入输出字符串调用21号中断的0ah和09h号功能,可以实现字符串的输入输出
输入字符串,调用0ah号功能
需要注意的是,中断功能的调用大多是有一些约定的,基本上都是通过固定的寄存器传值
拿21h中断的0ah中断来说,这个功能是实现输入字符串的,在此之前首先要提供一个变量存放输入的字符串,这个变量的定义方式是有要求的,如下:
buffer db 50, ?, 50 dup('$')
//db表示定义字节大小,第一个50表示想要定义一个50字节大小的变量(申请空间),?表示一个未定义的值,它会记录输入字符串的实际长度,
//后面表示连续定义50个字节,用来存放输入的字符串的。至于为什么要定义为'$',这是因为'$'是字符串约定的结尾符号,输出的时候检测到这个符号就代表一个字符串结束。
//上面完成了定义一个变量(申请空间),用来存放输入的字符,下面还需要把这个变量的偏移地址给dx寄存器,才可以调用0ah号功能,段地址默认为ds就不需要改了
lea dx, buffer 送偏移地址
mov ah,0ah 将0ah放入ah
int 21h 输入字符串功能调用
//下面介绍输出字符串功能,相对输入来说输出字符串要简单些
/*同样要有一个变量,将变量的地址放入ds:dx,然后调用09h号功能8*/
outputstr db 'hello world',0dh,0ah,'$'
//0dh,0ah分别是回车换行的ascii码,加到字符串后面表示换到下一行行首,'$'为结束标志
lea dx outputstr 送偏移地址
mov ah, 09h 将09h放入ah
int 21h 输出字符串功能调用
登录后复制
一个示例
下面咱们在dosbox下实验下,代码如下
功能是将输入的字符串在下一行输出
stack segment stack
stack ends
data segment
buffer db 50, ?, 50 dup('$')
next_row db 0dh,0ah,'$'
data ends
code segment
assume cs:code, ds:data, ss:stack
start: mov ax, data
mov ds, ax
lea dx, buffer 输入字符串
mov ah, 0ah
int 21h
lea dx, next_row 换行
mov ah, 09h
int 21h
mov dx, offset [buffer+2] 输出字符串,注意起始地址
mov ah, 09h
int 21h
mov ah, 4ch
int 21h
code ends
end start
登录后复制
编译、连接、然后执行
2、输入输出字符(数字)
其实输入输出数字都是通过输入输出字符实现的,准确的说,我们在屏幕上输入输出的只是某个数字(0-9)的ASCII码值(对应30H-39H),而8086的21H号中断提供了输入输出字符的功能。21h号中断要配合ah使用,将功能号放在ah中,再通过int 21h调用
2.1 输入输出字符
1号功能,输入字符
//1号功能,输入字符,输入字符的ascii码放在al中
mov ah, 1
int 21h
//2号功能,输出字符,要输出的字符放在dl中
mov dl 31h //31h,即1的ASCII码
mov ah 2
int 21h
登录后复制
2.2 输入输出数字
其实输入输出数字本质上也就是输入输出字符(串),我们输入或输出的只是ASCII码值,要得到实际的数值,还要经过转换。除此之外,数据的大小(位数)也是受限制的,16位数二进制寄存器能保存的无符号数范围为0~65535,有符号数为-32768 ~ 32767,如果是用八位寄存器,可保存的数范围就更小了。
这里都以有符号的16位为前提讨论
一个比较完善的输入十进制数的处理流程如下:
① 调用21号中断的1号功能输入一个字符
② 判断输入字符的正负,负数,设置标记,正数继续下面步骤
③ 判断输入是否合法(是否为0 - 9),或结束;若非法,提示重新输入,若结束,保存结果,否则继续下一步
④ 将ASCII码值转为数值
⑤ 将已经得到的内容乘以10,加上本次输入的数值
⑥ 转①
首先你需要将a中的十进制数据转换成ASCII码的形式储存然后可以用bios中断,或者dos中断,推荐用dos中断
方法一:(显示字符串)
mov
ah,09h
21h中断的09h功能:显示字符串
lea
dx,a
dx指向要输出字符串的首地址
int
21h
调用21h号中断
方法二:(显示单个字符)
mov
cl,n
循环准备,n为要显示的字符总数
l1:
mov
ah,02h
mov
dl,(待显示字符的ASCII码)
int
21h
loop
l1
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)