2試用サブルーチンのタイトル以下の機能
タイトル:キーボードから(0-9)小数点値を複数受信し、表示データを小数形態です。
要件:
- 小数値サブプログラムの入力のために、
- ユーザーが入力した値は、直接入力していない場合は、入力端;
- データ出力は、主小数点データであり、算出されたマシンと16進形式の内部に、値をインストールする必要があり、その後、文字列として出力します。
- 手続き要件に必要なメッセージ。
たとえば、次の3つの値のユーザ入力メッセージ
を入力してくださいAナンバー:. 5
を入力してくださいAナンバー:. 3
を入力してくださいAナンバー:. 4
を入力してくださいA番号:(NO入力は、エンターキーを押し)
番組表示計算結果
の和であります:12
これはあまりにも難しい問題ではありません、主なポイントは、文字列、その後、ディスプレイに出力するためにインストール小数点値を調査する方法です、それは少し研究が付属していますが、分裂に関するある程度の知識を持って、制御がより困難な場所がありますケベック州では、これは、小数点数であるので、多くの方法は、あるプログラムの終了を判断するために、キャリッジリターンを入力するように、私は右の最初の小数点以下の桁の文字は、それがどのような文字を決定することです保存するために使用することができますですないキャリッジリターン、それはサイクルの終わりである場合は、移動していないではないが、これはint型の文字になり、注意が書き込まれる特定のバーコードを見て、
#include<stdio.h>
int a[10000]; //这个是我用来存放数组的地方 因为是实验,绝对的用不到那么多空间;所以我给数组长度才是1e4
int i=0; //用于记录数组中有多少个
char s,ans[10000]; //s是输入时要用的,ans就是最后显示的时候要用的
int main()
{
printf("PLease input a number:");
//fflush(stdin); //刷新标准输入缓冲区
while(scanf("%c",&s)) //循环输入
{
if(s=='\n')
break; //结束标志
else
{
a[i]=s;
a[i]-=48; //装换为数值
//printf("****%d",a[i]);
}
fflush(stdin); //刷新标准输入缓冲区 这个地方不能少,清楚一下缓冲区,不然会影响到后面的输入,原因请自行百度
printf("PLease input a number:");
i++;
}
_asm{
lea esi,a ;取地址
mov ecx,i ;计数器
mov eax,0 ;累加器 记录和
test1:
mov edx,ecx
dec edx ;计数器先减去一 这个地方是因为不减一的话会多算一个,比如就一个数据,在地址中,应该就是esi代表的数值,而不是esi+1*4
mov ebx,[esi+edx*4]
adc eax,ebx
loop test1
;求出了sum就是eax
;为了使输出变成字符串
mov dx,0 ;结束标志
push dx ;先把0压入堆栈 字符串的结束标志是一个0,这个0是ASCII,无法从键盘上读入的
mov ecx,eax ;因为除法是要用到ax的,所以把eax中的sum先给ecx
chufa:
mov bx,10 ;除数
mov ax,cx ;有一些多余了,在这道题中
shr ecx,16 ;逻辑循环右移
mov dx,cx ;dx:ax,被除数
div bx ;dx:ax ÷ bx = ax.....dx
movzx ecx,ax ;把ax扩展为ecx
add dl,30H ;变换成字符形式
push dx ;压入堆栈
cmp ecx,0 ;判断结束
jne chufa
mov edi,0
lea edi,ans ;重新使用edi,使edi指向ans字符串
tanchu:
pop dx ;倒序弹出,使字符串顺序正常
mov [edi],dl
inc edi
cmp dl,0
jne tanchu
}
printf("The sum is : %s\n",ans);
return 0;
}
私は、このモデルGETCHAR使用することができる、上記のように入力される
ユーザ入力を得るため//)(= GETCHAR
輸送を吸収するため//)(= getcahr bの
および輸送ラインの判定はありません大きな違いは問題ではない、悪いわけではない
以上!